污点分析

Review’污点分析技术的原理和实践应用

1. 污点分析的基本原理

污点分析可以抽象成一个三元组<sources, sinks, sanitizers>的形式,

  • sources:污点源,代表直接引入不受信任的数据或者机密数据到系统中
  • sink:污点汇聚点,代表直接产生安全敏感操作或者泄露隐私数据到外界
  • sanitizer:无害处理,代表通过数据加密或者移除危害操作等手段使数据传播不再对软件系统的信息安全产生危害

污点分析就是分析程序中由污点源引入的数据是否能够不经过无害处理,而直接传播到污点汇聚点。如果不能,说明信息流失安全的;否则,说明系统产生了隐私数据泄露或危险数据操作等问题

污点分析的处理过程可以分成3个阶段:

  1. 识别污点源和汇聚点
  2. 污点传播分析
  3. 无害处理

如下图所示:

taint-analysis-process

2. 污点源和汇聚点

识别污点源和污点汇聚点是污点分析的前提.

目前,在不同的应用程序中识别污点源和汇聚点的方法各不相同.缺乏通用方法的原因一方面来自系统模型、编程语言之间的差异.

另一方面,污点分析关注的安全漏洞类 型不同,也会导致对污点源和污点汇聚点的收集方法迥异

3. 污点传播分析

根据分析过程中关注的程序依赖关系不同,可以将污点传播分析分为显示流分析隐式流分析

3.1 显示流分析

分析污点标记如何随程序中变量之间的数据依赖关系传播。

explicit-taint-analysis

3.2 隐式流分析

分析污点标记如何随程序中变量这件的控制依赖关系传播

implicit-taint-analysis

3.3 静态分析技术

在不运行代码且不修改代码的前提下,通过分析程序变量间的数据依赖来检测数据能否从污点源传播到污点汇聚点。

分析对象一般是源码或者中间表示。

静态分析过程:

  1. 根据函数调用关系构建调用图(call graph);
  2. 在函数内部或者函数间根据不同的程序特性进行具体的数据流传播分析

常见的污点传播方式包括:直接赋值传播、通过函数调(过程)用传播以及通过别名(指针)传播

研究难点

目前直接赋值传播和函数调用传播比较成熟,研究的重点是如何为别名传播的分析提供更精确、高效的解决方案。

精确度(上下文敏感、流敏感、域敏感、对象敏感等)的程序静态分析技术通常伴随巨大的时空开销,分析对象并非完整的程序,而是程序片段。

3.4 动态分析技术

通过实时监控程序的污点数据在系统程序中的传播来检测数据能否从污点源传播到污点汇聚点。

动态分析过程:

  1. 要为污点数据扩展一个污点 标记(tainted tag)的标签并将其存储在存储单元(内存、寄存器、缓存等)中
  2. 根据指令类型和指令操作数设计相应的传播逻辑传播污点标记

动态污点传播分析按照实现层次被分为基于硬件基于软件以及混合型的污点传播分析这 3 类。

  1. 基于硬件的污点传播分析需要定制的硬件支持,一般需要在原有体系结构上为寄存器或者内存扩展一个标记位,用来存储污点标记,代表的系统有 Minos[62],Raksha[63]等.

  2. 基于软件的污点传播分析通过修改程序的二进制代码来进行污点标记位的存储与传播,代表的系统有 TaintEraser[64],TaintDroid[19]等

    优点在于不必更改处理器等底层的硬件,并且可以支持更高的语义逻辑的安全策略(利用其更贴 近源程序层次的特点);

    缺点是使用插桩(instrumentation)或代码重写(code rewriting)修改程序往往会给分析 系统带来巨大的开销

  3. 混合型的污点分析是对上述两类方法的折中, 即,通过尽可能少的硬件结构改动以保证更高的语义逻辑的安全策略,代表的系统有 Flexitaint[65],PIFT[66]等

研究难点

针对动态污点传播分析的研究工作关注的首要问题是如何设计有效的污点传播逻辑,以确保精确的污点传播分析。

动态污点传播分析的另一个研究重点是如何降低分析代价。

  1. 动态隐式流分析关注的首要问题是如何确定污点控制条件下需要标记的语句的范围,由于动态执行轨迹 并不能反映出被执行的指令之间的控制依赖关系;
  2. 动态分析面临的第 2 个问题是由于部分泄漏(partially leaked)导致的漏报;部分泄漏是指污点信息通过动态未执行部分进行传播并泄漏;
  3. 动态分析需要解决的第 3 个问题是如何选择合适的污点标记分支进行污点传播;鉴于单纯地将所有包含 污点标记的分支进行传播会导致过污染的情况,可以根据信息泄漏范围的不同,定量地设计污点标记分支的选 择策略;

4. 无害处理

污点数据经过该模块的处理后,数据本身不再携带敏感信息或者针对该数据的操作不会再对系统产生危害。

正确地使用无害处理可以降低系统中污点标记的数量,提高污点分析的效 率,并且避免由于污点扩散导致的分析结果不精确的问题。

无害处理的例子:

  1. 加密库函数(保护保密性):为了防止敏感数据被泄露

  2. 输入验证(保护完整性):为了防止外界数据因为携带危险操作而对系统关键区域产生危害

5. 参考文献

[1]简单理解污点分析技术 | K0rz3n’s Blog

[2] 王蕾, 李丰, 李炼,等. 污点分析技术的原理和实践应用[J]. 软件学报, 2017, 28(004):860-882.

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值