南京大学【软件分析】13 Static Analysis for Security

文章目录

  • 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,如一般性数据)
高密级的数据不能流向低密级
南京大学【软件分析】13 Static Analysis for Security_第1张图片

2. Confidentiality and Integrity

Confidentiality:保密性,防止信息泄露
Integrity:完整性,防止不可信的信息破坏(可信的)关键信息
南京大学【软件分析】13 Static Analysis for Security_第2张图片

x=readInput(); // untrusted
cmd="..."+x;
execute(cmd); // critical(trusted)

注入攻击违反了完整性,如:command injection、SQL injection、XSS attacks

保密性和完整性实际上是从不同的视角来认识信息流安全问题的,是一种双向的对称关系。这种对偶带来的好处时,可以用一种技术问题解决这两个问题。

  • 保密性是对的保护,低密级数据可以流向高密级
  • 机密性是对的保护,高密级数据可以流向低密级
    南京大学【软件分析】13 Static Analysis for Security_第3张图片

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,会抛出异常
南京大学【软件分析】13 Static Analysis for Security_第4张图片
信道channels:计算机系统中,传递信息、发送信息的机制
隐藏信道Covert/Hidden Channels:如果该机制本身不是用来传递信息流的,但它仍把信息传递出去了,就称它为隐藏信道。
南京大学【软件分析】13 Static Analysis for Security_第5张图片
相比于显式信息流,隐藏信道难以寻找,但同时隐藏信道携带的信息也较少,泄漏的信息有限,显式信息流携带的信息更多。如下图,左侧泄漏32位信息,右侧泄漏1bit信息。
南京大学【软件分析】13 Static Analysis for Security_第6张图片

4. Taint Analysis

简单解释污点分析:给敏感数据打上标记,跟踪这些被标记的数据(污点数据),是否到达了敏感操作点(sink),或调用敏感操作的指针会不会指向污点数据(类似于指针分析)。
污点分析中常把数据分为两类:

  • 感兴趣的数据tainted data:通常把他们做一个标记,这类数据称为污点数据,在污点分析中追踪这类数据
  • 其他数据untainted data:不关心的数据

sources:污点数据tainted data的来源。 在实践中,tainted data通常来自方法/API的返回值,把这些数据打上taint标记。
sinks:通常是某些敏感方法,检查tainted data是否作为参数传入了这些敏感方法。

南京大学【软件分析】13 Static Analysis for Security_第7张图片

污点分析与指针分析的共同之处:
污点分析的本质是跟踪程序中的污点分析,指针分析的本质是跟踪程序中的抽象对象。

  • 可以把污点数据看作对象
  • 可以把sources看作allocation sites
  • 借助指针分析传播污点数据

形式化表示:
南京大学【软件分析】13 Static Analysis for Security_第8张图片
污点分析的输入输出:
input:

  • source:source方法集合(调用这些方法返回污点数据)
  • sink:sink方法集合(流到这里的污点数据违反了安全策略)
    output
  • TaintFlows:污点数据和sink方法对。<污点数据,sink方法>。 < t i , m > ∈ T a i n t F l o w s \in TaintFlows <ti,m>∈TaintFlows表示i处的污点数据流到了sink方法m中。

传播规则
南京大学【软件分析】13 Static Analysis for Security_第9张图片
处理source和sink的规则
南京大学【软件分析】13 Static Analysis for Security_第10张图片

污点分析案例

和指针分析结合的好处:很好的处理了别名问题,并且可以追踪信息流的流向。
南京大学【软件分析】13 Static Analysis for Security_第11张图片

你可能感兴趣的:(#,软件分析,安全)