本文主要记录相关漏洞和root原理,有时间就关注下,不定期更新。有同样兴趣的可以互相交流。
其中有的可能已修复或者无法再次利用,只做兴趣记录的资料。
1.利用adbd进程的降权失败,从而使得adbd有root权限,从而使用push将su放到system/bin或者system/xbin代替原有的su,并安装权限管理apk限制root。原有的su会检查用户权限,而替换掉的则不检查,但是会通过权限管理的黑白名单来实现类似的检查。
这方面的文章很多,主要由rageagainstthecage实现。SuperOneClick,什么 一键root之类的好多都是这个。下面附上一些连接备忘。
http://blog.csdn.net/wangkr111/article/details/12677873
2.利用android签名系统对系统应用的检查不够充足的漏洞。Android系统在验证系统软件的时候只对软件的AndroidManifest.xml文件进行了签名校验,而没有对软件的其他文件做签名校验。相关链接:
http://starriv.com/lbeduimasterkedeyliyong.html/
3.利用zip可以打包同名(也同路径)文件,并且签名验证时只要同名的文件有一个验证通过,其他的都算通过。
具体是zip打包时会追加最后一个文件,而android加载时,加载的是第一个文件。这样可以通过如下方式来欺骗验证:
(1)提取原版apk内的classes.dex,并复制一份为classes-ori.dex;
(2)用baksmali反编译classes.dex,然后修改其中内容;再用smail重新编译为修改版classes.dex
(3)删掉原版apk内的classes.dex,将修改版classes.dex添加到原版apk内
(4)用python的zip追加模式,将classes-ori.dex以“classes.dex”路径追加到原版apk
http://drops.wooyun.org/papers/219
4.利用c代码和java代码在解析zip文件时的不同来追加内容。
android在解析Zip包时,C代码和Java代码存在不一致性:Java将short整数作为有符号数读取,而C将其作为无符号数。
原理涉及到zip文件读取,很多内容,只附上链接。
http://security.tencent.com/index.php/blog/msg/26
http://www.hackdig.com/?11/hack-7045.htm
下面是2个看到的,没怎么了解,仅做记录。
5,CVE-2010-EASY:linux的内核的模块化程度很高,很多功能模块是需要到时候再加载,在android中由init进程来管理这些的。但是这个init进程不会检测发给它的指令的来源,不管是内核发送的,还是用户发送的,它都执行不误,会顺从的去加载或卸载一些模块,而加载的模块都是以root身份运行的。因此你可以给它准备一个精心制作的功能模块(ko文件),然后触发相应的加载条件,比如热拔插、开关wifi等等,该功能模块运行后,会生成/data/local/tmp/rootshell一个带s位的shell。
6,ZergRush原理:具有root权限的vold进程使用了libsysutils.so库,该库有个函数存在栈溢出,因此可以root权限执行输入的shellcode。