一種劫持COM伺服器並繞過微軟反惡意軟體掃描介面的方法
Microsoft的反惡意軟體掃描介面(AMSI)在Windows 10中被引入,作為標準介面,它可以讓AV引擎將簽名應用於內存和磁碟上的緩衝區。這使得AV產品能夠在腳本解釋之前「hook」,這意味著任何經過混淆或加密的PS程序都經過了解密程序的解密。你可以在這裡和這裡閱讀有關AMSI的更多信息。這篇文章將介紹一種通過劫持COM伺服器來繞過AMSI的方式,並分析Microsoft是如何在build#16232 中修復它的,然後我又是如何繞過該修復的。
這個問題在5月3日提交給了微軟,並且已經得到修復,並發布了Build#16232中的「深度防禦」補丁。
下面是一個通過PowerShell進行的AMSI測試示例,當AMSI接受暴露的腳本塊並將其傳遞給Defender進行分析時,內容如下:
正如你所看到的,AMSI接受了代碼並將其傳遞給被調用的Invoke-Expression。由於該代碼被認為是惡意的,因此被阻止執行。
那麼問題來了:這個過程是如何工作的? 查看amsi.dll的導出,可以看到AMSI導出的各種函數調用:
amsi!DllGetClassObject和amsi!DllRegisterServer很快引發我的思考,因為這些都是COM的入口點,用於方便的實例化一個COM對象。幸運的是,COM伺服器很容易劫持,因為中等完整性流程默認在查找HKCR / HKLM之前搜索當前用戶註冊表配置單元(HKCU)以用於COM伺服器。
查看IDA,我們可以看到COM介面ID(IID)和ClassID(CLSID)傳遞給CoCreateInstance():
我們可以通過查看ProcMon的結果來驗證這一點:
最終發生的事情是,AMSI的掃描功能似乎是通過自己的COM伺服器來實現的,當COM伺服器被實例化時會被暴露出來。當AMSI載入時,它實例化其自有的COM組件,並暴露了諸如amsi!AmsiOpenSession,amsi!AmsiScanBuffer,amsi!AmsiScanString和amsi!AmsiCloseSession之類的方法。如果我們強制COM實例化失敗,AMSI將無法訪問掃描惡意內容所需的方法。
由於COM伺服器首先通過HKCU配置單元進行解析,因此普通用戶可以劫持InProcServer32密鑰並註冊不存在的DLL(或者如果你也可以執行惡意的代碼)。為了做到這一點,有兩個註冊表項需要處理:
當AMSI嘗試實例化其COM組件時,它將查詢其註冊的CLSID並返回不存在的COM伺服器。這導致載入失敗,並阻止任何掃描方法被訪問,最終使AMSI不可用。
你可以看到,導入上述註冊表更改將導致「C: IDontExist」作為COM伺服器返回:
現在,當我們嘗試運行我們的「惡意」AMSI測試樣本時,你將注意到它被允許執行,因為AMSI無法通過其COM介面訪問任何掃描方法:
你可以在這裡找到註冊表更改:
現在我們可以理解這個bug了,那麼我們來看看微軟是如何在build#16232中修復它的。由於amsi.dll也是AMSI的COM伺服器,因此將這兩個DLL分開似乎是一個很好的辦法。看到diff,AmsiInitialize函數突出顯示,因為它可能包含了實際實例化AMSI的邏輯。
在左側,是原來的AMSI DLL,在右邊的是新更新的AMSI DLL。如你所見,Microsoft似乎刪除了對CoCreateInstance()的調用,並將其替換為直接調用DllGetClassObject()。CoCreateInstance()可以定義為用於實例化使用CoGetClassObject()實現的COM對象的高級函數。在分辨完成(部分通過註冊表CLSID查找)和定位COM伺服器之後,伺服器的導出函數「DllGetClassObject()」將被調用。通過直接調用amsi.dll的DllGetClassObject()函數替換CoCreateInstance,避免了註冊表解析。由於AMSI不再在COM伺服器的註冊表中查詢CLSID,因此我們無法再劫持它。
現在我們知道了修復過程,那麼我們該如何去繞過它呢?在進行繞過之前,重要的是我們要明白,自2006年以來,這個特定的bug已被公布和討論。基本上,腳本解釋器(如PowerShell)從工作目錄載入amsi.dll,而不是從安全路徑(如System32)載入它。由於這個原因,我們可以將PowerShell.exe複製到我們可以寫入的目錄,並載入易受攻擊的amsi.dll版本。基於這一點,我們可以利用bat劫持DLL,或者我們可以創建相同的註冊表項來劫持AMSI的COM組件。由於這個易受攻擊的AMSI版本仍然會調用CoCreateInstance(),我們可以再次劫持註冊表搜索順序。
首先,我們可以通過為powershell.exe和AMSI的CLSID創建一個ProcMon過濾器來驗證修補後的amsi.dll版本不通過註冊表查詢COM伺服器。當PowerShell啟動時,你將注意到沒有任何結果出現:
接下來,我們刪除易受攻擊的AMSI DLL並將PowerShell移動到同一目錄。如你所見,現在正在查詢註冊表來定位AMSI的COM伺服器:
使用易受攻擊的AMSI DLL,我們現在可以執行COM伺服器劫持:
檢測方案:儘管在構建#16232補丁中進行了修復,但仍然可以通過使用舊的,易受攻擊的AMSI DLL執行DLL劫持來執行此操作。為了檢測這種攻擊手法,監視對於在其正常目錄之外執行的任何二進位文件(wscript,cscript,PowerShell)(通過命令行日誌記錄等)是比較理想的方法。由於繞過修復程序需要將二進位文件移動到用戶可寫位置,所以在非標準位置執行這些命令就可以抓住這一攻擊行為。
點擊展開全文
※傳韓國國家情報機構承認干涉2012年總統大選:組建30隻水軍操縱民意
※深度:CVE-2017-8565分析和利用
※如何通過簡單的網頁文件從MacOS中盜取文件?
※滲透測試指南之域用戶組的範圍
※Ebay出售投票機:內含美國大選中65萬選民個人信息
TAG:嘶吼RoarTalk |
※Munin:依據文件Hash從各種在線惡意軟體掃描服務提取信息的工具
※Nat Cell Biol:鑒別出幫助機體抵禦癌症的特殊「染色體掃描儀」蛋白
※亞馬遜將推出3D人體掃描系統 幫助用戶購買更合身的服裝
※日本頂級時尚網站通過身體掃描技術主打自有品牌服飾
※比蘋果手錶智能,歷經百萬次「身體掃描」測試,技術解碼生命特徵
※明朝皇后群體掃描及特徵分析,得出這樣一個結論
※3D人體掃描技術新論文,將來或許可以應用到手機中
※【設計博聞】這面鏡子其實是3D人體掃描儀
※伊戰中,美軍為何對著自己戰友的屍體掃射?戰爭實在太殘酷
※尋找最佳推薦,亞馬遜用3D人體掃描儀來測量人的體型
※戰友犧牲後,美軍為什麼要朝戰友屍體掃射?結果比你想像的要可怕
※戰友犧牲後, 美軍為什麼要朝戰友屍體掃射? 結果比你想像的要可怕
※越戰美軍想要帶回戰友,就必須對著遺體掃射,至今都不願再提起
※常吃這3種蔬菜,排毒抗癌,最後1種尤其要多吃,給身體掃掃除!
※明知日軍大部隊在集體掃蕩,他們卻一點不在意,主動讓日軍包圍
※將嬰兒做成「活體掃地機」,只有你想不到,沒有他做不出
※兩伊戰爭伊朗有多狠?搞人海戰術,用人體掃雷
※阿衰得紅眼病,最後三隻紅眼集體掃射,源頭竟然是一隻兔子!
※越戰中,為何美軍會對著戰友屍體掃射?原因比你想的可怕100倍
※完善AR購物,亞馬遜返利25美元收集3D身體掃描數據