基于数据流分析的网络协议逆向解析技术

时间:2022-10-20 10:20:01

基于数据流分析的网络协议逆向解析技术

摘要:

对未知网络协议进行逆向解析在网络安全应用中具有重要的意义。现有的协议逆向解析方法大都存在无法处理加密协议和无法获取协议字段语义信息的问题。针对这一问题,提出并实现了一种基于数据流分析的网络协议解析技术。该技术依托动态二进制插桩平台Pin下编写的数据流记录插件,以基于数据关联性分析的数据流跟踪技术为基础,对软件使用的网络通信协议进行解析,获取协议的格式信息,以及各个协议字段的语义。实验结果证明,该技术能够正确解析出软件通信的协议格式,并提取出各个字段所对应的程序行为语义,尤其对于加密协议有不错的解析效果,达到了解析网络协议的目的。

关键词:

数据流分析;网络协议逆向;加密协议解析;动态二进制插桩;协议字段语义

0引言

随着互联网的发展和网络应用的普及,网络通信已经成为各种软件系统的重要功能。如何通过软件逆向分析的方法分析软件网络行为、解析软件使用的通信协议,是现阶段网络安全领域的一大热点,也是软件安全性分析、网络安全策略制定等工作的重要内容[1]。

协议逆向解析是指采用逆向分析的思想,解析出目标网络应用程序所使用的协议格式,以及各个协议字段所对应的程序语义信息,其在漏洞挖掘、网络入侵检测、网络管理、指纹生成、应用程序会话重放等网络安全领域具有十分重要的应用价值[2]。

现阶段对于协议逆向解析已经取得了一些研究成果。Cui等[3]提出了一种通过观察网络数据流中不同协议字段的出现次数,推断协议字段结构的方法。由于这种方法不考虑具体协议内容,因此分析效果依赖于样本数据流中字段重复出现的次数和每次出现的形式是否一致。Ma等[4]通过对网络流量的内容进行统计建模,识别和区分流量对应的不同协议;但该方法只能用于识别协议类型,无法解析具体的协议结构。Small等[5]则设计并实现了利用自然语言处理和字符串对齐算法对网络数据流进行学习,自动地对收到的网络请求进行应答的方法;该方法能够根据数据内容的排列模式从样本数据中选择类似的会话用于自动应答,但无法分析具体协议语法和语义。这类基于统计分析的方法需要大量的网络数据作为分析样本,同时无法处理混淆、加密流量,更无法获取协议字段的语义信息。

基于上述研究现状,结合解析网络协议的目的,本文提出了一种基于数据流分析[6]的网络协议解析技术,以解决加密网络协议的逆向解析问题。数据流分析技术关心的是数据在程序执行过程中的传播路径,通过动态污点跟踪的方法,分析污点数据在内存中的读写情况,达到分析软件行为的目的。这种方法在保证分析效率的前提下,能够有效应对协议格式加密、软件加壳、代码混淆等情形。

1基于Pin的动态数据流记录

本文将协议逆向解析的工作划分为数据流记录、数据流分析和网络协议逆向解析三个阶段。

要进行数据流分析,首先要获得程序的动态数据流信息。由于程序在动态运行期间,实际执行到的指令条数往往能够达到千万甚至亿数量级,规模庞大,因此如何提高记录效率是数据流信息记录的关键。

动态二进制插桩平台Pin[7]在效率和可扩展性两方面有着独特的优势,因此,本文结合条件插桩、延迟写入、代码缓存刷新等技术,设计并实现了一款基于Pin的动态数据流记录插件,可高效准确地记录用户指定程序片段在执行期间的数据流信息,并生成含有指令地址、指令机器码、内存、寄存器和指令属性等信息的二进制文件,再对这些文件进一步加工处理合并,最终生成具有统一格式的指令信息二进制文件。

2基于数据关联性分析的数据流跟踪

传统的数据流跟踪过程需要事先指明污点源[8],且一次分析仅能获得与污点源相关的少量信息,污点源变更后又要重新分析,而整个分析过程涉及到污点传播分析、污点管理[9]等很多复杂的工作,因此会造成严重的时间浪费。为避免此问题,本文将传统的数据流跟踪划分为数据关联性分析和数据流跟踪两个阶段。

2.1数据关联性分析

