系統管理模式推測執行攻擊
2017年底,Google和其他安全研究人員發現了影響現代處理器架構推測執行的漏洞。本地無許可權的攻擊者利用無序執行CPU的微架構的能力來泄漏受保護的內存中的內容。研究人員擴展了該方法來訪問高許可權的系統管理模式(System Management Mode,SMM)內存。
影響
因為SMM有訪問包括與操作系統隔離的物理內存的許可權,本研究說明了基於Spectre的攻擊可以泄漏內存中的隱私信息。Spectre和Meltdown漏洞會影響操作系統、系統管理程序和受保護的SGX enclaves的應用。但漏洞對固件的影響之前沒有經過證明。而每個系統中都有許多種固件,所以研究人員對主機處理器固件進行了研究。當系統啟動時,處理器就會執行主系統固件,即BIOS或UEFI。固件大多只在啟動時運行,但在特殊的x86模式下會與操作系統並行,即SMM。因為這段代碼的許可權非常高,也在操作系統和其他安全應用之外運行,所以這成了安全研究員和高級攻擊者的目標。
Intel CPU使用一種內存保護機制來保護SMM內存這樣的內存區域的敏感信息。Intel CPU的SMM內存是由SMMR(System Management Range Register)來保護的。本文描述了一種推測執行攻擊的變種,可以從基於硬體的Range Register保護機制下竊取內存的內容。POC利用證明了使用Spectre變種來繞過SMM內存的SMRR保護機制。
這些增強的Spectre攻擊允許在沒有許可權的情況下去讀取內存的內容,包括應該有range registers保護的內存。這會泄漏SMM的代碼和SMM中存儲的機密信息。另外,研究人員證明了在SMM上下文環境中進行推內存訪問可以用來泄漏內存中的機密信息。
SMM中的邊界檢查繞過
概覽
本文重點描述兩個Spectre的變種:
·Bounds Check Bypass, a.k.a. Spectre variant 1 (CVE-2017-5753)
·Branch Target Injection, a.k.a. Spectre variant 2 (CVE-2017-5715)
沒有許可權的攻擊者可以利用Spectre變種1 (CVE-2017-5753)來利用特權代碼,這可以在沒有任何軟體漏洞的情況下去檢查位於特權內存中的緩存大小。正常來說,正常地進行邊界檢查可以防止攻擊者訪問特權緩存的內容。但如果指令位於間接條件分支指令後的預測指令中,那麼利用Spectre變種1就可以執行邊界訪問的指令。非直接分支目標地址從內存中解析之後,當CPU撤銷推測執行out of bound access指令造成的變化時,攻擊者就可以從CPU緩存中恢複數據。
實驗
PoC代碼地址:
https://gist.github.com/jedisct1/3bbb6e50b768968c30629bf734ea49c6
首先,將PoC代碼注入內核驅動中,然後確認out-of-bound訪問的推測執行是在內核許可權級去執行的。然後可以在內核許可權級對受保護的內存上進行實驗。內核級的PoC利用提供了對不同硬體介面的訪問,讓攻擊者可以更好地控制系統硬體,並且可以訪問物理內存、IO、PCI、MMIO介面等不同的物理介面。
然後,將PoC利用融入到CHIPSEC來擴展測試。在實驗中,研究人員嘗試去讀取受保護的SMRAM內存。研究人員將SMRAM的物理地址映射到虛擬地址空間中,然後將SMRAM地址作為利用的目標地址。
示例輸出:
在上面的例子中,SMRAM的內容沒有被攻擊者讀取。
之後,研究人員增強了攻擊場景。嘗試通過MTRR來緩存SMRAM,並將MSR_IA32_MTRR_DEF_TYPE設定為Write-Back。但仍不能訪問SMRAM,說明了SMRR的優先順序要比MTRR高。這也說明了Spectre1與其他內存事務的工作原理不同:
·Spectre1作用於不可緩存的內存;
·Spectre1不可作用MIMO,因為MIMO訪問比內存訪問要慢很多;
·於不可緩存的內存;
·從內核模式到運行在內核模式下的推測執行流,Spectre1不可作用於SMRAM。因為SMRR保護可以防止推測內存的訪問。
將Spectre Variant 1應用到SMM
研究人員對攻擊場景進行了修改,並開發了利用Bound check bypass漏洞利用,並繞過SMRR保護機制從SMRAM中讀取任意內容的PoC。
攻擊場景修改背後的理論如下:
操作系統級的漏洞利用會激活SMI,這會讓CPU向SMM過渡,並執行SMI handler固件。
SMI handler可以訪問位於SMRAM的數組中的元素。
在訪問前,SMI handler會驗證要訪問元素索引與數據的長度,因為索引是不可信的,而且是由低許可權模式提供的。
檢查會翻譯為CPU執行的一個條件分支。CPU開始解析非直接路徑的目標地址。
當CPU在等待解析的分支目標時,會使用分支預測機制來預測目標地址。
推測執行的SMM指令可能會載入使用非可信索引值的數組的邊界外的元素的值。這會指向攻擊者想要暴露的SMRAM中的位置。
然後數據會從內存中載入,並由CPU在SMRAM外的數據緩存中緩存,這是根據SMRAM值來確定的。
系統級的漏洞利用可以測量使用不同的緩存定時測信道技術來訪問不同的非SMRAM位置的訪問時間。
訪問基於秘密SMRAM值載入數據緩存中的緩存行的時間是很小的。這會導致存儲在SMRAM中的秘密值的信息泄漏。
緩解措施
研究人員自3月起與intel進行合作。緩解Spectre變種1的軟體也可以應用於SMM。Intel發布的分析推薦使用LEFNCE指令來緩解Spectre變種1。這同樣適用於系統廠商和獨立BIOS廠商開發的固件。更新系統和應用的方式來緩解攻擊時一種非常直接的方式,重新設計和更新固件的方式會明顯增加複雜性。因為更新需要去廠商官方下載並手動安裝更新,因此許多企業都不會(及時)應用最新的固件更新。硬體廠商引入了一些緩解的措施來應對其他類型的Spectre攻擊,比如Intel引入了Indirect Branch Restricted Speculation (IBRS)來緩解Spectre 2變種攻擊。根據intel發布的Speculative Execution Side Channel Mitigations文檔,在支持IBRS的處理器中,在系統管理中斷(SMI)之前執行的軟體不能控制SMI之後在SMM中執行的間接分支的預測目標。
另一個緩解的策是讓固件限制SMM對內存的訪問。大多數固件都會將物理內存與SMM用的頁面進行映射。但最新版的Tianocore使用了A Tour Beyond BIOS中描述的技術——UEFI BIOS中的內存保護機制來映射內存中的必要部分。這會大大減少帶來的影響。但大多數系統是基於舊版本的Tianocore。固件開發者應該考慮使用該特徵來保護用戶免受此類SMM漏洞。
結論
研究表明Spectre變種1推測執行邊信道攻擊可用於跨range register保護邊界,並泄漏由range register保護的數據。在攻擊示例中,研究人員驗證了對x86 SMM系統管理模式的攻擊,並從CPU硬體保護的SMR中竊取了數據。這擴大了spectre漏洞帶來的影響。除了從受害者進程中竊取數據外,研究人員還發現攻擊者可以利用對物理內存的SMM訪問來從其他的進程、hypervisor和固件中竊取數據。Intel回應說現有的修復指南對此漏洞是有效的。
※資料庫攻擊深度分析(3):一張美女圖片開啟Postgre資料庫挖礦模式
※虛假軟體更新濫用NetSupport遠程訪問工具
TAG:嘶吼RoarTalk |