谷歌本周分享了有關(guān)如何解決Android 11中的內(nèi)存錯誤以及即將推出的平臺版本將提供的其他安全改進的詳細信息。
Android 11是移動操作系統(tǒng)的第18個版本,預(yù)計于今年第三季度推出,但自2020年初以來已可供開發(fā)人員使用。
新操作系統(tǒng)迭代中的主要改進之一與內(nèi)存初始化有關(guān),這有望消除C / C ++中發(fā)生的一整類問題:未初始化的內(nèi)存錯誤。
當未首先將使用的內(nèi)存初始化為已知的安全值時,通常會出現(xiàn)此類缺陷。因此,谷歌解釋說,一個變量具有先前放置的值,攻擊者可以預(yù)測甚至控制該值。
這可能會導(dǎo)致信息泄露,包括繞過ASLR(地址空間布局隨機化),或使用堆;蚨褔娚淇刂屏鹘俪。
“當未初始化的內(nèi)存導(dǎo)致錯誤時,通常很難確定錯誤的來源,尤其是在很少觸發(fā)的情況下。消除全部此類錯誤比單獨查找它們要有效得多!
另一種選擇是自動堆棧變量初始化,該初始化將使用零或模式來初始化局部變量:前者對于字符串,指針,索引和大小更安全,而后者對于返回值通常更安全。
通過在上游Linux內(nèi)核中合并自動堆棧和堆初始化,Android也將從這些功能中受益,從而使攻擊者無法再控制局部變量和堆。
Google說,盡管有性能開銷,但穩(wěn)定性和安全性都得到了改善。
隨著Android 11的發(fā)布,Google將Scudo設(shè)置為Android的默認本機分配器。
盡管它不能完全防止漏洞利用,但是Scudo可以幫助識別和緩解堆內(nèi)存損壞的錯誤,例如雙重釋放,任意釋放,基于堆的緩沖區(qū)溢出和釋放后使用。
“通過降低分配模式的可預(yù)測性,并按大小分開分配,它還以一種使內(nèi)存破壞更難以利用的方式來主動組織堆,”這家科技巨頭說。
即將到來的Android迭代還包括集成在Scudo中的生產(chǎn)中堆內(nèi)存安全錯誤檢測工具GWP-ASan,并支持內(nèi)核HWASAN(也稱為基于軟件標簽的KASAN(KernelAddressSANitizer))。
此外,Google擴展了緩解編譯器的功能,并使用CFI(控制流完整性)來緩解漏洞并強化NFC堆棧。