数据关联性分析处理所有程序执行期间使用过的内存和寄存器信息,并最终生成一张全局性的数据关联图,该图能够标识出不同层次间和层次内的数据关联性信息。数据关联性分析过程中涉及到污点传播分析和污点管理,因此用时较长,但仅需执行一次,待数据关联图生成完毕,后续的数据流跟踪只需在数据关联图基础上进行。当污点源发生改变后,无需重复污点传播分析等耗时过程,可大大缩短分析时间,提高分析效率。

该方法首先将函数指令划分为一个个独立的区域,在此基础上进行数据关联性分析,具体过程描述如下。

2.2数据流跟踪

数据流跟踪分为正向跟踪和反向跟踪两种。由2.1节可知,本文数据流跟踪建立在数据关联图基础之上,而并不以原始的程序轨迹信息作为输入。对程序从网络获取的数据进行正向跟踪,可以分析得到程序对获取到的数据进行处理的过程,进而达到解析协议的目的。而反向数据流跟踪的作用在于分析程序发送的数据的生成过程,从而得到发送数据的协议格式。

2.2.1正向数据流跟踪算法

本文设计了一种基于数据关联图的正向数据流跟踪算法。该算法首先需要指定污点源,然后顺着程序的执行流程分析污点的传播,最后生成一张正向数据流传播图。该算法能够解决污点源扩散到了哪些地方,影响了哪些数据,是否会影响到程序执行流程等问题。算法具体步骤如下:

1)将指定的污点源加入污点集合,从区域信息数组中取出第一个区域,作为待分析区域;

2)若待分析区域的某些输入出现在污点集合中,则将这些输入所关联的输出加入污点集合,并对该区域做上标记;

3)若已到达区域信息数组的尾部,转4),否则读取后一个区域作为待分析区域,转2);

4)输出污点集合中的所有污点以及与其关联的污点源,输出所有被标记的区域。

2.2.2反向数据流跟踪算法

与此同时,本文也设计了一种基于数据关联图的反向数据流跟踪算法。该算法首先需要指定污点源,然后逆着程序的执行流程分析污点的传播,最终生成一张反向数据流传播图。该算法能够解决污点源从哪里来,是由哪些数据、经过什么路径产生的等问题。若将污点源指定为影响某条跳转指令的标志位,则可对此处引起程序执行流程改变的所有数据进行捕获。反向跟踪算法与正向跟踪算法十分类似,具体步骤如下:

1)将指定的污点源加入污点集合,从区域信息数组中取出最后一个区域,作为待分析区域;

2)若待分析区域的某些输出出现在污点集合中,则将这些输出所关联的输入加入污点集合,并对该区域做上标记;

3)若已到达区域信息数组的头部,转4),否则读取前一个区域作为待分析区域,转2);

4)输出污点集合中的所有污点以及与其关联的污点源,输出所有被标记的区域。

3基于数据流跟踪的网络协议解析

软件所使用的网络通信协议格式对于研究软件的网络行为有着重要的意义[10],对于未知网络协议的逆向解析,主要目的是解析出分隔符、关键词、长度域、目标域等格式信息,以及各个字段,尤其是协议中的加密字段在程序运行过程中对应的行为语义信息。利用第2章所阐述的数据流跟踪算法,可以达到这些目的。

3.1污点源的设置

网络协议的格式以及各个字段的语义信息最终都会体现在软件接收和发送的数据中。因此,本文将分接收和发送数据两种情况来进行污点源设置。

当程序接收到网络发送来的数据时,会开辟一块内存空间用于存放接收的数据,此时可以将读入到内存空间的每个字节标记为污点数据并对应于一个唯一的污点标签。然后根据2.2.1节的算法生成一张正向数据流传播图,分析对所接收信息的处理过程。

在程序发送数据时,将send()、sendto()、WinhttpWriteData()等发送函数的发送缓冲区标记为污点源,利用2.2.2节的算法进行反向数据流跟踪,最终分析出发送数据的来源以及数据的生成过程。

3.2分隔符和关键词的解析

定义6分隔符。用来标识协议字段结束的一个或连续多个已知值的字节[11]。

分隔符的解析思想是,从数据流跟踪阶段得到的指令级数据传播关系图中,提取出与污点数据相关的比较类指令信息,判断这些指令中与常量字符比较的污点标签是否连续,以此确定协议消息中的分隔符,其解析流程如图3。其中,污点数据标签用污点字节在数据中的偏移来表示。

