如何利用 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的惡意軟體文件?