一种基于动态污点分析对加密应用的明文提取的系统的制作方法

文档序号:11262106阅读:215来源:国知局
一种基于动态污点分析对加密应用的明文提取的系统的制造方法与工艺

本发明涉及网络安全技术领域,更具体地,涉及一种基于动态污点分析对加密应用的明文提取的系统。



背景技术:

近年来,随着互联网的高速发展,应用程序每天成千上万地出现,而为了通信安全,大部分客户端的应用程序与服务器端之间又会使用加密协议。加密协议除了常见的、标准的应用层协议,比如https、sftp,还出现大量私有加密协议。对于使用这些加密协议客户端软件的电脑用户来说,他们并不知道其在后台所处理的加密报文是什么,从而不知道其是否会有一些隐秘的动作,比如窃取电脑里面的个人隐私信息、自动下载某些有害的代码和指向第三方网站等等,这些动作都是伤害到电脑用户的切身利益。

因此,如果针对这些使用加密协议的客户端软件,能够逆向解析出它所处理的加密报文的明文信息,这样便可以对加密协议明文内容的分析和加密协议格式的逆向解析,从而提高对加密应用的安全性监控。



技术实现要素:

本发明为克服上述现有技术所述的至少一种缺陷,提供一种基于动态污点分析对加密应用的明文提取的系统。

本发明旨在至少在一定程度上解决上述技术问题。

本发明的首要目的是提供一种对加密应用中逆向解析它的处理的加密报文的明文信息,以提高对加密应用的安全性监控。

为解决上述技术问题,本发明的技术方案如下:一种基于动态污点分析对加密应用的明文提取的系统,包括污点数据源定位模块、动态污点分析模块、指令分析模块和内存行为分析模块,其中:污点数据源定位模块,用于拦截加密应用的系统调用,获取系统调用中加密报文的内存地址,并对其进行污点数据源的标记;动态污点分析模块,用于追踪有污点标记的数据源,并从污点数据源中逆向获取对其进行操作的指令执行轨迹;指令分析模块,用于解析所获取的对污点数据进行操作的指令执行轨迹,区分污点数据的报文解密和报文处理阶段;内存行为分析模块,用于根据加密调用指令中加密报文的内存读写行为信息,获取污点数据在报文解密阶段进行写操作且在报文处理阶段进行读操作的内存地址,并从该内存地址中提取解密后的明文信息。

优选地,对有污点标记的数据源的追踪包括源操作数为内存的污点追踪、目的操作数为内存的污点追踪、源操作数为寄存器的污点追踪和目的操作数为寄存器的污点追踪,所述动态污点分析模块包括:源操作数为内存的判断单元,用于判断加密调用指令中源操作数是否包含加密报文的内存地址;源操作数为内存的污点追踪单元,用于若源操作数为内存的判断单元判断为是,则进行源操作数为内存的污点追踪;目的操作数为内存的判断单元,用于若源操作数为内存的判断单元判断为否时,判断加密调用指令中目的操作数是否包含加密报文的内存地址;目的操作数为内存的污点追踪单元,用于若目的操作数为内存的判断单元判断为是,则进行目的操作数为内存的污点追踪;源操作数为寄存器的判断单元,用于若目的操作数为内存的判断单元为否时,判断加密调用指令中的源操作数是否为寄存器;源操作数为寄存器的污点追踪单元,用于若源操作数为寄存器的判断单元判断为是,则进行源操作数为寄存器的污点追踪;目的操作数为寄存器的判断单元,用于若源操作数为寄存器的判断单元判断为否时,判断加密调用指令中目的操作数是否为寄存器;目的操作数为寄存器的污点追踪单元,用于若目的操作数为寄存器的判断单元判断为是,则进行目的操作数为寄存器的污点追踪。

优选地,源操作数为内存时包括目的操作数为寄存器的情形和目的操作数不存在的情形,所述源操作数为内存的污点追踪单元包括:第一追踪记录子单元,用于若内存标记为已污染,寄存器标记为已污染时,则追踪记录加密调用指令;还用于若内存标记为已污染,寄存器标记为未污染时,则追踪记录加密调用指令;还用于若内存标记为已污染,目的操作数不存在时,则追踪记录加密调用指令;第一追踪标记子单元,用于若内存标记为已污染,寄存器标记为未污染时,则追踪标记该寄存器为已污染;还用于若内存标记为未污染,寄存器标记为已污染,则追踪标记该寄存器为未污染。

