Root,对于任何手机发烧友、玩机客、从事移动设备研发的人员来说,并不陌生,它代表绝大部分移动设备的使用者能够掌握到的最高权限。
从技术层次来讲,用户拥有了修改系统文件的权限,甚至可以控制账户、增加或删除硬件等,但对普通用户来说,最大的一个用处就是卸载“Root之前无法卸载的软件”,部分品牌商在手机出厂之前内置安装了一些无法卸载的软件,这些软件在手机Root之后,都可以被卸载掉,Root相当于让用户拥有了自由增减软件的权限。
Root的前世今生
Root一词起源于Linux/Unix系统,众所周知,Linux/Unix系统的文件系统以根“/”出发向下形成一个倒置的树型文件系统结构,Root即根的英文释义,那么Linux/Unix系统就以Root账号所拥有的权限作为系统管理员的权限,口口相传,Root就代表了Linux/Unix上最高的权限。
在移动设备发展的初期,各种移动设备所使用的操作系统各不相同,比较出众的有塞班、Windows Phone、iOS、安卓。随着市场的选择,只有安卓与iOS留存下来,成为普及的手机操作系统。按照POSIX标准协议和开源协议的规定,安卓与iOS都应该保留了Linux/Uinx上的相应的功能。
其中,安卓就是以Linux作为基础进行构建的系统,而iOS则是使用了以xnu为内核的Darwin(Darwin来自于BSD)。按照开源操作系统而言,安卓和iOS都理应保留所有用户使用Root账户去掌控自己设备的权限。
但现实情况是,安卓与iOS不允许用户使用Root权限,尤其是iOS对于Root权限的监控与封锁达到了前所未有的地步,以至于对iOS的Root被称作“越狱”。iOS上的Root过程相对于安卓更为复杂与困难,所以本文主要以安卓系统的Root为主,详细介绍Root的前世今生。
安卓系统的三大Root方式
相较于封闭生态的iOS系统,安卓的Root方式可谓是从百花齐放到万物归一。不同安卓系统版本,获取Root权限主流方式不同。
3、进入bootloader界面,输入对应的fastboot命令,进入twrp界面。
4、选择Install,然后选择Magisk.zip。
5、进入安装Magisk的界面,将滑动条从左滑到顶端。如果出现如下界面,则证明安装Magisk成功。
6、重启手机后,使用将maigsk.zip改回magisk.apk,使用如下命令安装Magisk管理器。
随后可以在手机中打开Magisk,发现Magisk已经正常工作。
如何检测设备的Root操作
对于安全从业者与一些需要风控的企业,需要得知用户的手机是否处于风险状态,是否被Root。
1、包名检测。
由于Magisk是通过Maigsk.apk进行管理它的su权限分发的,所以可以使用获取包名的方式检查用户手机是否存在Magisk App来得知用户是否使用了Magisk Root,具体代码如下:
尝试运行程序,得到如下结果。
在上述方法中,虽然能检测到用户安装了Magisk,但是由于法律对用户隐私的保护,获取包名的方式会触及隐私合规红线,所以这种方法需要一定的权限,在使用该方法时要慎之又慎。
2、专业安全产品。
顶象设备指纹、顶象业务感知防御平台能够实时有效识别Root风险。
顶象设备指纹:能精准识别模拟器、root、越狱、调试、代码注入、多开、VPN代理等风险。包含,iOS平台hook、越狱行为,安卓root、debug、内存dump、注入、多开、模拟器、漏洞攻击等风险行为,WEB平台下浏览器颜色深度、分辨率,浏览器与系统、UA的匹配性和一致性、cookie是否禁用等行为。
顶象业务安全感知防御平台:基于威胁探针、流计算、机器学习等先进技术,集设备风险分析、运行攻击识别、异常行为检测、预警、防护处置为一体的主动安全防御平台,能够实时发现摄像头遭劫持、设备伪造、设备Root等恶意行为,有效防控各类人脸识别系统风险。它具有威胁可视化、威胁可追溯、设备关联分析、多账户管理、跨平台支持、主动防御、开放数据接入、防御自定义和全流程防控等特点。
写在最后
本文从Root的历史出发,讲述了获取Root的发展历史以及轶事,教大家从0到1完成对自己安卓手机的Root,提出了一些有效的检测Root的方式。Root与HOOK一样,是一把双刃剑,在普通人手里,它可以让系统不再受到约束,可以带来更好的手机使用体验,但在黑灰产手里,会变成非法牟利的工具,作为安全从业者,我们要辩证地看待每项技术,对非法行为我们要重拳出击,为安全事业添砖加瓦。
在上一篇文章《欲知己之所防,先知彼之所攻——论Hook 技术的攻防对抗》我们提到Hook的攻击,Hook一定需要Root吗?答案是否定的。如果开发者有能力修改art源码、劫持Zygote,是可以完成Rootless HOOK操作的,Root是为了让HOOK及HOOK模块管理工具的使用降低成本,让HOOK操作者的重心不再放在HOOK的前置条件,而是更专注于HOOK模块的开发。