Retbleed攻擊還是Spectre的反擊?

有瑞士研究人員近日發表了關於新型漏洞攻擊現代處理器的研究,名稱為Retbleed,衍生自Retpoline,一款防禦多種Spectre攻擊的方法,不過研究發現所謂有效防護Spectre Variant 2攻擊,只是偶爾有效或完全無效。

甚麼是Spectre v2?

早在2018年,兩份研究報告公開了Spectre和Meltdown兩項安全漏洞,他們都屬於硬件安全漏洞,令攻擊者有機會從處理器運作上取盜取資料,期後多種Spectre的變種陸續被發現,研究人員發現到更多方法去利用該漏洞進行攻擊,那就是利用處理器預設功能「branch prediction」。

指令的分支預測和推測執行能顯注改善處理器表現,任何程式執行數個步驟通常倚靠預先計算的結果,最簡單例子是當用戶輸入密碼去存取某些機密資料,如果密碼正確,資料將會顯示,如果密碼錯誤,用戶會被要求再次嘗試輸入,在對處理器的簡單指令層面,大約就是檢查存取RAM上資料的權限,如果確定所需權限則取得資料存取,否則拒絕。

處理器能以每秒數十億個的速度處理這類型的操作,除了某些情況下需要被檢查,通常都在待機狀態(例如等待輸入密碼,或檢查存取權限),但如果利用這個空閒時間來執行最可能的檢查結果後的運算,就像在用戶輸入密碼時,結果已經準備好,用戶就能更快看到機密的資料。

但怎樣知道哪部份的代碼最有機會被執行?當然是從以前執行類似指令中進行統計,如果用戶輸入密碼10次中有9次是正確,自然能預先準備好機密資料,如果密碼錯誤,只需要撇掉結果再用多一點時間顯示錯誤訊息。

2018年研究報告的作者提及Spectre攻擊的兩個變種和Variant 2 (又名Branch Target Injection),訓練branch predictor好讓它能處理攻擊者需要的指示,令他們能讀取不能存取的資料,因為即使資料被撇掉,但計算的結果會暫時儲存在暫存記憶體內,也是能夠盜取資料的地方。

不過以上提到的攻擊非常複雜,首先攻擊者要能夠在被攻擊的系統上執行代碼,即使在沒有躼需的情況下,第二是攻擊者者需要目標系統上裝有適合攻擊代碼的軟件,然後進行對branch prediction系統的「訓練」,再重申一次,以上是相當複雜的活動。

Spectre漏洞已經補丁了嗎?

硬件漏洞進行補丁並非易事,而且要利用這個漏洞,需要軟件在某些條件下才能實行,那何不對軟件進行補丁?比更新硬件容易得多,而且能夠透過微碼更新修復部份漏洞,有關漏洞的最終解決方案只能在已修改硬件的新處理器上找到,舊硬件仍完全或部份存在漏洞。

Retbleed的研究展示了真相

這項最近的研究展示了Retpoline並沒有效用,有關人員更錄製了示禦攻擊的影片,展示了一個無權存取該類資料的程式,如何盜取超級用戶密碼,AMD Zen 1和Zen 2 (2017-2019)和Intel Kaby Lake和Coffee Lake (2016-2017)處理器都易於進行Retbleed攻擊,更新款的AMD Zen 3和Intel Alder Lake及早期的第9代處理器則無法進行Retbleed攻擊。

怎樣才安全?

對一般用戶而言,Spectre攻擊可謂遙不可及,操作系統開發者提供的預防性補丁已經足夠,在Windows的IBRS防護預設開啟,不過Spectre有多種變種情況令人憂慮,Retbleed只算是其中之一,每種都以完全不同的形式運作,即使AMD和Intel會從新硬件著手引入新的防護考量,但對舊軟件將會帶來明顯的打擊,有機會令軟件開發者為追求程式表現而放棄保安的考慮。

資料來源:Kaspersky Blog