0x00 Abstract
同符号执行一样,Taint analysis 也是分析代码漏洞,检测攻击的重要方法,广泛应用在漏洞自动化扫描和漏洞检测工具中。本文对Taint analysis进行一些简单梳理,内容来源于网络,原知识点请参照文末Reference。
0x01 Fundamentals of taint analysis
Taint Analysis 是分析程序中由污点源引入的数据是否能够不经无害处理,而传播到污点汇聚点,如果不能,则系统信息流是安全的,否则,系统存在数据泄露或者危险数据操作等安全问题。
a) Definition
A tuple: <sources, sinks, sanitizers>
source: 污点源,引入不授信的数据到系统中。
sink: 污点汇聚点,直接产生安全敏感操作(违反数据完整性)或泄露隐私数据(违反数据保密性)。
sanitizer:无害处理,通过数据加密或移除危害操作等方法使数据传播不会造成信息安全风险。
Taint Analysis 3 steps:
- 识别污点源和汇聚点,
- 污点传播范围分析,
- 无害或去风险处理。
b) 识别污点源和汇聚点
由于语言差异需要不同的分析方法来处理,首先需要根据具体情况来识别出一些污点属性。
例如为 WEB应用进行漏洞检测。
抽象本质分成三类:
1)使用启发式的策略进行标记,例如把来自外部输入的数据看成 污点数据,认为这些数据可能存在风险; 2)根据具体调用的API手工标记源和汇聚点; 3)使用统计工具或者AI识别和标记污点源和汇聚点。
c) 污点传播
标记数据在程序中的传播途径,按照分析过程中关注的程序依赖关系,分为显式流分析和隐式流分析:
1) 显式流分析-标记如何随变量之间data dependency 关系传播
以图3所示的程序为例,变量a, b 被预定义的污点源source标记为污点源。
假设 a, b被标记 taint_a, taint_b, in line #5, x depends on a, line #6 y depends on b.
显式流分析, · 标记 taint_a, taint_b 传播给line 5 的x and line 6 y.
· x, y 会达到 line 7 & 8, 汇聚点, 用sink标识。
存在信息泄露问题,稍后我们再介绍如何分析和解决。
2)隐式流分析-分析污点标记如何随程序中变量之间的控制依赖关系传播。 即,污点标记如何从条件指令传播啊到所控制的语句
在图4中所示的程序中,变量 string x, y, 他们没有直接喝间接的数据依赖关系(显式流关系), 但x 上的污点标记可以经过控制依赖隐式传播到y.
具体来说,the for loop condition in #4 line, 循环取出X中的每一个字符,转换成int后给x, 由7行的辛苦条件控制内层循环以累加的方式将x的值付给y, 最后由外层循环y逐一传给Y,最终, 12行的Y和X值相同, 存才信息泄露问题。 如果不进行隐式流污点传播分析,12行的Y将不会被赋污点标记,程序的信息泄露被遗漏,导致最终分析结果不精确。 under-taint。
d) 无害处理
带污点标记的数据在经过无害处理以后,污点标记可以被移除,数据不再携带敏感信息或者对数据操做不会对系统产生危害。
· 对敏感数据加密处理,加密函数被识别成无害处理模块; · input validation, 对输入数据进行验证,借助很多种类型的输入验证工具,也是无害处理模块;
0x02 污点传播分析
未完待续...
Reference
https://github.com/firmianay/CTF-All-In-One/blob/master/doc/5.5_taint_analysis.md http://netinfo-security.org/article/2016/1671-1122-0-3-77.html#close http://www.jos.org.cn/ch/reader/create_pdf.aspx?file_no=5190&journal_id=jos
Comments