7月30日,新闻又爆出Android新的签名漏洞 “假 ID”。每一个Android应用程序都有自己的数字签名,本质上来说就是一张ID卡。例如Adobe系统在Android系统上有一个特殊的签名,所有Adobe的程序都有基于这一签名的ID。Bluebox公司发现,当一个应用程序闪射一个Adobe ID,Android并不会与Adobe核查这是否是真实的ID。这意味着一个恶意用户可以基于Adobe的签名创造一个恶意软件并植入你的系统。
这个问题并不只是Adobe系统特有,黑客可以创造一个恶意应用程序冒充谷歌钱包,然后获得付款和财务数据。相同的问题也出现在某些设备上的管理软件,这使得黑客可以完全控制整个系统。“本质上来说,我们发现了一种制造虚假ID的方法,”佛利斯塔尔这样说道。“很多黑客都能够创造假ID卡,但问题是他们创造的是哪一种虚假ID卡?”这一缺陷会影响Android2.1以上系统,尽管最新的系统4.4或者称KitKat已经修复了这一漏洞,因为这个系统与Adobe相关,据Bluebox表示。从2012年至2013年,大约14亿新的设备装有Android操作系统,据市场研究机构Gartner公司表示。Gartner估计今年将有11.7亿个Android设备。
原则上,每个应用的签名时只用一个证书,这个证书最终会保存在APK文件的META-INF/CERT.RSA。如果我们想做一个二次打包的“盗版“应用,可以生成一个证书链,包含两个证书,根证书是该应用的官方证书,从APK中获得,二级证书是伪造证书,真正用于对APK中的所有文件进行自签名,这样就既可以通过安装时的签名验证,也可以在运行时欺骗系统误以为是真的应用,从而被授权。
由此我们联想到国内的安全现状,二次打包猖狂,牵连应用非常多,尤其是知名移动金融应用,如支付宝,各大银行客户端等。同时很多安全软件提供正版签名验证功能,帮助用户鉴别盗版应用,免收欺诈。甚至一些应用自己也会做本地或远程签名验证,如微信。
我们设想安全软件做正版签名时是否也会犯类似的错误?只验证根证书或者只要匹配一个证书成功就可以了。
首先,我们构造如下的证书链。
然后我们利用这个证书链对支付宝做了重签名,真假证书同时打包到APK中。然后使用腾讯手机管家,360手机卫士,豌豆荚进行盗版签名验证检查,测试结果如下:
腾讯手机管家,豌豆荚(洗白白)能检测,360手机卫士无法检测,支付宝也无法检测。
腾讯手机管家检测出盗版支付宝
豌豆荚检测出盗版支付宝
360未检测出盗版支付宝
完整演示视频地址:http://v.youku.com/v_show/id_XNzUyMjUwOTI4.html
最后,我们又做了一个实验,只用一个假证书做成盗版支付宝,结果除了支付宝自身,其他3家都可以检测出来。于是我们断定支付宝没有实现自我签名验证,也就是说如果用户手机上没有装盗版检测的软件,那存在很大的可能性,用户的支付宝账户被盗,财产受损。
移动支付作为越来越普及的生活习惯,我们希望安全界老大360早日解决签名验证的问题,不让恶意软件有可趁之机。同时我们也希望支付宝作为支付行业龙头,这种基本的自我保护是必须做的,不能完全依赖于第三方软件检测,这也是对用户最基本的责任。