解密無(wú)文件攻擊的各種姿勢(shì)及最新檢測(cè)方法
" 無(wú)文件攻擊 " 不代表真的沒(méi)有文件,只是一種攻擊策略,其出發(fā)點(diǎn)就是避免將惡意文件放在磁盤(pán)上,以逃避安全檢測(cè)。所說(shuō)的無(wú)文件,也未必是攻擊全程無(wú)文件,而是其中的一部分采用了無(wú)文件攻擊 [ 1 ] 。近期,受 NDSS2020 頂會(huì)文章 [ 2 ] 啟發(fā),查閱趨勢(shì)科技等數(shù)篇安全報(bào)告及網(wǎng)頁(yè)文章,認(rèn)為無(wú)文件攻擊是一種趨勢(shì)," 離地 / 隱形 / 無(wú)文件 " 是一個(gè)目前很熱門(mén)的方向。故本文圍繞無(wú)文件展開(kāi)調(diào)研,收集 2020 年 4 月前的相關(guān)資料,內(nèi)容包括無(wú)文件勒索、無(wú)文件挖礦等最新的無(wú)文件攻擊方式,并對(duì)其進(jìn)行歸納、總結(jié)。同時(shí),分析了該篇頂會(huì)文章的核心內(nèi)容,進(jìn)一步了解無(wú)文件攻擊的檢測(cè)思路。
一、無(wú)文件勒索
近期比較特別的有 ProLock(shellcode 嵌入 BMP 圖像中)、WannaRen(office 激活工具中硬編碼 powershell 命令),還有普通的惡意代碼注入合法進(jìn)程及宏結(jié)合 powershell 等。具體情況如下:
ProLock [ 3 ] (2020.4.19)
將惡意 shellcode 嵌入到 BMP 圖像文件中(之前的版本 PwndLocker,嵌入到 AVI 視頻中,被加密文件存在被恢復(fù)的可能),通過(guò)混淆的 powershell 代碼將圖像中的代碼直接注入到內(nèi)存中執(zhí)行,達(dá)到可執(zhí)行文件不落地的目的。使用 ShellCode 開(kāi)發(fā)的勒索軟件比宏結(jié)合 powershell 更難被安全軟件識(shí)別,未來(lái)可能會(huì)成為更多勒索軟件開(kāi)發(fā)者的選擇。
ProLock 勒索軟件作者將代碼嵌入一個(gè)名為 "WinMgr.bmp" 的 BMP 圖像中,ShellCode 代碼片段如下:
PowerShell 腳本解混淆后,將 ShellCode 直接注入內(nèi)存中運(yùn)行。Powershell 腳本如下:

ShellCode 注入到內(nèi)存中的代碼:

ProLock 勒索軟件為了能夠順利加密文件,會(huì)調(diào)用 cmd 執(zhí)行命令停止大量服務(wù)。這些服務(wù)包括數(shù)據(jù)庫(kù)相關(guān)服務(wù)、數(shù)據(jù)備份相關(guān)服務(wù)、安全軟件相關(guān)服務(wù),如下所示:

WannaRen 勒索軟件 [ 4 ] (2020.4.14)
網(wǎng)上某軟件園的 2016office 激活工具中硬編碼了 powershell 的相關(guān)命令,如下:

解碼后得到可執(zhí)行代碼,執(zhí)行后會(huì)先延時(shí) 2000 秒(大概 33 分鐘),檢測(cè)是否存在相關(guān)安全防護(hù)進(jìn)程,針對(duì)性很強(qiáng),可以看出是針對(duì)國(guó)內(nèi)普通的個(gè)人用戶(hù)環(huán)境。最后還是會(huì)執(zhí)行一段 powershell 腳本,通過(guò)站點(diǎn)返回的內(nèi)容作為命令執(zhí)行。
FTCode 勒索軟件 [ 5 ] (2020.1)
FTCode 勒索病毒是一款基于 PowerShell 腳本的勒索病毒,主要通過(guò)垃圾郵件進(jìn)行傳播,此勒索病毒攻擊流程,如下:

FTCode 勒索病毒 PowerShell 代碼,如下所示:

Sorebrect(2017/2019.1.2)
它將惡意代碼注入到目標(biāo)系統(tǒng)的合法進(jìn)程 svchost.exe 中 , 然后自毀以躲避檢測(cè)。

