【网络BSP开发经验】网络流量应用识别技术

文章目录

  • 网络流量应用识别技术
    • 背景
    • 应用识别基本原理
    • 应用识别主流技术方向
      • 特征识别技术
        • 单报文解析
        • 流特征解析
      • 关联识别技术
        • DNS关联识别
      • 行为识别技术
    • 应用识别框架介绍
    • 应用特征提取经验
      • tcpdump 抓包方式
          • 默认启动
          • 监视指定网络接口的数据包
          • 监视指定主机的数据包
      • 禁用特征提取
      • 加速特征提取
      • 在线时长特征提取

网络流量应用识别技术

背景

儿童上网保护和智能QOS功能作为路由器常见的两个功能,对于应用流量识别的准确度和识别效率具有很高的要求,原有识别框架总体是基于openwrt的oaf框架以及iptables的部分识别,如图所示:

在这里插入图片描述

该框架存在以下几个问题:

1) 解包路径冗余,儿童上网保护与智能QOS以及大量的iptable规则,解包流程多次重复,导致解析效率降低,代码难以维护。

2)与设备强耦合。针对单一报文特征进行解析,对于复杂的特征现有框架单一描述。

应用识别基本原理

应用流量识别的基本原理是在网络报文的netfilter的链中挂上钩子,在钩子中对报文进行解析,然后与应用特征进行对比,如果对比成功则做出相应动作。

下图是linux netfilter在网络层的实现细节:

在这里插入图片描述

netfilter在网络层安装了5个钩子,对应5个链,还可以通过编写内核模块来扩展这5个链的功能。

五个链(chain)及对应钩子
PREROUTING --> NF_INET_PRE_ROUTING

INPUT --> NF_INET_LOCAL_IN

FORWARD --> NF_INET_FORWARD

OUTPUT–> NF_INET_LOCAL_OUT

POSTROUTING --> NF_INET_POST_ROUTING

挂载点解析:

PRE_ROUTING:路由前。数据包进入IP层后,但还没有对数据包进行路由判定前。

LOCAL_IN:进入本地。对数据包进行路由判定后,如果数据包是发送给本地的,在上送数据包给上层协议前。

FORWARD:转发。对数据包进行路由判定后,如果数据包不是发送给本地的,在转发数据包出去前。

LOCAL_OUT:本地输出。对于输出的数据包,在没有对数据包进行路由判定前。

POST_ROUTING:路由后。对于输出的数据包,在对数据包进行路由判定后。

路由判定:

从上图可以看出,路由判定是数据流向的关键点。

第一个路由判定通过查找输入数据包IP头部 的目的IP地址 是否为本机的IP地址,如果是本机的IP地址,说明数据是发送给本机的。否则说明数据包是发送给其他主机,经过本机只是进行中转。

第二个路由判定根据输出数据包IP头部 的目的IP地址 从路由表中查找对应的路由信息,然后根据路由信息获取下一跳主机(或网关)的IP地址,然后进行数据传输。

数据包流向 从图中可以看到,三个方向的数据包需要经过的钩子节点不完全相同:

发往本地:NF_INET_PRE_ROUTING -->NF_INET_LOCAL_IN

转发:NF_INET_PRE_ROUTING -->NF_INET_FORWARD -->NF_INET_POST_ROUTING

本地发出:NF_INET_LOCAL_OUT -->NF_INET_POST_ROUTING

那么为了实现为了处理所有的报文,应用识别的回调函数一定需要挂载在POST_ROUTING链上,因为应用识别需要关注的是路由器转发以及自己发出的所有报文,如果在PRE_ROUTING链上挂载,那么路由器自己作为DNS服务器发出的DNS报文就没有办法解析,所以为了解析所有报文应用识别报文需要放到POST_ROUTING上。

应用识别主流技术方向

特征识别技术

特征识别技术是业务感知应用识别最基本的技术手段,它通过识别非加密报文中的特征信息来确定业务流量所对应的应用。不同的应用通常会采用不同的协议,而不同的应用协议具有各自的特征,这些特征可能是特定端口,特定字符串,或者特定比特序列。除了检测报文中的传统五元组信息外,特征识别技术还会检测报文的应用层信息以获取更多的用于识别应用的特征。

