谷歌工程师 Ivan Lozano 写道,即将推出的 Android P(最近发布了beta 版)将使用更多基于编译器的安全缓解措施,包括控制流完整性和整数溢出检查。
基于编译器的缓解(LLVM/Clang 编译器提供的一组功能)背后的基本思想是在编译时对操作进行增强,以便在运行时捕获会触发未定义行为的操作,并让这些操作失效。LLVM/Clang 支持多种检查器,包括除数为零、违反空值、负数组边界和控制流完整性。
谷歌开始在 Android Nougat (后来作为 Android 7 发布)中开始使用 LLVM/Clang 检查器,后来在 Android O (Oreo,Android 8.0)中添加了控制流完整性检查。通过 Android P,Lozano 写道,谷歌已经大大扩展了对操作系统很多组件的检查和控制流完整性的支持,包括媒体框架和其他安全关键的组件,如蓝牙、NFC 和内核。
控制流完整性解决了代码重用(code-reuse)攻击问题,攻击者利用现有代码,例如通过查找以 ret 指令结尾的短代码序列并以任意顺序执行它们。攻击者因此可以控制栈而无需注入任何代码,极大地增加了检测此类攻击的复杂性。为了对抗这种类型的攻击,控制流完整性旨在将程序的控制流限制在编译时确定的调用图。如果程序尝试分支到意外的调用目标,则会被安全终止。Lozano 表示,控制流完整性在编译和运行时都会带来一定的开销,但谷歌在 Android 上的测试显示,它们几乎可以忽略不计。
至于检查器,谷歌已将整数溢出检查器的使用范围扩展到其他库,包括 libui、libnl 等。整数溢出是攻击者控制程序的常用手段,也是影响以前版本 Android 的 Stagefright 漏洞的核心。谷歌在这方面的贡献是改进 LLVM 整数溢出检查器,在大部分情况下将其开销减少 75%以上。
如果你拥有 Pixel 手机或其他受支持的设备,可以通过注册 Android P beta 计划访问 Android P beta。
查看英文原文: Android P Will Expand its Use of Compiler-based Security Mitigations
评论