System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种基于风险代码区域的自动化内存泄漏漏洞挖掘方法技术_技高网
当前位置: 首页 > 专利查询>四川大学专利>正文

一种基于风险代码区域的自动化内存泄漏漏洞挖掘方法技术

技术编号:40940300 阅读:3 留言:0更新日期:2024-04-18 14:57
本发明专利技术提供了一种基于风险代码区域的自动化内存泄漏漏洞挖掘方法,涉及漏洞挖掘技术领域。该方法包括利用静态分析技术提取程序的控制流信息,基于控制流信息构建程序的CG和CFG,并基于CG和CFG完成距离度量的计算,最终完成距离计算桩代码、内存消耗桩代码的插桩工作,并在模糊测试过程中通过桩代码收集程序运行状态,根据运行状态引导新一轮的模糊测试工作。该方法可有效发现程序的内存泄漏漏洞,较于现有工具拥有更高的挖掘效率,且可给出漏洞的POC;此外,基于风险区域的种子调度机制可提升多目标测试场景下的模糊测试效率,有助于提升挖掘效率;通过桩代码收集程序运行状态,进而引导新一轮模糊测试,可使现有技术的盲目性问题得以解决。

【技术实现步骤摘要】

本专利技术涉及漏洞挖掘,特别是涉及一种基于风险代码区域的自动化内存泄漏漏洞挖掘方法


技术介绍

1、目前,有研究人员注意到内存泄漏漏洞被利用后能够发起拒绝服务(denial ofservice,dos)攻击的潜在风险。但大部分致力于检测内存问题的工具都将注意力集中于内存损坏型漏洞,如memlock。作为首个专用于检测程序中内存泄漏漏洞的模糊测试工具,memlock无需任何专业知识就可以自动发现程序中的内存泄漏漏洞。它首先对程序进行静态分析,识别与内存消耗相关的语句并对此类语句进行插桩,从而监控程序运行过程中的内存消耗情况。模糊测试过程中,除覆盖新分支的测试用例会被加入队列中外,导致更多内存消耗的输入也被保留为感兴趣的输入。该机制使得memlock有希望在可接受的时间内产生使得进程内存消耗超过系统可用内存的输入,从而触发内存泄漏漏洞。

2、尽管memlock提出的内存监控与引导机制在检测内存泄漏漏洞方面十分有效,但仍然存在问题:采用的引导机制在实践中存在盲目性。memlock融合afl(americanfuzzylop,一种模糊测试的工具)风格的覆盖率引导机制和内存消耗引导机制,该引导机制虽然能够指导模糊器变异出能够触发内存消耗更为严重的程序路径的测试用例,但触发完全是随机的。换言之,并没有明确的信息告诉模糊器在未探索到的代码区域中,哪些代码区域可能存在内存泄漏漏洞。内存泄漏发生在调用风险函数(risk function,包括malloc、realloc等堆内存操作函数)后由于疏忽或错误导致程序无法继续跟踪已申请的内存空间。显然,只有在调用风险函数后才有可能导致内存泄漏漏洞。然而,在没有发现内存申请操作前,memlock将所有代码区域视为同等重要的,即在模糊测试前期,memlock对于潜在的内存泄漏点是盲目(blind)的,进而会造成大量的无效计算开销。


技术实现思路

1、针对现有技术中存在的技术问题,本专利技术的目的在于提供一种非盲目的。有取向性的内存泄漏点挖掘方法。

2、具体地,为达到上述目的,本专利技术提供了一种基于风险代码区域的自动化内存泄漏漏洞挖掘方法。

3、该方法包括静态分析和模糊测试两部分。

4、s1:静态分析:

5、s11:通过编译器扫描目标程序,收集其内存操作函数的位置信息,构成潜在内存泄漏点的集合pml;

6、s12:收集目标程序的控制流信息,根据程序控制流信息构建程序的函数调用图和各函数的控制流图,即cg(call graph)和cfg(controlflow graph);

7、s13:将pml作为目标点,计算函数距离df(n,tf),

8、

9、式中,df(n,t)为cg中函数n和目标函数t之间最短路径的边数;tf为tf的集合;r(n,tf)为在cg中函数n可达的所有目标函数的集合;

10、计算基本块距离db(m,tb),

11、

12、式中,db(m,t)为cfg中当前基本块m和目标基本块t之间最短路径的边数;tb为目标基本块的集合;n(m)为基本块m的调用函数集合;t为当前基本块m所在函数的所有基本块的集合;db(t,tb)为后继基本块t到集合tb的距离;c为一个放大函数级距离的常系数;

13、s14:对任意潜在内存泄漏点pmli∈pml,确定cg中pmli所在函数节点;从pmli所在函数节点开始,逆向遍历所有前置函数节点并保存至pmli对应的区域集合si;其中,i为序号,i∈i={1,2,3,..};

