一、Apk升级dos漏洞
问题简述:Android系统在安装应用时,会进行如下校验
1、计算除META-INF\ 文件夹以外所有文件的hash,同MANIFEST.MF文件中的hash做比对。不同,则拒绝安装;
2、计算MANIFEST.MF的hash,
以及MANIFEST.MF中每一个hash的hash,同.SF文件中的hash做比对。不同,则拒绝安装;
3、从.RSA
文件中取出开发者证书,然后从证书中提取开发者公钥,用该公钥对.SF文件做数字签名,并将结果同.RSA文件中的.SF签名进行比对。不同,则拒绝安装。
但校验过程,是依次计算每个Android源文件的hash,然后跟MANIFEST.MF中对比。由于并没有计算整体hash,这个过程中,MANIFEST.MF文件中是可以有多余hash值的。也就是说使用压缩软件打开一个apk文件,然后删除其中的除META-INF文件夹下的文件,之后这个apk仍然是可以被Android系统验签通过,成功安装,但是却运行不起来,dos攻击就发生了。
攻击场景:
1、读取目标app的apk文件,(如下,apk文件是所以用户可读取的)
root@Coolpad9976A:/ # ls -l /data/app
ls -l /data/app
-rw-r--r-- system system 10726833 2015-12-19 10:04
baidumapsdk.demo-2.apk
-rw-r--r-- system system 3069109 2015-11-17 18:06
cn.itools.tool.market-1.apk
-rw-r--r-- system system 23843357 2016-01-05 15:09
com.achievo.vipshop-1.apk
-rw-r--r-- system system 7541775 2015-10-09 16:18
com.android.coolwind-1.apk
-rw-r--r-- system system 2988751 2015-10-28 11:25
com.android.reverse-1.apk
2、删除apk中的某些文件
3、使用系统软件安装程序,提示用户升级安装应用
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(fakeapk)),
"application/vnd.android.package-archive");
4、安装app过程中,新应用的签名信息必须与已装应用的签名完全一样,而且新应用的版本号不能低于已装应用
二、验证过程中,没有校验开发者证书本身的完整性,所以可以更改证书过期时间、证书主体(subject,开发者标识)替换
三、验证过程,没有验证META-INF文件夹下的文件,可以隐藏evil code