本发明涉及网络安全,尤其涉及一种基于pin工具的加密算法动态检测方法及系统。
背景技术:
1、本部分的陈述仅仅是提供了与本发明相关的背景技术信息,不必然构成在先技术。
2、基于动态执行的加密算法检测技术利用pin工具,模拟虚拟机运行可执行文件并根据编写的工具,提取可执行文件动态执行时的指令流以及寄存器中的数据流生成跟踪文件,然后对跟踪文件进行调用函数检测,再对调用函数检测信息熵,找到加密算法函数。
3、一般而言,现有的方法是通过pin得到跟踪数据,然后进行循环体识别,再根据循环体的连续内存读取数据和写入数据计算信息熵确定加密算法。目前的基于pin的跟踪数据提取并没有针对利用simd指令优化后的加密算法的识别,没有识别提取xmm,ymm,zmm寄存器中的数据,识别方法比较单一,并没有一个针对绝大部分加密算法的识别方式,因此,加密函数的识别准确率低。
技术实现思路
1、为了解决上述背景技术中存在的技术问题,本发明提供一种基于pin工具的加密算法动态检测方法及系统,本发明增加对利用simd指令和可扩展指令优化后的加密函数的识别,还生成了函数调用框架,利用此框架检测加密函数,提高了识别的效率和准确率。
2、为了实现上述目的,本发明采用如下技术方案:
3、本发明的第一个方面提供一种基于pin工具的加密算法动态检测方法。
4、一种基于pin工具的加密算法动态检测方法,包括:
5、采用pin工具跟踪可执行文件的指令级别,并提取可执行文件动态运行时的指令流和寄存器中的数据,并将这些数据存储到trace文件中;
6、对trace文件中的指令进行检测,得到可执行文件运行期间所有调用函数,将所有调用函数的调用地址以及在trace文件中的起始行数和结束行数,存储在函数调用框架节点中,生成函数调用框架;将所有调用函数地址和调用次数存入函数调用链表中,在每一个存入调用函数地址的节点后,生成新的节点,用于存入此调用函数被调用时在函数调用框架中的节点地址;
7、基于函数调用框架,按照函数调用链表的调用次数由多到少,对调用函数进行循环体检测,然后再对循环体进行信息熵检测,判断信息熵是否满足设定阈值,若是,查找同一调用函数框架下上级及以上的调用函数是否满足加密算法,若是,重复查找同一调用函数框架下上级及以上的调用函数是否为加密算法的过程,直到同级别没有符合加密算法的调用函数,或者没有上级函数,则此调用函数为加密函数;若信息熵不满足设定阈值,则此调用函数为普通函数。
8、进一步地,所述基于函数调用框架,按照函数调用链表的调用次数由多到少,对调用函数进行循环体检测,然后再对循环体进行信息熵检测,判断信息熵是否满足设定阈值,若是,查找同一调用函数框架下上级及以上的调用函数是否满足加密算法,若是,重复查找同一调用函数框架下上级及以上的调用函数是否为加密算法的过程,直到同级别没有符合加密算法的调用函数,或者没有上级函数,则此调用函数为加密函数;若信息熵不满足设定阈值,则此调用函数为普通函数的过程包括:
9、从调用次数最多的调用函数开始查找,对调用函数进行循环体检测,若未发现有循环体,则调用函数为普通函数,若发现循环体,则调用函数疑似加密函数;按照调用次数由多到少在调用函数中重复循环体查找过程,直到检测完整个调用函数文件;
10、检测循环体对内存的读取数据和对应的读取数据内存地址、写入数据以及对应的写入数据内存地址,然后分别对读取数据内存地址的地址大小和写入数据内存地址的地址大小进行排序,找到连续的读取内存段、读取内存段中的数据、连续的写入内存段以及写入内存段中的数据;
11、根据连续的读取内存段、读取内存段中的数据、连续的写入内存段以及写入内存段中的数据,计算写入数据的信息熵和读取数据的信息熵,若信息熵满足设定阈值,则认为此调用函数是加密算法的一个组件,此时还需要再检测此调用函数的同一函数调用框架与此调用函数的上一级调用函数,如果还有其他调用函数符合加密算法,那么再次寻找同一函数调用框架下的上一级其他函数,再次按照上述步骤检测,一直到同级别没有符合加密算法的调用函数,或者没有上级函数,则此函数就是加密函数;若信息熵不满足设定阈值,此调用函数为普通函数。
12、更进一步地,计算写入数据的信息熵和读取数据的信息熵的过程包括:分别将写入数据的信息熵或读取数据的信息熵按照每256字节分为一份,计算此256字节的信息熵,然后采用滑动窗口的方法,每次滑动128字节,再次计算信息熵,对于不足256字节的,按照具体字节计算,最后计算信息熵平均值。
13、进一步地,所述对trace文件中的指令进行检测,得到可执行文件运行期间所有调用函数的过程包括:
14、遍历trace文件寻找call调用指令,并记录call指令对内存的操作地址和在trace文件中的行数并存入函数调用链表的链表节点中;遍历trace文件寻找ret指令,并记录ret指令对内存的操作地址,将call指令对内存的操作地址和ret指令对内存的操作地址进行匹配,若匹配,则找到调用函数,否则,继续遍历下一个ret指令,直到找到ret指令,记录下此ret指令对应的trace文件中的行数,在相匹配的call节点中记录下此ret指令的行数,则call指令行数到ret指令行数之间就是此调用函数,同时记录每个调用函数被调用的次数;如果一直到trace文件末尾也未找到对应的ret指令,则认为这是一次普通跳转,并记录;对记录下的每个节点中的调用函数进行扫描,继续寻找调用函数,直找到最后一个调用函数,同时生成函数调用链表。
15、更进一步地,所述函数调用链表包括:此链表节点包含两个结点指针,分别为down和next,在链表节点中记录下每个调用函数的地址以及被调用次数,并在利用next指针生成后续节点,每个后续节点中记录下此调用函数被调用时在函数调用框架中的节点地址,down指针指向下一个被调用函数,统计完所有的调用函数后,根据被调用次数的大小,按照降序进行排序。
16、进一步地,所述生成函数调用框架的过程包括:对从trace文件提取的调用函数,即为一级调用函数;对从一级调用函数中提取的调用函数,即为二级调用函数,同理,直到得到最后一级调用函数,得到函数调用框架。
17、进一步地,对于使用simd优化的加密算法,需要检测的simd指令,以及对xmm寄存器、ymm寄存器以及zmm寄存器中的数据采用上述相同方法进行分析。
18、本发明的第二个方面提供一种基于pin工具的加密算法动态检测系统。
19、一种基于pin工具的加密算法动态检测系统,包括:
20、动态指令提取模块,其被配置为:采用pin工具跟踪可执行文件的指令级别,并提取可执行文件动态运行时的指令流和寄存器中的数据,并将这些数据存储到trace文件中;
21、函数提取模块,其被配置为:对trace文件中的指令进行检测,得到可执行文件运行期间所有调用函数,将所有调用函数的调用地址以及在trace文件中的起始行数和结束行数,存储在函数调用框架节点中,生成函数调用框架;将所有调用函数地址和调用次数存入函数调用链表中,在每一个存入调用函数地址的节点后,生成新的节点,用于存入此调用函数被调用时在函数调用框架中的节点地址;
22、动态检测模块,其被配置为:基于函数调用框架,按照函数调用链表的调用次数由多到少,对调用函数进行循环体检测,然后再对循环体进行信息熵检测,判断信息熵是否满足设定阈值,若是,查找同一调用函数框架下上级及以上的调用函数是否满足加密算法,若是,重复查找同一调用函数框架下上级及以上的调用函数是否为加密算法的过程,直到同级别没有符合加密算法的调用函数,或者没有上级函数,则此调用函数为加密函数;若信息熵不满足设定阈值,则此调用函数为普通函数。
23、进一步地,所述动态检测模块,还被配置为:
24、从调用次数最多的调用函数开始查找,对调用函数进行循环体检测,若未发现有循环体,则调用函数为普通函数,若发现循环体,则调用函数疑似加密函数;按照调用次数由多到少在调用函数中重复循环体查找过程,直到检测完整个调用函数文件;
25、检测循环体对内存的读取数据和对应的读取数据内存地址、写入数据以及对应的写入数据内存地址,然后分别对读取数据内存地址的地址大小和写入数据内存地址的地址大小进行排序,找到连续的读取内存段、读取内存段中的数据、连续的写入内存段以及写入内存段中的数据;
26、根据连续的读取内存段、读取内存段中的数据、连续的写入内存段以及写入内存段中的数据,计算写入数据的信息熵和读取数据的信息熵,若信息熵满足设定阈值,则认为此调用函数是加密算法的一个组件,此时还需要再检测此调用函数的同一函数调用框架与此调用函数的上一级调用函数,如果还有其他调用函数符合加密算法,那么再次寻找同一函数调用框架下的上一级其他函数,再次按照上述步骤检测,一直到同级别没有符合加密算法的调用函数,或者没有上级函数,则此函数就是加密函数;若信息熵不满足设定阈值,此调用函数为普通函数。
27、更进一步地,所述动态检测模块,还被配置为:计算写入数据的信息熵和读取数据的信息熵的过程包括:分别将写入数据的信息熵或读取数据的信息熵按照每256字节分为一份,计算此256字节的信息熵,然后采用滑动窗口的方法,每次滑动128字节,再次计算信息熵,对于不足256字节的,按照具体字节计算,最后计算信息熵平均值。
28、与现有技术相比,本发明的有益效果是:
29、本发明可以提取可执行文件的动态运行时指令的eip,对内存读写的识别标记,指令汇编名称,操作数,指令对内存操作的地址,通用寄存器数据,xmm寄存器的数据,ymm寄存器中的数据,zmm寄存器中的数据,通过对simd指令集的检测和相应寄存器中数据的匹配,可以对使用simd指令进行加密优化的加密算法进行识别,生成的函数调用框架能提高找到加密函数的准确率和效率。
1.一种基于pin工具的加密算法动态检测方法,其特征在于,包括:
2.根据权利要求1所述的基于pin工具的加密算法动态检测方法,其特征在于,所述基于函数调用框架,按照函数调用链表的调用次数由多到少,对调用函数进行循环体检测,然后再对循环体进行信息熵检测,判断信息熵是否满足设定阈值,若是,查找同一调用函数框架下上级及以上的调用函数是否满足加密算法,若是,重复查找同一调用函数框架下上级及以上的调用函数是否为加密算法的过程,直到同级别没有符合加密算法的调用函数,或者没有上级函数,则此调用函数为加密函数;若信息熵不满足设定阈值,则此调用函数为普通函数的过程包括:
3.根据权利要求2所述的基于pin工具的加密算法动态检测方法,其特征在于,计算写入数据的信息熵和读取数据的信息熵的过程包括:分别将写入数据的信息熵或读取数据的信息熵按照每256字节分为一份,计算此256字节的信息熵,然后采用滑动窗口的方法,每次滑动128字节,再次计算信息熵,对于不足256字节的,按照具体字节计算,最后计算信息熵平均值。
4.根据权利要求1所述的基于pin工具的加密算法动态检测方法,其特征在于,所述对trace文件中的指令进行检测,得到可执行文件运行期间所有调用函数的过程包括:
5.根据权利要求4所述的基于pin工具的加密算法动态检测方法,其特征在于,所述函数调用链表包括:此链表节点包含两个结点指针,分别为down和next,在链表节点中记录下每个调用函数的地址以及被调用次数,并在利用next指针生成后续节点,每个后续节点中记录下此调用函数被调用时在函数调用框架中的节点地址,down指针指向下一个被调用函数,统计完所有的调用函数后,根据被调用次数的大小,按照降序进行排序。
6.根据权利要求1所述的基于pin工具的加密算法动态检测方法,其特征在于,所述生成函数调用框架的过程包括:对从trace文件提取的调用函数,即为一级调用函数;对从一级调用函数中提取的调用函数,即为二级调用函数,同理,直到得到最后一级调用函数,得到函数调用框架。
7.根据权利要求1-6任一项所述的基于pin工具的加密算法动态检测方法,其特征在于,对于使用simd优化的加密算法,需要检测的simd指令,以及对xmm寄存器、ymm寄存器以及zmm寄存器中的数据采用上述相同方法进行分析。
8.一种基于pin工具的加密算法动态检测系统,其特征在于,包括:
9.根据权利要求8所述的基于pin工具的加密算法动态检测系统,其特征在于,所述动态检测模块,还被配置为:
10.根据权利要求9所述的基于pin工具的加密算法动态检测系统,其特征在于,所述动态检测模块,还被配置为:计算写入数据的信息熵和读取数据的信息熵的过程包括:分别将写入数据的信息熵或读取数据的信息熵按照每256字节分为一份,计算此256字节的信息熵,然后采用滑动窗口的方法,每次滑动128字节,再次计算信息熵,对于不足256字节的,按照具体字节计算,最后计算信息熵平均值。