二、無(wú)文件挖礦
無(wú)文件挖礦的方式較普通,一般為利用 powershell 直接在內(nèi)存中執(zhí)行、通過(guò) powershell 中嵌入 PE 文件加載等方式,同時(shí)還采用 WMI+powershell 等方式進(jìn)行內(nèi)存駐留。最近一篇文章 powershell 無(wú)文件挖礦病毒處置 [ 7 ] 也表明了目前無(wú)文件挖礦仍然存在。具體案例如下:
PowerGhost 2019.11 最新樣本 [ 6 ] [ 7 ]
PowerGhost 是從 2018 年被發(fā)現(xiàn)使用 powershell 無(wú)文件方式進(jìn)行攻擊感染的挖礦以及 DDOS 病毒,其感染方式利用了永恒之藍(lán),MSSQL 爆破,SSH 爆破,wmi 以及 smb 爆破遠(yuǎn)程命令執(zhí)行等,同時(shí)對(duì) windows 和 linux 進(jìn)行攻擊,一旦該病毒進(jìn)入內(nèi)網(wǎng),會(huì)在內(nèi)網(wǎng)迅速傳播。目前其主要感染地區(qū)在廣東、浙江、上海以及江蘇。
該病毒母體模塊分為 2 個(gè)版本,x86 和 x64,x86 使用 antitrojan.ps1,x64 使用 antivirus.ps1,本次分析 x64 版本的 antivirus.ps1。當(dāng)前病毒版本為 1.5。
母體 payload 分布以及執(zhí)行圖,antivirus.ps1 中主要分為 3 個(gè)部分,如下圖:

永恒之藍(lán)木馬 [ 8 ] [ 9 ]
2019 年 4 月 3 日,騰訊安全御見(jiàn)威脅情報(bào)中心檢測(cè)到永恒之藍(lán)下載器木馬再次更新,此次更新改變了原有的挖礦木馬執(zhí)行方式,通過(guò)在 Powershell 中嵌入 PE 文件加載的形式,達(dá)到執(zhí)行 " 無(wú)文件 " 形式挖礦攻擊。新的挖礦木馬執(zhí)行方式?jīng)]有文件落地,直接在 Powershell.exe 進(jìn)程中運(yùn)行,可能造成難以檢測(cè)和清除。這種注入 " 白進(jìn)程 " 執(zhí)行的方式可能造成難以檢測(cè)和清除惡意代碼。

Coinminer
2019 年第二季度,挖礦病毒也同樣出現(xiàn)了新型變種。首先值得注意點(diǎn)是亞信安全最新截獲了 "Coinminer.Win32.MALXMR.TIAOODCJ" 病毒,該病毒可首先利用 CVE-2019-2725 漏洞執(zhí)行特定命令,以利用 PowerShell 執(zhí)行惡意行為,從遠(yuǎn)端 C&C 服務(wù)器下載證書(shū)文件 cert.cer,并使用管理 Windows 中的證書(shū)組件 CertUtil 來(lái)解碼文件,以達(dá)到躲避殺毒軟件檢測(cè)的目的。

PowershellMiner [ 10 ]
2018 年 3 月,利用 WMI+Powershell 方式實(shí)現(xiàn)的無(wú)文件攻擊行為,其目的是長(zhǎng)駐內(nèi)存挖礦。由于此攻擊沒(méi)有本地落地文件,難以察覺(jué),企業(yè)利益默默受到侵害。此次攻擊,具備無(wú)文件攻擊特性,所有模塊功能均加載到內(nèi)存中執(zhí)行,沒(méi)有本地落地文件。為了迅速在內(nèi)網(wǎng)傳播,采用了 SMB 弱口令爆破攻擊和 " 永恒之藍(lán) " 漏洞攻擊,二者只要有一種能成功,就可以橫向感染到其它主機(jī)。病毒直接使用 powershell.exe 進(jìn)行挖礦,CPU 占用率達(dá)到 87%,其腳本功能是從 wmi 類(lèi)中讀取挖礦代碼并執(zhí)行。

如上圖,原始病毒體為 info*.ps1(64 位系統(tǒng)對(duì)應(yīng) info6.ps1,32 位系統(tǒng)對(duì)應(yīng) info3.ps1), 其為 Powershell 腳本,被加載后內(nèi)存存在 4 個(gè)模塊,分別為挖礦模塊、Minikatz 模塊、WMIExec 模塊、MS17-010 攻擊模塊。
攻擊順序如下:
1. 首先,挖礦模塊啟動(dòng),持續(xù)進(jìn)行挖礦。
2. 其次,Minikatz 模塊對(duì)目的主機(jī)進(jìn)行 SMB 爆破,獲取 NTLMv2 數(shù)據(jù)。
3. 然后,WMIExec 使用 NTLMv2 繞過(guò)哈希認(rèn)證,進(jìn)行遠(yuǎn)程執(zhí)行操作,攻擊成功則執(zhí)行 shellcode 使病原體再?gòu)?fù)制一份到目的主機(jī)并使之運(yùn)行起來(lái),流程結(jié)束。
4. 最后,如 WMIExec 攻擊失敗,則嘗試使用 MS17-010" 永恒之藍(lán) " 漏洞攻擊,攻擊成功則執(zhí)行 shellcode 使病原體再?gòu)?fù)制一份到目的主機(jī)并使之運(yùn)行起來(lái)(每感染一臺(tái),重復(fù) 1、2、3、4)。
此病毒采用的是 WMI+Powershell 的內(nèi)存駐留方式,模塊以服務(wù)形式存在,每 5600 秒可自動(dòng)觸發(fā)一次。
三、無(wú)文件攻擊檢測(cè)
由于其通常在內(nèi)存中運(yùn)行避免落地文件,同時(shí) powershell 腳本易混淆檢測(cè)困難,傳統(tǒng)的基于文件的反病毒軟件很難檢測(cè)到此類(lèi)攻擊。故 NDSS2020 上有學(xué)者提出針對(duì)離地攻擊檢測(cè)的有效手段 [ 2 ] ,筆者認(rèn)為也可以推廣到一般的無(wú)文件攻擊檢測(cè)。
引入概念:離地攻擊,只使用預(yù)安裝的軟件并且攻擊者沒(méi)有在系統(tǒng)上安裝額外的二進(jìn)制可執(zhí)行文件。帶有宏、VB 腳本、powershell 腳本或者使用系統(tǒng)命令(如 netsh 命令)的文檔屬于離地攻擊的范圍。當(dāng)使用 dual-use tools 時(shí),若是 Mimikatz 等被下載時(shí),不能被稱(chēng)為離地攻擊 [ 11 ] [ 12 ] 。

