基于二进制熵的模糊测试加解密函数定位方法与流程

文档序号:11476031阅读:474来源:国知局
基于二进制熵的模糊测试加解密函数定位方法与流程

本发明涉及一种基于二进制熵的加解密函数的定位方法,属于信息安全中的二进制漏洞挖掘领域。



背景技术:

软件、协议漏洞可以使攻击者在未授权的情况下对系统进行访问或破坏,严重威胁到信息系统的安全,因此对漏洞问题的研究已成为当下信息安全领域的重要研究内容。目前,利用软件在危害发生前挖掘漏洞已成为行之有效的解决安全漏洞的方法,因此,漏洞挖掘对保护信息系统安全有着至关重要的作用。

模糊测试技术是目前安全领域最常用、综合效果较好的漏洞挖掘方法,该技术通过向目标系统提供随机构造的测试用例(非预期输入,即经过变异的输入数据,该数据随机性强,不可预测性大),监视系统的执行过程是否出现崩溃、挂起或其他异常,判定目标系统是否存在安全问题。但随机构造的测试用例不可预测性大,对于包含加解密函数的目标系统程序,通常由于复杂的运算操作导致测试效果显著降低,比如加解密函数导致数据的格式信息被混淆,使得加密字段的变异仅仅是测试解密函数,却往往测不到加密函数后的主要程序流程。目前解决该问题的有效方法即是定位加解密函数在程序中的位置,因此,本发明将提供一种基于二进制熵的方法对加解密函数在程序中的位置进行定位。

目前定位加解密函数的常用方法主要有四类:

1.人工分析定位

这种方法主要针对非公开协议,由经验丰富的分析人员分析输入字段,从而确定加解密函数的位置。但很多程序使用私有加密算法或经过代码混淆,协议包含大量未知字段和变长字段,难以准确定位加解密函数位置,而且持续时间长,效果却不尽人意,因此人工分析方法定位加解密函数的的代价越来越高。

2.静态分析定位

这种方法通过定位算法对加解密函数进行自动定位。虽然该方法的定位算法比较稳定、精确度高、资源消耗少,但由于无法获得程序运行时的信息流数据,只能判定是否存在某种算法,即使定位到加解密函数的位置也无法进行模糊测试;过度依赖于算法模式匹配,由于是通过算法特征片段的签名进行模式匹配,所以对于更新签名后的算法或未知算法该方法的判断效果较差;无法检测经过加密、混淆的程序和数据。

3.基于流量的分析定位

该方法主要通过报文各字节的变化规律和频率提取协议信息,平台通用性较高,但只能判定是否包含加解密函数,无法获得程序运行时的函数定位信息,因此难以应用到二进制程序的模糊测试中。

4.基于动态的定位

该方法采用符号执行、反调试等手段获得动态执行过程中的控制流信息,采用污点跟踪获得信息流信息,通过分析控制流信息、信息流信息、程序行为和汇编指令特征,定位加解密函数的位置,但容易受哈希等其他运算的影响,导致定位不准确。

综上所述,加解密函数定位方法中人工分析和静态定位的缺点较为明显,实用价值较小;流量分析法只能确定有无加解密函数,无法在程序中定位,而动态定位法易受到哈希等其他的影响,导致定位不准确。所以本发明提出了一种基于二进制熵的加解密函数定位方法,用于定位程序的加解密函数,并在二进制程序中具有良好的效果。



技术实现要素:

本发明的目的是为解决模糊测试中加解密函数的定位能力不足、尤其是区分加解密与其他类似运算易出现误判的问题,提出一种基于二进制熵的加解密函数定位方法。

本发明的设计原理为:观察关键内存位置的指令特征,若发现疑似加解密运算后,进行动态分析,取出敏感操作对应的一段连续内存,分别对其进行流密码分析和块密码分析,因为加解密函数与哈希算法的指令特征非常相似,所以为排除哈希算法对加密判断的影响,进行哈希运算检测。由于可能存在其他私有的加解密方法,再对上述结果进行二进制熵分析,最后通过综合判定定位加解密函数的位置。

本发明的技术方案是通过以下步骤实现的:

步骤1,动态插桩,依靠运算指令特征,寻找基本块(有且只有一个出口和入口的语句序列)并定位,在连续内存区域取出关键内存信息。

步骤1.1,运行被测程序,通过二进制指令插桩工具检测该程序,遇到跳转指令如call、jmp等时,认定之前的语句序列为一个基本块。

步骤1.2,建立一个外部文件,记录所有基本块的入口地址(eip指针寄存器的数值)。

步骤1.3,程序结束前重复以上步骤,则可获取所有路径信息,通过路径信息定位基本块后,在连续内存区域取出关键内存信息。

步骤2,对关键内存信息进行哈希运算检测、块密码分析、流密码分析,具体方法如下:

步骤2.1,对关键内存信息进行哈希运算检测,设置判断某路径的各基本块的汇编指令比例(算数指令在基本块中的占比)的阈值为55%(不可变),初步确定哈希计算位置后对此处进行反向追踪寄存器,通过变异输入数据集input,检测输出集output的变化,若寄存器间是低输入依赖(修改输入集数据的任意一个比特,输出数据变化的比特比例小于50%),则此基本块为哈希计算。

