一文看懂手机Root的操作与防护 手机root权限怎么开启

Root对于任何手机发烧友、电脑玩家或者从事移动设备研发的人来说都不陌生 。它代表了大多数移动设备用户能够掌握的最高权限 。
从技术上来说 , 用户有权修改系统文件 , 甚至控制账号 , 添加或删除硬件等 。但是对于普通用户来说 , 最大的用处就是卸载“Root之前无法卸载的软件” 。有的品牌出厂前安装了一些无法卸载的软件 。手机rooted后可以卸载这些软件 。Root相当于给了用户自由增减软件的权利 。
root的前世Root这个词起源于Linux/Unix系统 。众所周知 , Linux/Unix系统的文件系统是从根“/”开始的 , 形成倒树形文件系统结构 。Root是root的英文定义 , 所以Linux/Unix系统把root帐号的权限作为系统管理员的权限 。口碑 , root代表Linux/Unix上的最高权限 。
在移动设备发展的早期 , 各种移动设备使用不同的操作系统 , 其中塞班、Windows Phone、iOS和Android表现突出 。随着市场的选择 , 只有Android和iOS幸存下来 , 成为流行的手机操作系统 。根据POSIX标准协议和开源协议 , Android和iOS都应该在Linux/Uinx上保留相应的功能 。
其中 , Android是基于Linux的系统 , 而iOS使用的是达尔文(Darwin xnu)作为内核(Darwin来自BSD) 。根据开源操作系统 , Android和iOS都应该保留所有用户使用Root帐户控制设备的权利 。
但现实是Android和iOS都不允许用户使用Root权限 , 尤其是iOS对Root权限的监控和封锁已经到了前所未有的程度 , 以至于iOS的Root被称为“越狱” 。iOS上的Root过程比Android上的复杂和困难 , 所以本文主要以Android系统的Root为研究对象 , 详细介绍Root的前世 。
安卓系统的三种根模式相对于封闭的生态iOS系统 , Android的Root模式可谓是从百花齐放到统一万物 。不同版本的Android系统获取Root权限的主流方式不同 。

一文看懂手机Root的操作与防护 手机root权限怎么开启


在Android手机上 , 获取Root权限的途径主要有三种:漏洞、OEM官方解锁和工厂模式 。其中 , 通过漏洞获取Root是开发者最早的探索;在工厂模式下获取Root是在骁龙9008模式下通过底层串口将专用ROM刷写入手机中获取Root;官方的解锁方式是OEM厂商提供给部分发烧友的“渠道” 。解锁Bootloader锁 , 就可以得到flash ROM , 得到Root 。
阶段1:百个漏洞竞争 , 先锋CVE-2009-2692漏洞
Android系统早期 , 安全问题被忽视 。Linux中出现的很多安全问题都可以在Android中重现 。其中 , 最早公开记录并可追溯的是Znix利用Linux漏洞CVE-2009-2692编写的Android版本权限提升程序 。代码如下:
一文看懂手机Root的操作与防护 手机root权限怎么开启


使用蓝牙协议触发发送页面漏洞
一文看懂手机Root的操作与防护 手机root权限怎么开启


特权提升攻击负载
造成这个漏洞的主要原因是sock_sendpage没有检查socket_file_ops数据结构的snedpage字段的指针 。有些模块没有sendpage函数 , 指针初始化为NULL 。此时直接调用sendpage会导致直接调用空指针 , 导致出错 , 进一步提升权限 。Znix直接将已有的有效用户id(euig)和有效用户组(egid)指针赋给0 , 即Root用户和Root用户组 , 再将有效用户和有效用户组指针赋给真实用户指针和真实用户组指针 , 从而达到权限提升的目的 。那么这个攻击负载就是利用蓝牙协议和send_page的漏洞触发的 。

推荐阅读