优选地,目的操作数为内存时包括源操作数为寄存器的情形和源操作数为立即数的情形,所述目的操作数为内存的污点追踪单元包括:第二追踪记录子单元,用于若寄存器标记为已污染,内存标记为已污染时,则追踪记录加密调用指令;还用于若寄存器标记为已污染,内存标记为未污染时,则追踪记录加密调用指令;第二追踪标记子单元,用于若寄存器标记为已污染,内存标记为未污染时,则追踪标记该内存为已污染;还用于若寄存器标记为未污染,内存标记为已污染,则追踪标记该内存为未污染;还用于若源作数为立即数,内存标记为已污染,则追踪标记该内存为未污染。

优选地,源操作数为寄存器时包括目的操作数为寄存器的情形和目的操作数不存在的情形,所述源操作数为寄存器的污点追踪单元包括:第三追踪记录子单元,用于若源寄存器标记为已污染,目的寄存器标记为已污染,则追踪记录加密调用指令;还用于若源寄存器标记为已污染,目的寄存器标记为未污染,则追踪记录加密调用指令;还用于若源寄存器标记为已污染,目的操作数不存在,则追踪记录加密调用指令;第三追踪标记子单元,用于若源寄存器标记为已污染,目的寄存器标记为未污染,则追踪标记目的寄存器为已污染;若源寄存器标记为未污染,目的寄存器标记为已污染,则追踪标记目的寄存器为未污染。

优选地,目的操作数为寄存器时,存在源操作数为立即数的情形,所述目的操作数为寄存器的污点追踪单元包括:第四追踪标记子单元,用于若源操作数为立即数,目的寄存器标记为已污染,则追踪标记目的寄存器为未污染。

优选地,所述指令分析模块包括指令解析单元、报文解密与报文处理的区分单元,其中:指令解析单元,用于确定报文解密和报文处理的指令的大概位置;报文解密与报文处理的区分单元,用于结合指令解析单元所确定的结果,采用滑动窗口技术来具体确定报文解密和报文处理的指令。

优选地,所述内存行为分析模块包括内存读写行为单元、获取单元和提取单元,其中:内存读写行为单元,用于定义一个全局变量,并动态跟踪加密应用对内存的分配和释放,分配内存则加入全局变量中,释放内存则从全局变量里移除;获取单元,用于在报文解密阶段,若有指令对内存进行写操作,则在全局变量中找到该内存缓冲区,并将其状态标记为已污染,在报文处理阶段,若有指令对内存进行读操作,则在全局变量中找到该内存缓冲区,若该内存缓冲区的状态标记为已污染,则获取该内存地址;提取单元,用于从所获取的内存地址提取解密后的明文信息。

与现有技术相比,本发明技术方案的有益效果是:针对使用加密协议的客户端软件,提供了一种对加密应用的明文提取的系统,这样便可以对加密协议明文内容的分析和加密协议格式的逆向解析,从而提高对加密应用的安全性监控。

附图说明

图1为本申请发明的一实施例的功能模块图;

图2为本发明的动态污点分析模块的细化功能模块图;

图3为本发明的源操作数为内存的污点追踪单元的细化功能模块图;

图4为本发明目的操作数为内存的污点追踪单元的细化功能模块图;

图5为本发明源操作数为寄存器的污点追踪单元的细化功能模块图;

图6为本发明指令分析模块的细化功能模块图;

图7为本发明的内存行为分析模块的细化功能模块图;

图8为本发明的动态污点分析模块流程示意图;

图9为本发明的内存行为分析模块流程示意图;

图10为本发明的实景测试中指令解析单元所构建的折线图;

图11为本发明的实景测试中报文解密与报文处理的区分单元所构建的散点图。

具体实施方式

附图仅用于示例性说明,不能理解为对本专利的限制;为了更好说明本实施例,附图某些部件会有省略、放大或缩小,并不代表实际产品的尺寸;相同或相似的标号对应相同或相似的部件;对于本领域技术人员来说,附图中某些公知结构及其说明可能省略是可以理解的。

下面结合附图和实施例对本发明的技术方案做进一步的说明。

