阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Android root 原理

75次阅读
没有评论

共计 1673 个字符,预计需要花费 5 分钟才能阅读完成。

0x00 关于 root

linux 和类 Unix 系统的最初设计都是针对多用户的操作系统,对于用户权限的管理很非常严格的,而 root 用户(超级用户)就是整个系统的唯一管理员,拥有等同于操作系统的所有权限。所以一旦获取到 root 权限,就可以对整个系统进行访问和修改。而在 Android 下获取 root 权限之后就可以自己定制系统,卸载一些预装软件,完全掌控自己的设备。

0x01 setUID

在讨论 root 的原理之前,有一个非常重要的概念,就是文件的 setUID 权限。linux 下普通的文件权限大家都很清楚,可读,可写,可执行,下图很清楚的一个普通的可执行文件 root 的权限,r(可读),w(可写),x(可执行)。
Android root 原理

但是,要考虑一种情况,比如说,一个用户是有权修改自己的密码的,但是记录密码的文件 /etc/shadow 只有 root 用户才是可写的,那普通用户如何才能修改自己的密码呢?这一切都要归功于 setUID 的设置,修改密码时使用的命令 passwd 对应的二进制程序是 /usr/bin/passwd
Android root 原理

可以看到 passwd 的二进制文件的权限位中不仅仅是 rwx 了,多了一个 s 权限,而这个 s 权限就是我们的主角,setUID 权限。

由于 passwd 有 setUID 权限,所以 linux 系统可以临时把这个文件的所有者(root)身份角色赋给普通用户,以达到让普通用户可以修改自己密码的目的。

那如何设置 setUID 权限呢?

平常使用的普通文件权限位是由 3、3、3共 9 位的二进制数字组成 ---|---|---,分别对应文件所有者,文件所有者同一用户组权限和其他用户权限。最开始的名为 root 的可执行文件的权限为 rwxrwxr-x,所对应的二进制位就是 111 111 101,然后每三位对应 421 换算成 16 进制,就是 775。而新增的 setUID 权限是在前面新增了三位,分别表示 setGID、setUID、stick bit 权限,而我们现在只关心 setUID 权限。因此加上 setUID 权限之后,文件的权限应该由 4 位数字组成,例如之前的 root 文件加上 setUID 权限就是 4755。而修改密码的 passwd 文件对应的权限位就是 4755。

可以通过一个小例子来直观的感受一下,平常使用的 cat 命令对应的二进制文件是没有 setUID 权限的:

Android root 原理

可以在普通用户下尝试使用 cat 去读取 /etc/shadow 文件的内容:

Android root 原理

提示权限不够,再给 cat 加上 setUID 权限之后再去读取 /etc/shadow 的内容:

Android root 原理

是可以读出来的,但是 /etc/shadow 中的内容都经过加密处理。

0x02 Linux 下的 root

平常使用的 linux 发行版,需要切换到 root 用户时,直接使用 su 命令,然后输入 su 用户的密码就可以切换到 root 用户了。
Android root 原理

Android root 原理

0x03 Android 的 root

但是在未 root 的 Android 设备上是没有 su 的二进制文件,直接执行 su 命令会提示 ”su not found”。
Android root 原理

再进入已经 root 过的设备上查看,平常在 adb shell 中用的命令对应的二进制文件都是在 /system/bin 目录下,是存在 su 文件的:
Android root 原理

可以看到这里的 su 只是一个指向 /system/xbin/ 的一个链接。
Android root 原理

可以看到这里的 su 是有 setUID 权限位的。

而要在系统分区 /system/xbin 中添加文件本身就是需要 root 权限,而且设置 su 文件的所有者为 root 用户也是需要 root 权限的,设置 setUID 权限同样也需要 root 权限。

这就进入到了一个死循环当中,要利用 su,首先要有 root 权限。因此这时就需要利用到 Android 存在的漏洞,Android 系统本身存在着很多以 root 权限运行的原生进程,而这些 root 进程中如果存在可以利用的漏洞,就可以利用进程的 root 身份:

  1. 拷贝 su 文件到 /system/xbin 系统分区;
  2. 设置 su 文件所有者为 root 用户;
  3. 设置 su 文件的 setUID 权限,便于自己的进程执行 su 命令获取 root 权限。

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-24发表,共计1673字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中