當前位置:
首頁 > 新聞 > PowerShell無文件持久化技術與常用的防禦繞過技術

PowerShell無文件持久化技術與常用的防禦繞過技術

目前為止,PowerShell仍然是網路安全專家進行防禦和黑客進行攻擊的首選工具。原因很簡單,PowerShell具有很好的可擴展性,支持能力以及適應各種編程語言。如PowerShell Empire,PowerSploit等,都被安全研究人員以及黑客所使用。

這兩天,就有安全平台檢測出了有惡意軟體利用PowerShell所進行的攻擊,該攻擊可以進行持久性攻擊並繞過傳統安全防護的檢測。惡意軟體會誘騙用戶對網站上的Adobe Flash瀏覽器插件進行更新,然後使用一個稱為mshta.exe的HTA攻擊方法。 MSHTA.exe是一個合法的Microsoft二進位文件,可以在任何瀏覽器中被調用,用於執行.HTA文件。不過在大多數情況下,對MSHTA.exe的擴展都屬於惡意擴展,所以我們建議開啟防火牆裡所有阻止HTA擴展的功能。

目前利用MSHTA.exe進行攻擊的方法已經被列入社會工程學攻擊包(SET)多年了:

如果被MSHTA.exe攻擊了,就會發生上圖所列的那些情況。黑客可能是利用了VBS下載器,PowerShell,一個被下載和執行的二進位文件等等來執行的MSHTA.exe攻擊。

目前,在大多數情況下,這種釣魚網路攻擊都能夠被檢測到,如下圖所示, 一旦網頁啟動了惡意HTA ,就能被立即檢測到。

一旦發生這種情況,PowerShell命令就會被執行,因為這個HTA會觸發了多個危險提示。通常,惡意HTA會觸發SYSWOW64降級攻擊,將進程降級為32位進程,從而給目標設備註入shellcode。

在我們對攻擊日誌進行分析時,我們發現Invoke-Expression(IEX)是一種常用的攻擊技術,利用這種技術可以提取特定的註冊表項,並實現持久化的掛鉤( hook)。PowerShell攻擊是通過Invoke-Expression(IEX)調用.Net Web Client下載功能來下載瀏覽器上的PowerShell代碼並執行。不過,提取的註冊表項的名稱和持久性掛鉤都會在初始PowerShell調用中經過混淆處理。

在這個由Invoke-Expression引起的攻擊中,攻擊者會在CurrentVersion Run下的用戶配置文件下創建了一個註冊表項,以作為持久性掛鉤的起始位置。

通過研究持久性掛鉤的日誌,我們發現混淆後的持久性註冊表掛鉤如下:

HKEY_USERS:SANITIZEDSoftwareMicrosoftWindowsCurrentVersionRun

"C:Windowssystem32mshta.exe" "about:"

反混淆後的持久化註冊表掛鉤如下:

這一系列過程,就是我們本文所說的無文件攻擊技術,也稱為有效載荷傳遞攻擊技術,因為該攻擊技術不是直接將特定的有效載荷寫入文件的,而是通過運行註冊表項來在目標設備中實現持久化注入。

在文件攻擊技術中,mshta.exe會使用WScript.shell來調用嵌入了PowerShell命令的註冊表項。目前,這種無文件攻擊至今還無法被檢測到。不過,「無文件」並不是真的沒有文件的意思,而是指的有效載荷,關於什麼是無文件惡意軟體,請點擊這裡進行詳細了解。

使用目標設備的PowerShell和mshta,攻擊者可以使用傳統的攻擊技術來對目標設備進行惡意文件的下載及後門的安裝。通常黑客會使用Invoke-Expression(IEX)來進行繞過並使用PowerShell的「EncodedCommand」參數以躲避安全軟體的檢測。

最近,安全研究員Vincent Yiu就展示了一種通過PowerShell來繞過傳統檢測的方法,該方法沒有調用任何IEX和EncodedCommand。目前這種方法已開始被廣泛使用了,比如下圖這個例子,就是利用了「.」來調用calc.exe的。在這個例子中,由於沒有調用其他代碼,所以無需使用該代碼來分配變數。

那麼,在這種情況下,網站的TXT將記錄下載PowerShell的命令,並通過nslookup在系統上執行該命令。這意味著我們可以把命令代碼注入到DNS中的TXT記錄中,並啟動PowerShell命令。

開頭我們所提到的那家安全平台就可以就可以通過這種PowerShell的運行,來檢測出惡意運行。

如果檢測到nslookup以及通過nslookup提取代碼的行為,則該平台就能立馬檢測到這種惡意行為,因為PowerShell內部使用的nslookup以及在txt記錄中的代碼都是惡意的。另外,上面例子中的「.」只能執行文件,而不是執行代碼本身。因此,我們還需要另一個命令,來執行從nslookup txt記錄中提取的代碼。

安全研究專家Daniel Bohannon給出了一種實現辦法,不過仍然需要用到IEX:

$nslookupResult1 = "iex"

$nslookupResult2 = "Write-Host THIS IS MY ACTUAL PAYLOAD -f green"

. $nslookupResult1 $nslookupResult2

or even better:

$nslookupAllInOne = @("iex","Write-Host ALL IN ONE -f green")

. $nslookupAllInOne[0] $nslookupAllInOne[1]

以下是在該平台所識別出的一種特定攻擊模式:

預防措施

對於那些還沒有使用該平台進行防護的組織來說,我們可以推薦一些方法來檢測PowerShell的這種無文件持久化行為,其實這種惡意行為並不僅限於某種特定的模式,例如IEX。下面我們就為你列出一些預防措施,讓你做到心中有數:

1. 注意PowerShell命令的字元長度必要過大;

2.注意將PowerShell置於約束語言模式下的行為;

3.啟用增強的PowerShell日誌記錄,例如腳本塊日誌記錄;

4.經常對設備進行安全檢測;

5. 注意minesweeper.exe的出現;

6.監控諸如IEX,EncodedCommand等的使用;

7.利用Sysmon等工具提高記錄功能,並檢測可能由可疑進程(PowerShell)引發的流程注入,

8. 審查DNS日誌並尋找可疑的控制命令和DNS請求;

10. 在正常情況下禁止普通用戶執行PowerShell命令(AppLocker Device Guard可以防止普通用戶使用PowerShell)。


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

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


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

解密WhatsApp備份的新方法
使用Google知識圖表欺騙搜索結果

TAG:嘶吼RoarTalk |