如图1所示,本发明公开了一种基于动态污点分析对加密应用的明文提取的系统,包括污点数据源定位模块01、动态污点分析模块02、指令分析模块03和内存行为分析模块04,其中:污点数据源定位模块01,用于拦截总系统的加密调用指令,获取加密调用指令中加密报文的内存地址,并对其进行污点数据源的标记;动态污点分析模块02,用于追踪有污点标记的数据源,并从污点数据源中逆向获取对其进行操作的指令执行轨迹;指令分析模块03,用于解析所获取的对污点数据进行操作的指令执行轨迹,区分污点数据的报文解密和报文处理阶段;内存行为分析模块04,用于根据加密调用指令中加密报文的内存读写行为信息,获取污点数据在报文解密阶段进行写操作且在报文处理阶段进行读操作的内存地址,并从该内存地址中提取解密后的明文信息。

在本实施例中,本发明通过动态污点分析技术,找到加密应用存储加密报文解密后的明文的内存,从而提取出解密后的明文。因此本发明提取出加密应用的明文,便于对加密协议明文内容的分析和加密协议格式的逆向解析,提高对加密应用的安全性监控。

需要说明一下地是,污点数据源定位模块01用于拦截加密应用的系统调用,获取系统调用中加密应用在读取加密报文时存储内存的起始地址和大小,并对该内存地址进行污点数据源的标记。具体执行流程如下:1)拦截系统调用,若该系统调用为从文件描述符或网络套接字中读数据的系统调用,则进行下一步分析;否则返回重新拦截系统调用;2)定位污点数据源,从该系统调用的输入参数和返回参数中获取加密应用在读取加密报文时存储内存的起始地址和大小,并对该内存地址进行污点数据源的标记。

如图2-5和图8所示,进一步地,对有污点标记的数据源的追踪包括源操作数为内存的污点追踪、目的操作数为内存的污点追踪、源操作数为寄存器的污点追踪和目的操作数为寄存器的污点追踪,所述动态污点分析模块02包括:源操作数为内存的判断单元021,用于判断加密调用指令中源操作数是否包含加密报文的内存地址;源操作数为内存的污点追踪单元022,用于若源操作数为内存的判断单元判断为是,则进行源操作数为内存的污点追踪;目的操作数为内存的判断单元023,用于若源操作数为内存的判断单元判断为否时,判断加密调用指令中目的操作数是否包含加密报文的内存地址;目的操作数为内存的污点追踪单元024,用于若目的操作数为内存的判断单元判断为是,则进行目的操作数为内存的污点追踪;源操作数为寄存器的判断单元025,用于若目的操作数为内存的判断单元为否时,判断加密调用指令中的源操作数是否为寄存器;源操作数为寄存器的污点追踪单元026,用于若源操作数为寄存器的判断单元判断为是,则进行源操作数为寄存器的污点追踪;目的操作数为寄存器的判断单元027,用于若源操作数为寄存器的判断单元判断为否时,判断加密调用指令中目的操作数是否为寄存器;目的操作数为寄存器的污点追踪单元028,用于若目的操作数为寄存器的判断单元判断为是,则进行目的操作数为寄存器的污点追踪。

进一步地,源操作数为内存时包括目的操作数为寄存器的情形和目的操作数不存在的情形,所述源操作数为内存的污点追踪单元022包括:第一追踪记录子单元0221,用于若内存标记为已污染,寄存器标记为已污染时,则追踪记录加密调用指令;还用于若内存标记为已污染,寄存器标记为未污染时,则追踪记录加密调用指令;还用于若内存标记为已污染,目的操作数不存在时,则追踪记录加密调用指令;第一追踪标记子单元0222,用于若内存标记为已污染,寄存器标记为未污染时,则追踪标记该寄存器为已污染;还用于若内存标记为未污染,寄存器标记为已污染,则追踪标记该寄存器为未污染。

进一步地,目的操作数为内存时包括源操作数为寄存器的情形和源操作数为立即数的情形,所述目的操作数为内存的污点追踪单元024包括:第二追踪记录子单元0241,用于若寄存器标记为已污染,内存标记为已污染时,则追踪记录加密调用指令;还用于若寄存器标记为已污染,内存标记为未污染时,则追踪记录加密调用指令;第二追踪标记子单元0242,用于若寄存器标记为已污染,内存标记为未污染时,则追踪标记该内存为已污染;还用于若寄存器标记为未污染,内存标记为已污染,则追踪标记该内存为未污染;还用于若源作数为立即数,内存标记为已污染,则追踪标记该内存为未污染。

