Android Root方法原理解析及Hook(一) adbd漏洞
2014-11-21 15:24
615 查看
转自: http://blog.csdn.net/jackaduma/article/details/7286334
漏洞在于Android源码中的 adb.c文件 中
int main(){
...
...
setgid(AIL_SHELL); // 失败不退出
setuid(AIL_SHELL); //同上
...
...
}
adbd进程启动,开始时会以root权限执行一些初始化操作,之后会降权至当前shell用户权限;
但若降权失败,adbd进程不会退出,仍然启动起来,此时就是root权限的adbd进程
攻击代码原理:
不断fork子进程(其实是孙进程),然后退出,产生僵尸进程,使得当前shell用户的pid数达到上限,然后kill掉adbd进程,然
后再迅速fork一个,使之仍然达到上限,这样将无法再为当前用户创建进程
过段时间,init进程会检测到当前没有adbd进程,会运行adb.c,利用漏洞得到root权限的adbd进程
...
for(;;)
{
if ((p=fork())==0){
exit(0);
}
else if(p<0){
...
}
else{
...
}
}
...
Myhook code:
打log至logcat输出
#include <cutils/log.h>
#define LOG_TAG "adb hooker"
int main(){
...
...
if(setgid(AIL_SHELL)!=0){
LOGE("failed to setgid for shell user");
exit(0);
}
if(setuid(AIL_SHELL)!=0){
LOGE("failed to setuid for shell user");
exit(0);
}
漏洞在于Android源码中的 adb.c文件 中
int main(){
...
...
setgid(AIL_SHELL); // 失败不退出
setuid(AIL_SHELL); //同上
...
...
}
adbd进程启动,开始时会以root权限执行一些初始化操作,之后会降权至当前shell用户权限;
但若降权失败,adbd进程不会退出,仍然启动起来,此时就是root权限的adbd进程
攻击代码原理:
不断fork子进程(其实是孙进程),然后退出,产生僵尸进程,使得当前shell用户的pid数达到上限,然后kill掉adbd进程,然
后再迅速fork一个,使之仍然达到上限,这样将无法再为当前用户创建进程
过段时间,init进程会检测到当前没有adbd进程,会运行adb.c,利用漏洞得到root权限的adbd进程
...
for(;;)
{
if ((p=fork())==0){
exit(0);
}
else if(p<0){
...
}
else{
...
}
}
...
Myhook code:
打log至logcat输出
#include <cutils/log.h>
#define LOG_TAG "adb hooker"
int main(){
...
...
if(setgid(AIL_SHELL)!=0){
LOGE("failed to setgid for shell user");
exit(0);
}
if(setuid(AIL_SHELL)!=0){
LOGE("failed to setuid for shell user");
exit(0);
}
相关文章推荐
- Android Root方法原理解析及Hook(一) adbd漏洞
- Android Root方法原理解析及Hook(三) FrameworkListener漏洞
- Android Root方法原理解析及Hook(二) udev漏洞
- Android Root方法原理解析及Hook(二) udev漏洞
- Android Root方法原理解析及Hook(四) GingerBreak
- Android Root方法原理解析及Hook(三) FrameworkListener漏洞
- Android Root方法原理解析及Hook(一) adbd漏洞
- Android Root方法原理解析及Hook(四) GingerBreak
- Android 中免 Root 实现 Hook 的 Dexposed 实现原理解析以及如何实现应用的热修复
- Android中免root的hook框架Legend原理解析
- Android root的两种方法 -- udev漏洞和setuid漏洞
- android 安全讲座第四层 手机Root授权原理细节全解析(1)
- Android插件化原理解析——Hook机制之动态代理
- 我的Android进阶之旅------>adbd cannot run as root in production builds 的解决方法
- Android插件化原理解析——Hook机制之动态代理
- Android中免Root实现Hook的Dexposed框架实现原理解析以及如何实现应用的热修复
- Android ListView 单条刷新方法实践及原理解析
- Android ListView 单条刷新方法实践及原理解析
- android ListView 单条刷新方法实践及原理解析
- Android插件化原理解析——Hook机制之Binder Hook