安卓KeyStore栈溢出漏洞分析(CVE-2014-3100)

痉挛的左手 | 2014-07-02 11:03

近日发现有一些国内媒体以《Android最新漏洞:影响86%用户财产安全》为标题对此漏洞进行了报道。但我们的观点是,该漏洞仅在4.3的系统中存在,而其危害也被媒体有所夸大。
 
Keystroe是安卓平台的密钥存储服务,4.3以前以Locol Socket的形式接收用户对于服务的访问。4.3以后则作为一个binder服务的形式存在。
 
keystore
 
 
图 1 keystore原理图,援引自IBM研究员的分析文章
 
问题所在:
 
android.security.KeyStore类中的get方法允许传入一个名为keyName的String类型,客户端可以传入一个超长的字符串。
 
 
再看服务端的处理:
 
首先在栈上分配了一段缓冲区,大小是NAME_MAX
 
然后调用encode_key对keyName进行转码
 
这里面认为keyName.lenth()是缓冲区的长度,并且将内容转码后复制到栈上的char name,如果keyName.lenth()超长,则栈溢出
 
利用及其危害:
 
理论上,攻击利用程序有机会在Keystore进程内部执行任意代码,并且获取一些应用的关键密钥,比如VPN。
 
但是想要达到这种目的,需要解决以下问题:
 
-    使用ROP绕过数据执行保护(DEP)
 
-    解决ASLR 动态地址随机化问题
 
-    绕过Stack Canaries栈返回前的安全检查
 
-    编码问题,输入的buffer数据会被encode_key编码,这意味着shellcode在最终执行前会有一部分字节被修改
 
当然,KeyStore程序在崩溃之后会重新启动,所以理论上给了攻击程序反复尝试以利用成功的可能性
 
结论:
 
本文简单介绍了CVE-2014-3100的原理,并强调该漏洞仅在4.3中存在且目前仅有理论上的利用可能性。同时呼吁国内某些媒体能够抱有一种严谨的态度来报道安全事件,不要用夸张的不实描述引起不必要的恐慌。

喜欢数码科技资讯的你,就记得点击订阅啦。
关注「锋潮评测室」微信公众号【微信号:fengchaopingceshi】,还会送上更多你想要的哦~

相关标签: 安卓 keystore
1