SGX 惡意軟體:惡棍如何利用英特爾新技術實現其預期目的以外的目的

如您所知,飛地中執行的程式碼的功能受到嚴重限制。 它無法進行系統呼叫。 它不能執行 I/O 操作。 它不知道主機應用程式代碼段的基底位址。 它無法跳轉或調用主機應用程式代碼。 它不知道管理主機應用程式的位址空間結構(例如,映射了哪些頁面或這些頁面上位於哪些類型的資料)。 它不能要求作業系統將主機應用程式的一塊記憶體映射到它(例如,透過 /proc/pid/maps)。 天真的嘗試盲目地讀取主機應用程式的任意記憶體區域,更不用說嘗試寫入,遲早(很可能是前者)會導致飛地程式的強制終止。 每當主機應用程式無法存取安全區請求的虛擬位址空間區域時,就會發生這種情況。

鑑於如此嚴酷的現實,病毒編寫者是否能夠利用 SGX 飛地來實現其惡意目標?

– 探測地址以查看它們是否可以被讀取
– 探測地址的可寫性的駭客攻擊
– 重定向控制流的駭客
– 上面列出的三個駭客為惡棍帶來了什麼?
– 惡棍如何利用這些駭客手段來製造 ranzowari

SGX 惡意軟體:惡棍如何利用英特爾新技術實現其預期目的以外的目的

基於上述所述,人們普遍認為飛地只能為宿主應用程式提供服務,而飛地不能行使自己的主動權,包括惡意的主動權。 這意味著飛地對於病毒編寫者來說沒有實際價值。 這種倉促的假設是 SGX 保護不對稱的原因之一:主機應用程式程式碼無法存取 enclave 內存,而 enclave 程式碼可以讀取和寫入任何主機應用程式記憶體位址。

因此,如果惡意 enclave 程式碼能夠代表主機應用程式進行任意系統呼叫、代表其執行任意程式碼、掃描主機應用程式的記憶體並在其中找到可濫用的 ROP 鏈,那麼它就可以完全控制主機應用程序,從而隱形模式。 它不僅可以竊取和加密用戶文件,還可以代表用戶行事。 例如,代表他發送網路釣魚電子郵件或進行 DoS 攻擊。 即使是最現代的保護機制也無需擔心,例如堆疊金絲雀和地址清理。

我們將向您展示攻擊者用來克服上述限制的一些技巧,以利用 SGX 來達到自己的惡意目的:ROP 攻擊。 要麼執行偽裝成主機應用程式進程的任意程式碼(類似於惡意軟體經常使用的進程空洞),要麼偽裝現成的惡意軟體(以使其惡意軟體免受防毒和其他防禦機制的迫害)。

黑客探測地址以查看它們是否可以被讀取

由於飛地不知道主機應用程式可以存取虛擬位址空間的哪些範圍,並且由於飛地在嘗試讀取不可訪問的位址時被迫終止,因此攻擊者面臨著找到一種方法來故障排除的任務。寬容地掃描地址空間。 找到一種方法來對應可用的虛擬位址。 惡人透過濫用Intel的TSX技術來解決這個問題。 使用 TSX 的副作用之一:如果將記憶體存取函數置於 TSX 交易中,則 TSX 會抑制因存取無效位址而產生的異常,而不會到達作業系統。 如果嘗試存取無效記憶體位址,則僅中止目前事務,而不是整個 enclave 程式。 那。 TSX 允許 enclave 安全地存取交易中的任何位址 - 沒有崩潰的風險。

如果 指定地址可用 主機應用程式中,TSX 交易通常會成功。 在極少數情況下,它可能會因外部影響而失敗,例如中斷(例如調度程序中斷)、快取驅逐或多個進程同時修改記憶體位置。 在這些罕見的情況下,TSX 會傳回錯誤代碼,指示故障是暫時的。 在這些情況下,您只需要重新啟動交易即可。

如果 指定地址不可用 主機應用程式時,TSX 會抑制發生的異常(不通知作業系統)並中止交易。 錯誤代碼將返回 enclave 代碼,以便它可以對交易已取消的事實做出反應。 這些錯誤代碼表示相關地址對於主機應用程式不可用。

SGX 惡意軟體:惡棍如何利用英特爾新技術實現其預期目的以外的目的

SGX 惡意軟體:惡棍如何利用英特爾新技術實現其預期目的以外的目的

這種從 enclave 內部對 TSX 的操作對於惡棍來說有一個很好的功能:由於大多數硬體效能計數器在執行 enclave 程式碼時不會更新,因此不可能追蹤 enclave 內執行的 TSX 交易。 因此,作業系統完全看不到對 TSX 的惡意操縱。

此外,由於上述駭客攻擊不依賴任何系統調用,因此無法透過簡單地阻止系統調用來檢測或阻止; 這通常會為打擊獵蛋行為帶來正面的結果。

惡棍使用上述駭客技術在主機應用程式程式碼中搜尋適合形成 ROP 鏈的小工具。 同時,他也不需要探查每一個地址。 從虛擬位址空間的每一頁探測一個位址就足夠了。 探測所有 16 GB 記憶體大約需要 45 分鐘(在 Intel i7-6700K 上)。 結果,惡棍收到了適合建立 ROP 鏈的可執行頁面清單。

