如何利用 DLL hijack 輕鬆繞過AMSI?

最近在做一些關於Windows 10中新的反惡意軟體掃描介面技術內部機制的研究,我發現PowerShell 5中存著在DLL劫持漏洞。我之所以做這些研究是因為我們Red Team所使用的一些PowerShell攻擊腳本——p0wnedShell被安裝在Windows 10的 Windows Defender查殺了——「禁止從內存中運行」,所以我想知道是否可以繞過這中查殺技術。

從Microsoft的技術博客中,我們可以看到下面的圖表,詳細的說明了這種技術是如何對PowerShell / VBScript此類腳本進行hook的。

在Process Monitor 中添加一個amsi.dll的路徑過濾器後,運行p0wnedShell,我發現它會首先嘗試在其當前路徑中查找並載入amsi.dll。如果在當前路徑中沒有找到dll文件,就會從System32路徑中載入dll。這種情況就給了我們一些機會;)。

打開IDA載入amsi.dll,查看WinAPI函數和DLL導出表,發現有DllMain的入口點,所以我認為我可以嘗試利用C語言編寫一個簡單的DLL並使用 MessageBox函數來做演示。

偽造的amsi.dll 源碼如下圖:

正如你在下面的截圖中所看到的;在啟用Windows Defender的Windows 10上運行p0wnedShell時,Amsi /Defender會把那些從內存中載入的帶有攻擊性的PowerShell腳本阻止運行。

現在把已經編譯好的用作劫持的dll文件放在C:p0wnedShell 文件夾中,當再次運行 p0wnedShell時,奇蹟就發生了,Awwwww!

在彈出的MessageBox點擊OK之後,我們可以看到所有進攻腳本都運行了,現在沒有任何問題。

當在Process Explorer中搜索Amsi.dll(查找DLL或Handle)時,我注意到dll已經被卸載了,然而在p0wnedShell進程中正常載入了。

接下來,我想嘗試PowerShell.exe本身是否也存在DLL劫持的問題,把 PowerShell.exe複製到C: p0wnedShell文件夾中,運行Process Monitor並添加一個C: p0wnedShell的路徑過濾器。

正如你在下圖中所看到的,PowerShell嘗試從當前路徑載入一些dll文件。

不出我所料,PowerShell.exe的確也從當前路徑中載入了偽造的dll文件。

所以,PowerShell也存在著DLL劫持漏洞。

接下來我嘗試了很多dll,urlmon.dll也可以成功進行劫持。

因此,通過這些研究發現,我們就可以得出結論,PowerShell 5存在著dll劫持漏洞,我們可以控制代碼執行並將PowerShell.exe複製到可寫的位置執行。

有了以上這些了解,我們現在就可以使用PowerShell在Windows 10系統中運行自定義的代碼,如後門,鍵盤記錄器,惡意軟體等等。 例如,我創建了一個如下圖所示的Amsi.dll,並將它和PowerShell.exe一起複制到包含在%path%環境變數的文件夾中。

現在,當系統管理員從cmd運行PowerShell.exe,並在UAC提示上單擊「是」時,會添加一個新的管理員用戶到系統本地管理員組中。

把製作好的劫持dll文件和PowerShell.exe 一起複制到包含在%Path%環境變數的文件夾中:

從cmd啟動PowerShell:

UAC 提示:

點「Yes」之後,新的管理員用戶就添加到系統了:

POC:

在最新版本的p0wnedShell中,我已經添加了繞過Amsi的劫持dll文件,是通過從內存將偽造的Amsi.dl寫入到當前工作目錄的(使用BinaryWriter方法)。這個DLL由p0wnedShell進程載入並立即退出,因此基本上不會影響Amsi的正常運行。

Cn33liz/p0wnedShell

p0shKiller基本上是一個在最壞的情況下來演示本文所講的PowerShell/Amsi dll劫持漏洞的工具。需要管理員許可權運行(雖然可以繞過UAC),所以該工具效果有限。

Cn33liz/p0shKiller

當前狀態:

*於2016年3月28日報告給Microsoft MSRC

*從Microsoft的角度來看,AMSI/AntiVirus並不是傳統的安全邊界,並且由於此類DLL劫持漏洞不會導致遠程代碼執行或特權提升,因此他們無法發布正式公告。然而,他們肯定有興趣進一步探索如何去改進他們的反惡意軟體產品,所以我期望會在未來的版本中得到修復。

本文參考來源於cn33liz,如若轉載,請註明來源於嘶吼: 如何利用 DLL hijack 輕鬆繞過AMSI? 更多內容請關注「嘶吼專業版——Pro4hou」

推薦閱讀:

如何使用SilentCleanup繞過UAC?
Windows惡意軟體API調用特徵分析
初探域滲透神器Empire
如何處理格式為ACE的惡意軟體文件?

TAG:技术分析 | 软件安全 |