一個簡單的JavaScript攻擊繞過了22個CPU架構上的ASLR保護
該漏洞存在于內存管理單元(MMU)的工作方式中,MMU是許多CPU的一個組件,導致繞過地址空間布局隨機化(ASLR)保護。
ASLR是所有現代操作系統(從Windows和Linux到macOS、Android和BSD)部署的關鍵安全防御系統。
一般來說,ASLR是一種內存保護機制,它將程序在設備內存中運行的位置隨機化。這反過來使得攻擊者在利用緩沖區溢出或類似漏洞時,很難在內存中的特定位置執行惡意有效負載。
簡而言之,對于攻擊者來說,這就像是試圖蒙住眼睛入室盜竊。
但現在,荷蘭Vrije大學的一組名為VUSec的研究人員已經開發出一種攻擊,可以繞過Intel、AMD、ARM、Allwinner、Nvidia等熱門供應商提供的至少22個處理器微體系結構上的ASLR保護。
這種被稱為ASLR緩存或AnC的攻擊尤其嚴重,因為它使用簡單的JavaScript代碼來識別內存中執行系統和應用程序組件的基址。
因此,僅僅訪問惡意網站就可以觸發攻擊,這使得攻擊者可以針對內存的同一區域進行更多攻擊,竊取存儲在電腦內存中的敏感信息。
以下是攻擊的工作原理:
該攻擊利用了微處理器和內存相互作用的方式。
MMU存在于臺式機、移動設備和服務器芯片中,用于映射計算機在內存中存儲程序的位置。MMU不斷檢查一個名為頁表的目錄,以跟蹤這些地址。
設備通常將頁表存儲在CPU的緩存中,這使得芯片速度更快、效率更高。但該組件也與不受信任的應用程序(包括瀏覽器)共享其部分緩存。
因此,惡意網站上運行的一段javascript代碼也可以寫入該緩存(側通道攻擊),使攻擊者能夠發現軟件組件(如庫和RAM映射文件)在虛擬內存中的位置。
有了這些位置數據,任何攻擊者都可以讀取計算機內存的一部分,然后他們可以利用這些數據發起更復雜的攻擊,升級對整個操作系統的訪問,并劫持計算機系統。
研究人員通過最新的Chrome和Firefox web瀏覽器,在大約90秒內成功地利用了22種不同的CPU微架構上的AnC JavaScript攻擊,盡管這些瀏覽器中內置了ASLR保護,比如損壞的JavaScript計時器。
VUSec研究團隊發表了兩篇研究論文[1,2],詳細介紹了AnC攻擊,以及兩段視頻演示,展示了該攻擊在64位Linux機器上的Firefox瀏覽器中運行。
在他們的攻擊中,研究人員將他們的AnC JavaScript與攻擊代碼結合起來,利用Firefox中現已修補的釋放后使用漏洞(CVE-2013-0753)。AnC攻擊的問題通過幾個CVE標識符進行跟蹤,包括:
- 適用于英特爾處理器的CVE-2017-5925
- CVE-2017-5926適用于AMD處理器
- CVE-2017-5927適用于ARM處理器
- CVE-2017-5928了解影響多個瀏覽器的時間問題
VUSec團隊已經在三個多月前通知了所有受影響的芯片制造商和軟件公司,包括英特爾、AMD、三星、英偉達、微軟、蘋果、谷歌和Mozilla,但直到現在才公布了他們的調查結果。
“結論是,這種緩存行為和強大的地址空間隨機化是相互排斥的,”論文總結道。“由于緩存層次結構對整個系統性能的重要性,所有修復程序的成本可能太高而不實用”。
“此外,即使可以在硬件上采取緩解措施,例如頁表的單獨緩存,這些問題也很可能在軟件中重新出現。因此,我們建議ASLR不再被視為抵御內存錯誤攻擊的第一道防線,并建議未來的防御不再依賴它作為關鍵構建塊”。
根據該團隊的說法,保護自己免受AnC攻擊的唯一方法是啟用插件,例如用于Firefox的NoScript或用于Chrome的ScriptSafe,以阻止網頁上不受信任的JavaScript代碼在瀏覽器中運行。