污点分析(taint analysis)综述 | 论文阅读 污点分析技术的原理和实践应用

1. 污点分析的基本原理

 

污点分析可以抽象成一个三元组<sources, sinks, sanitizers>的形式。sources:污点源,代表直接引入不受信任的数据或者机密数据到系统中。sink:污点汇聚点,代表直接产生安全敏感操作或者泄露隐私数据到外界。sanitizer:无害处理,代表通过数据加密或者移除危害操作等手段使数据传播不再对软件系统的信息安全产生危害。

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

污点分析的处理过程可以分成 3 个阶段: (1) 识别污点源和汇聚点; (2) 污点传播分析; (3) 无害处理.

 

           识别污点源和汇聚点:(1)使用启发式的策略进行标记,例如把来自程序外部输入的数据统称为“污点”数据,保守地认为这些数据有可能包含恶意的攻击数据(2)根据具体应用程序调用的 API 或者重要的数据类型,手工标记源和汇聚点(3)使用统计或机器学习技术自动地识别和标记污点源及汇聚点

           污点传播分析:显示流分析:分析污点标记如何随程序中变量之间的数据依赖关系传播。即数据流传播。隐式流分析:分析污点标记如何随程序中变量之间的控制依赖关系传播,也就是分析污点标记如何从条件指令传播到其所控制的语句。即控制流传播。

 

无害处理:污点数据经过该模块的处理后,数据本身不再携带敏感信息或者针对该数据的操作不会再对系统产生危害。 正确地使用无害处理可以降低系统中污点标记的数量,提高污点分析的效率,并且避免由于污点扩散导致的分析结果不精确的问题。例如,加密库函数应该被识别成无害处理模块。

2. 污点传播分析的关键技术

2.1 显示流分析

           静态分析技术: 分析对象一般是源码或者中间表示。 首先根据函数调用关系构建调用图(call graph);然后在函数内部或者函数间根据不同的程序特性进行具体的数据流传播分析。常见的污点传播方式包括:直接赋值传播、通过函数调(过程)用传播以及通过别名(指针)传播。

动态分析技术:首先需要为污点数据扩展一个污点标记(tainted tag)的标签并将其存储在存储单元(内存、寄存器、缓存等)中,然后根据指令类型和指令操作数设计相应的传播逻辑传播污点标记。动态污点传播分析按照实现层次被分为基于硬件、基于软件以及混合型的污点传播分析3类.

2.2 隐式流分析

           静态隐式流分析:路径敏感的数据流分析往往会产生路径爆炸问题。为了降低开销,一种简单的静态传播(标记)分支语句的污点标记方法是将控制依赖于它的语句全部进行污点标记,但该方法会导致过污染。

动态隐式流分析:首要问题是如何确定污点控制条件下需要标记的语句的范围;第2个问题是由于部分泄漏(partially leaked)导致的漏报;第3个问题是如何选择合适的污点标记分支进行污点传播。

2.3

目前通用污点传播分析技术面临的主要问题和代表性技术:

 

3 实际应用

如分析Android的隐私泄露问题。

 

 

4  参考资料:

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

CMU污点分析课程PDF,Taint Analysis

南京大学软件分析 视频课件

北京大学软件分析 课件

 

博客:

简述污点分析

简单理解污点分析技术

污点分析

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

posted @ 2022-03-04 10:21  Erio  阅读(5499)  评论(1编辑  收藏  举报