Android Root方法原理解析及Hook(一) adbd漏洞

来自于:http://blog.csdn.net/jackaduma/article/details/7286334

漏洞在于Android源码中的 adb.c文件 


 
  1. int main(){  
  2.     ...  
  3.     ...  
  4.     setgid(AIL_SHELL); // 失败不退出   
  5.     setuid(AIL_SHELL);  //同上   
  6.     ...  
  7.     ...  
  8.     }  

adbd进程启动,开始时会以root权限执行一些初始化操作,之后会降权至当前shell用户权限;但若降权失败,adbd进程不会退出,仍然启动起来,此时就是root权限的adbd进程

 

攻击代码原理:

      不断fork子进程(其实是孙进程),然后退出,产生僵尸进程,使得当前shell用户的pid数达到上限,然后killadbd进程,然      后再迅速fork一个,使之仍然达到上限,这样将无法再为当前用户创建进程

      过段时间,init进程会检测到当前没有adbd进程,会运行adb.c,利用漏洞得到root权限的adbd进程

[cpp] view plain copy print ?
  1. ...  
  2.     for(;;)  
  3.     {  
  4.         if ((p=fork())==0){  
  5.             exit(0);  
  6.         }  
  7.         else if(p<0){  
  8.             ...  
  9.         }  
  10.         else{  
  11.         ...  
  12.         }  
  13.     }  
  14.     ...  

Myhook code:

loglogcat输出


[cpp] view plain copy print ?
  1. #include <cutils/log.h>   
  2. #define LOG_TAG "adb hooker"   
  3.   
  4. int main(){  
  5.     ...  
  6.     ...  
  7.       
  8.     if(setgid(AIL_SHELL)!=0){  
  9.         LOGE("failed to setgid for shell user");  
  10.         exit(0);  
  11.     }  
  12.     if(setuid(AIL_SHELL)!=0){  
  13.         LOGE("failed to setuid for shell user");  
  14.         exit(0);  
  15.     }  

 

你可能感兴趣的:(android,root,root,Android权限,Android漏洞,root方法原理)