一种基于动态污点分析进行消息语义解析的方法

文档序号:7793637阅读:169来源:国知局
专利名称:一种基于动态污点分析进行消息语义解析的方法
一种基于动态污点分析进行消息语义解析的方法技术领域
本发明针对网络交互产生的消息进行语义解析,通过分析软件执行过程中的函数调用以及污点在软件执行过程中的传播过程,获取用于描述消息语义的信息,可以应用于软件的网络交互信息提取和分析。
背景技术
随着互联网的日益推广和广泛应用,计算机用户通过互联网进行数据交互愈加频繁。互联网在便利用户进行数据交互的同时,也承担着交互数据带来的潜在的威胁。目前, 互联网已经成为了黑客进行病毒传播的主要途径。在数据交互的同时植入病毒信息成为了当前黑客进行病毒扩散的重要手段。软件通过互联网进行数据交互时,可能携带了一定量的病毒信息,而这些信息对于用户而言是隐性的。病毒就是通过这些隐性的方法,进入用户计算机系统从而对计算机造成破坏。因此,对于消息语义进行解析以获取消息语义格式成为了分析互联网环境,保障主机安全的一种重要方法。在军事应用方面,解析网络消息语义成为了保护军事信息安全,分析对方信息系统的关键技术之一。
动态污点分析(Dynamic Taint Analysis, DTA)是动态分析中一个细化的技术。 动态污点分析是指在软件运行时,跟踪软件对数据的处理,并记录处理过程中数据在内存中的传播。目前,动态污点分析已经广泛地应用于软件未知漏洞检测,恶意软件分析,测试用例生成等。污点分析的目标主要是跟踪目标数据同源数据的关系,分析并判断目标数据是否同源数据有相关。动态污点分析主要由污点源引入、污点源传播以及污点源确认三个部分组成。每一个部分的具体内容如下。
污点源引入定义了需要跟踪并分析的输入数据,即源数据。物理内存,CPU寄存器,硬盘以及网络接口缓冲区等属于内部空间,其中的任何区域都可以被设置成为污点源。 键盘输入、鼠标点击等属于外部输入,这些输入也可以被设置为污点源。对于被设置为污点源的区域,DTA将会给污点源一个特定的标识,用来表征这块区域已经被污染(tainted)。
污点传播过程在污点源引入之后,随着程序执行的不断深入,污点数据作为输入参数将会参与各种运算,此时运算得到的输出结果就会同输入参数产生依赖关系,这种依赖关系就被认为是污点的传播。被污点传播到的输出参数被认为是新的污点,其污点标识同输入参数的污点标识相同。
污点确认主要针对目标数据进行,用于分析目标数据同源数据的关系。随着程序的运行,污点传播逐渐深入,污点数据不断增多。此时,对于目标数据的污点确认成为了动态污点分析的最后一个流程。污点确认的范围很广,任何一个内存变量或者寄存器都可以进行污点确认。
目前对于消息格式的解析技术也是互联网中的研究热点。但是目前的消息解析重点对于消息的内容进行提取,而不是对消息中每一个字段的语义进行分析。仅获取消息的内容是不够的,例如,病毒通过互联网进行传播时,会将自身可执行文件嵌入发送消息中, 对于消息内容的提取而言,仅仅知道了发送消息中每一个字节的内容,但是并不知道这块内容的具体含义。因此,在对于消息进行解析时,对于消息每一个字段的语义提取是分析消息构成,甚至分析软件网络交互动机的关键。发明内容
本发明的目的在于利用动态污点分析的技术方法,对软件在网络交互中产生的消息进行语义提取,提高对于软件的分析能力。本发明分别于发送消息和接收消息的语义解析采用不同方法加以实现。
为实现本发明的目的,采用的技术方案包括以下步骤
第一步,设置隔离环境。隔离环境由虚拟操作系统,虚拟机监视器以及必要的网络环境组成。虚拟操作系统为软件提供了运行的平台,虚拟机监视器用于监视虚拟操作系统中的软件,并完成同外部分析的交互。必要的网络环境用于触发软件的网络行为,保证在分析过程中软件能够正确产生消息。隔离环境的设置方法是
1. 1在宿主操作系统中安装虚拟机监视器。虚拟机监视器必须具备对整个虚拟环境的监控能力。目前常用的虚拟机监视器由QEMU,TEMU等,这些工具提供了基于硬件层的虚拟环境模拟,能搭载多种虚拟操作系统。在正确安装虚拟机监视器后,利用虚拟机监视器开启虚拟操作系统,开启的虚拟操作系统必须满足软件对于操作系统的要求。
1.2在隔离环境中建立网络互联。建立虚拟操作系统同外部的网络互联,保证双方可以通过网络进行通信。
第二步,利用动态分析,监控软件的函数调用行为。监控方法如下
2. 1在隔离环境中运行软件,利用虚拟机监视器监视软件执行的每一条指令,利用指令提供的信息获取软件的函数调用行为。获取函数调用行为的具体过程为
2. 1. 1虚拟机监视器监听软件运行过程中执行的call指令;
2. 1. 2提取call指令的参数,将call指令的参数同API函数或者系统函数在内存中的入口地址进行匹配;
2. 1.3根据匹配结果判断软件时候调用了某个外部函数,如果匹配结果相同,则说明软件通过call指令调用了相应的外部函数。
2. 2利用劫持机制在软件调用外部函数的时刻植入监控代码。其中监控代码是利用虚拟机监视器提供的编程接口编写的用于完成监控功能的代码。通常开源的虚拟机监视器提供了一定的编程接口,用户可以利用接口选择暂停虚拟操作系统,转而执行自身代码。 监控代码用于获取函数的参数和返回值信息。监控代码的植入具体分为下面两个部分
2. 2. 1在确认软件利用call指令调用外部函数时,虚拟机监视器暂停虚拟操作系统,转而执行获取输入参数的监控代码。暂停的虚拟操作系统中的所有状态都可以通过虚拟机监视器获取。监控代码利用CPU中的寄存器信息和内存信息获取函数的输入参数。在 32位x86处理器下,虚拟操作系统利用ESP寄存器指向的栈空间存储当前函数的参数信息。 在输入参数获取完毕后,恢复虚拟操作系统,虚拟操作系统开始执行函数;
2. 2. 2在虚拟操作系统函数执行完毕后,虚拟机监视器暂停虚拟操作系统,开始执行获取输出参数和返回值的监控代码。输入参数的获取同2. 2. 1中的输入参数获取方法一致。在32位x86处理器下,返回值可以通过EAX寄存器正确获取。返回值可用于判断软件对函数的调用行为是否成功。
第三步,利用动态污点分析进行污点源设置,明确污点分析的源数据。在虚拟机监视器对运行中的软件进行监控的同时,还要利用动态污点分析技术观察污点源在内存中的流动。污点源的选取具体包括
3. 1对于接收消息而言,在软件完成消息接收后,将整个接收缓冲区设置为污点源,对于接收缓冲区的设置如下
3. 1. 1在软件执行完接收函数后,利用监控代码,提取接收函数的参数,通过参数获取接收缓冲区在内存中的位置和区间;
3. 1. 2将接收缓冲区的每一个字节都赋予一个确定的标识,这些标识用于区分不同的源数据。根据不同的虚拟机监视器实现的标识是不相同的,在TEMU虚拟机监视器中, 利用其提供的编程接口,使用32位二进制用于表征标识。
3. 2对于发送消息而言,污点源的选取在软件调用发送函数之前就必须完成。对于发送消息相关污点源的选取如下
3. 2. 1选定函数中具有确定语义的参数,参数的语义由参数本身所包含的内容决定。许多函数的参数具有明确的语义,可以用于表征某一块数据的语义信息,因此需要从函数中挑选出具有明确语义的参数;
3. 2. 2当软件调用函数时,分析函数的参数是否携带确定语义;
3. 2. 3若参数语义明确,则将参数在内存或者寄存器中的数据设置为污点源,具体的设置方法同3. 1.2相同;
3. 2. 4所有的输入参数、输出参数以及返回值均可作为污点源被成功设置。
第四步,观察并记录污点传播过程。对于接收消息和发送消息而言,观察并记录污点传播过程的方法是相同的。方法如下
4. 1动态污点分析通过分析转移指令,DMA操作,算术操作以及查表指令等完成对污点的传播。对于污点传播到的区域,动态污点分析赋予该区域污点标识,污点标识同污点源的标识相同;
4. 2软件在执行过程中伴随着多次的函数调用,在每次函数调用时,判断函数的参数是否已经被污染;
4. 3对于未被污染的参数,不做任何操作;
4. 4对于被污染的参数,利用污点标识,查找到对应污点源,并将被污染的参数信息,函数信息及其对应的污点标识信息做成结点;
4. 5将具有相同污点标识的结点根据函数的调用顺序记录下来,对于有多个污点标识的结点而言,在记录时需要将结点按照污点标识分裂成多个具有单一标识的结点;
4. 6被污染的参数,将作为新的污点源参与到动态污点分析中。
第五步,对目标数据进行污点确认。具体包括
5. 1对于接收消息而言,在将接收缓冲区设置污点源并观察污点在内存中的传播后,查看每一个字节的污点源对应的结点,如果某一个结点具有足够的语义来表征污点源, 则将结点的赋予该污点源;
5. 2对于发送消息而言,目标数据为发送缓冲区的数据。发送消息的污点确认具体如下
5. 2. 1在软件调用发送函数之前,污点源设置和污点传播过程必须执行完毕;
5. 2. 2当软件调用发送函数后,利用监控代码获取函数的参数,并根据参数锁定发送缓冲区的位置和区间;
5. 2. 3判断发送缓冲区中每一个字节是否被污染;
5. 2. 4利用发送消息语义解析算法进行污点确认。发送消息语义解析算法对发送缓冲区的每一个字节进行扫描,分别对未污染字节、单污源字节以及多污源字节提出了语义确认方法。对于未污染的字节,算法暂时无法对其进行语义解析。对于仅有一个污点源标识的字节,即单污源字节,利用该标识找到污点源,再用污点源所携带的语义信息来表征该字节。对于含有多个污点源标识的字节,首先提取该字节的所有污点源以及对应的2级链表,对所有包含的污点源以及2级链表中的每一个结点的语义进行提取,将拥有相同语义的结点归为一类。归类完毕后,提取拥有最多结点数的类所携带的语义信息,将该语义赋给被污染的字节,作为该字节的语义。如果有若干语义拥有相同的最多结点数,则利用就近原则来确定被污染字节的语义。即从这些结点中找出离sendO函数调用时刻最接近的函数,将该函数拥有的参数语义赋给被污染字节,作为该字节的语义。
与现有技术相比,本发明可以达到的技术效果是
本发明通过分析软件执行过程中的函数调用行为,利用动态污点分析,监控函数参数在内存中的流动情况。利用函数中参数携带的语义,对消息的语义进行解析,从而了解消息每一个字段的语义。


