P13
2021-04-30 15:59:11 7 举报
AI智能生成
南大软件分析
作者其他创作
大纲/内容
引入
Security
在有对手的情况下实现一些目标
物理世界
目标
人身安全
财产安全
对手(Adversaries)
小偷
罪犯
网络世界
目标
可靠性
数据安全
对手
黑客
网络攻击者
计算机安全
如今变得越来越重要
2013-2019年被利用漏洞的原因*
Injection errors (No. 1), 11821, 4.6/day
Information leaks (No. 4), 5086, 2.0/day
Information Flow Security(信息流安全)
信息流的一个例子
防止不必要的信息流,保护信息安全。
访问控制(Access Control) vs 信息流安全
Access control(访问控制)
保护敏感数据的标准方法
检查程序是否具有访问某些信息的权利/许可。
关注的是如何访问信息。
Information flow security(信息流安全)
end-to-end(端到端)
跟踪信息如何在程序中流动,以确保程序安全地处理信息。
关注信息如何传播。
Information Flow*
定义
如果将变量x中的信息传递给变量y,则存在信息流x→y
例子
Information Flow Security
将信息流与安全联系起来
将程序变量分类为不同的安全级别。
指定这些级别之间的允许的流,即信息流策略。
Security Levels (Classes)
最基本的模型是两级策略,即变量被分为以下两个安全级别之一:
H
意味着高安全性,机密信息。
L
意味着安全性低,可公开查看的信息。
例子
安全级别可以建模为lattice
L ≤ H
More Complicated Security Levels
China classification
A (possible) business classification
Information Flow Policy
限制信息在不同安全级别之间的流动方式
Noninterference policy*(无干扰策略)
要求安全级别高的变量的信息对安全级别低的变量的信息无影响(即不应干扰)
凭直觉,应该无法通过观察安全级别低的变量来得出有关安全级别高的信息的任何结论。
Noninterference
Confidentiality and Integrity(机密性和完整性)
Confidentiality
防止泄露机密信息
Integrity
防止不受信任的信息破坏(受信任的)关键信息
Injection errors(#1 cause of vulnerabilities in 2013-20192)
命令注入
SQL注入
XSS攻击
Confidentiality and Integrity
Integrity, 广义上的定义
确保数据的正确性(Correctness),完整性(Completeness)和一致性(Consistency)
正确性(Correctness)
例如,为了确保信息流的完整性,(可信的)关键数据不应被不可信的数据破坏。
完整性(Completeness)
例如,数据库系统应完全存储所有数据。
一致性(Consistency)
例如,文件传输系统应确保两端(发送方和接收方)的文件内容相同。
Explicit Flows and Covert Channels(显式流和隐式通道)
How Does Information Flow
explicit flow(显式流)
我们已经看到了信息如何通过直接复制流动,这称为显式流。
显式流
Implicit Flows(隐式流)
我们可以通过观察低级别的变量信息,来得出高级别变量信息是否为负的结论。
泄露:这种信息流称为隐式流,它可能在控制流受机密信息影响时出现。
秘密控制下副作用的任何差异都会编码有关该控制的信息,这些信息可能是公开可见的,并且泄露了秘密信息。
秘密信息会泄漏吗?
泄漏:我们可以得出结论,如果程序未终止,则secretH为负。
泄漏:如果程序执行花费很多时间,我们可以得出结论secretH是负的。
泄漏:如果观察到异常,我们可以得出结论secretH是负的。
泄漏:异常可能表明秘密是负的。
Covert/Hidden Channels
通过计算系统发信号通知信息的机制称为通道(channels)。
利用主要目的不是信息传输的机制的通道称为隐蔽通道(covert channels)。
Explicit Flows and Covert Channels
显式流通常比隐式通道携带更多的信息,因此我们关注显式流。
如何防止不必要的信息流,即强制执行信息流策略?
Taint Analysis(污点分析)
Taint Analysis
污点分析是最常见的信息流分析。 它将程序数据分为两种:
感兴趣的数据,某些标签与数据相关联,称为污染数据( tainted data)
其他数据,称为未被污染数据(untainted data)
污染数据的来源称为source。 实际上,受污染的数据通常来自某些方法的返回值(被视为source)。
污染分析会跟踪受污染数据如何流经程序,并观察污染数据是否可以流向感兴趣的位置(称为sink)。实际上,sink通常是一些敏感方法。
Taint Analysis: Two Applications
Confidentiality(机密性)
Source: source of secret data
Sink: leakage
Information leaks
Integrity(完整性)
Source: source of untrusted data
Sink: critical computation
Injection errors
污点分析可以检测到两种我们不希望出现的信息流。
“Can tainted data flow to a sink?”
“Which tainted data a pointer (at a sink) can point to?”
污点和指向分析一起
污点分析/指向分析的实质是跟踪污点数据/抽象对象如何流过程序。
将污染数据视为(artificial)对象
将源视为(受污染数据的)分配点
利用指向分析来传播污染数据
Rules
Domains and Notations(域和符号)
Inputs & Outputs
Inputs
Sources
一组源方法(对这些方法的调用返回受污染的数据)。
Sinks
一组接收方法(污染这些方法的数据流违反了安全策略)。
Outputs
TaintFlows
一组成对的污染数据和接收方法。
例如<ti, m>∈TaintFlows表示来自调用点i(调用source方法)的受污染数据可能会流向接收方法m。
rules
处理source(生成污染数据)
传播对象和受污染的数据
处理sink(生成污染流信息)
一个例子
0 条评论
下一页