谷歌工程师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
领取专属 10元无门槛券
私享最新 技术干货