谷歌本周分享了有关如何解决Android 11中的内存错误以及即将推出的平台版本将提供的其他安全改进的详细信息。
Android 11是移动操作系统的第18个版本,预计于今年第三季度推出,但自2020年初以来已可供开发人员使用。
新操作系统迭代中的主要改进之一与内存初始化有关,这有望消除C / C ++中发生的一整类问题:未初始化的内存错误。
当未首先将使用的内存初始化为已知的安全值时,通常会出现此类缺陷。因此,谷歌解释说,一个变量具有先前放置的值,攻击者可以预测甚至控制该值。
这可能会导致信息泄露,包括绕过ASLR(地址空间布局随机化),或使用堆栈或堆喷射控制流劫持。
“当未初始化的内存导致错误时,通常很难确定错误的来源,尤其是在很少触发的情况下。消除全部此类错误比单独查找它们要有效得多。”
另一种选择是自动堆栈变量初始化,该初始化将使用零或模式来初始化局部变量:前者对于字符串,指针,索引和大小更安全,而后者对于返回值通常更安全。
通过在上游Linux内核中合并自动堆栈和堆初始化,Android也将从这些功能中受益,从而使攻击者无法再控制局部变量和堆。
Google说,尽管有性能开销,但稳定性和安全性都得到了改善。
随着Android 11的发布,Google将Scudo设置为Android的默认本机分配器。
尽管它不能完全防止漏洞利用,但是Scudo可以帮助识别和缓解堆内存损坏的错误,例如双重释放,任意释放,基于堆的缓冲区溢出和释放后使用。
“通过降低分配模式的可预测性,并按大小分开分配,它还以一种使内存破坏更难以利用的方式来主动组织堆,”这家科技巨头说。
即将到来的Android迭代还包括集成在Scudo中的生产中堆内存安全错误检测工具GWP-ASan,并支持内核HWASAN(也称为基于软件标签的KASAN(KernelAddressSANitizer))。
此外,Google扩展了缓解编译器的功能,并使用CFI(控制流完整性)来缓解漏洞并强化NFC堆栈。