进一步地,源操作数为寄存器时包括目的操作数为寄存器的情形和目的操作数不存在的情形,所述源操作数为寄存器的污点追踪单元026包括:第三追踪记录子单元0261,用于若源寄存器标记为已污染,目的寄存器标记为已污染,则追踪记录加密调用指令;还用于若源寄存器标记为已污染,目的寄存器标记为未污染,则追踪记录加密调用指令;还用于若源寄存器标记为已污染,目的操作数不存在,则追踪记录加密调用指令;第三追踪标记子单元0262,用于若源寄存器标记为已污染,目的寄存器标记为未污染,则追踪标记目的寄存器为已污染;若源寄存器标记为未污染,目的寄存器标记为已污染,则追踪标记目的寄存器为未污染。

进一步地,目的操作数为寄存器时,存在源操作数为立即数的情形,所述目的操作数为寄存器的污点追踪单元028包括:第四追踪标记子单元,用于若源操作数为立即数,目的寄存器标记为已污染,则追踪标记目的寄存器为未污染。

在本实施例中,运用动态污点分析技术,通过对源操作数为内存的污点追踪、目的操作数为内存的污点追踪、源操作数为寄存器的污点追踪和目的操作数为寄存器的污点追踪这四个情形来获得只对污点数据进行操作的指令执行轨迹。

具体执行流程如下(为了方便描述,1代表已污染,0代表未污染):1)源操作数为内存的污点追踪

当源操作数为内存时,存在两种情形:目的操作数为寄存器(如movrdx,qwordptr[rsp])、不存在目的操作数(如cmpal,byteptr[rbx+rdx*1]),具体处理如下:

a)如果内存为1,寄存器为1,则记录下此指令。

b)如果内存为1,寄存器为0,则标记此寄存器为1,且记录下此指令。

c)如果内存为1,无目的操作数,则记录下此指令。

d)如果内存为0,寄存器为1,则标记此寄存器为0。

e)如果内存为0,寄存器为0,则无需任何操作。

f)如果内存为0,无目的操作数,则无需任何操作。

2)目的操作数为内存的污点追踪

当目的操作数为内存时,存在两种情形:源操作数为寄存器(如movqwordptr[rsp],rdx)、源操作数为立即数(如movbyteptr[rsp],0xfa),具体处理如下:

a)如果寄存器为1,内存为1,则记录下此指令。

b)如果寄存器为1,内存为0,则标记此内存为1,且记录下此指令。

c)如果寄存器为0,内存为1,则标记此内存为0。

d)如果寄存器为0,内存为0,则无需任何操作。

e)如果源操作数为立即数,内存为1,则标记此内存为0。

f)如果源操作数为立即数,内存为0,则无需任何操作。

3)源操作数为寄存器的污点追踪

在前面第1)和2)步骤执行后,当源操作数为寄存器时,还存在两种情形:目的操作数为寄存器(如movrdx,rcx)、无目的操作数(如cmpal,0x2),具体处理如下:

a)遍历所有源寄存器,如果存在源寄存器为1,目的寄存器为1,则记录下此指令。

b)遍历所有源寄存器,如果存在源寄存器为1,目的寄存器为0,则标记目的寄存器为1,且记录下此指令。

c)遍历所有源寄存器,如果存在源寄存器为1,无目的操作数,则记录下此指令。

d)遍历所有源寄存器,如果所有源寄存器均为0,目的寄存器为1,则标记目的寄存器为0。

e)遍历所有源寄存器,如果所有源寄存器均为0,目的寄存器为0,则无需任何操作。

f)遍历所有源寄存器,如果所有源寄存器均为0,无目的操作数,则无需任何操作。

4)目的操作数为寄存器的污点追踪

在前面第1)、2)和3)步骤执行后,当目的操作数为寄存器时,还存在一种情形:源操作数为立即数(如moval,0x2),具体处理如下:

a)如果源操作数为立即数,目的寄存器为1,则标记此寄存器为0。

b)如果源操作数为立即数,目的寄存器为0,则无需任何操作。

如图6和图9所示,进一步地,所述指令分析模块03包括指令解析单元031、报文解密与报文处理的区分单元032,其中:指令解析单元031,用于确定报文解密和报文处理的指令的大概位置;报文解密与报文处理的区分单元032,用于结合指令解析单元031所确定的结果,采用滑动窗口技术来具体确定报文解密和报文处理的指令。

