温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
基于
函数
摘要
二进制
程序
污点
分析
优化
方法
杨盼
2023 年 4 月 Chinese Journal of Network and Information Security April 2023 第 9 卷第 2 期 网络与信息安全学报 Vol.9 No.2 基于函数摘要的二进制程序污点分析优化方法 杨盼,康绯,舒辉,黄宇垚,吕小少(数字工程与先进计算国家重点实验室,河南 郑州 450001)摘 要:污点分析是一种常用的软件分析方法,在信息安全领域有较多的应用。现有的二进制程序动态污点分析大多采用指令级插桩的分析方法,通常会产生巨大的性能开销,使得程序执行效率大幅度降低,难以在复杂恶意样本和商业软件分析环境中有效应用。为了提升污点分析效率,降低指令级插桩分析带来的性能损耗,使污点分析更加广泛地应用在软件分析中,提出了基于函数摘要的二进制程序污点分析优化方法。所提方法使用函数污点传播规则代替指令污点传播规则,以减少数据流传播分析次数,有效提升污点分析效率。对于函数摘要,提出了函数摘要的定义;研究了不同函数结构的摘要生成算法。在函数内部,针对非循环结构,设计了路径敏感的分析方法;针对循环结构,设计了有限迭代的分析方法,将这两种分析方法相结合,解决混合结构函数的函数摘要生成。在函数摘要生成算法研究的基础上,进一步设计实现了由函数摘要生成模块、数据流记录模块、污点分析模块 3 个部分构成的通用污点分析框架FSTaint。对 FSTaint 的分析效率进行了评估,在分析真实 APT 恶意样本中,FSTaint 的污点分析效率是 libdft 的 7.75 倍,分析效率较高;在准确性方面,FSTaint 相对 libdft 在传播规则的准确性、完备性等方面也有所提高。关键词:函数摘要;污点分析;数据流分析;FSTaint 中图分类号:TP393 文献标志码:A DOI:10.11959/j.issn.2096109x.2023026 Binary program taint analysis optimization method based on function summary YANG Pan,KANG Fei,SHU Hui,HUANG Yuyao,LYU Xiaoshao State Key Laboratory of Mathematical Engineering and Advanced Computing,Zhengzhou 450001,China Abstract:Taint analysis is a popular software analysis method,which has been widely used in the field of information security.Most of the existing binary program dynamic taint analysis frameworks use instruction-level instrumentation analysis methods,which usually generate huge performance overhead and reduce the program execution efficiency by several times or even dozens of times.This limits taint analysis technologys wide usage in 收稿日期:20210830;修回日期:20220622 通信作者:康绯, 基金项目:国家重点研发计划(2019QY1300)Foundation Item:The Key R&D Program of China(2019QY1300)引用格式:杨盼,康绯,舒辉,等.基于函数摘要的二进制程序污点分析优化方法J.网络与信息安全学报,2023,9(2):115-131.Citation Format:YANG P,KANG F,SHU H,et al.Binary program taint analysis optimization method based on functionsummaryJ.Chinese Journal of Network and Information Security,2023,9(2):115-131.116 网络与信息安全学报 第 9 卷 complex malicious samples and commercial software analysis.An optimization method of taint analysis based on function summary was proposed,to improve the efficiency of taint analysis,reduce the performance loss caused by instruction-level instrumentation analysis,and make taint analysis to be more widely used in software analysis.The taint analysis method based on function summary used function taint propagation rules instead of instruction taint propagation rules to reduce the number of data stream propagation analysis and effectively improve the efficiency of taint analysis.For function summary,the definition of function summary was proposed.And the summary generation algorithms of different function structures were studied.Inside the function,a path-sensitive analysis method was designed for acyclic structures.For cyclic structures,a finite iteration method was designed.Moreover,the two analysis methods were combined to solve the function summary generation of mixed structure functions.Based on this research,a general taint analysis framework called FSTaint was designed and implemented,consisting of a function summary generation module,a data flow recording module,and a taint analysis module.The efficiency of FSTaint was evaluated in the analysis of real APT malicious samples,where the taint analysis efficiency of FSTaint was found to be 7.75 times that of libdft,and the analysis efficiency was higher.In terms of accuracy,FSTaint has more accurate and complete propagation rules than libdft.Keywords:function summary,taint analysis,data flow analysis,FSTaint 0 引言 污点分析1作为一种常用的软件分析方法,在信息安全领域有较多的研究和使用,典型的应用包括恶意代码分析2-3、软件脆弱性分析4-7和网络攻击行为检测8-9等。二进制程序动态污点分析技术虽然已有多年的研究,但是动态跟踪污点数据带来的程序执行效率严重下降,使得现有污点分析框架很难应用于商业软件或者大规模的恶意样本分析。在动态污点分析中,大多会使用到动态二进制插桩程序技术(如 Pin10、Dynamorio11等),对于任意一条指令,污点分析执行时间包括 3 个部分,即程序指令执行时间、插桩程序执行时间、污点传播分析时间,其中后两部分时间开销往往是第一部分的数倍。因此,指令级的污点分析会使程序执行效率大幅度降低。例如,Dytan12的分析耗时是程序执行时长的 30 倍,libdft13的分析耗时是程序执行时长的 3.72 倍。目前的污点分析效率提升研究聚焦于生成快速分析路径14、并行化处理15-16等方面,这些优化方法大多在指令级分析的基础上进行优化,只能实现有限的效率提升。在动态污点分析过程中,由于部分函数功能单一,污点传播关系明确,如加密算法函数、压缩函数、内存复制函数等,如果已知该函数的污点传播摘要,则不需要对该函数进行指令级插桩,只需要依据函数污点传播关系摘要即可得出该函数内部的污点传播过程,有效提高污点分析的效率。文献15,17虽然使用函数摘要的方式优化污点分析,但只针对少量外部导入的 libc 库函数设置污点传播规则,没有规范的函数污点传播摘要定义,也未能较好地解决二进制代码的函数摘要问题。针对以上问题,本文提出了基于函数摘要的二进制程序污点分析优化方法,通过实验对比发现,该方法可以有效提升二进制程序污点分析效率。本文的主要贡献如下。1)借鉴符号分析中的符号化概念,提出了污点符号的概念,基于污点符号提出了函数污点传播摘要的定义和描述方法。2)提出了基于路径敏感和有限迭代相结合的函数污点传播摘要生成方法,该方法很大程度上兼顾了函数污点传播摘要的准确率和摘要生成的效率。3)在函数摘要的基础上,设计实现了面向恶意代码分析的污点分析框架 FSTaint,实验表明,FSTaint 的污点分析效率是 libdft 的 7.75 倍。1 二进制程序函数污点传播摘要的定义 在动态污点分析中,由于部分函数功能单一,污点传播关系明确,如果已知该函数的污点传播关系,则不需要对该函数进行指令级插桩和指令第 2 期 杨盼等:基于函数摘要的二进制程序污点分析优化方法 117 数据流分析,只需要依据函数污点传播关系即可得出该函数的污点传播结果。以 AES 加密算法为例,通过实验统计发现,使用 AES 128 bit 加密算法加密 16 byte 数据过程中,执行的 CPU 指令数高达 18 000 余条,如果采用指令级分析,则需要进行 18 000 余次的污点传播分析,而实际产生的污点传播过程只是将密钥和明文中受污染的数据传播到密文。如果已知该加密算法的函数污点传播关系,则通过少量的污点传播分析即可。基于此,本文提出了函数污点传播摘要(以下简称“函数摘要”)的优化思路,通过静态分析生成函数摘要,使用函数摘要优化动态污点分析过程,以提升污点分析效率。在函数摘要生成过程中,由于还未引入污点数据,无法确定函数的输入数据是否是受污染的数据,因此函数的每一个输入数据都可能存在两种污点状态,即“没有被污染”和“被污染”。以图 1 的代码为例,函数 func 返回值的污点状态与参数 a、b 有关,此时输入参数有 4 种可能的污点状态,函数返回值有两种可能的污点状态(见表1)。为了表示所有可能的污点状态,参考符号执行1中,使用符号化的方法来描述所有可能的输入状态,本文提出了“污点符号”的概念。在符号