DPI — 深度数据报文解析

DPI

DPI(Deep packet inspection,深度数据包检测)又称数据探测(Complete packet inspection)或信息萃取(Information eXtraction),本质是一种数据报文过滤技术。

所谓 “深度” 是相对 “普通的报文解析” 而言的。普通报文检测仅会分析数据报文的 IP 五元组(源地址、目的地址、源端口、目的端口以及协议类型)。

而 DPI 除了支持上述 L2-L4 的报文首部解析之外,还增加了对 L7 应用层有效载荷(Payload)的解析,可以识别各种应用类型及其内容。当 IP 数据包、TCP/UDP 数据流通过基于 DPI 技术的报文解析系统时,该系统通过深入读取 IP 报文所载荷的内容来对应用层信息进行重组,从而得到整个应用程序的内容,然后按照系统定义的管理策略对流量进行整形操作。
DPI — 深度数据报文解析

简而言之。所谓 “深度” 就是要看见数据流实际的业务内容。
DPI — 深度数据报文解析

可见,DPI 技术支撑进一步的网络管理、用户服务及安全功能,也可用于进行互联网数据挖掘、窃听及互联网审查。

DPI 的作用

抽象的说,DPI 可以实现:

业务识别:第一类业务可以通过 IP 五元组来进行识别,第二类业务需要通过 DPI 技术来进行深度检测,通过解析数据包来确定业务具体内容和信息。

业务控制:可以根据既定的策略对网络进行配置,从而对业务流实现控制,主要包括转发流向、限制带宽、阻断、整形、丢弃等处理。

业务统计:业务统计是基于 DPI 的识别结果的,对一定时间内的流量行为进行统计,流量流向、业务占比、访问网站 TOPN 等。统计应用类型的使用比率调整该业务的服务优先级,统计用户正在使用哪种业务进行视频播放、即时通讯、购物支付以及游戏娱乐,也可以统计出消耗网络带宽的非法 P2P、VOIP 业务等等。

DPI 的关键技术

DPI 的关键技术是能够高效的识别出网络上的各种应用类型。

普通报文检测是通过端口号来识别应用类型的。如:检测到端口号为 80 时,则认为是 HTTP 协议。但实际上,为了应用的安全性考虑通常不会使用默认端口来暴露业务能力。此时采用 L2 ~ L4 层的传统检测方法已无能为力了。

关于这一点,DPI 技术与我们熟知的防病毒软件在某些方面比较类似,即:其能识别的应用类型必须是系统已知的应用类型。换句话说,防病毒软件要防御病毒攻击,前提是后台要有一个庞大的病毒特征数据库。DPI 一样也要维护一个应用特征数据库,当流量经过时,通过将解包后的应用信息与后台特征数据库进行比较来确定应用类型。而当有新的应用出现时,后台的应用特征数据库也要更新才能具有对新型应用的识别和控制能力。

DPI 技术通过对数据流中的内容进行探测,从而确定数据报文的真正 “面目”。DPI 的应用类型识别技术可以分为以下几大类:

  • 基于 “特征字” 的识别技术
  • 应用层网关识别技术
  • 行为模式识别技术
  • 基于负载的协议识别
    可见,DPI 的技术核心点在于如何维护一个高准确性、高实时性的应用特征库,进而才能保障检测的准确性和实时性。

特征识别
不同的应用类型通常依赖不同的网络协议,而不同的协议都有其特殊的指纹,这些指纹可能是特定的端口、特定的字符串或者特定的 Bit 序列。基于这些 “特征字”,通过对数据流中特定数据报文中的 “指纹” 信息的检测以确定业务流承载的应用。根据具体检测方式的不同,由可以分为:固定位置特征字匹配、变动位置的特征匹配、状态特征匹配。

基于 “特征字” 的识别技术可以很方便的进行功能扩展,实现对新协议的检测。如:Bittorrent 协议的识别,通过反向工程的方法对其对等协议(P2P 协议)进行分析。对等协议由一个握手开始,后面是循环的消息流,每个消息的前面,都有一个数字来表示消息的长度。在其握手过程中,首先是先发送 19,跟着是字符串 “BitTorrent Protocol”。那么 “19 BitTorrent Protocol” 就是 Bittorrent 协议的 “特征字”。

此外,还可以基于荷载的特征进行识别。对应用层协议交互过程中产生报文的内容进行分析,找出不同于其它协议的模式特征,根据各协议特有的模式特征确定流量所属协议类型。基于负载的协议识别主要有采用固定字符串和正则表达式来表示协议特征两种方式。

正则表达式比固定字符串具有更强的表达能力和更好的灵活性,采用正则表达式代替固定字符串表示协议的特征成为研究的热点。

关联识别
某些业务的控制流和业务流是分离的,例如:VoIP、FTP、在线游戏等业务普遍采用控制流与业务流分离的方式,通过控制流完成握手,其业务流没有任何特征。这种情况下,就需要采用应用层网关识别技术。应用层网关需要先识别出控制流,并根据控制流的协议通过特定的应用层网关对其进行解析,从协议内容中识别出相应的业务流。

