@ensis
2016-01-11T16:31:47.000000Z
字数 3186
阅读 1699
Security'14
原文链接
作者单位:杜克大学
本文提出的SpanDex,实现了一个Android DVM的扩展集,可以完整、准确、快速地处理Android程序中的隐式信息流,保证应用程序不泄露用户的密码。作者通过符号执行中的方法,量化隐式信息流揭露出的关于secret的信息。为了不影响性能,SpanDex将不受信任的代码运行在一个数据流敏感的沙箱里,以限制程序可以对敏感数据执行的操作。作者在SpanDex上运行了50个应用,其中42个没有出现异常,并且发现攻击者恢复出密码平均需要80次尝试,而在没有使用Spandex的情况下,只需要一次尝试。
隐式信息流
秘密信息通过程序的控制流传递,如if s != 0 then x = a
中,除了从a到x的信息流,还有一条从s到x的隐式信息流。
污点跟踪要考虑的问题:完整性(Soundness)【no false negative】,准确性(Precision)【no overtainting,false positive】和效率(Efficiency)
静态分析与secrecy-aware type system和程序员定义的declassifier相结合,这种方式sound,precise,efficient,但是需要在程序中添加secrecy annotation和declassifier。
if s != 0 then x := a else y := b done
,s是含有秘密信息的变量,then和done之间的操作叫做enclosed region
,受影响的对象集叫做enclosed set
。对了保证完整性,monitor要把s的tag传递给集合中的所有对象。但是这样会造成overtainting。 enclosed set
,以此来量化enclosed region
的channel capacity。为了证明传统处理隐式信息流的方法会带来overtainting,作者在TaintDroid和TaintDroid的修改版(TaintDroid++)这两个执行环境上运行4个应用程序。TaintDroid只做显式信息流跟踪,而TaintDroid++支持隐式信息流跟踪。在输入password后,检查tainted output。
SpanDex把每个秘密信息可能的取值范围叫做p-set
(possibility set)。为了缩小p-set的范围,需要知道从原始秘密信息到一个tainted条件分支过程的数据流。op-dag
就反映了这种依赖关系。
SpanDex的label
是一个纸箱op-dag中节点的指针。
op-dag的root
节点包含原始秘密信息,p-set和domain(表明秘密信息可以发往哪个domain)。
op-dag的普通节点node
记录操作,操作数等信息。
50个应用(8个不能在SpanDex上正确运行),选取一个长度为35的密码。下图是运行完42个应用程序后对密码中每个字符得到的p-set的大小分布情况
可以看到'A','a','0'的p-set大小不会小于26和10,而'*','-','.','_'对于75%的应用都有较大的p-set。
为了模拟实际攻击,作者选取了uniqpass-v11中的131M的密码表,计算其中某一个密码p在某一程序中暴露出的p-set。假设攻击者已知p的长度,和每个字符的情况(也就是每个字符是否是大写字母,小写字母,数字,特殊字符)。也就是说p可以由一个正规表达式表示,那么就可以计算match set和match count。match set的大小表明在攻击者无法缩小p-set的情况下,是不大可能猜到密码的。
但实际情况中密码的使用服从zipf分布,也就是说match set中的密码是用户密码的概率不同。
几个密码库的密码符合zipf分布,并且参数s的值分别是0.246,0.695,0.23和0.7878。
作者使用这些值,对math set中的密码进行建模,并计算出了尝试次数的CDF。