文章目录
- 网络流量应用识别技术
- 背景
- 应用识别基本原理
- 应用识别主流技术方向
- 特征识别技术
- 单报文解析
- 流特征解析
- 关联识别技术
- 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)用户态接口:解密解析用户态特征库文件,然后通过接口将特征加载到内核态,以及设置禁用信息,设置加速模式接口。
新框架具有以下几个优点:
- 解析路径统一,只挂一个HOOK点,提高解析效率,增强代码可维护性。
- 支持流量回放,提升新协议开发与app适配效率。
- 支持流量信息分析统计,输出统计信息,便于调试。
- 基于流特征的信息匹配,可以匹配更加复杂的特征。
- 采用快照缓存机制,提升报文转发效率。
经过比较采用新框架的情况下整体转发性能提升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获取的。
在线时长特征提取
一般而言在线时长特征可以复用禁用与加速特征,如果不行再抓包分析。