对于每一个协议,需要有不同的应用层网关对其进行分析。如:SIP、H323 协议都属于这种类型。SIP、H323 通过信令交互过程,协商得到其数据通道,一般是 RTP 格式封装的语音流。也就是说,纯粹检测 RTP 流并不能得出这条 RTP 流是那通过那种协议建立的。只有通过检测 SIP、H323 的协议交互,才能得到其完整的分析。

行为识别
行为模式识别技术基于对终端已经实施的行为的分析,判断出用户正在进行的动作或者即将实施的动作。

行为模式识别技术通常用于无法根据协议判断的业务的识 别。例如:SPAM(垃圾邮件)业务流和普通的 Email 业务流从 Email 的内容上看是完全一致的,只有通过对用户行为的分析,才能够准确的识别出 SPAM 业务。

DPI 引擎的实现原理

  1. 确认协议的种类:不同的协议会使用不同的端口,比如:SSH 22,HTTP 80,然而 P2P 应用一般采用的是随机端口,为了保证不会漏掉这些应用的报文,有必要通过分析其协议以进行控制。

  2. 切分协议:比如对于 SOAP service,客户端传递一个 SOAP Envelope,需要先发送一个 HTTP 包指明 content-type、SOAPAciton 等数据,然后在跟着的下一个包发送 SOAP Envelope。没问题的话,SOAP service 就返回 200。简单地说,协议切分要做到是通过细分流,从而辨别出应用的一个行为,比如上面的客户端发送 SOAP Envelope 的行为。了解应用的行为,对于审计或者提高解析效率都有不小的意义。

  3. 切分协议域:简单而言就是把报文的内容划分为不同的块,比如在 Scapy 中,读入一个 pcap 文件并选出特定的行,这时 Scapy 返回的数据就已经把报文划分好,转化为 Python 对象:DPI — 深度数据报文解析

上图是 LLMNR 协议的抓包结果,用户可以直接访问该行的 Ether 键来得到抓包数据中的以太网部分数据。对于 DPI 引擎来说,切分报文也是进一步解析所承载的数据的重要步骤。

  1. SSL 卸载:加密的流量必须先解密,否则难以进行深入解析。

  2. Payload 分析:大部分应用发送的数据有可能被处理过(加密、压缩等),而这些数据又是针对报文分析应用的关键,所以如何把分开的数据提取、合并、解密也是个难点。

  3. 识别协商协议:不少 P2P 应用使用协商的方式来传输数据,如果能识别出这个协商过程,就可以找出该应用的数据传输通道以进行进一步解析。

DPI 的应用场景

ISP 使用 DPI 来分离网络流量
ISP 可以通过使用 DPI 来将流量分为以下几种应用类型:
低延时(语音)
保证延时(网络流量)
保证交付(应用流量)
尽最大努力交付(文件共享)
使用这种分类,他们可以更好的根据关键任务流量、非关键流量来优化资源并减少网络拥挤。因为廉价的带宽,服务供应商可以增加增值服务来获得额外的收入,包括安全、高峰使用管理、内容计费和针对性的广告。这些都需要对网络流量的深度检测。
企业使用 DPI 来管理网络性能和安全
大型企业在他们的内部网络间可能运行着完全不同的通信类型。除了控制成本和带宽使用外,安全一直是一个挑战,这要求对网络应用程序流量的理解。

对网络性能管理:网络管理员可以使用 DPI 技术来控制网络性能,当网络性能较低时,限制某种应用程序流量,当性能恢复到正常时,再提升流量。

而对于网络安全功能:则可以使用 DPI 技术来世界有效载荷(Payload)的内容。安全服务提供商,如:反垃圾邮件或者 Web 过滤服务等供应商,必须通过获取多个客户通信的实时可见的内容,以便迅速获取抵御威胁和攻击的信息。这样也要求内容级别的情报。
 
除了安全问题外,DPI 对于云计算服务供应商还有着重大的影响,对于云计算供应商而言,服务订阅和用户管理是一个重大挑战。DPI 能够提供关于用户流量、应用程序使用、内容传递和异常模式的情报信息,这些服务供应商还可以利用可编程界面来收集其他有用信息,如市场营销情报和客户档案等。
运营商使用 DPI 来统计特定 App 的数据流量
在过去,运营商只是一个管道工,负责报文的转发。互联网流行起来以后,数据的价值开始显得越来越重要。所以,运营商希望通过 DPI 技术来理解用户的行为,进行大数据的研究。

对于运营商而言,DPI 应该部署到 5G UPF 等用户面网管设备中。可以使用到以下场景:

应用分析:网络流量构成分析、性能分析、流向分析等;
用户分析:用户群区分、行为分析、终端分析、趋势分析等;
网元分析:根据区域属性(市、区、街道等)、基站负载情况进行分析等;
流量管控:P2P 限速、保证 QoS、带宽保障、网络资源优化等;
安全保障:DDoS 攻击、数据广播风暴、防范恶意病毒攻击等。
针对特定 App 的流量统计:以微信举例,主要是做了针对性的协议监控,通过算法对特征数据和字符串进行匹配,对微信的私有协议解析进行识别。