追踪信息流
文章目录
- 前言
- 整体描述
- 扩展阅读
前言
来源:Tracking Information Flow
建议阅读原文,我这里仅仅整理下思路:fuzzing仓库
整体描述
在之前的章节中,我们希望输入可以触发crash,并认为这样的输入是我们最期望的输入。因为,从安全的角度,一个可以触发crash的输入,标识着,这个输入可以探索到这个程序bug所处的位置。
然而,crash并不是程序的存在bug的唯一标志。比如,Unsafe Approach: Using system()、SQL注入,由于数据和命令没有分离,导致程序出现安全问题。
在本章中,我们将深入探索如何在Python中跟踪信息流,以及如何使用这些信息流来确定程序是否按预期运行。
本章首先构建了一个在内存中运行的伪数据库脚本。其中的表达式的处理,使用了eval函数。
# 期望的处理
# (year - 1900 if year < 2000 else year - 2000),使用eval处理
db.sql('select year - 1900 if year < 2000 else year - 2000 from inventory')
# 不期望的处理
# (__import__("os").popen("pwd").read()),使用eval处理
db.sql('select __import__("os").popen("pwd").read() from inventory')
为了摆脱“不期望的处理”,本章对字符串进行标记处理。本文,通过对str类进行封装(添加污点标记信息),对输入字符串进行污点标记。初始输入的字符串使用UNTRUSTED标记。如果输入的字符串合法,则将其标记修改为TRUSTED,我们称这一过程为sanitize。【规则的判断可以直接决定字符串的合法与否,无需添加一个污点标记位。但是,规则分布在不同位置的时候,统一的标志位会带来一定的方便。同时,字符串的标记,可以引出下文信息流的追踪。】
但是,对字符串进行污点标记存在一些问题。比如,两个不同标记的字符串相互操作的结果,该使用哪种标记(用优先级处理)?更详细的是,对应给定的字符串,每一个字符都知道其来源。
本章,通过对str类进行封装(添加污点标记信息&对每个字符附加一个整数标记),进行信息流的追踪。为了演示追踪过程,本章构造了TaintedGrammarFuzzer
类。该类使用语法生成输入。当输入非法的时候,通过标记信息&语法树,记录语法中每个节点的使用次数。
本章的总结:
String-based and character-based taints allow to dynamically track the information flow from input to the internals of a system and back to the output.
基于字符串和基于字符的污染允许动态跟踪从输入到系统内部并返回到输出的信息流。
Checking taints allows to discover untrusted inputs and information leakage at runtime.
检查污染可以在运行时发现不可信的输入和信息泄漏。
Data conversions and implicit data flow may strip taint information; the resulting untainted strings should be treated as having the worst possible taint.
数据转换和隐式数据流可能会剥离污染信息;产生的未受污染的字符串应被视为具有可能的最严重污染。
Taints can be used in conjunction with fuzzing to provide a more robust indication of incorrect behavior than to simply rely on program crashes.
污点可以与fuzzing一起使用,以提供不正确行为的更可靠指示,而不是简单地依赖于程序崩溃。
扩展阅读
简单理解污点分析技术
污点分析可以抽象成一个三元组
<sources,sinks,sanitizers>
的形式,其中,source 即污点源,代表直接引入不受信任的数据或者机密数据到系统中;sink即污点汇聚点,代表直接产生安全敏感操作(违反数据完整性)或者泄露隐私数据到外界(违反数据保密性);sanitizer即无害处理,代表通过数据加密或者移除危害操作等手段使数据传播不再对软件系统的信息安全产生危害.污点分析就是分析程序中由污点源引入的数据是否能够不经无害处理,而直接传播到污点汇聚点.如果不能,说明系统是信息流安全的;否则,说明系统产生了隐私数据泄露或危险数据操作等安全问题.
还没有评论,来说两句吧...