图1是本发明的总体流程图2是接收消息语义解析图3是发送消息语义解析图4是发送消息语义解析算法描述图5是监控代码植入图6是FTP示例实验环境图。
具体实施方式
图1是本发明的总体流程图;本发明的总体流程分为设置隔离环境、监控函数调用行为以及对于消息的语义解析。设置隔离环境还具体分为选择隔离环境、选取虚拟机监视器以及搭载虚拟操作系统3个方面。监控函数调用行为分为监控call指令、获取函数调用行为以及利用劫持机制获取函数参数;在流程的最后过程则是根据接收消息和发送消息进行消息语义解析。
图2是接收消息语义解析图;接收消息将接收缓冲区设置为污点源并观察这些污点源在内存中流动情况。在软件执行的过程中,判断某些函数的参数是否被污点源污染,若被污点源污染,则作为中间结点记录下来。最后记录的结点作为检查点,分析中间结点以及检查点是否具有足够的语义来表征污点源,若有,则将污点源赋予相应语义。
图3是发送消息语义解析图;发送消息语义解析将函数的参数设置为污点源,观察参数在内存中的流动,记录下流动过程中到达的中间结点,并在软件调用发送函数后,将发送缓冲区设置为检查点。利用发送消息语义解析算法将中间结点和污点源的语义信息赋予对应的发送缓冲区数据。
图4是发送消息语义解析算法描述图;该算法明确了发送消息语义解析的具体方法。方法步骤如下
(1)扫描发送缓冲区的每一个字节;
(2)判断字节是否被污点源污染;
(3)若字节被污点源污染且仅含有一个污点标识,则利用该污点标识找到对应的污点源,将污点源的语义赋予该字节;
(4)若字节被多个污点源污染,则将这些污点源记录下来,组成一个集合;
(5)将污点源传播过程中记录的所有的中间结点也添入集合中;
(6)利用语义的不同将集合划分成多个子集合;
(7)选取子集合中拥有最多元素的集合,将该集合的语义赋予字节;
(8)若同时拥有多个具有最多元素的子集合,则从这些集合中找到软件最晚调用的结点(结点中具有函数信息,最晚调用指离发送函数调用时间最接近),将结点的语义赋予字节。
图5是监控代码植入图。图5分别描绘了获取输入参数的劫持机制和获取输出参数的劫持机制。劫持机制利用虚拟机监视器暂停虚拟操作系统,从而执行监控代码。根据参数类型的不同,劫持机制的实现具体如下
(1)对于输入参数而言,监控代码在call指令和调用函数之间进行。当虚拟机监视器监测到软件执行call指令调用函数的时候,系统将call指令所要调用的函数的入口地址Al修改为监控代码的入口地址A3,而把原先函数的入口地址A3作为监控代码执行完毕后的下一条指令地址。整个过程类似一个自陷过程。在执行监控代码的过程中,虚拟操作系统处于暂停的状态;
(2)对于输出参数而言,当函数执行完毕返回时,将下一条指令的入口地址A2修改为监控代码的入口地址A4,将地址A2作为监控代码执行完毕后的后续指令。在监控代码中,获取输出参数的方法同输入参数的一样,均是通过ESP寄存器和一定偏移量得到。当函数执行完毕时,函数的返回值是暂存在EAX寄存器中的,因此返回值的获取相对简单,只通过访问EAX寄存器就可以获取当前函数的返回值。
图6是FTP示例实验环境图。
下面结合上述附图,利用FTP程序更详细地介绍本发明的实施。
第一步,设置隔离环境。图6为整个示例环境。隔离环境由一个宿主操作系统、虚拟机监视器和虚拟操作系统组成。宿主机为HP服务器GG内存,单核主频2. 8GHz的4核处理器),宿主操作系统为Wxmtu 9. 04。宿主操作系统使用bftp-2. 9软件开启FTP服务。 虚拟机监视器选取TEMU,在TEMU虚拟环境中搭载Windows Xp sp3操作系统作为虚拟操作系统,TEMU提供的虚拟硬件环境为512M内存,x86系列CPU。虚拟操作系统同宿主操作系统具备基本的网络交互能力。
第二步,利用动态分析,监控软件的函数调用行为。
(1)利用TEMU虚拟环境提供的编程接口完成对监控代码的编写,监控代码主要功能是利用CPU提供的寄存器对函数的参数信息进行提取。在虚拟操作系统中运行FTP软件, 并开启虚拟机监视器的监听功能;
(2)虚拟机监视器监听软件执行的每一条指令,当软件执行call指令时,记录下 call指令携带的参数。将call指令携带的参数同API函数的入口地址进行比较,若相同则表明软件调用了 API函数;
(3)植入监控代码。即在函数的入口处和返回处,虚拟机监视器暂停虚拟机,执行监控代码,获取函数的参数,实现方法如图5 ;
第三步,利用动态污点分析进行污点源设置,明确污点分析的源数据。
(1)对于接收消息而言,污点源为接收缓冲区,缓冲区的每一个字节都有唯一的污点标识。接收缓冲区的内存地址以及缓冲区大小可以利用recvO函数的参数2和参数3 获得。对于面向UDP的连接而言,软件调用的是recvfromO函数。FTP程序利用recvO函数接收从FTP服务器发送过来的数据;
(2)对于发送消息而言,污点源为函数的参数,被设置为污点源的参数必须具备足够的语义,为每一个字节的污点源都赋予唯一的污点标识。例如getsocknameO函数的第二个参数是一个结构指针,指向了一个sockaddr结构,sockaddr结构中存放的是主机的IP 地址和为指定的套接字开放的端口号,具备足够的语义。FTP程序利用sendO函数将消息发送给FTP服务器;
(3)在监控代码中将需要的数据设置为污点源,污点源的位置均可以通过函数的参数获取。将每一个字节的污点源做成结点保存在链表Taint_SoUrce中,链表中的每一个结点包含了污点源在内存中的地址,污点标识等信息。污点源的每一个结点还包含一个 2级链表TairHRecord,用于保存该污点字节污点传播过程,2级链表的每一个结点记录的被污点源污染的函数信息以及具体的参数信息。
第四步,观察并记录污点源传播过程。
TEMU虚拟环境提供了在指令层面进行动态污点分析的传播保障,因此只需要观察调用函数的参数是否被污染。在监控代码中添入对函数每一个参数的观察过程,判断监控代码获取的参数是否被污点源污染。若判断出某一个参数被污染时,则根据参数的污点标识,找到相应的污点源,在污点源的2级链表中添入相应的结点用于表示污点源传播的途径。
第五步,对目标数据进行污点确认。
(1)对于接收消息而言,当FTP程序接收完数据后,系统开始观察污点源(即接收缓冲区)在软件执行过程中的传播。利用监控代码对函数的参数进行分析,判断参数是否被这些污点源污染,如果被污点源污染且该参数具备足够的语义,则利用该参数的语义来表征污点源字节;
(2)对于发送消息而言,在软件执行过程中将函数的参数设置为污点源,判断污点源在软件执行过程中的传播。当FTP程序调用sendO函数发送消息时,利用监控代码对发送缓冲区中的每一个字节进行确认根据图4的算法对字节进行确认;
(3)通过上述确认过程,可以描绘接收缓冲区和发送缓冲区中字节的语义信息。
权利要求
1.一种基于动态污点分析进行消息语义解析的方法,其特征在于,包括以下步骤1)设置隔离环境;2)利用动态分析,监控软件的函数调用行为;3)利用动态污点分析进行污点源设置,明确污点分析的源数据;4)观察并记录污点传播过程;5)对目标数据进行污点确认。
2.2、根据权利要求1所述的一种基于动态污点分析进行消息语义解析的方法,其特征在于,隔离环境的设置方法是(1. 1)在宿主操作系统中安装虚拟机监视器; (1.2)在隔离环境中建立网络互联。
3.根据权利要求1所述的一种基于动态污点分析进行消息语义解析的方法,其特征在于,监控方法如下(2. 1)在隔离环境中运行软件,利用虚拟机监视器监视软件执行的每一条指令,利用指令提供的信息获取软件的函数调用行为; 获取函数调用行为的具体过程为(2. 1. 1)虚拟机监视器监听软件运行过程中执行的call指令; (2. 1. 2)提取call指令的参数,将call指令的参数同API函数或者系统函数在内存中的入口地址进行匹配;(2. 1.3)根据匹配结果判断软件时候调用了某个外部函数,如果匹配结果相同,则说明软件通过call指令调用了相应的外部函数;(2. 2)利用劫持机制在软件调用外部函数的时刻植入监控代码,其中监控代码是利用虚拟机监视器提供的编程接口编写的用于完成监控功能的代码; 监控代码的植入具体分为下面两个部分(2. 2. 1)在确认软件利用call指令调用外部函数时,虚拟机监视器暂停虚拟操作系统,转而执行获取输入参数的监控代码;(2. 2. 2)在虚拟操作系统函数执行完毕后,虚拟机监视器暂停虚拟操作系统,开始执行获取输出参数和返回值的监控代码。
4.根据权利要求1所述的一种基于动态污点分析进行消息语义解析的方法,其特征在于,污点源的选取具体包括(3. 1)对于接收消息而言,在软件完成消息接收后,将整个接收缓冲区设置为污点源; 对于接收缓冲区的设置如下(3. 1. 1)在软件执行完接收函数后,利用监控代码,提取接收函数的参数,通过参数获取接收缓冲区在内存中的位置和区间;(3. 1. 2)将接收缓冲区的每一个字节都赋予一个确定的标识,这些标识用于区分不同的源数据;(3. 2)对于发送消息而言,污点源的选取在软件调用发送函数之前就必须完成; 对于发送消息相关污点源的选取如下(3. 2. 1)选定函数中具有确定语义的参数;许多函数的参数具有明确的语义,可以用于表征某一块数据的语义信息,因此需要从函数中挑选出具有明确语义的参数;(3. 2. 2)当软件调用函数时,分析函数的参数是否携带确定语义;(3. 2. 3)若参数语义明确,则将参数在内存或者寄存器中的数据设置为污点源;(3. 2. 4)所有的输入参数、输出参数以及返回值均可作为污点源被成功设置。
5.根据权利要求1所述的一种基于动态污点分析进行消息语义解析的方法,其特征在于,观察并记录污点传播过程的方法如下(4. 1)动态污点分析通过分析转移指令,DMA操作,算术操作以及查表指令完成对污点的传播;(4. 2)软件在执行过程中伴随着多次的函数调用,在每次函数调用时,判断函数的参数是否已经被污染;(4. 3)对于未被污染的参数,不做任何操作;(4. 4)对于被污染的参数,利用污点标识,查找到对应污点源,并将被污染的参数信息, 函数信息及其对应的污点标识信息做成结点;(4. 5)将具有相同污点标识的结点根据函数的调用顺序记录下来,对于有多个污点标识的结点而言,在记录时需要将结点按照污点标识分裂成多个具有单一标识的结点; (4. 6)被污染的参数,将作为新的污点源参与到动态污点分析中。
6.根据权利要求1所述的一种基于动态污点分析进行消息语义解析的方法,其特征在于,对目标数据进行污点确认,具体包括(5. 1)对于接收消息而言,在将接收缓冲区设置污点源并观察污点在内存中的传播后, 查看每一个字节的污点源对应的结点,如果某一个结点具有足够的语义来表征污点源,则将结点的赋予该污点源;(5. 2)对于发送消息而言,目标数据为发送缓冲区的数据; 发送消息的污点确认具体如下(5. 2. 1)在软件调用发送函数之前,污点源设置和污点传播过程必须执行完毕; (5. 2. 2)当软件调用发送函数后,利用监控代码获取函数的参数,并根据参数锁定发送缓冲区的位置和区间;(5. 2. 3)判断发送缓冲区中每一个字节是否被污染; (5. 2. 4)利用发送消息语义解析算法进行污点确认。
7.根据权利要求1所述的一种基于动态污点分析进行消息语义解析的方法,其特征在于,发送消息语义解析的具体方法步骤如下(1)扫描发送缓冲区的每一个字节;(2)判断字节是否被污点源污染;(3)若字节被污点源污染且仅含有一个污点标识,则利用该污点标识找到对应的污点源,将污点源的语义赋予该字节;(4)若字节被多个污点源污染,则将这些污点源记录下来,组成一个集合;(5)将污点源传播过程中记录的所有的中间结点也添入集合中;(6)利用语义的不同将集合划分成多个子集合;(7)选取子集合中拥有最多元素的集合,将该集合的语义赋予字节;(8)若同时拥有多个具有最多元素的子集合,则从这些集合中找到软件最晚调用的结点,将结点的语义赋予字节。
全文摘要
本发明公开了一种基于动态污点分析进行消息语义解析的方法。其步骤包括1)设置隔离环境;2)利用动态分析,监控软件的函数调用行为;3)利用动态污点分析进行污点源设置,明确污点分析的源数据;4)观察并记录污点传播过程;5)对目标数据进行污点确认。本发明方法基于隔离机制,通过动态分析监控软件的函数调用行为,并在动态分析中进行动态污点分析,观察污点在软件调用序列中的传播过程,利用污点的传播和函数参数的语义对网络交互中产生的消息进行语义解析,明确消息中每一个字段的语义。
文档编号H04L29/06GK102521543SQ20111043700
公开日2012年6月27日 申请日期2011年12月23日 优先权日2011年12月23日
发明者乔林波, 吴逸伦, 唐勇, 张博锋, 张怡, 赖志权 申请人:中国人民解放军国防科学技术大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1