定义7关键词。关键词是指既出现在协议消息中,又出现在协议应用程序中的协议常量,如HTTP协议中的“GET”。

关键词的解析思想和间隔符类似,均是通过跟踪污点数据与非污点的常量字符(串)的比较来确定相关字段。

3.3长度域和目标域的解析

长度域用于确定目标域。在处理目标域时,通常程序会访问消息中的某些连续字节,这些访问大多在一个循环中实现,并且循环次数是受长度域控制的。因此,解析长度域时,首先利用IDA(Interactive DisAssembler)等静态反汇编工具来完成一些静态分析工作以获知:1)哪条比较指令表示的是循环跳出点;2)每条指令属于的循环集(注:当存在循环嵌套时,一条指令可能属于多个循环)。然后,利用数据流信息和静态分析结果提取出所有既是循环跳出点又对污点数据进行处理的比较指令,这些指令涉及的污点字节即为潜在的长度域。最后,对每个潜在长度域,检查其控制的循环中涉及的污点字节标签是否连续,据此确定目标域。若找到对应的目标域,则正确地识别出了一个长度域和对应的目标域。

3.4加密协议字段的解析

当下许多恶意软件在进行网络通信时,都采取了流量加密的手段,即对网络收发数据的关键字段进行了加密处理。程序在处理这些字段时,通常需要先执行加解密操作,然后再按照处理非加密流量的方法逐个字段进行处理。在执行加解密操作时,需要对被加解密的内容整体读入和写出,我们对这种整体处理的情况进行特殊处理,即如果污点源被作为一个整体进行处理,那么将其视为加解密操作,同时把处理结果作为新的污点源。

经过这种特殊处理后,程序的加解密过程在数据流关联性分析和数据流跟踪中就会表现出很强的特征,即在对同一个数据包处理的过程中,会出现大量的污点标签不同的污点源标记对应于这同一个数据包,这说明程序对该数据包内容进行了多次加解密操作。通过人工对相应的代码段进行静态反编译分析及动态调试,也印证了这一事实。

利用上述特征,可以先将协议中相应的字段划分为加密字段,然后再结合人工调试和静态反编译对处理这些字段的程序段进行数据流分析。对于一些具有明显特征的常见的已知加密算法,可以利用现有的研究成果还原出数据的原文字符串,观察得到相应的语义信息。对于一些不常见的或由于复杂度过高无法还原数据的加密算法,也可以通过程序在解密后对解密数据的处理过程,如API调用等信息,推断出这些字段的语义信息。实验结果证明,这种方法对协议中加密字段的语义解析取得了不错的效果。

4实例测试

为了验证该技术的有效性,本文选取了一个典型的基于互联网中继聊天(Internet Relay Chat,IRC)协议的僵尸程序Agobot3.BJ作为测试用例。Agobot族的恶意软件有大量的变种,提供了多达数十种控制命令,具有DDoS、网络扫描、HTTP和FTP两种方式的下载等执行功能,并且支持通信流量的加密。其分析的具体结果如表1所示。

表格(有表名)

可以看到,这条消息中的“http.download”没有拆分,而是作为一个整体被处理(通过人工调试也印证了这一点),故该字段中的“.”被识别为命令字段的一部分,而“:”后的“.”在分析过程中符合分隔符的特征,故被识别为分隔符字段。

另外在测试过程中还发现,该样本的分析结果中出现了大量的不同污点源对应于同一数据包的情况,根据3.4节的论述,这是程序在对数据进行加解密操作。这说明该样本不是对关键字段进行加解密,而是对整个数据包的内容进行了加解密处理。上文所述的分析结果都是对程序解密数据包后的数据进行分析的结果。通过人工分析样本的静态反编译代码得知,程序先将数据包整体读入内存,在进行加解密操作时并没有开辟新的内存区域,而是对同一块内存区域进行反复加解密,故使得分析结果中出现了大量不同的污点源对应于同一数据包。这也印证了本文对于程序加解密操作的数据流特征的推断是正确的。当然,并不是所有的加密协议都会对数据包整体进行加解密处理,在其他的样本中就出现了只对参数字段和自定义命令字段进行加密的情况。

