文章目录
- 1. Information Flow Security
- 2. Confidentiality and Integrity
- 3. Explicit Flows and Covert/Hidden Channels
- 4. Taint Analysis
- 污点分析案例
1. Information Flow Security
引起安全问题最主要的两大原因是:injection errors(2013-2019排名第一)、information leak(2013-2019排名第四)
来自:https://nvd.nist.gov/
可以把信息流简单的分成两类:高密级(high,如密码)、低密级(low,如一般性数据)
高密级的数据不能流向低密级
2. Confidentiality and Integrity
Confidentiality:保密性,防止信息泄露
Integrity:完整性,防止不可信的信息破坏(可信的)关键信息
x=readInput(); // untrusted
cmd="..."+x;
execute(cmd); // critical(trusted)
注入攻击违反了完整性,如:command injection、SQL injection、XSS attacks
保密性和完整性实际上是从不同的视角来认识信息流安全问题的,是一种双向的对称关系。这种对偶带来的好处时,可以用一种技术问题解决这两个问题。
- 保密性是对读的保护,低密级数据可以流向高密级
- 机密性是对写的保护,高密级数据可以流向低密级
3. Explicit Flows and Covert/Hidden Channels
Explicit Flows and Covert/Hidden Channels:显示流和隐藏信道
信息流包含数据流:可以把直接的赋值语句理解为数据流,如下例,publicL和secretH之间没有数据流,但有信息流(可以通过publicL推断出secretH是否大于0),这种信息流也被称为隐式信息流implicit flow。
secretH=getSecret();
if(secretH<0)publicL=1;
else publicL=0;
一些信息泄露的例子:
尤其是最后一个例子,可推测secret是否小于0,如果secret小于0,会抛出异常
信道channels:计算机系统中,传递信息、发送信息的机制
隐藏信道Covert/Hidden Channels:如果该机制本身不是用来传递信息流的,但它仍把信息传递出去了,就称它为隐藏信道。
相比于显式信息流,隐藏信道难以寻找,但同时隐藏信道携带的信息也较少,泄漏的信息有限,显式信息流携带的信息更多。如下图,左侧泄漏32位信息,右侧泄漏1bit信息。
4. Taint Analysis
简单解释污点分析:给敏感数据打上标记,跟踪这些被标记的数据(污点数据),是否到达了敏感操作点(sink),或调用敏感操作的指针会不会指向污点数据(类似于指针分析)。
污点分析中常把数据分为两类:
- 感兴趣的数据tainted data:通常把他们做一个标记,这类数据称为污点数据,在污点分析中追踪这类数据
- 其他数据untainted data:不关心的数据
sources:污点数据tainted data的来源。 在实践中,tainted data通常来自方法/API的返回值,把这些数据打上taint标记。
sinks:通常是某些敏感方法,检查tainted data是否作为参数传入了这些敏感方法。
污点分析与指针分析的共同之处:
污点分析的本质是跟踪程序中的污点分析,指针分析的本质是跟踪程序中的抽象对象。
- 可以把污点数据看作对象
- 可以把sources看作allocation sites
- 借助指针分析传播污点数据
形式化表示:
污点分析的输入输出:
input:
- source:source方法集合(调用这些方法返回污点数据)
- sink:sink方法集合(流到这里的污点数据违反了安全策略)
output - TaintFlows:污点数据和sink方法对。<污点数据,sink方法>。 < t i , m > ∈ T a i n t F l o w s <t_i, m> \in TaintFlows <ti,m>∈TaintFlows表示i处的污点数据流到了sink方法m中。
传播规则
处理source和sink的规则
污点分析案例
和指针分析结合的好处:很好的处理了别名问题,并且可以追踪信息流的流向。