在本实施例中,指令分析模块03用于分析指令执行轨迹,通过使用算术运算类指令和逻辑操作类指令的百分比、时间窗口技术来区分“报文解密”和“报文处理”阶段,具体执行流程如下:

(1)计算出算术运算类指令和逻辑操作类指令占总指令的百分比。比如,第n个指令,就计算出前n个指令中,算术运算类指令和逻辑操作类指令占总指令的百分比。由此,x轴为指令数,y轴为算术运算类指令和逻辑操作类指令占总指令的百分比,得到一个折线图。在此折线图中,最高点和最低点之间,必定包含“报文解密”和“报文处理”阶段之间的转折点。

(2)针对于最高点的指令和最低点的指令之间的指令,采用滑动窗口技术来计算算术运算类指令和逻辑操作类指令占该窗口指令数的百分比,滑动窗口技术是指:维持一个包含固定指令数量的窗口,计算窗口内算术运算类指令和逻辑操作类指令占该滑动窗口指令数的百分比,该窗口从第一条指令开始,每移动一条指令计算一次。由此,以指令数为x轴,以算术运算类指令和逻辑操作类指令占该窗口指令数的百分比为y轴,得到一个散点图,经实验测试得知:在此散点图中,当这百分比低于某个阈值时,则前一个滑动窗口内的指令有一半以上属于这个加密应用中调用的指令函数,该指令函数就是报文解密和报文处理阶段之间的转折点。通过多次实验研究,本发明将滑动窗口设定为30条指定数,阈值设定为50%为最佳。

实景测试:如图10所示的指令折线图,该图是本发明监控某加密应用处理https加密报文时,指令解析单元生成的折线图,图中表明报文解密和报文处理的转折点在函数gcm_ghash_avx和函数ngx_http_process_request之间。先在指令解析单元031构建的折线图中确定报文解密和报文处理的指令的大概位置在函数gcm..和ngx..之间,又如图11所示的指令散点图,该图是本发明监控某加密应用处理https加密报文时,报文解密与报文处理的区分单元生成的散点图,图中表明报文解密和报文处理的转折点是函数gcm_ghash_avx。结合指令解析单元031所确定的结果,再在报文解密与报文处理的区分单元032构建的散点图中具体地确定指令。

进一步地,所述内存行为分析模块04包括内存读写行为单元041、获取单元042和提取单元043,其中:内存读写行为单元041,用于定义一个全局变量,并动态跟踪加密应用对内存的分配和释放,分配内存则加入全局变量中,释放内存则从全局变量里移除;获取单元042,用于在报文解密阶段,若有指令对内存进行写操作,则在全局变量中找到该内存缓冲区,并将其状态标记为已污染,在报文处理阶段,若有指令对内存进行读操作,则在全局变量中找到该内存缓冲区,若该内存缓冲区的状态标记为已污染,则获取该内存地址;提取单元043,用于从所获取的内存地址提取解密后的明文信息。

在本实施例中,内存行为分析模块04用于分析内存的读写行为信息,找到在“报文解密”阶段进行写操作而且在“报文处理”阶段进行读操作的内存,从而提取出解密后的明文信息。具体执行流程如下:

1)内存分配和释放的跟踪

定义一个全局变量memorylist并动态跟踪加密应用对内存的分配和释放,分配内存则加入全局变量memorylist中,释放内存则从全局变量memorylist里移除。

2)“报文解密”阶段的分析

若有指令对内存进行写操作,则在全局变量memorylist中找到该内存缓冲区,并将其状态标记为1(已污染)。因为加密应用在对加密报文进行解密时,其解密后的明文必定会存入内存缓冲区中。

3)“报文处理”阶段的分析

若有指令对内存进行写操作,则在全局变量memorylist中找到该内存缓冲区,并将其状态标记为0(未污染)。因为加密应用在“报文处理”阶段一定是从内存中读取上一阶段“报文解密”得到的明文并进行相应的处理,如果该内存是被写入数据,就不可能是解密后的明文存储的位置。

若有指令对内存进行读操作,则在全局变量memorylist中找到该内存缓冲区,若该内存缓冲区的状态为1(已污染)则将其输出。对于在“报文处理”阶段进行读操作的内存,需要说明一下地是,只需要关注第一个被读取的内存缓冲区,因为该内存缓冲区就是存储解密后的明文的位置。

显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明权利要求的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1