由于无法得到Prospex[12]、Polyglot[13]和Tupni等[14]网络协议逆向解析工具,所以无法直接获取这些工具对本文选取样本的分析结果。但通过与相关文献中的结果对比可以发现,之前的协议逆向大都针对未加密协议,而且这些技术大都利用网络流量的统计特征,因此通常无法解析出加密协议中的字段语义信息,在这些方面本文所提出的技术有着明显的优势。但是在应对未加密协议时,基于数据流的方法的精确度和效率较之前的解析方法有一定程度的降低。总体而言,本文所提出的技术在保证了未加密协议的正确性的前提下,能够有效地对加密协议进行解析,达到了预期的目标。

5结语

本文以动态数据流分析技术为基础,提出并实现了一种网络协议解析技术,论述了本技术的具体思想和具体实现方法,并通过实例测试验证了该技术的有效性。本技术的后续改进工作包括:1)解决多线程下的数据流分析问题。因为大部分复杂网络通信软件的通信过程都是通过多线程协作完成的,现有技术在进行多线程数据流分析时还有大量的人工分析成分,下一阶段要把这些工作自动化,以提高分析效率。2)细化解析粒度。现有技术在协议逆向时无法解析出小于一个字节的协议字段,这在某些软件的网络行为分析中会造成障碍,下一步要通过细化解析粒度来解决这个问题。

参考文献:

[1]

应凌云,杨轶,冯登国,等. 恶意软件网络协议的语法和行为语义分析方法 [J]. 软件学报, 2011, 22(7):1676-1689.

[2]

WILLEMS C, HOLZ T, FREILING F C. Toward automated dynamic malware analysis using CWSandbox [J]. IEEE Security Privacy, 2007, 5(2): 32-39.

[3]

CUI W D, PEINADO M, CHEN K, et al. Tupni: automatic reverse engineering of input formats [C]// CCS 2008:Proceedings of the 15th ACM Conference on Computer and Communications Security. New York: ACM, 2008: 391-402.

[4]

MA J, LEVCHENKO K, KREIBICH C, et al. Unexpected means of protocol inference [C]// Proceedings of the 6th ACM SIGCOMM Conference on Internet Measurement. New York: ACM, 2006:313-326.

[5]

SMALL S, MASON J, MONROSE F, et al. To catch a predator: A natural language approach for eliciting malicious payloads [C]// Security 2008: Proceedings of the 17th USENIX Security Symposium. Berkeley: USENIX Association, 2008: 171-183.

[6]

KRUEGEL C, ROBERTSON W, VALEUR F, et al. Static disassembly of obfuscated binaries[C] // Proceedings of the 13th Conference on USENIX Security Symposium. New York:ACM, 2004:18.

[7]

NEWSOME J, SONG D. Dynamic taint analysis for automatic detection, analysis, and signature generation of exploits on commodity software[EB/OL]. [ 2012-10-01]. http:///docs/newsome2005.pdf.

[8]

NICHOLAS N. Dynamic binary analysis and instrumentation or building tools is easy [D]. Trinity Lane, Cambridge: University of Cambridge, 2004.

[9]

周侃. 基于数据流跟踪和库函数识别检测溢出攻击[D]. 上海:上海交通大学, 2011.

[10]

王卓. 基于符号执行的二进制代码动态污点分析[D]. 上海:上海交通大学, 2010.

[11]

潘,吴礼发,杜有翔,等.协议逆向工程研究进展[J].计算机应用研究, 2011, 28(8): 2801-2806.

[12]

何永君,舒辉,熊小兵.基于动态二进制分析的网络协议逆向解析 [J].计算机工程,2010, 36(9): 268-270.

[13]

COMPARETTI P M, WONDRACEK G, KRUEGEL C, et al. Prospex: Protocol specification extraction [C]// SP09: Proceedings of the 30th IEEE Symposium on Security & Privacy. Washington,DC: IEEE Computer Society, 2009:110-125.

[14]

CABALLERO J, YIN H, LIANG Z K, et al. Polyglot: Automatic extraction of protocol message format using dynamic binary analysis[C]// CCS 2007: Proceedings of the 14th ACM Conference on Computer and Communications Security. New York: ACM, 2007:317-329.

上一篇:中兴接入网设备U300改造为AG5200技术探讨 下一篇:浅谈GPS在摄影测量中的应用