此外某一些应用协议的特征并不会在单个报文中体现,或者从单个报文仅仅存在弱特征,要完整描述这个流则需要多个报文特征,此时就需要对多个报文进行分析,才可以识别出应用。

在这里插入图片描述

单报文解析

单报文解析目前常见的两种解析模式:

1)标准协议解析:

目前支持HTTP,HTTPS,QUIC等标准协议的解析,以及拼多多,迅雷等私有协议的解析。

典型特征报文:虎牙禁用特征

在这里插入图片描述

上图是 单报文匹配中 通过URL禁用虎牙报文。

2)特征序列解析

特征序列的匹配核心不在于五元组信息中,而是在报文的有效载荷中,对于大多的游戏数据报文都会采用私有协议,这种协议特征明显体现在报文载荷存在固定的格式,可以以此作为该应用的报文特征。

在这里插入图片描述

典型报文特征 王者荣耀1号加速特征

在这里插入图片描述

流特征解析

基于单报文的特征识别,在特征序列长度不够时,可能存在误判情况,会发送误判,于是需要综合一条流上的多个序列特征来判断。所以基于快照表项来完成多特征匹配。如下图所示,当报文进入会首先判断报文是否以及加入候选快照表项中,如果不存在才会进行匹配,如果匹配上就会将这条流加入候选快照链表中。当全部匹配完成后就会将这条流从候选快照表项取出放入快照表项。当后续这条流再次进入就可以直接判定:

在这里插入图片描述

典型报文特征 腾讯通用1号加速特征:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

关联识别技术

关联识别技术主要用于识别多通道协议的应用。

采用多通道协议传输语音,视频和文件的应用越来越多。多通道协议的控制通道和数据通道是分开的,如FTP,SIP,H323,这些协议通过控制通道协商用来建立数据通道的通信参数(如端口信息等),通过数据通道传输具体的业务数据。特征识别技术可以识别出控制通道的应用与非加密的数据通道的应用,但是对于加密数据通道是没有很好的办法的。

关联识别技术的前提依然是特征识别,首先通过特征识别技术识别出控制通道报文承载的应用,同时从控制通道报文中提取数据通道信息并记录在应用识别关联表中,后续通过关联表识别出数据通道报文并标记位相应的应用,从而实现对于多通道协议报文的应用识别。

在这里插入图片描述

DNS关联识别

DNS 关联识别主要是提取DNS回包中的信息来进行IP与APP之间绑定。通过解析DNS协议中的URL字段匹配到具体的应用,再将所有返回的IP放入快照表,之后与这些IP的通信的时候就可以完成应用识别。

典型报文特征:穿越火线禁用特征

在这里插入图片描述
在这里插入图片描述

如图当检测到带有ap6.ssl.msdk.qq.com的DNS会话,就将该会话中解析出的IP加入禁用快照则可以完成穿越火线的禁用。

行为识别技术

互联网上还有一些更为复杂的应用,很难更具特征关键字作为识别的特征,还有很多应用的通信时加密的,数据加密将导致特征模糊化而无法识别。已有特征识别技术无法基于常规特征识别出这些复杂应用,而行为识别技术通过提取报文的行为特征来识别出报文承载的应用,不同的应用可以利用的行为特征不尽相同。要准备识别一个应用必须抓取海量的流量样本,分析提取出独特的行为特征。

通过上下行流量比例、报文发送频率、报文长度变化规律等,都是可以利用的行为特征。行为识别技术通过综合考察和选择多种行为指标特征指标实现精准的应用识别。

应用识别框架介绍

针对上述问题,我们新框架需要完成以下几个重要的功能点:

1)报文解析流程设备无关化

2)输出报文解析统计数据

3)流量重放

整体应用识别框架可以分为三个部分:

1)报文解析引擎:负责报文解析匹配,输入skb,输出flow_info,flow_info中包含匹配到的应用信息,特征库序号以及smac.然后基于次应用识别引擎开发跨平台报文分析工具,支持流量重放分析。

2)策略执行器:根据报文解析引擎返回的结果对报文进行相关处理(DROP 或者 MARK)

3)用户态接口:解密解析用户态特征库文件,然后通过接口将特征加载到内核态,以及设置禁用信息,设置加速模式接口。

在这里插入图片描述