14、s15:计算区域集合si1和区域集合si2中重叠的基本块的数量占比,若达预设比例,则合并二者,得到风险代码区域;其中,i1∈i,i2∈i,i1≠i2;

15、s16:将基本块的距离计算桩代码、覆盖率收集桩代码、风险区域监控桩代码通过llvm pass插入基本块中,将内存操作hook函数插入内存操作函数调用位置前;

16、s2:模糊测试:

17、s21:将初始用例载入初始测试用例队列;

18、s22:将初始测试用例队列中的各测试用例作为输入运行目标程序,获取运行过程产生的初始状态信息;

19、s23:根据测试用例的初始状态信息中风险代码区域的序号j,将测试用例加入对应的测试用例队列j;

20、s24:选择测试用例队列1;

21、s25:根据被选测试用例队列中各测试用例对应的状态信息,基于测试用例选择算法选择边覆盖率最高、距离最短、内存泄漏量最大的测试用例;

22、s26:基于能量分配算法计算被选测试用例队列接受变异操作的能量,根据变异算法对被选择的测试用例进行对应能量值的变异操作;

23、s27:将经变异操作的测试用例作为输入运行目标程序,获取运行过程产生的变异状态信息;若测试用例获得额外的内存泄漏量,则判定该测试用例触发目标程序中的内存泄漏漏洞;

24、s28:监测被选测试用例队列中的各测试用例是否均执行s25至s26;若是,则根据队列选择算法选择新的测试用例队列;其中,队列选择算法包括:

25、

26、r[j]+=g[j];

27、

28、

29、

30、

31、其中,c[j]为队列j的有效性系数;n[j]为队列j中的测试用例数量;r[j]+为多轮模糊测试过程中,队列j产生兴趣测试用例数量的总和;h[j]为队列i被模糊测试后产生的兴趣测试用例数量;w[j]为队列j的价值衰减系数;n为进行队列选择的次数;a为队列数;n[j]表示队列j被选中次数;v[j]为自适应队列受选系数;p当前队列,即队列j的受选概率;

32、s29:重复s25至s28,直至所有pmli均被触发,或收到终止信号。

33、进一步,该方法还包括:

34、s27中,若测试用例获得边覆盖率的提升或距离的接近,则将其加入触发区域对应的测试用例队列lj;

35、执行s29,获得测试用例队列lj的集合l={l1,l2,l3,...};

36、若存在pmli未被触发,则执行s28,选择测试用例队列lk∈l,k=1,2,3,...,替代初始测试用例队列执行s22至s27。

37、优选地,通过编译器扫描目标程序,收集其内存操作函数的位置信息,包括:

38、编写编译器插件,检测目标程序中的函数调用指令;

39、分析函数调用指令的参数,收集内存操作函数的位置信息;所述内存操作函数包括内存申请函数和内存释放函数,所述位置信息包括内存操作函数所在文件名和所在行数。

40、优选的,控制流信息包括函数调用信息、基本块名称、基本块跳转信息和潜在内存泄漏点所在基本块的位置信息。

41、优选的,s14至s15包括:

42、确定pmli所在函数节点;

...

【技术保护点】

1.一种基于风险代码区域的自动化内存泄漏漏洞挖掘方法,其特征在于,包括:

2.如权利要求1所述的一种基于风险代码区域的自动化内存泄漏漏洞挖掘方法,其特征在于,还包括:

3.如权利要求1所述的一种基于风险代码区域的自动化内存泄漏漏洞挖掘方法,其特征在于,所述通过编译器扫描目标程序,收集其内存操作函数的位置信息,包括:

4.如权利要求1所述的一种基于风险代码区域的自动化内存泄漏漏洞挖掘方法,其特征在于,所述控制流信息包括函数调用信息、基本块名称、基本块跳转信息和潜在内存泄漏点所在基本块的位置信息。

5.如权利要求1所述的一种基于风险代码区域的自动化内存泄漏漏洞挖掘方法,其特征在于,所述S14至S15包括:

6.如权利要求1所述的一种基于风险代码区域的自动化内存泄漏漏洞挖掘方法,其特征在于,所述S16包括:

7.如权利要求1所述的一种基于风险代码区域的自动化内存泄漏漏洞挖掘方法,其特征在于,

【技术特征摘要】

1.一种基于风险代码区域的自动化内存泄漏漏洞挖掘方法,其特征在于,包括:

2.如权利要求1所述的一种基于风险代码区域的自动化内存泄漏漏洞挖掘方法,其特征在于,还包括:

3.如权利要求1所述的一种基于风险代码区域的自动化内存泄漏漏洞挖掘方法,其特征在于,所述通过编译器扫描目标程序,收集其内存操作函数的位置信息,包括:

4.如权利要求1所述的一种基于风险代码区域的自动化内存泄漏漏洞挖掘方法,其特征在...

【专利技术属性】
技术研发人员:邝鸿波贾鹏刘嘉勇谢晨
申请(专利权)人:四川大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1