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

来源:互联网 发布:查询mac地址命令 编辑:程序博客网 时间:2024/04/29 21:40

转自:  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数达到上限,然后killadbd进程,然     

后再迅速fork一个,使之仍然达到上限,这样将无法再为当前用户创建进程

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

    ...          for(;;)          {              if ((p=fork())==0){                  exit(0);              }              else if(p<0){                  ...              }              else{              ...              }          }          ...  

Myhook code:

loglogcat输出

    #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);          }  


0 0
原创粉丝点击