新框架具有以下几个优点:

  1. 解析路径统一,只挂一个HOOK点,提高解析效率,增强代码可维护性。
  2. 支持流量回放,提升新协议开发与app适配效率。
  3. 支持流量信息分析统计,输出统计信息,便于调试。
  4. 基于流特征的信息匹配,可以匹配更加复杂的特征。
  5. 采用快照缓存机制,提升报文转发效率。

经过比较采用新框架的情况下整体转发性能提升40%以上。

在这里插入图片描述

应用特征提取经验

tcpdump 抓包方式

用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。

默认启动
tcpdump

普通情况下,直接启动tcpdump将监视第一个网络接口上所有流过的数据包。

监视指定网络接口的数据包
tcpdump -i eth1

如果不指定网卡,默认tcpdump只会监视第一个网络接口,一般是eth0,下面的例子都没有指定网络接口。

监视指定主机的数据包

打印所有进入或离开sundown的数据包.

tcpdump host sundown

也可以指定ip,例如截获所有210.27.48.1 的主机收到的和发出的所有的数据包

tcpdump host 210.27.48.1

打印helios 与 hot 或者与 ace 之间通信的数据包

tcpdump host helios and \( hot or ace \)

截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信

tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \)

打印ace与任何其他主机之间通信的IP 数据包, 但不包括与helios之间的数据包.

tcpdump ip host ace and not helios

如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令:

tcpdump ip host 210.27.48.1 and ! 210.27.48.2

截获主机hostname发送的所有数据

tcpdump -i eth0 src host hostname

监视所有送到主机hostname的数据包

tcpdump -i eth0 dst host hostname

监视指定主机和端口的数据包

如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令

tcpdump tcp port 23 and host 210.27.48.1

对本机的udp 123 端口进行监视 123 为ntp的服务端口

tcpdump udp port 123

所以抓包一般就是抓取指定网卡指定主机的包

比如要抓取连接WIFI设备IP为192.168.9.100的包 抓包命令为:

tcpdump -i wl0.0 host 192.168.9.100

需要保存为pcap文件则命令为

tcpdump -i wl0.0 -w xxx.pcap host 192.168.9.100

禁用特征提取

禁用的特征提取关键在于提取应用打开的时候的关键报文特征,完成识别后将相关的IP加入到快照列表中,即可完成对于这个应用的禁用。

以小红书和王者荣耀的禁用为例:

禁用最常见的特征是基于DNS特征禁用,也就是需要抓取应用在打开与登陆阶段的DNS报文进行分析,找出关键URL,加入特征库进行测试。

在这里插入图片描述

分析小红书的dns报文,发现大量出现xiaohongshu,xhscdn字段,解析带这样URL的DNS,然后将其中解析出的IP全部加入禁用快照中,然后进行测试,然后小红书的禁用就完成了。

王者荣耀是另外一种常见禁用特征:

这种是基于报文内部特征进行的禁用需要挨个网络流进行分析,找到特征明显的网络流然后进行禁用。

在这里插入图片描述

加速特征提取

加速特征关键需要抓取在游戏过程中的报文,分析在游戏过程中占比较大的几种报文,分析这些报文的特征然后进行标记。或者说找出这几条流建立基于的DNS报文,然后将该IP对应的流加入队列也可以完成加速。

以王者荣耀为例:

在王者荣耀对局的时候的报文进行统计学分析:

在这里插入图片描述

几乎所有报文集中在123.151.69.28

追踪这条流

在这里插入图片描述

可以发现这条流的报文数据部分具有固定的协议特征,提取该协议特征。其他几条流也差不多。

综合分析之后发现王者荣耀对局共有5条流特征,包括两条 腾讯通用特征以及三条王者荣耀独有特征。所以可以将跟踪到的数量用来判断特征是否仍然有效。

对英雄联盟也用同样的方式进行分析:

在这里插入图片描述

其主要分布在两个IP上追踪这两条流

一条是腾讯通用流量 特征是固定33 66 00 0b:

在这里插入图片描述

一条是UDP数据流

在这里插入图片描述

这条数据流的IP经过分析是通过DNS协议解析出来的

