软件分析笔记7 Security
下面几节课都比较轻松,内容偏科普性质
Security
Achieving some goals in the presence of adversaries
这个概括可以说是很简练了
统计意义下最常见的两类漏洞:
- Injection Errors
- Information leaks
这两者本质上都是信息流的错误流动,因此就自然引出信息流安全的问题和分析
Information Flow
字面意思....前面指针分析本质上是对数据流的分析,而数据流正是信息流的一种
IF的安全问题在于出现了unwanted infowmation flow,即本应该流向x处的信息流向了y处,举个例子就是本来应该发给plmm的情书一不小心塞进了好基友的书包里....
那么想要保持安全,我们的目标就是阻止非法信息流
Access Control
即对信息上锁,每次获取信息的时候要求通行权限
AC主要关心信息是否被获取,而不关心后续对信息操作的流程。可以认为是点上的安全措施
同样用情书举例,AC就是基友在任何东西进包之前都要检查这东西能不能进包,以此来阻止上述情况
而信息流安全则关注的是不同节点之间的联系以及互动,因此又被叫做端到端的安全措施
Information Flow Security
IFS会(1)把变量分成若干安全等级,并(2)规定流动法则。最简单的分级就是分成高、低安全等级
Security Level
举例中国保密的四级:绝密>机密>秘密>公开
同时等级并不一定是全序的,比如公司内两个部门可以不互通内部信息,但是最高决策者应当看到所有的信息
这意味着我们可以用lattice对等级进行建模
Flow Policy
经典方法是Noninterference policy,它要求"高等级的信息不应该影响(流向)低级信息"
这句话比较抽象,这里的“影响”或许要从信息论的角度来理解。例如a=b+c,若a、b均为低级,则c不能为高级(否则可以通过获取a和b来计算出c的值)
同时还提到了两个概念
Confidentiality
就是要防止机密信息泄露
Integrity
保证Integrity的广义要求是保证数据的准确性(不应被低等级信息污染)、完整性(不应该丢失)、一致性(在传输过程中不应该变化)
狭义地讲,就是要防止危险信息的流入(例如各种注入攻击)
这两种保护可以看成是分别对读/写的保护
泄露的情况又分为两种
Implicit Flow
考虑如果H信息对程序的控制流产生了影响,且这段受影响的控制流有着对L信息的不同的副作用,那么显然可以通过监听L信息的变化来判断控制流的流向,并间接推断出H信息
例如这样一段代码
switch (high) {
case 1: case 2: {
low = 0;
break;
}
case 3: {
low = 1;
break;
}
case 4: {
low = 2;
break;
}
default: {
low = 3;
}
}
只需观测low
即可得到high
的信息
Convert/Hidden Channels
在计算机系统中传输信息的组件被称为信道(channels)
如果某段代码本来目的并不是传输信息,但最终它传递了某种信息,则称为这是一个隐藏信道
PPT给了四个例子
Implicit Flows
通过控制流泄露信息
if (high < 0) low = 1;
else low = 2;
Termination Channels
通过是否结束(运行状态)泄露信息
while (high<0) {...}
Timing Channels
通过运行时间泄露信息
if(high>0) SPEND_A_LONG_TIME();
Exceptions
通过异常泄露信息
if (high>0) throw new Exception("exception");
此外还有很多,一些听起来就很牛逼的比如观察缓存命中率来推断一些关键信息(这个要怎么做啊好想知道啊看起来好好玩啊洗礼太洗礼太)
通过对比explicit flow和implicit flow我们可以发现
- explicit flow泄露的信息不会更少(毕竟全露了)。举例就是在if的控制流泄露中,implicit只泄露了1bit的信息量
- implicit flow很难实现数据的更改,往往只能获得信息
因此目前的主要研究对象就是显式流的规避
Taint Analysis
污点分析首先对数据分类:感兴趣的数据则打上标记,否则没有标记
然后将一些函数/方法标记为source,表示污点数据会以函数的返回值进入程序
将一些方法标记为sink,表示这些是我们关注的关键部分
那么这个分析要回答的问题就是:是否有污点数据从source流向了sink?
可以类比一下动物学中的标志法求群体迁徙路线...
本文来自博客园,作者:jjppp。本博客所有文章除特别声明外,均采用CC BY-SA 4.0 协议