步骤2.2,对关键内存信息进行块密码分析,修改输入数据集input中任意一位比特位,观测output数据集中是否存在以字节为单位的某个子集全部被修改且大小不定,排除哈希运算后若存在则判定此基本块为块密码,若不是则进行流密码分析。

步骤2.3,对关键内存信息进行流密码分析,通过对输入数据集input进行依次变异,检测输出集output的变化,二者间是否存在弱相关关系,若存在则判定此基本块为流密码。

步骤3,对步骤2中的结果进行二进制熵分析,输出加解密函数判决。具体方法为:

步骤3.1,使用同一路径下多次动态跟踪的方法,获得较大样本,统计函数执行路径信息,调出路径相同的几次执行的输入数据,取其平均数为标准,以字节为单位统计每个字符的出现频率pi并计算输入数据的平均熵

步骤3.2,根据块密码、流密码分析得到的输出集output,并计算输出数据的平均熵

步骤3.3,定义输出熵值和输入熵值的比值为rio,输出熵值和极限熵hlimit之间的比值为rol,对rio和rol作联合判决,当rio大于加密阈值the,同时小于混乱度阈值thc时,可以判定该程序段是做加解密操作。此过程的相关计算公式如下。

二进制熵的计算公式为:

其中,k为1,m为输入数据字符种类数,本方法中取m为255,pi是某元素出现的概率,log是以2为底的对数。

rio的计算公式为:

rol的计算公式为:

其中,nii表示输入集中第i种字符的个数;noi表示输出集中第i种字符的个数;n表示输入集的字节数;u和v表示内存中输出集的取值区间;c表示输出集的总长度;hlimit表示一个字节下的极限熵。

有益效果

相比于现有的加解密函数定位方法,本发明采用的基于二进制熵的定位方法,不仅能判断函数中是否存在加解密,还能排除其它计算函数的干扰,精确定位加解密函数,并且适用于二进制程序,有助于提高模糊测试的覆盖率。

以上特点使本发明更加适用于模糊测试情景中,因为模糊测试需要运行大量的测试用例,而本发明可以插入到模糊测试的流程中,充分利用这些测试用例对目标系统进行检测。

附图说明

图1为本发明基于二进制熵的加解密函数定位原理图;

图2为本发明中块密码判断流程图;

图3为本发明中哈希运算检测流程图。

具体实施方式

为了进一步阐述本发明的目的和优点,下面通过具体实例对本发明方法的实施过程进行详细说明。

步骤1,定位基本块,获取关键内存信息。具体方法为:由于afl模糊测试框架测试速度快、体量小等优点,选其作为开发平台,并选择基于二进制的测试方法,使用qemu(二进制指令插桩工具)监控二进制程序,进行动态插桩。给出初始输入数据作为初始变异样本i,使用afl测试工具加载并运行被测程序一段时间,根据数据库中的运算指令特征,并使用qemu检测该程序,在程序内寻找符合特征的基本块,根据已记录的基本块的路径信息,获取i中对应的input输入数据集,以及直接定位该基本块的位置,寻找连续的内存数据,建立输出数据集output。

步骤2,依次进行哈希、块密码、流密码分析。具体方法为:统计哈希计算中output数据集中每一位数值,并统计当input数据集中一位改变时output的哪些字段随之改变,设定雪崩阈值(输入数据修改任意一个比特,输出数据变化的比特位数所占比例)t为45%~55%,并检测在阈值范围内的output数据集大小是否为常数,重复此过程5次后取平均值;重复上述的统计步骤次数5次以内,若存在强相关关系,则判定为块密码;若不存在强相关关系,重复上述的统计步骤10次以内,若存在弱相关关系的数位达到雪崩阈值t≥95%,则判定为流密码。

步骤3,根据步骤2生成的output数据集进行二进制熵检测。具体方法为:统计函数执行后的路径信息,调出路径相同的几次执行的输入数据,取其平均数为标准,以字节为单位统计每个字符的出现频率并计算输入数据的平均熵根据块密码、流密码分析得到的输出集output,并计算输出的平均熵定义输出熵值和输入熵值的比值为rio,输出熵值和极限熵hlimit之间的比值为rol,对rio和rol作联合判决,当rio大于加密阈值the,同时小于混乱度阈值thc时,可以判定该程序段是做加密操作,且在熵值计算中取可信输入长度为1200字节。根据多次统计结果,在rio≥1.30,rol≥0.98时,且输入与输出字节间的混乱度满足强相关关系时,判定本次检测为块加密;在rio≥1.20,rol≥0.85,输入与输出之间是弱相关关系,则判定为流密码;一些其他计算方法由于加密程度不高,rio和rol都相对较小。

测试结果

实验对目标程序中的加解密函数进行定位与检测,结果显示,本发明可以对程序中的加解密算法进行准确定位,总体准确率达到93.75%,能够准确区分被测程序中的普通运算和加解密运算,并且定位过程中的空间消耗明显减少,只需几十兆内存空间即可对上百兆程序的加解密函数进行定位,远小于其他方法,且离线分析时工作量降低。相比于其它方法,本发明适用于二进制程序,不仅能判断加解密函数的存在性,还能准确定位加解密函数,具有较高的准确率,并且具有较低的空间消耗。

以上所述的具体描述,对发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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