內(nèi)存安全:Arm 內(nèi)存標(biāo)記擴(kuò)展如何應(yīng)對(duì)業(yè)內(nèi)安全挑戰(zhàn)
計(jì)算的未來將由我們?nèi)粘I罡鱾€(gè)方面的日益數(shù)字化所驅(qū)動(dòng),這也將導(dǎo)致軟件和系統(tǒng)復(fù)雜性的不斷增加。據(jù)相關(guān)數(shù)據(jù)報(bào)告稱,2022 年報(bào)告的漏洞數(shù)量超過 23,000 個(gè) (其中超過 17,000 個(gè)被歸類為嚴(yán)重漏洞),連續(xù)六年創(chuàng)下新高。
利用構(gòu)建于最新 Armv9 架構(gòu)的 Arm CPU,我們可提供內(nèi)存標(biāo)記擴(kuò)展 (Memory Tagging Extension, MTE) 等安全功能,以降低上述復(fù)雜性,并為軟件開發(fā)者、芯片供應(yīng)商和設(shè)備制造商提供影響深遠(yuǎn)的信息安全、功能安全、成本和上市時(shí)間優(yōu)勢。Armv9 安全性改進(jìn)可將某些類別的漏洞減少高達(dá) 95%,例如在所有嚴(yán)重安全漏洞中占比最大的內(nèi)存安全違規(guī)。
Arm 的 MTE 作為 Armv8.5 指令集的組成部分于 2019 年八月首次推出,而后 Arm 于 2021 年五月宣布將其內(nèi)置于首款兼容 Armv9 的 CPU 中。早在 Armv9 架構(gòu)推出之前,谷歌就宣布在安卓中采用 Arm 的 MTE,并致力于在整個(gè)安卓堆棧中支持 MTE。2022 年年底,榮耀在其開發(fā)者大會(huì)上宣布,將通過榮耀天網(wǎng)并在未來的 DiagnosisKit 工具中向開發(fā)者提供支持 MTE 的 MagicOS 6.x 和 MagicOS 7 設(shè)備。未來,這可能搭載在榮耀的移動(dòng)設(shè)備中。
在本文中,我們將回答有關(guān) MTE 的關(guān)鍵問題,包括什么是 MTE,它如何應(yīng)對(duì)諸如內(nèi)存安全之類的安全挑戰(zhàn),它的優(yōu)勢是什么,以及我們的合作伙伴對(duì)該功能做了哪些努力。
MTE 的作用是什么?它如何在 Arm 生態(tài)系統(tǒng)中帶來更出色的軟件?
利用 MTE,開發(fā)者可以快速找到內(nèi)存相關(guān)漏洞,加快應(yīng)用調(diào)試和開發(fā)流程。此外,該功能支持動(dòng)態(tài)更改配置,這意味著在現(xiàn)場可通過漏洞報(bào)告和遙測系統(tǒng),向開發(fā)者回傳有關(guān)訪問故障位置的準(zhǔn)確信息。
值得注意的是,許多開發(fā)者首次使用 MTE 時(shí)可能會(huì)發(fā)現(xiàn)更多漏洞,遠(yuǎn)超過他們所能夠修復(fù)的數(shù)量。但是,開發(fā)者可決定在產(chǎn)品發(fā)布之前先修復(fù)最嚴(yán)重的漏洞,然后在更新過程中解決不太嚴(yán)重的漏洞。此外,隨著時(shí)間推移,開發(fā)者的代碼將變得越來越清晰,因?yàn)樵陔S后的全局掃描中捕捉出的漏洞數(shù)量會(huì)減少,使這一流程更加省時(shí)。崩潰、投訴和演習(xí)的頻率也會(huì)隨之降低。
借助 MTE,開發(fā)者可在部署前后進(jìn)行檢測并避免內(nèi)存安全漏洞,從而有利于更廣泛的移動(dòng)生態(tài)系統(tǒng)。在部署之前找到并修復(fù)漏洞對(duì)于確保安全至關(guān)重要,因?yàn)檫@可以減少已部署代碼的攻擊面。在部署之后檢測漏洞可以在漏洞被大范圍利用之前對(duì)漏洞進(jìn)行反應(yīng)性修復(fù),而 MTE 可協(xié)助開發(fā)者進(jìn)行此類檢測。這樣就能夠有力地抵御試圖破壞安全代碼的攻擊。
解決內(nèi)存安全違規(guī)為什么如此重要?
數(shù)十年以來,內(nèi)存安全一直都是安全漏洞的主要來源。據(jù)操作系統(tǒng)供應(yīng)商 (OSV) 報(bào)告,其產(chǎn)品中的大多數(shù)安全問題都源于內(nèi)存安全違規(guī)導(dǎo)致的漏洞。谷歌的 Chromium 項(xiàng)目團(tuán)隊(duì)表示,內(nèi)存安全問題在所有嚴(yán)重安全漏洞中占到了 70%。
內(nèi)存安全違規(guī)可能會(huì)對(duì)用戶產(chǎn)生巨大影響。惡意應(yīng)用可通過不安全的內(nèi)存來訪問敏感數(shù)據(jù),比如:用戶憑證和密碼,這樣不法分子就能夠訪問機(jī)密數(shù)據(jù)。除了安全方面,由未解決的內(nèi)存安全漏洞導(dǎo)致的中斷會(huì)降低用戶滿意度,不僅增加軟件開發(fā)成本,并且將來要耗費(fèi)更多時(shí)間來解決此類問題。
內(nèi)存管理問題已經(jīng)存在了幾十年,今天仍非常普遍。相關(guān)安全機(jī)構(gòu)近期發(fā)布了一項(xiàng)指南[6],旨在幫助軟件開發(fā)者和運(yùn)營商防止和減少軟件內(nèi)存安全問題。該機(jī)構(gòu)的“軟件內(nèi)存安全”網(wǎng)絡(luò)安全信息表重點(diǎn)介紹了惡意網(wǎng)絡(luò)行為者如何利用內(nèi)存管理不善的問題來訪問敏感數(shù)據(jù),發(fā)布未獲授權(quán)的代碼執(zhí)行,以及所造成的其他負(fù)面影響。
什么是內(nèi)存安全違規(guī)?
內(nèi)存安全違規(guī)有兩種主要類型:空間安全違規(guī)和時(shí)間安全違規(guī)。MTE 可提供在生產(chǎn)代碼中檢測這兩種違規(guī)的機(jī)制,且無需使用任何儀器。
當(dāng)在某個(gè)對(duì)象的真實(shí)邊界之外訪問該對(duì)象時(shí),就違反了空間安全。例如:將數(shù)據(jù)寫入緩沖區(qū)或其他對(duì)象之外時(shí)。這可能會(huì)被用來改變函數(shù)指針、保存寄存器或類似對(duì)象的目標(biāo)地址。
當(dāng)在某個(gè)對(duì)象已過期后使用了該對(duì)象的參考時(shí),就違反了時(shí)間安全,通常是在該對(duì)象的內(nèi)存已釋放后——利用現(xiàn)有的“內(nèi)存釋放后使用”漏洞。憑借對(duì)分配器的了解,攻擊者可以放置新的惡意對(duì)象來替代預(yù)期版本。
MTE 的工作原理是什么?
Arm 實(shí)現(xiàn)的 MTE 為兩階段系統(tǒng),即“鎖”和“密鑰”。如果密鑰匹配,則允許訪問鎖內(nèi)存;否則,訪問可能會(huì)被記錄下來或出錯(cuò)。這樣就可以更輕松地檢測到難以捕獲的內(nèi)存安全錯(cuò)誤,也有助于進(jìn)行常規(guī)調(diào)試。
在鎖和密鑰兩階段系統(tǒng)中,存在兩種類型的標(biāo)記:
地址標(biāo)記,用作密鑰。這將在進(jìn)程中每個(gè)指針的最高位增加四位。地址標(biāo)記僅適用于 64 位應(yīng)用,因?yàn)樗褂昧恕案咦止?jié)忽略”功能,這是 Arm 64 位的一個(gè)功能。
內(nèi)存標(biāo)記,用作鎖。內(nèi)存標(biāo)記也由四位組成,與應(yīng)用內(nèi)存空間中每個(gè)對(duì)齊的 16 字節(jié)區(qū)域相連接。Arm 將這些 16 字節(jié)區(qū)域稱為標(biāo)記顆粒。這四位并不用于應(yīng)用數(shù)據(jù),而且是分開存儲(chǔ)。
移動(dòng)設(shè)備為什么需要 MTE?
未來市場上的移動(dòng)設(shè)備將具有更先進(jìn)的計(jì)算能力,因此攻擊面也更大。與此同時(shí),通過這些設(shè)備獲得的個(gè)人內(nèi)容和數(shù)據(jù)的數(shù)量和價(jià)值也在不斷增加。因此,需要實(shí)現(xiàn)一種安全性功能,為終端用戶提供安全生態(tài)系統(tǒng)和安全的數(shù)字體驗(yàn)。
MTE 非常靈活,可在產(chǎn)品開發(fā)和部署的各個(gè)階段部署在不同配置中。例如:MTE 可根據(jù)進(jìn)程配置為異步和同步模式。異步模式的運(yùn)行開銷非常低,并且可用于確定存在內(nèi)存問題的代碼區(qū)域,而同步模式會(huì)在遇到導(dǎo)致安全違規(guī)的指令時(shí)出錯(cuò),并在檢測到漏洞時(shí)產(chǎn)生大量的調(diào)試信息。這種靈活性對(duì)大規(guī)模部署尤其有用,因?yàn)? MTE 具有高度的可擴(kuò)展性,能夠在數(shù)百萬甚至數(shù)十億臺(tái)設(shè)備上運(yùn)行,為系統(tǒng)和應(yīng)用軟件提供可靠的錯(cuò)誤檢測功能。
Arm 在 MTE 方面的合作伙伴是誰?
2019 年八月,谷歌宣布在安卓系統(tǒng)中采用 Arm 的 MTE,承諾在安卓堆棧中支持 MTE,并表示通過使用該技術(shù),“哪怕有內(nèi)存漏洞可利用,也將變得非常困難?!?
Arm 與谷歌在 MTE 技術(shù)方面的合作旨在檢測現(xiàn)有代碼庫和寫入的新代碼中存在的內(nèi)存安全漏洞。以下是谷歌的 Kostya Serebryany 和 Sudhi Herle 的評(píng)論:
我們相信,內(nèi)存標(biāo)記將能夠檢測到環(huán)境中最常見的幾種內(nèi)存安全漏洞,同時(shí)幫助供應(yīng)商識(shí)別并修復(fù)這些漏洞,并阻止惡意行為者利用這些漏洞。
安卓 12 添加了一個(gè) MTE 初始實(shí)現(xiàn),可檢測到“內(nèi)存釋放后使用”漏洞和“緩沖區(qū)溢出”漏洞,而這些都是谷歌代碼庫中最常見的內(nèi)存安全漏洞來源。在安卓 13 中,谷歌添加了一個(gè)開發(fā)者模式啟動(dòng)開關(guān),以便在具有硬件支持但未永久開啟 MTE 功能的設(shè)備上啟用 MTE。對(duì)于未來的安卓版本,Arm 和谷歌將重點(diǎn)關(guān)注降低 MTE 使用的內(nèi)存。
芯片供應(yīng)商和設(shè)備制造商如何看待?
MTE 是所有 Armv9 CPU 的固有功能。為了解決軟件生態(tài)系統(tǒng)中的內(nèi)存安全漏洞,很多 Arm 合作伙伴已經(jīng)在其芯片組中構(gòu)建并啟用該功能。其中一家率先使用 MTE 的設(shè)備制造商就是榮耀,該公司宣布,將通過榮耀天網(wǎng)并在未來的 DiagnosisKit 工具中向開發(fā)者提供支持 MTE 的 MagicOS 6.x 和 MagicOS 7 設(shè)備。這有力表明,在即將進(jìn)入消費(fèi)市場、基于 Armv9 技術(shù)的移動(dòng)設(shè)備上,都可開啟 MTE。
這項(xiàng)成果已經(jīng)開始產(chǎn)生積極影響??焓质且患翌I(lǐng)先的內(nèi)容社區(qū)及社交平臺(tái)。快手 App 是中國目前最廣泛使用的短視頻和直播手機(jī)應(yīng)用之一,根據(jù) 2022 年第三季度財(cái)報(bào)數(shù)據(jù),快手應(yīng)用的平均日活躍用戶為 3.63 億,平均月活躍用戶為 6.26 億,快手的海外產(chǎn)品 (Kwai 和 SnackVideo) 擁有超 1.6 億用戶。該公司目前正與榮耀天網(wǎng)合作,在大型項(xiàng)目中使用 Arm MTE提高內(nèi)存安全,90% 的內(nèi)存安全問題可以在 App 正式發(fā)布之前就在線下被檢測出來,取得了以下收益:
- 相較于 ASan,內(nèi)存安全問題檢測速度提高了三倍,內(nèi)存消耗降低一半
- 發(fā)現(xiàn)了十幾個(gè)潛在問題,如果沒有 MTE,這些隱蔽問題將難以被發(fā)現(xiàn)
以下是快手對(duì) MTE 的評(píng)價(jià):
“快手的使命是成為全球最癡迷于為客戶創(chuàng)造價(jià)值的公司,為了給用戶提供極致體驗(yàn),快手非常重視保護(hù)用戶隱私和信息安全,快手研發(fā)團(tuán)隊(duì)長期以來為了保證內(nèi)存安全付出了巨大努力。但由于傳統(tǒng)內(nèi)存檢測工具的性能開銷較高,且需要重新編譯所有源代碼,所以幾乎無法在快手移動(dòng)端大型 C++ 代碼庫的日常開發(fā)實(shí)踐中使用這些工具,MTE 解決了這些問題,在保證內(nèi)存安全方面發(fā)揮著重要作?!?
Arm 為什么將 MTE 內(nèi)置于其產(chǎn)品和解決方案中?
MTE 是 Armv9 架構(gòu)中一系列新的及現(xiàn)有安全功能的組成部分,旨在提高所有細(xì)分消費(fèi)品市場的安全性。這意味著,我們的合作伙伴可通過自己在安全措施方面的軟件投資來獲取更高價(jià)值,從而形成一個(gè)標(biāo)準(zhǔn)化程度更高且更具擴(kuò)展性的解決方案,以應(yīng)對(duì)各種安全挑戰(zhàn)。
Arm 近期的 MTE 開發(fā)成果是什么?
隨著 2022 年六月發(fā)布的第二代 Armv9 CPU,我們推出了全新的非對(duì)稱 MTE,在安全漏洞檢測速度、精度和針對(duì)性之間實(shí)現(xiàn)了更高的靈活性。這可提高應(yīng)用的穩(wěn)定性,有利于軟件開發(fā),同時(shí)有助于在整個(gè)生態(tài)系統(tǒng)中更廣泛地推廣 MTE。采用 Arm Cortex-X3、Cortex-A715 和 Cortex-A510 最新版本 (A510-r1) CPU 的芯片組都將內(nèi)置非對(duì)稱 MTE。
Arm 架構(gòu)是安全的數(shù)字體驗(yàn)的基石
Arm 正在重新定義計(jì)算的未來,而 MTE 是提供安全移動(dòng)體驗(yàn)的一個(gè)關(guān)鍵功能。Arm 正在與移動(dòng)生態(tài)系統(tǒng)中的所有合作伙伴(包括芯片供應(yīng)商、設(shè)備制造商、操作系統(tǒng)供應(yīng)商和開發(fā)者)攜手推動(dòng)實(shí)現(xiàn) MTE 功能,以減少開發(fā)時(shí)間和成本,同時(shí)提供安全可靠的用戶體驗(yàn)。對(duì)于我們的生態(tài)系統(tǒng)來說,最重要的是 MTE 可以輕松地進(jìn)行大規(guī)模部署。通過 Armv9 架構(gòu)——這是全球數(shù)十億移動(dòng)設(shè)備的計(jì)算基礎(chǔ),MTE 現(xiàn)已廣泛普及,Arm 架構(gòu)正在成為全球數(shù)字化安全的基石。