探測地址可寫性的駭客

要執行飛地版本的 ROP 攻擊,攻擊者需要能夠搜尋主機應用程式的可寫未使用記憶體區域。 攻擊者使用這些記憶體位置注入偽造的堆疊幀並注入有效負載(shellcode)。 最重要的是,惡意飛地無法要求主機應用程式為其自身分配內存,而是可以濫用主機應用程式已分配的記憶體。 當然,如果他能夠在不摧毀飛地的情況下找到這些區域的話。

犯罪分子利用 TSX 的另一個副作用來進行搜尋。 首先,和前面的情況一樣,它會探測該位址是否存在,然後檢查該位址對應的頁面是否可寫入。 為此,攻擊者使用以下技巧:他在 TSX 交易中放置一個寫入函數,並在該函數完成後但在完成之前強行中止該交易(明確中止)。

透過查看 TSX 交易的回傳碼,攻擊者可以了解該交易是否可寫入。 如果是“明顯墮胎”,反派就會明白,如果他堅持下去,錄音就會成功。 如果該頁是唯讀的,則交易會以「明確中止」以外的錯誤結束。

SGX 惡意軟體:惡棍如何利用英特爾新技術實現其預期目的以外的目的

TSX 的這種操縱還有另一個對惡棍有利的功能(除了無法透過硬體效能計數器進行追蹤之外):由於只有在事務成功時才會提交所有記憶體寫入命令,因此強制事務完成可確保被偵測的記憶體單元保持不變。

駭客重定向控制流

當從 enclave 執行 ROP 攻擊時(與傳統的 ROP 攻擊不同),攻擊者可以獲得 RIP 暫存器的控制權,而無需利用被攻擊程式中的任何錯誤(緩衝區溢位或類似的情況)。 攻擊者可以直接覆蓋儲存在堆疊上的RIP暫存器的值。 特別是,它可以用自己的 ROP 鏈取代該暫存器的值。

但是,如果 ROP 鏈很長,則覆蓋主機應用程式堆疊的大部分可能會導致資料損壞和意外的程式行為。 試圖秘密實施攻擊的惡棍對這種狀況並不滿意。 因此,它為自己創建一個假的臨時堆疊幀並將其 ROP 鏈儲存在其中。 偽造的堆疊幀被放置在隨機可寫記憶體位置,而真實的堆疊完好無損。

SGX 惡意軟體:惡棍如何利用英特爾新技術實現其預期目的以外的目的

上面列出的三個駭客為惡棍帶來了什麼?

(1)首先,惡意飛地通過 hack 探測位址以查看它們是否可以讀取, – 在主機應用程式中搜尋可濫用的 ROP 小工具。

SGX 惡意軟體:惡棍如何利用英特爾新技術實現其預期目的以外的目的

(2) 然後由 hack 用於探測地址的可寫性, – 惡意飛地識別主機應用程式記憶體中適合注入有效負載的區域。

SGX 惡意軟體:惡棍如何利用英特爾新技術實現其預期目的以外的目的

(3) 接下來,Enclave 從步驟 (1) 中發現的 gadget 建立一條 ROP 鏈,並將該鏈注入到主機應用程式堆疊中。

SGX 惡意軟體:惡棍如何利用英特爾新技術實現其預期目的以外的目的

(4) 最後,當主機應用程式遇到上一個步驟中建立的 ROP 鏈時,惡意負載開始執行 - 具有主機應用程式的權限和進行系統呼叫的能力。

惡棍如何利用這些黑客手段來製造 ranzowari

主機應用程式透過 ECALL 之一將控制權轉移到 enclave 後(不懷疑該 enclave 是惡意的),惡意 enclave 會在主機應用程式的記憶體中搜尋可用空間以注入程式碼(將這些單元序列視為可用空間)充滿零)。 然後透過 hack 探測位址以查看它們是否可以讀取, – enclave 在主機應用程式中搜尋可執行頁面並產生一個ROP 鏈,該鏈在當前目錄中建立一個名為「RANSOM」的新檔案(在真正的攻擊中,enclave 會加密現有的使用者檔案)並顯示勒索訊息。 同時,主機應用程式天真地認為飛地只是將兩個數字相加。 這在程式碼中看起來是什麼樣的?

為了便於理解,我們透過定義介紹一些助記符:

SGX 惡意軟體:惡棍如何利用英特爾新技術實現其預期目的以外的目的

我們保存RSP和RBP暫存器的原始值,以便在執行有效負載後恢復主機應用程式的正常操作:

SGX 惡意軟體:惡棍如何利用英特爾新技術實現其預期目的以外的目的

我們正在尋找合適的堆疊框架(請參閱「重定向控制流的駭客」部分中的程式碼)。

尋找合適的 ROP 小工具:

SGX 惡意軟體:惡棍如何利用英特爾新技術實現其預期目的以外的目的

找到註入有效負載的地方:

SGX 惡意軟體:惡棍如何利用英特爾新技術實現其預期目的以外的目的

我們建構一條ROP鏈:

SGX 惡意軟體:惡棍如何利用英特爾新技術實現其預期目的以外的目的

這就是英特爾旨在對抗惡意程式的 SGX 技術被惡棍利用以達到相反目標的方式。

來源: www.habr.com

添加評論