正如@Cube 在评论中已经指出的那样,一些(不是全部)Android 手机允许解锁引导加载程序以将自定义内核和固件闪存到您的设备。但是,只有有限数量的模型支持它,因为它是为研究人员和开发人员设计的。此外,在解锁过程中,您会丢失所有数据,因此您不能使用此功能将恶意系统或内核悄悄地刷入某人的设备,而不会引起他/她的注意。但一般来说,引导加载程序是被锁定的,所以这是防止 root 的一道防线:不允许刷写自定义软件。作为一项实验性功能,Android 最近还引入了 dm-verity 以使持久性 rootkit 更加困难。
另一种方法是使用权限提升攻击,这意味着您主动利用 Android 中的一个漏洞,该漏洞允许您获得 root 权限。例如,某些服务需要以 root 身份运行,因此如果您可以在其上下文中运行代码,您就可以使用 root 权限执行代码。然而,让我们回到你关于防御的问题。首先,应用程序的进程通过内核与其他进程和中间件隔离。更具体地说,Android (ab) 通过为每个应用程序分配一个唯一的用户 ID 来使用 Linux 的用户分隔。所以内核隔离它们的方式与在经典 Linux 系统上隔离用户的方式相同。因此,如果手头没有严重漏洞,其他程序/应用程序被感染的经典病毒在 Android 上根本不可能出现。还,中间件包含许多访问控制点,调用者在其中被检查和验证。此外,从 Android 4 开始,Google 开始将 SELinux 集成到 Android 中,即所谓的 Android 安全扩展或 SE for Android。在这里,添加了更细粒度的强制访问控制,以进一步降低攻击成功的机会。在防止特殊类型的攻击方面,Android 还在 4.x 版本中添加了对 ASLR 的支持,并从那时起对其进行了扩展。例如,在较新的 Android 5 版本中,只有在编译为与位置无关的可执行文件时才会加载二进制文件。添加了更细粒度的强制访问控制,以进一步降低攻击成功的机会。在防止特殊类型的攻击方面,Android 还在 4.x 版本中添加了对 ASLR 的支持,并从那时起对其进行了扩展。例如,在较新的 Android 5 版本中,只有在编译为与位置无关的可执行文件时才会加载二进制文件。添加了更细粒度的强制访问控制,以进一步降低攻击成功的机会。在防止特殊类型的攻击方面,Android 还在 4.x 版本中添加了对 ASLR 的支持,并从那时起对其进行了扩展。例如,在较新的 Android 5 版本中,只有在编译为与位置无关的可执行文件时才会加载二进制文件。
因此,这是 Android 针对一般攻击或特别是根漏洞提供的所有防御措施的一个子集。此列表并不完整,但它让您了解攻击者需要克服什么以及 Android 开发人员对安全性的关心程度(我个人非常感谢)。