當前位置:
首頁 > 最新 > 任意代碼保護與內核代碼注入的那些事兒

任意代碼保護與內核代碼注入的那些事兒

嚴正聲明:本文僅限於技術探討,嚴禁用於其他用途。

寫在前面的話

類似 WannaCry 和 Slingshot 這樣的惡意軟體最常用的一種攻擊技術就是內核代碼注入,在近期剛剛發布的 Windows 10 Creators 更新中,微軟引入了一種針對遠程代碼執行的新型緩解技術-任意代碼守護衛士(ArbitraryCode Guard)。在這篇文章中,我們將詳細介紹Arbitrary Code Guard的工作機制,並利用內核代碼注入攻擊來測試這項緩解技術的有效性。

Arbitrary Code Guard(任意代碼守護衛士)

微軟將Arbitrary Code Guard(ACG)作為一個可選功能添加進了Windows操作系統中,它可以用來檢測和防止下列情況的出現:

現有代碼被惡意修改;

向一個數據段中寫入並執行代碼;

為了實現這兩個目標,ACG會強制執行這條規則:內存不能同時擁有寫入許可權(W)和執行許可權(X)。

ACG配合上代碼完整性保護機制(Code Integrity Guard),Windows就可以防止攻擊者將不安全或不可信的代碼載入進內存之中了。

下面給出的是一份代碼注入樣本,它會將進程內存的狀態修改為ACG想要防止出現的狀態:

我們可以看到,這些注入了代碼的頁面同時擁有執行和寫入屬性。

ACG的工作流程

當系統為特定進程創建好緩解方案時,會以下列註冊表路徑向註冊表中添加一個鍵:

HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsNTCurrentVersionImage File Execution Options

接下來,Windows會在進程創建的過程中完成緩解方案的相關設置,下面給出的是進程創建過程中的調用棧:

下面給出的是PspAllocateProcess函數的部分代碼:

其中,下面這兩個函數主要負責載入緩解選項:

這些函數會從註冊表中讀取下列鍵值:

我們可以在進程監視器中看到以下活動:

接下來,MitigationsFlagsValues的值將會存儲在EPROCESS結構體中:


正如之前的介紹,ACG會監控內存的分配情況,並防止同時擁有寫入和執行許可權,當我們嘗試分配虛擬內存時,調用棧如下:

此時將會調用MiArbitraryCodeBlocked函數,該函數的功能如下圖所示:

我們可以看到,這個函數負責檢測EPROCESS中的緩解選項,並判斷是否允許分配虛擬內存。下面給出的是這個函數的流程圖:

該函數主要實現了下面三件事情:

獲取EPROCESS,檢測是否啟用了緩解選項,並將MitigationsFlags分配進EPROCESS(偏移量0x828)。

檢測ETHREAD中的CrossThreadFlags(0x6d0),以確定線程是否擁有內存分配許可權或繞過緩解方案。

跟蹤緩解結果,返回狀態TATUS_DYNAMIC_CODE_BLOCKED(0xC0000604)。

內核代碼注入

接下來我們一起看一看,如果我們嘗試向內核注入代碼時,ACG的表現如何。這裡我們會使用惡意軟體常用的兩種內核代碼注入技術:

創建一個新的線程並載入一個動態鏈接庫文件(DLL);

使用一個非同步程序調用(APC)來向現有線程中載入一個DLL;

在這兩種技術中,下面幾個步驟是通用的:

綁定目標進程;

獲取Ntdll地址;

獲取LdrLoadDll地址;

通過shellcode分配虛擬內存;

通過shellcode調用LdrLoadDll;

在使用新的線程實現shellocde注入時,我們需要使用NtCreateThreadEx並在shellcode中調用LdrLoadDll。另一方面,如果我們想要使用一個APC來注入shellocde,我們則需要在相應線程中使用APC函數並通過shellcode調用LdrLoadDll。

在這兩種注入方法中,我們需要在分配虛擬內存時同時分配寫入和執行許可權,並執行shellcode。正如之前所說的,ACG可以通過防止同時分配寫入和執行許可權來屏蔽代碼注入。下面給出的是負責分配虛擬內存的代碼:

在調用ZwAllocateVirtualMemory之後設置斷點(MiArbitraryCodeBlocked)。,我們將能夠在windbg中看到下列信息:

返回值為STATUS_DYNAMIC_CODE_BLOCKED,因此這兩種代碼注入技術都無法繞過ACG。

總結

對於防止用戶模式或內核模式下的代碼注入來說,ACG是一種非常好的選擇,但ACG目前只是一種可選項,因此如果目標設備(進程)沒有開啟ACG的話,攻擊者仍然能夠實現代碼注入。


Windows10 緩解方案改進(2016年美國黑帽黑客大會):【點我獲取】

破解ACG的那些事兒(2017年Ekoparty安全大會):【點我獲取】

* 參考來源:countercraft,FB小編Alpha_h4ck編譯,轉載請註明來自FreeBuf.COM


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 FreeBuf 的精彩文章:

RCTF 2018 Magic題目詳解

TAG:FreeBuf |