攻防演練中無文件攻擊PowerShell的破解之道
在近兩年的網(wǎng)絡(luò)安全攻防演練中,無文件PowerShell被攻擊者越來越多的利用到攻防實(shí)戰(zhàn)中。攻擊者可以利用PowerShell在內(nèi)存中執(zhí)行命令,從而繞過傳統(tǒng)防護(hù)工具對惡意軟件的哈希分析和檢測,而且通過這種方法,惡意攻擊者可以降低被發(fā)現(xiàn)的風(fēng)險(xiǎn)、增加成功實(shí)現(xiàn)目標(biāo)的機(jī)會。
1. 為什么攻擊者選用PowerShell?
攻擊者使用PowerShell更容易將系統(tǒng)暴露于勒索軟件、無文件惡意軟件和惡意代碼注入內(nèi)存的威脅中,使得安全風(fēng)險(xiǎn)大大提高。此外,PowerShell還有以下特點(diǎn):
(1) 規(guī)模和范圍
PowerShell是Windows XP及更高版本W(wǎng)indows操作系統(tǒng)的內(nèi)置功能。同時(shí),它還是可以在Linux上運(yùn)行的開源、跨平臺框架。
(2) 合法使用性
PowerShell本身并不是惡意的,它實(shí)際上是一個(gè)合法的工具。但它的使用和濫用會模糊被用來惡意攻擊或感染系統(tǒng)、或用來完成IT/系統(tǒng)管理任務(wù)之間的界限。
(3) 編寫、運(yùn)行容易
對于許多IT/系統(tǒng)管理員、信息安全專業(yè)人員、滲透測試人員和黑帽黑客來說,編寫和運(yùn)行PowerShell腳本相對容易。
(4) 簡單混淆
PowerShell腳本不僅易于編寫,PowerShell的靈活性以及第三方模塊的可用性使得混淆它們相對簡單。
(5) 功能特性
PowerShell可以虛擬地訪問大量的應(yīng)用程序接口(api)來執(zhí)行重要的功能,如VirtualAlloc、VirtualProtect和CreateThread,所有這些都可能被攻擊者濫用。
圖 PowerShell攻擊鏈路
通常情況下,PowerShell在默認(rèn)情況下受到限制,以減少其濫用。但我們?nèi)匀豢梢钥吹揭恍y帶PowerShell腳本的惡意軟件使用技術(shù)繞過PowerShell的默認(rèn)執(zhí)行策略,例如將惡意代碼作為命令行參數(shù)運(yùn)行。正是由于以上的特性,攻擊者越來越喜歡使用PowerShell進(jìn)行無文件攻擊,以完成威脅目的。
2. 無文件攻擊注入形式
一般來講,注入攻擊不僅可以用于在不知道用戶名和密碼的情況下登錄應(yīng)用程序,還可以暴露私人、機(jī)密或敏感信息,甚至可以劫持整個(gè)服務(wù)器。而無文件攻擊的注入是在內(nèi)存層進(jìn)行的,包括如下四種形式:
(1) 反射性自我注入
反射加載是指從內(nèi)存而不是從磁盤加載可移植的可執(zhí)行文件(PE)。一個(gè)精心制作的函數(shù)/腳本可以反射地加載可移植的可執(zhí)行文件,而無需在流程中注冊為已加載的模塊,因此可以執(zhí)行操作而不會留下痕跡。PowerShell是用于執(zhí)行這些精心編寫的腳本的最廣泛使用的應(yīng)用程序之一。此事件表示一種無文件攻擊,其中PowerShell腳本試圖將PE注入到PowerShell進(jìn)程本身。
(2) 反射EXE自我注入
反射加載是指從內(nèi)存而不是磁盤加載PE。一個(gè)精心制作的函數(shù)/腳本可以反射式地加載可執(zhí)行文件(EXE),而無需在進(jìn)程中注冊為已加載的模塊,因此可以執(zhí)行操作而不留下痕跡。PowerShell是用于執(zhí)行這些精心編寫的腳本的最廣泛使用的應(yīng)用程序之一。此事件表示一種無文件攻擊,其中PowerShell腳本試圖將一個(gè)EXE注入到PowerShell進(jìn)程本身。
(3) 反射DLL遠(yuǎn)程注入
反射加載是指從內(nèi)存而不是磁盤加載PE。一個(gè)精心制作的函數(shù)/腳本可以反射地加載一個(gè)DLL,而無需在進(jìn)程中注冊為已加載的模塊,因此可以執(zhí)行操作而不留下痕跡。PowerShell是用于執(zhí)行這些精心編寫的腳本的最廣泛使用的應(yīng)用程序之一。此事件表示PowerShell腳本試圖向遠(yuǎn)程進(jìn)程注入DLL的無文件攻擊。
(4) 使用DotNetToJScript技術(shù)的惡意代碼執(zhí)行
此事件表示嘗試使用DotNetToJScript技術(shù)執(zhí)行惡意Shellcode,該技術(shù)被流行的無文件攻擊使用,如CACTUSTORCH。DotNetToJScript攻擊向量允許加載和執(zhí)行惡意的。net程序集(DLL,EXE等)直接從內(nèi)存通過COM暴露net庫的幫助。就像任何其他典型的無文件攻擊技術(shù)一樣,DotNetToJScript不會在計(jì)算機(jī)的硬盤驅(qū)動器中編寫惡意的。net DLL或EXE的任何部分。
3. 無文件攻擊的危害
無文件攻擊這類新型威脅攻擊很多時(shí)候在磁盤上不會存放文件,基于文件的檢測、監(jiān)測和防御自然就失去了作用,但這些攻擊在攻擊期間會有一些危險(xiǎn)動作,這是可以被行為分析模塊檢測識別的。
另外傳統(tǒng)的病毒木馬威脅數(shù)量也還在不斷的增長,基于行為分析的識別技術(shù)也是當(dāng)前最重要的檢測識別技術(shù)(這種技術(shù)被稱為下一代殺毒技術(shù)NGAV),這種技術(shù)的實(shí)現(xiàn)除了依賴操作系統(tǒng)提供的接口外,還得在操作系統(tǒng)上掛大量的鉤子,這樣才能監(jiān)控到足夠多的行為,有了足夠多樣的行為數(shù)據(jù)后,基于行為分析的檢測識別技術(shù)才能識別更多的威脅攻擊,而且誤報(bào)率才能足夠低,但是目前操作系統(tǒng)越來越封閉(比如64位的Windows操作系統(tǒng))已經(jīng)不允許掛鉤子了,這勢必會大大削弱這種方法的檢測效果,而這又是當(dāng)前十分重要、主流的一種病毒木馬威脅檢測方法。
因此,無文件攻擊成功的概率會變大,對眾多企事業(yè)單位帶來的威脅也就會增多,后果難以估量。
4. 內(nèi)存保護(hù)的破解之道
PowerShell框架提供的便利使系統(tǒng)管理任務(wù)更加容易,但是它也為網(wǎng)絡(luò)犯罪分子和黑客組織提供了較大的攻擊面。不過,盡管使用PowerShell進(jìn)行的無文件威脅可能不如傳統(tǒng)的惡意軟件和攻擊那樣明顯,但并非無法阻止。基于內(nèi)存保護(hù)技術(shù)研發(fā)設(shè)計(jì)的智能內(nèi)容保護(hù)系統(tǒng),目前被認(rèn)為是一種有效的應(yīng)對方式。
智能內(nèi)存保護(hù)系統(tǒng)通過硬件虛擬化可以監(jiān)控CPU執(zhí)行的指令集,通過對部分敏感指令的監(jiān)控,并結(jié)合操作系統(tǒng)上下文就可以知道操作系統(tǒng)中運(yùn)行進(jìn)程到底執(zhí)行了什么動作,從而破解操作系統(tǒng)的一些限制,采集到更多的程序行為,這樣可以大大提升威脅識別率,并大幅降低誤報(bào)率。智能內(nèi)存保護(hù)系統(tǒng)基于硬件虛擬化技術(shù)的端點(diǎn)安全技術(shù)可以很好的突破操作系統(tǒng)的限制,實(shí)現(xiàn)對程序行為的細(xì)粒度監(jiān)控,并能很好的解決以往無法解決的大難題:對內(nèi)存的讀、寫、執(zhí)行行為的監(jiān)控。
隨著新興技術(shù)的發(fā)展,諸如無文件攻擊之類的威脅和復(fù)雜威脅逐漸興起并被利用,應(yīng)對瞬息萬變的環(huán)境并防范是眾多企業(yè)面臨的挑戰(zhàn)。針對性的選擇解決方案,可以很好的解決此類威脅問題。
【本文是51CTO專欄作者“安全牛”的原創(chuàng)文章,轉(zhuǎn)載請通過安全牛(微信公眾號id:gooann-sectv)獲取授權(quán)】