暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
TaintPoint_使用活跃轨迹高效挖掘污点风格漏洞-方浩然,郭帆,李航宇.pdf
433
20页
1次
2022-05-19
免费下载
软件学报 ISSN 1000-9825, CODEN RUXUEW E-mail: jos@iscas.ac.cn
Journal of Software, [doi: 10.13328/j.cnki.jos.006564] http://www.jos.org.cn
©中国科学院软件研究所版权所有. Tel: +86-10-62562563
TaintPoint使用活跃轨迹高效挖掘污点风格漏
方浩然
,
郭帆
,
李航宇
(江西师范大学 计算机与信息工程学院, 江西 南昌 330022)
通讯作者: 郭帆, E-mail: fguo@jxnu.edu.cn
: 覆盖反馈的灰盒 Fuzzing 已经成为漏洞挖掘最有效的方式之一.广泛使用的边覆盖是一种控制流信息,
而在面向污点风格(Taint-Style)的漏洞挖掘时,这种反馈信息过于粗糙.大量污点无关的种子被加入队列,污点相关的
种子数量又过早收敛,导致 Fuzzing 失去进化方向,无法高效测试 Source-Sink 之间的信息流.首先,详细分析现有反馈
机制在检测污点风格漏洞时不够高效的原因; 其次,提出专用于污点风格漏洞挖掘的模糊器 TaintPoint. TaintPoint
在控制流轨迹的基础上加入活跃污点这一数据流信息,形成活跃轨迹(Live Trace)作为覆盖反馈,并围绕活跃轨迹分
别在插桩、种子过滤、选择和变异阶段改进现有方法. UAFBench 上的实验结果表明,TaintPoint 检测污点风格漏
洞的效率、产出和速度优于业界领先的通用模糊器 AFL++及定向模糊器 AFLGO; 外在两个开源项目上发现四
个漏洞并被确认.
关键词: 静态分析;模糊测试;覆盖反馈;信息流安全;污点分析
中图法分类号: TP311
中文引用格式: 方浩然, 郭帆, 李航宇.TaintPoint: 使用活跃轨迹高效挖掘污点风格漏. 软件学报.
http://www.jos.org.cn/1000-9825/6564.htm
英文引用格式: Fang HR, Guo F. Li HY . TaintPoint: Fuzzing Taint Flow Efficiently with Live Trace. Ruan Jian Xue Bao/Journal of
Software, 2022 (in Chinese). http://www.jos.org.cn/1000-9825/6564.htm
TaintPoint: Fuzzing Taint Flow Efficiently with Live Trace
FANG Hao-Ran, GUO Fan, LI Hang-Yu
(College of Computer and Information Engineering, Jiangxi Normal University, Nanchang 330000, China)
Abstract: Coverage-Guided Fuzzing has become one of the most effective ways of vulnerability detection. The widely used edge
coverage is a kind of control flow information. However this feedback information is too coarse when detecting taint-style
vulnerabilities. A large number of taint-independent seeds are added to the queue, and the number of taint-related seeds converges
prematurely, which leads to the loss of evolutionary direction of Fuzzing and unable to efficiently test the information flow between
Source and Sink. Firstly, we analyze the reasons why the existing feedback mechanism is not efficient enough in detecting taint style
vulnerabilities; secondly, we propose TaintPoint, a fuzzer dedicated to taint style vulnerability detection. TaintPoint adds live taint as data
flow information on the basis of control flow traces to form the live trace as coverage feedback, and the live trace is used to improve the
existing method in the instrumentation, seed filtering, selection, and mutation stages respectively. Experimental results on UAFBench
show that the efficiency, output and speed of TaintPoint in detecting taint-style vulnerabilities surpass the industry-leading general-purpose
fuzzer AFL++ and directed fuzzer AFLGO. In addition, four vulnerabilities were found and confirmed on two open source projects.
Key words: static analysis; fuzzing; coverage feedback; information flow security;taint analysis
基金项目: 国家自然科学基金(61562040); 江西省教育厅科技项目(GJJ200313)
收稿时间: 2021-09-04; 修改时间: 2021-10-15; 采用时: 2022-01-10; jos 在线出版时间: 2022-01-28
着现象级工具 AFL
[1]
的出现,覆盖反馈的灰盒模糊测试(CGF)逐渐成为漏洞挖掘最有效的方式之一,并被广
泛集成进软件研发周期,保障程序质量与安全.CGF 通过种子变异随机生成大量测试用例,观察程序执行是否
方浩然
: TaintPoint:
使用活跃轨迹高效挖掘污点风格漏洞
2205
溃(Crash来发现缺陷和安全漏洞.对于非崩溃漏洞如数组越界、内存未初始化、数据竞争等, Sanitizers
[2-4]
系列动态分析工具( MSan/TSan/ASan)通过编译期插桩,能够在运行时让这些更隐蔽的漏洞暴露出来,因此常
常被 Fuzzing 工具集成以提高其发现漏洞的能力.
DFSan
[2]
Sanitizers 系列中的动态污点分析工具(DTA).污点分析
[5]
是一种经典的程序安全分析方法,能够
发现如 SQL 注入、隐私泄露等非 Crash 漏洞,我们称之为污点风格的漏洞(Taint-Style Vulnerability).如果不可信
的外部输入(Source 引入的污点数据)未经验证(Validate)或消毒(Sanitize),通过数据/控制依赖传播,流入敏感操
(Sink),说明存在污点传播路径,从而产生潜在的信息流安全问题.造成心脏滴血漏洞
[6]
的缓冲区溢出就可以
被视为污点风格漏洞.如同其他程序分析技术,静态和动态污点分析存在其固有局限性.静态分析通常是可靠
(Sound),但由于路径不敏感性(如经典的不动点迭代式数据流分析)缺少运行时信息等因素产生误报;动态分
析依赖于测试集的完备性,只能分析执行的程序路径,因而产生漏报.
Fuzzing通过变异或语法模板大量生成测试用例,可以用于验证静态分析结果,消除误报降低漏报.然而我
们发现,如果将现有FuzzerAFL直接用于Source-Sink之间的污点传播路径搜索时,有效性和准确性都有待提
.现有CGF广泛采用边覆盖反馈机制,多数漏洞被视为存在于某个分支下的特殊代码,当特定的输入探索到此
分支,漏洞就会被触发.然而对于污点风格漏洞,是否触发与到达漏洞点的路径强相关,我们称之为路径敏感.
一对SourceSink
之间通常存在多条路径,可能只有其中少数几条能够传播污点到Sink,且由于污点清洁函数
Sanitizer的存在,使得这种精确的路径搜索困难.边覆盖作为信息反馈在面对此类漏洞时过于粗糙: 大量与
污点传播无关的种子被加入队列,对这些种子做Fuzzing低效;高频的边覆盖完成后,后续测试用例在
Source-Sink之间产生的新路径无法被识别,使得队列中与污点传播相关的种子数量过早收敛,不能过滤
真正执行污点传播种子,从而导致Fuzzing失去进化方向,无法系统高效地搜索污点传播路径.定向Fuzzer
过优化种子选择和能量调度策略使Fuzzing朝着特定的目标进行,很多实现基于AFLGO而继承AFL的边覆
反馈机制,仍然存在上述问题.正如Neutaint
[42]
所说,不论任何形式DTA,找到一条新的污点传播路径都
是一个困难的问题.
本文提出了一种高效的 Fuzzing 方法挖掘污点风格漏洞,并实现原型系统 TaintPoint.该方法的关键是去除
覆盖反馈信息中的噪音,过滤出污点传播问题上真正的好种子.边覆盖产生的轨迹是一种无差别的控制流信
,TaintPoint 在控制流的基础上,加入活跃污点这种问题相关的数据流信息,只记录存在活跃污点信息的有效
执行轨迹,形成活跃轨迹(Live Trace)作为反馈信号,并且围绕活跃轨迹在插桩、种子过滤选择、变异阶段分
别改进现有 Fuzzing 方法.
首先, TaintPoint 通过静态分析识别出 Source-Sink 相关的潜在危险区域.基于系统依赖图 SDG
[7]
,我们实现
了一个静态 Chopper 组件,识别出与 Source-Sink 依赖相关的基本块.与标准后向切片(Backward Slicing)不同的
, Chopper SDG 上进行两次可达性分析.根据指定的 Source Sink ,分别进行正向和反向切片,取其交集
基本块并做危险标记,表明从 Source 引入的污点数据将沿着这些潜在的危险基本块到达 Sink.在插桩阶段,我们
将这些危险基本块之间形成的轨迹(Trace)在单独的共享内存中进行标记.分离式插桩区分出了两类轨迹,同时
在危险基本块之间形成逻辑边,从而减弱无关部分对污点传播路径搜索的影响.
Source-Sink 之间存在的消毒函数(Sanitizer)会截断污点传播,受影响的变量不再带有污点属性.若在某个程
序分支点,所有处于后续危险基本块中的活跃变量都是未被污染的,则说明在此程序点以后不会存在污点传播
路径到达 Sink. TaintPoint 进行活跃变量分析,在危险标记的每个分支基本块出口处插桩,以获取运行时的活跃
污点信息.若某个分支处的有效活跃变量都没有被污染,则不记录此分支点及以后的轨迹,只记录有活跃污点传
播的活跃轨迹(Live Trace).
在种子过滤阶段,如果测试用例在危险区域产生了新的覆盖,那么加入队列的同时给予该种子特殊标记
提升其优先级.部分种子因为中途离开危险区域或被消毒而中断了 Live Trace 的记录,若存在新的种子重新回
到危险路径上或者绕过了消毒函数,生的活跃轨迹是前者的超集,该种子对于污点传播问题来说是一个更好
的种子.在种子选择阶段,TaintPoint 提出了新的进化方向,优先选择活跃轨迹更长的种子去变异. Fuzzing 将沿着
of 20
免费下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