主要特性
近日,中国人民大学信息学院信息安全实验室智能软件安全研究团队2篇论文被ICSE 2024录用。ICSE全称为International Conference on Software Engineering,是国际公认的软件工程领域旗舰会议,被中国计算机学会(CCF)列为A类会议,每年召开一次,2024年是其第46届会议。
稀有函数是软件系统中调用次数稀少的一类函数,敏感函数则是软件系统中易导柱漏洞的关键函数。本文提出了一种基于上下文的类比推理方法Raisin,来识别软件系统中的稀有敏感函数,其工作流程如图1所示。图1中,上半部分为识别频繁的敏感函数(即调用次数较多的敏感函数),以频繁函数和其上下文函数聚类后的簇作为配对,通过类比推理方法识别出与给定种子函数(如kmalloc)相似的频繁敏感函数。下半部分为识别稀有敏感函数,主要包括:将稀有函数的调用上下文中的稀有函数展开,获取具有更准确嵌入向量的频繁函数作为上下文函数,并对它们做聚类,将每个簇与稀有函数进行配对;对稀有函数分词后的子词进行嵌入,然后基于子词出现频率加权累加计算出各个稀有函数的较高质量的嵌入向量;根据频繁敏感函数的识别结果,提取与敏感操作关联的关键子词,以之过滤稀有函数,使得类比推理仅面向更可能的候选敏感函数。最后,经类比推理识别出的稀有敏感函数被配置到静态漏洞检测工具中,对目标软件系统开展漏洞检测。
对Linux kernel、FreeBSD、OpenSSL、FFmpeg和QEMU等5个大型开源安软件系统展开测试,发现了上万个稀有敏感函数,平均精确率达91%。在Linux和FreeBSD检测发现27个漏洞,其中21个已被内核开发者确认。
现有基于变异的模糊测试方法通常面向输入中的位粒度或字节粒度进行变异以获得测试种子。对于具有较为复杂数据结构或具有复杂内部约束的输入来说,现有方法通常需要花费更多的时间来产生有效的测试种子。本文提出了一种新的方法FuzzInMem来变异与输入相关的内存数据结构,并重用目标程序的逻辑来将编译后的数据结构写回文件中。FuzzInMem的工作流程如图2所示。首先分析目标程序,解析出关键数据结构;然后利用一个合成器来分析源代码并合成出自动变异内存数据结构的代码,这一步会生成新的头文件并重新定义关键数据结构,相比其原始定义,这些重定义的数据结构中某些字段会发生改变以辅助后续的变异;在运行时,监控并劫持目标程序的执行,将关键数据结构转换为重定义的类型并在内存中做变异;利用目标程序常带的内建打印输出功能(如“另存为”)将内存中变异后的数据结构写入满足格式要求的文件中,这些文件将作为后续模糊测试的种子输入。
在15个真实的应用程序上开展测试,FuzzInMem展现出了显著优于多种现有方法工具的性能,在线个全新的漏洞。
黄建军,中国人民大学信息学院硕士生导师,主要研究方向为软件安全性分析,在TSE、ICSE、FSE、CCS、Usenix Security等软件工程和信息安全领域期刊会议发表论文20余篇,曾获ACM SIGSOFT杰出论文奖、CCF科学技术奖自然科学一等奖。