提出了一種遠端確定伺服器記憶體碎片的攻擊方法

格拉茨技術大學(奧地利)的一組研究人員先前因開發 MDS、NetSpectre、Throwhammer 和 ZombieLoad 攻擊而聞名,他們發布了一種針對記憶體重複資料刪除機制的新側通道攻擊方法 (CVE-2021-3714) ,它允許確定記憶體中是否存在某些數據,組織記憶體內容的逐字節洩漏,或確定記憶體佈局以繞過基於位址的隨機化(ASLR) 保護。新方法與先前演示的重複資料刪除機制攻擊變體不同,該方法透過使用透過 HTTP/1 和 HTTP/2 協定發送給攻擊者的請求的回應時間變化作為標準,從外部主機執行攻擊。已經針對基於 Linux 和 Windows 的伺服器展示了執行攻擊的能力。

針對記憶體去重機制的攻擊,利用寫入操作處理時間的差異作為管道,在資料變化導致使用寫入時複製(COW)機制克隆去重記憶體頁的情況下洩漏資訊。在運行過程中,核心會偵測來自不同進程的相同記憶體頁並將其合併,將相同的記憶體頁對應到實體記憶體的一個區域中,僅儲存一份副本。當其中一個進程嘗試更改與已刪除重複的頁面關聯的資料時,會發生異常(頁面錯誤),並且使用寫入時複製機制,會自動建立記憶體頁面的單獨副本,並將其分配給該進程。完成複製需要花費額外的時間,這可能是資料變更幹擾另一個進程的跡象。

研究人員表明,COW 機製造成的延遲不僅可以在本地捕獲,還可以透過分析網路上響應傳遞時間的變化來捕獲。已經提出了幾種方法,用於透過分析 HTTP/1 和 HTTP/2 協定上的請求的執行時間來確定遠端主機的記憶體內容。為了保存選定的模板,使用標準 Web 應用程式將請求中收到的資訊儲存在記憶體中。

攻擊的一般原理歸結為用可能重複伺服器上已存在的記憶體頁內容的資料填充伺服器上的記憶體頁。然後攻擊者等待內核對記憶體頁面進行去重和合併所需的時間,然後修改受控的重複資料並評估回應時間來確定命中是否成功。

提出了一種遠端確定伺服器記憶體碎片的攻擊方法

實驗過程中,透過全球網路攻擊時最大資訊外洩率為34.41位元組/小時,透過本地網路攻擊時最大資訊外洩率為302.16位元組/小時,比其他透過第三方管道提取資料的方法(例如,在NetSpectre 攻擊中,資料傳輸率為7.5 點XNUMX 位元組)。

已經提出了三種有效的攻擊選項。第一個選項可讓您確定使用 Memcached 的 Web 伺服器記憶體中的資料。此攻擊歸結為將某些資料集載入 Memcached 儲存體中,清除重複資料刪除的區塊,重寫相同的元素,並透過更改區塊的內容為發生 COW 複製創造條件。在使用 Memcached 進行實驗期間,可以在 166.51 秒內確定虛擬機器中執行的系統上安裝的 libc 版本。

當使用 InnoDB 儲存空間時,第二個選項可以透過逐位元組重新建立內容來找出 MariaDB DBMS 中的記錄內容。該攻擊是透過發送經過特殊修改的請求來進行的,導致記憶體頁面中出現單字節不匹配,並分析回應時間以確定對該位元組內容的猜測是否正確。從本地網路發動攻擊時,此類洩漏的發生率很低,每小時可達 1.5 位元組。此方法的優點是可以用來恢復未知的記憶體內容。

第三種方案可以在4分鐘內完全繞過KASLR保護機制,在偏移位址位於其他資料未變更的記憶體頁面的情況下,取得虛擬機器核心鏡像的記憶體偏移資訊。該攻擊是從距受攻擊系統 14 跳的主機發動的。用於實施所提出的攻擊的程式碼範例承諾將在 GitHub 上發布。

來源: opennet.ru

添加評論