视频:
https://www.youtube.com/watch?v=mCF5kaCt4NI
漏洞挖掘过程
产生漏洞代码分析
漏洞利用
0x00 背景
最近看blackhat上各位大佬关于Android的议题,找到bluebox发现matser key的过程。记录下学习的过程。
(1)MANIFEST.MF:这是摘要文件。程序遍历Apk包中的所有文件(entry),对非文件夹非签名文件的文件,逐个用SHA1生成摘要信息,再用Base64进行编码。如果你改变了apk包中的文件,那么在apk安装校验时,改变后的文件摘要信息与MANIFEST.MF的检验信息不同,于是程序就不能成功安装。
说明:这是Android签名验证过程的第一步,保证每个APK包内的每个文件与MANIFEST.MF中的摘要值一一对应,修改某个文件内容,必须修改MANFEST.MF文件中的摘要值,使他们对应起来。
(2)CERT.SF:这是对摘要的签名文件。对前一步生成的MANIFEST.MF,对MANIFEST.MF中的每一条内容分别进行SHA1计算,然后再用Base64编码转换。此外,把MANIFEST.MF的内容也进行SHA1计算,并且计算BASE64编码。将上述内容写入CERT.SF文件中。
说明:这是签名认证过程的第二步,这一步做的是多第一步得到的签名文件的摘要,比如第一步中对文件和MANIFEST.MF摘要都改了,这一步中MANIFEST.MF的摘要值也要修改,否则就对应不起来。
所以,前面这两步,做的都是摘要,是为第三步骤做准备的,第三步骤才是最重要的。
(3)CERT.RSA文件中保存了公钥、所采用的加密算法等信息,此外重要的,还包括对CERT.SF中的内容的用私钥进行加密之后的值。
说明:在这一步,即使开发者修改了程序内容,并生成了新的摘要文件,MANIFEST.MF能与内容对应起来,CERT.SF也能与内容对应起来,但是攻击者没有开发者的私钥,所以不能生成正确的签名文件(CERT.RSA)。系统在对程序进行验证的时候,用开发者公钥对不正确的签名文件进行解密,得到的结果对应不起来,所以不能通过检验,不能成功安装文件。
结论:从上面的总结可以看出,META-INFO里面的说那些文件环环相扣,从而保证Android程序的安全性。(只是防止开发者的程序不被攻击者修改,如果开发者的公私钥对对攻击者得到或者开发者开发出攻击程序,Android系统都无法检测出来。)
0x00漏洞原理:
提权到system
往/data/local.prop里写入ro.kernel.qemu=1 来进行进行提权
检测漏洞
反射调用ZipFile.java的函数
17年底也出现过签名的janus漏洞
zip坑太多,Google也出了v2签名来应对这些事情
https://www.anquanke.com/post/id/90075
参考
http://www.cnblogs.com/vendanner/p/5111116.html
庖丁解牛–Android 第三个Master Key漏洞揭秘
https://security.tencent.com/index.php/blog/msg/26
Android Master Key漏洞利用与修复
https://bbs.pediy.com/thread-182195.htm
cert.rsa作用
https://blog.csdn.net/baolong47/article/details/17334903