时时勤拂拭,勿使惹尘埃

TOC

Categories

Android(三)Android L&M中绕过安全软件证书白名单


(2015年6月29日发在AVLTeam blog Android L&M中绕过安全软件证书白名单
AVL移动安全团队近期发现Android L&M系统签名机制存在一定问题,该问题会引起恶意软件绕过部分使用证书白名单机制的手机安全软件,导致无法被查杀。
AVL移动安全团队近期发现一类恶意软件有如下特征:
      1 META-INF文件中同时存在两个签名文件:CERT.DSA和CERT.RSA。
      2 该恶意软件在Android 4.x因签名验证失败而无法安装,而Android 5.x以上可以成功安装。
      3 部分手机安全软件无法检出该恶意软件。

此恶意软件有两个签名文件:

分析得知, CERT.DSA为EA mobile游戏的官方签名,已被部分手机安全软件列入证书白名单,此处是在重打包过程中生成进入APK文件中的。而CERT.RSA才是该恶意样本的正式签名。
通常APK的META-INF文件夹里面有三个文件,分别名为MANIFEST.MF、CERT.SF和CERT.RSA/DSA/EC,这些就是使用signapk.jar生成的签名文件。其中:
  • 1 MANIFEST.MF中的各SHA-1值 == SHA-1(除META-INF目录外的文件);
  • 2 CERT.SF中各值 == (SHA-1 + Base64)(MANIFEST.MF文件及各子项);
  • 3 CERT.RSA/DSA/EC == 公钥+加密算法信息等;
正常情况下,一个APK中只会生成一个CERT.RSA/DSA/EC签名文件。但当若将APK压缩包中时加入其他的签名文件,即可同时存在两个或两个以上的签名文件。

恶意软件在Android 4.x无法安装,而Android 5.x以上可以成功安装

Android支持DSA、RSA、EC三种加密算法进行签名:
Android 4.4 API19-java.util.jar. JarVerifier:

Android 5.1 API22-java.util.jar. JarVerifier:
对比Android 4.4和Android 5.1对应代码对比,在Andriod 5.1中删掉了一段对verifyCertificate(key)结果的验证代码,故可导致:
  • 1、Android 4.x安装APK只会校验读取到的第一个签名文件(如CERT.DSA和CERT.RSA同时存在,只会读取到CERT.DSA),如果验证错误就会退出;
  • 2、Android 5.x以上安装APK会逐一校验所有的签名文件,有一个验证通过即可安装成功;
  • 3、若安全软件使用证书白名单机制,且验证证书时不检查证书合法性,可能会出现只读取第一个签名文件(如该样本中的CERT.DSA),导致被该白证书误导而无法检出。

实际测试:

1 以通用检出的拦截马a.apk为例(2015.6.10),未处理前vt检出24/57:
2 将拦截马重打包,并以EC算法签名,并植入某大厂RSA证书:
 
3 上传vt测试(2015.6.10),检出20/57,有四家安全软件被绕过:
4 半个月后继续vt测试(2015.6.26),虽然检出厂商比之前多了八家,但依然还剩四家安全软件被绕过:
虽不清楚Google出于何种策略而在Android L中删掉了该段代码,使得APK中只要有一个签名文件验证通过即可安装,而目前Android M预览版中依然如此。但却给沿用Android 4.x验证签名方式的安全软件带来了一定的安全问题。
证书白名单机制是安全软件常用的一种白名单方式,若被绕过后果难以估量。由于各家安全软件检出策略不一样,此绕过方式实际测试影响安全软件数量并不多,但国内外都有,依然会对不少普通用户造成安全风险,希望被绕过厂商能及时修复问题。
鉴于各安全厂商对VT上的维护并不一定都很及时,所以参照信息有限,该测试并不一定完全准确。

0 评论:

发表评论