問(wèn)題描述:現(xiàn)有的反病毒軟件檢測(cè)方法很難檢測(cè)到該類(lèi)攻擊,分析檢測(cè)該攻擊所要具備的條件。
解決方式:依賴(lài)于內(nèi)核級(jí)的起源監(jiān)控,捕獲每個(gè)目標(biāo)程序的動(dòng)態(tài)行為。通過(guò)嵌入起源數(shù)據(jù)構(gòu)建異常檢測(cè)模型,檢測(cè)偏離先前觀(guān)察到的歷史程序運(yùn)行時(shí)的行為,因此可以檢測(cè)以前看不到的攻擊。使用神經(jīng)嵌入模型,使得一個(gè)進(jìn)程起源圖中的不同部分投射到 n 位數(shù)值向量空間中,這個(gè)空間中,相似的組件在地理位置上更接近。使用基于密度的新穎檢測(cè)方法,檢測(cè)起源圖中的異常因果路徑。
文章貢獻(xiàn):設(shè)計(jì)并實(shí)現(xiàn)了 provedetector,基于起源的系統(tǒng),用于檢測(cè)偽裝技術(shù)的隱蔽惡意軟件;為了保證較高的檢測(cè)精度和效率,提出了一種新的路徑選擇算法來(lái)識(shí)別起源圖中潛在的惡意部分;設(shè)計(jì)了一個(gè)新的神經(jīng)嵌入和機(jī)器學(xué)習(xí)管道,自動(dòng)為每個(gè)程序建立一個(gè)輪廓并識(shí)別異常進(jìn)程;用真實(shí)的惡意軟件進(jìn)行系統(tǒng)評(píng)估,通過(guò)幾個(gè)可解釋性的研究證明了其有效性。

其核心 ProvDetector 分為四部分:圖構(gòu)建、特征提取、嵌入和異常檢測(cè)。部署監(jiān)控代理,按照定義收集系統(tǒng)數(shù)據(jù)放入數(shù)據(jù)庫(kù)。定期掃描數(shù)據(jù)庫(kù)檢查是否有新添加的進(jìn)程被劫持。對(duì)于每個(gè)進(jìn)程,先構(gòu)建起起源圖(圖構(gòu)建)。然后從源點(diǎn)圖選擇路徑子集(特征提取)并將路徑轉(zhuǎn)換為數(shù)值向量(嵌入)使用一個(gè)新穎的檢測(cè)器來(lái)獲得嵌入向量的預(yù)測(cè)并報(bào)告最終決定(異常檢測(cè))。
實(shí)驗(yàn)評(píng)估:評(píng)估其檢測(cè)精度,使用精度、召回率及 F1-Score 來(lái)度量。

同時(shí),對(duì)檢測(cè)結(jié)果進(jìn)行解釋?zhuān)赋鰹槭裁礄z測(cè)結(jié)果是正確的,給出了理論證明。分析其運(yùn)行性能,訓(xùn)練、檢測(cè)時(shí)的開(kāi)銷(xiāo)項(xiàng)及開(kāi)銷(xiāo),評(píng)估其企業(yè)實(shí)用性。是一篇工作量很大、很有意義的優(yōu)質(zhì)文章。
據(jù)賽門(mén)鐵克報(bào)告顯示,在 2019 年上半年,隱秘惡意軟件占所有攻擊的 35%,增長(zhǎng)了 364%,這些攻擊成功的可能性是傳統(tǒng)攻擊的 10 倍。較隱蔽的攻擊措施、更高的成功率,使得無(wú)文件攻擊逐漸火熱。同時(shí)由于其難以捕捉、難以檢測(cè)的特性,給傳統(tǒng)防御技術(shù)帶來(lái)了巨大的挑戰(zhàn)。