所以来说一般的游戏加速特征提取也就是这两种通用的方式,一种是游戏中的主要报文具有特定的格式,需要分析出游戏中占主要部分的流量特征,这条流需要时连续快速的,另外一种时游戏全程和一个固定IP通信,这种需要分析这个IP的来源,一般是通过DNS获取的。

在线时长特征提取

一般而言在线时长特征可以复用禁用与加速特征,如果不行再抓包分析。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/185786.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

波奇学C++:C++11的可变参数模板和emplace

可变参数模板 // args是参数包 template<class T,class ...Args> void _ShowList(T value, Args... args) {cout << sizeof...(args) << endl; // 2cout << value << " ";/*_ShowList(args...);*/} int main() {_ShowList(1,2,3); re…

前端笔试遇到的坑-100题

1.闭包 let 形成闭包 var全局变量 function test() {for (var i 0; i < 6; i) {console.log(i); //1 2 3 4 5 6// setTimeout(() > {// console.log(i);// }, 0); 6 6 6 6 6 6 6} } test();var array []; for (var i 0; i < 3; i) {array.push(() > i);…

Element UI 实战:跨页保存表格选中状态与判断状态可选性的高效方案

引言 在前文中&#xff0c;我们曾深入探讨了在修改数据后跨页时提醒用户可能丢失数据的问题。虽然这种方式对于一些场景是足够的&#xff0c;但当涉及选择框时&#xff0c;我们需要更为智能和高效的解决方案。在本文中&#xff0c;我们将分享一种基于 Element UI 的实际案例&am…

内模原理与控制

基于模型的控制方法&#xff1a; 把外部作用信号的动力学模型植入控制器来构成高精度反馈控制系统的设计原理。 内模原理&#xff08;IMP&#xff09;指的是&#xff0c;想要实现对R(s)的无差跟踪&#xff0c;系统的反馈回路中需要包含一个与外部输入R(s)相同的动力学模型。通…

2023-11-30 LeetCode每日一题(确定两个字符串是否接近)

2023-11-30每日一题 一、题目编号 1657. 确定两个字符串是否接近二、题目链接 点击跳转到题目位置 三、题目描述 如果可以使用以下操作从一个字符串得到另一个字符串&#xff0c;则认为两个字符串 接近 &#xff1a; 操作 1&#xff1a;交换任意两个 现有 字符。 例如&…

高并发架构——网页爬虫设计:如何下载千亿级网页?

Java全能学习面试指南&#xff1a;https://javaxiaobear.cn 在互联网早期&#xff0c;网络爬虫仅仅应用在搜索引擎中。随着大数据时代的到来&#xff0c;数据存储和计算越来越廉价和高效&#xff0c;越来越多的企业开始利用网络爬虫来获取外部数据。例如&#xff1a;获取政府公…

力扣刷题-122买卖股票的最佳时机

题目要求如上&#xff0c;这里可以有两种解题思路&#xff0c;一种是利用动态规划去求解&#xff0c;一种是用贪心去求解。 首先看下动态规划的方法。 用动归去解决 动态规划最重要的就是要想出来递推公式&#xff08;这个真的很难&#xff09;&#xff0c;但是一旦想清楚递推…

VMware与Linux安装

VM与Linux安装 1、安装VMware ​ 这里安装Vm主要是为了安装Linux系统&#xff0c;除了相对云服务器&#xff0c;比较大众化的操作&#xff0c;当然更多的是熟悉Linux操作 1、Windows安装 ​ (1) 下载链接&#xff0c;目前版本上下载VM15的版本即可https://www.vmware.com/p…

阿里云服务器部署node和npm

目录 1.链接服务器2.找到node 下载地址3获取链接地址4下载到linux5.解压6.重命名 解压后的文件7.配置环境变量7.1复制当前的bin目录7.2vim /etc/profile7.3在按下ESC按键 8.重启环境变量9.输入node10.npm配置加速镜像 1.链接服务器 2.找到node 下载地址 https://nodejs.org/d…

CTO对生活和工作一点感悟

陌生人&#xff0c;你好啊。 感谢CSDN平台让我们有了隔空认识&#xff0c;交流的机会。 我是谁&#xff1f; 我呢&#xff0c;毕业快11年&#xff0c;在网易做了几年云计算&#xff0c;后来追风赶上了大数据的浪潮&#xff0c;再到后来混迹在AI、智能推荐等领域。 因为有一颗…

eNSP实验

前言 本文记录了使用eNSP进行组网&#xff0c;学习、巩固一些之前学的网络基础知识和协议。 一&#xff1a;同网段、网关互通 网络拓扑如下&#xff1a; AR1的配置&#xff1a; interface G0/0/0 ip address 192.168.10.1 24 PC1和PC2的配置(IP地址和网关设置) 最终实现PC1…

强芯铸魂,生态共赢!麒麟信安出席2023龙芯产品发布暨用户大会

11月28日&#xff0c;“到中流击水——2023龙芯产品发布暨用户大会”在北京国家会议中心隆重举办&#xff0c;会上发布新一代通用处理器龙芯3A6000、打印机主控芯片龙芯2P0500重磅成果。主管部门领导、专家学者、权威媒体等4000余人齐聚大会&#xff0c;麒麟信安作为龙芯合作伙…

【Linux学习】文件描述符重定向缓冲区

目录 九.文件描述符 9.1 文件描述符概念 9.2 文件描述符的分配规则 9.3 重定向 9.3.1 常见的重定向操作 9.3.2 重定向的原理 9.4 缓冲区 9.4.1 缓冲区概念 9.4.2 缓冲区刷新策略 9.4.3 C语言的缓冲区在哪里? 九.文件描述符 9.1 文件描述符概念 在上一篇讲到基础IO时,我们说到…

【C++】: unordered_map的使用

1、概念 key 键值的类型。unordered_map中的每个元素都是由其键值唯一标识的。 T 映射值的类型。unordered_map中的每个元素都用来存储一些数据作为其映射值。 Hash 一种一元函数对象类型&#xff0c;它接受一个key类型的对象作为参数&#xff0c;并根据该对象返回size_t类型…

Flask SocketIO 实现动态绘图

Flask-SocketIO 是基于 Flask 的一个扩展&#xff0c;用于简化在 Flask 应用中集成 WebSocket 功能。WebSocket 是一种在客户端和服务器之间实现实时双向通信的协议&#xff0c;常用于实现实时性要求较高的应用&#xff0c;如聊天应用、实时通知等&#xff0c;使得开发者可以更…

java系列:什么是SSH?什么是SSM?SSH框架和SSM框架的区别

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 什么是SSH&#xff1f;什么是SSM&#xff1f;SSH框架和SSM框架的区别 前言一、什么是SSH&#xff1f;1.1 Struts2具体工作流程&#xff1a;Struts2的缺点&#xff1a; 1.2 Sp…

【Linux】firewall防火墙配置-解决Zookeeper未授权访问漏洞

背景&#xff1a; zookeeper未授权访问漏洞&#xff0c;进行限制访问&#xff0c;采用防火墙访问策略 配置步骤&#xff1a; ##查看firewall配置清单 firewall-cmd --list-all ##查到为关闭态&#xff0c;启动防火墙 systemctl start firewalld ## 添加端口&#xff0c;这里…

Python入门06布尔值

目录 1 什么是布尔值2 怎么生成布尔值3 在控制程序中使用布尔值4 数据过滤、排序和其他高级操作总结 1 什么是布尔值 首先我们要学习一下布尔值的定义&#xff0c;布尔值是一种数据类型&#xff0c;它只有两个可能的值&#xff1a;True&#xff08;真&#xff09;或 False&…

rabbitmq消息队列实验

实验目的&#xff1a;实现异步通信 实验条件&#xff1a; 主机名 IP地址 组件 test1 20.0.0.10 rabbitmq服务 test2 20.0.0.20 rabbitmq服务 test3 20.0.0.30 rabbitmq服务 实验步骤&#xff1a; 1、安装rabbitmq服务 2、erlang进入命令行&#xff0c;查看版本 …

瑜伽学习零基础入门,各种瑜伽教学方法全集

一、教程描述 练习瑜伽的好处多多&#xff0c;能够保证平衡健康的身体基础&#xff0c;提升气质、塑造形体、陶冶情操&#xff0c;等等。本套教程是瑜伽的组合教程&#xff0c;共由33套视频教程组合而成&#xff0c;包含了塑身纤体&#xff0c;速效瘦身&#xff0c;四季养生&a…