APT10によるANELを利用した攻撃手法とその詳細解析
SecureWorks Japan 株式会社
Counter Threat Unit / Incident
Response Team

玉田 清貴

0

2019/01/18
Japan Security Analyst
Conference 2019

Agenda• APT10による国内への標的型攻撃• ANELを利用した攻撃の流れ• 初期侵入• 感染後の動き• ANEL詳細解析• バージョンアップによる変化• コード周りの特徴• 暗号化手法の変化• バックドアコマンド数の増加• DLLファイルのアンパック• 暗号化された通信の復号• 対策1

APT10による国内への標的型攻撃2

APT10StonePanda, ChessMaster, menuPass, etc…

• 標的

• 政府関連組織, 学術機関, 政治団体, 医療関連組織, 航空宇宙関連, etc…

• 初期侵入• マルウェアをダウンロード/ドロップする文書ファイルが添付されたスピアフィッシングメール• 関連するマルウェア、攻撃ツール• ANEL, ChChes, Koadic, PlugX, Empire, CobaltStrike, DKMC,RedLeaves, QuasarRAT, etc…

3

ANEL(エーネル)
APT10が日本国内の標的に対して利用するバックドア• 2017年後半から利用を確認• 頻繁にバージョンアップが施され、機能が追加されており、現在も攻撃に利用されている• ANELに関する公開情報• 「ChChes」を操る標的型サイバー攻撃キャンペーン「ChessMaster」による諜報活動の手口• http://blog.trendmicro.co.jp/archives/15551• 標的型サイバー攻撃キャンペーン「ChessMaster」の新しい戦略：変化を続けるツールと手法• http://blog.trendmicro.co.jp/archives/16364• 中国の「APT10」が最新のTTP（戦術、技術、および手順）を用い、日本企業を標的に• https://www.fireeye.com/blog/jp-threat-research/2018/09/apt10-targeting-japanesecorporations-using-updated-ttps.html4

ANELの名前の由来• オリジナルのDLLファイル名が「lena_http_dll.dll」であるため、「lena」を逆さ読みしたものが採用された• 現行バージョンのANELは、ファイル名が変更されてランダム文字列となっている

5

頻繁なバージョンアップ

6

検体や文書ファイルなどのタイムスタンプから見たタイムライン
5.0.0 beta1
5.1.1 rc0
5.1.2 rc1

5.2.0 rev1
5.2.2 rev2
5.3.0
5.3.1
5.3.2
5.4.1
5.5.0 rev1

09 10 11 12 01 02 03 04 05 06 07 08 09 10 1120172018
7

ANELを利用した攻撃の流れ
ー 初期侵入 ー8

ANEL関連の公開事例 (ver 5.1.1 rc0)
http://csirt.ninja/?p=1327

9

ANEL関連の公開事例 (ver 5.3.0)
http://araki.way-nifty.com/araki/2018/05/news274130524-a.html

10ver 5.2.2以前のANELを用いた攻撃の流れ
Koadicをダウンロード・実行し感染端末の環境調査を行った後、ANELをダウンロード・実行する
Officeの脆弱性の利用や設定の悪用

送信

実行

Koadicをダウンロード
Koadic経由でANELをダウンロード・実行
C2と通信

11

DLL/EXE
復号
DLL
ANEL

Koadic感染の際に利用された攻撃手法事例
攻撃時に流行した攻撃手法を導入している• 脆弱性の利用• CVE-2017-0199• CVE-2017-8759• CVE-2017-11882• CVE-2018-8174• Officeの機能を悪用• DDE AUTO
• Office Open XMLのフレームの悪用• リンクの自動更新機能の悪用

CVE-2017-11882ペイロード部分

Office Open XMLのフレームの悪用
12

Koadic
Post-exploitation Tool
• JavaScriptで作成されたpost-exploitationツール• 権限昇格や横展開、情報収集などを行うための複数のモジュールが実装されている• 2017年にDEFCON25で発表された• https://github.com/zerosum0x0/koadic• APT10が感染端末の環境情報取得とANELのダウンロード、実行に利用

13

Koadic modules

14ver 5.3.1以降のANELを用いた攻撃の流れ
パスワード付き文書ファイルをメールに添付、文書ファイルを開いてマクロを有効にすると感染する
実行

パスワード付き
文書ファイル

マクロ実行
生成

EXE
ロード
DLL
ロード

送信

C2と通信

DLL
ANEL

15

復号

BIN

ANELを利用した攻撃の流れ
ー 感染後の動き ー

16利用されたWindowsコマンド• cmd /c <コマンド>• ipconfig• net start• net use
• net share• net view• net view /domain• net time /domain• tasklist /v• netstat -ano
• systeminfo
• ver
• dir
• reg query <レジストリキー>

17• certutil –decode <エンコードされたファイル> <デコード後ファイル• certutil –urlcache –split –f <URL><ダウンロード先パス、ファイル名>• expand <ファイル名>• del <パス>¥* /f /q• rd <パス> /s /q• taskkill /f /im <image>• taskkill /pid <pid> /f• wmic LOGICALDISK get
name,Description,filesystem,size,freespaceさまざまな調査ツールを利用• 7zip, rar• Webブラウザに保存されたアカウント情報を窃取するツール• Protected Storageをダンプするツール• メールクライアントの設定情報やアカウント情報を窃取するツール• 2段目のANELを実行するためのツール• 端末掌握後にバージョン違いのものを更に分かりづらいパスにダウンロードして実行する傾向

18

ANEL詳細解析

19バージョンアップによる変化

20

コード周りの特徴
ファイルタイプ(1段目)

ANEL DLL復号時の プロセス
Functionの数
Export関数名(参考値)
アンチデバッグ
インジェクション

5.0.0 beta1

DLL

PEB!IsDebugged

svchost.exe

5.1.1 rc0EXE

NANA

バージョン

5.1.2 rc1

ANEL感染までの流れ

Koadicからダウンロード

5.2.0 rev1

5.3.1
5.3.2
5.4.1
5.5.0 rev1
21

crt_mainDLL

622

svchost.exe

lena_main
リンクの自動更新や複数の脆弱性を利用

マクロを利用してドロップ
EXE, DLL, BIN
NA
マクロを利用してドロップ

600
600

NA

5.2.2 rev2
5.3.0

600

NtSetInformationTh
read686
836

NA

特定文字列
ランダム文字列854
929922939

暗号化手法の変化
バージョン

初回通信プロトコル 暗号化アルゴリズム 暗号鍵

暗号化後の処理

5.0.0 beta1
5.1.1 rc0
5.1.2 rc1

5.2.0 rev1

"this is theencrypt key"
HTTP GET

5.2.2 rev2

XORとBase64

Blowfish

5.3.0

5.3.1
5.3.2
5.4.1
5.5.0 rev1

22

接続先URLのMD5値毎に異なるハッシュ値

HTTP GET andPOST
ChaCha20

論理演算の組み合わせとBase64

バックドアコマンド数の増加
CMDID

5.0.0 5.1.1 5.1.2 5.2.0 5.2.2
5.3.0 5.3.1 5.3.2 5.4.1
beta1 rc0rc1 rev1 rev2

5.5.0
rev1

0x97A168D9
ファイルダウンロード 〇697D40DD〇〇〇〇〇〇〇〇〇0x7CF81229
ファイルアップロード 〇6CCC68D5〇〇〇〇〇〇〇〇〇0x652CB1CE
PEのロード
FF1C0A00×××〇〇〇〇〇〇〇0x27595F1F ファイルダウンロー
ド・実行
74B55278〇〇〇〇〇〇〇〇〇〇0xD290626C
現在時刻の取得
85FB1CE3××××〇〇〇〇〇〇0x409C7A89 スクリーンショットの×
取得
CFF0A727

××××〇〇〇〇〇0x8B7B6AB7
ファイル一覧表示
13FCDE88××××〇

×××××

cmd.exeの実行〇〇〇〇〇〇〇〇〇〇

other23CMDDLLファイルのアンパック

24ver 5.2.2 rev2までのANELDLLファイルアンパックの流れ
Rundll32.exeなど
ロード

ANEL_Loader.dll

CreateProcessA(Suspend)
VirtualAllocEx
WriteProcessMemory
CreateRemoteThreadsvchost.exe(復号前のANEL.dllが入ったシェルコード)

svchost.exe(復号後のANEL.dll)

25

アンチデバッグ
デコード
call EAXver 5.3.0以降のANEL DLLファイル
アンパックの流れ
正規ファイル.exe

ロード(DLLハイジャック)

Bin_Loader.dll
ロード
ANEL_Loader.bin
正規ファイル.exe(復号前のANEL.dllが入ったシェルコード)
正規ファイル.exe(復号後のANEL.dll)

26

BINファイル書き換え
VirtualProtect
call EAX
アンチデバッグ
デコード
call EAX

デバッグ検知
PEB!IsDebugged(32bit)
typedef struct _TEB
{NT_TIB
Tib; fs:0h
PVOID
EnvironmentPointer; fs:1ch
CLIENT_ID ClientId;
PVOID
ActiveRpcHandle;
PVOID
ThreadLocalStoragePointer;
PPEBPeb; fs:30h…
struct _NT_TIB {void *ExceptionList;
void *StackBase;…
void *ArbitraryUserPointer;struct _NT_TIB *Self; fs:18h};
27

typedef struct _PEB {BYTEReserved1[2];
0x00
BYTE
BeingDebugged; 0x02…
ULONG
SessionId;} PEB, *PPEB;

デバッグ検知
ZwSetInformationThread

NTSTATUS ZwSetInformationThread(_In_ HANDLE
ThreadHandle,_In_ THREADINFOCLASS ThreadInformationClass,_In_ PVOIDThreadInformation,_In_ ULONG
ThreadInformationLength);
typedef enum _THREAD_INFORMATION_CLASS {ThreadBasicInformation,
0x00…
ThreadHideFromDebugger0x11} THREAD_INFORMATION_CLASS, *PTHREAD_INFORMATION_CLASS;28

DLLファイルの復号
XORによる復号

29

DLLファイルの復号
整形後のDLLをNtAllocationHeap、VirtualAllocで割り当てたメモリに移動

30

アンパッカーの作成• 解析に必要なAPIをフックし、呼ばれたEIP、引数と戻り値を収集• Anti-Debugなどの不都合な引数は変更• ANELがDLLをアンパック後、メモリ割り当てし、DLLを移動したタイミングでダンプする• WinAppDbgを利用• https://github.com/M
arioVilas/winappdbg
31

DEMO32

暗号化された通信の復号

33

暗号化手法の変化
バージョン

初回通信プロトコル 暗号化アルゴリズム 暗号鍵

暗号化後の処理

5.0.0 beta1
5.1.1 rc0

5.1.2 rc1
5.2.0 rev1

"this is theencrypt key"
HTTP GET

5.2.2 rev2

XORとBase64

Blowfish

5.3.0
5.3.1
5.3.2
5.4.1
5.5.0 rev1

34

接続先URLのMD5値毎に異なるハッシュ値

HTTP GET andPOST
ChaCha20

論理演算の組み合わせとBase64

HTTP GET/POST Request
HTTP POSTではデスクトップスクリーンショットも送信される

暗号化されたデスクトップスクリーンショット

35

暗号化される情報
POST /<ハードコードされた文字列>/?<Random String>=<1st information>&<Random String>=<2nd information>&… &<Random String>=<nth information>

36#Infoe.g.

バージョン

1st

ANELのプロセスIDとPC名とGUIDをMD5値化したもの
コンピュータ名

48 09 00 00 7E 01 70 3F AB 34 F7
66 11 D0 2C 8F 1F 19 74 EA JOHNPC

5.0.0 beta1～

2nd

タイムスタンプ

1544167773

3rdOSバージョン

6.1.7601

4th

ユーザ名

John

5th

タイムゾーン

09 00 00 00 00 00 00 00 00 00 00
00

6th

マルウェア実行パス

C:¥Users¥John¥Desktop

7th

ANELバージョン情報

5.5.0 rev1

8th

プロキシ情報01 00 00 00 00 00 00 00 00

9th～

パラメータ等

BfMi=, UI7D=, AKeUcj=, y7XSvTyq=, 5.5.0 rev1～i2zzsj=, KOd0sgmY=, …

5.2.2 rev2～暗号鍵の選択
接続先C2の文字列からMD5ハッシュを作成
MD5ハッシュと1対1に紐着いたハードコードされた鍵を選択

接続先C2
hxxp://220.158.216[.]108/FtV8
MD5ハッシュ計算

c0ca1890c371bd44b44142095182306a

MD5ハッシュと紐づいた
ハードコードされた鍵を選択
3700c9a5fec834e82d5dc8cc4d80fe76a7af5c34a1b329f0ad8baf1fb3c861ffcfff6bf8a2842a0fb2da8e6caad46e9936

Ver

C2

ハードコードされた暗号鍵

5.2.2

hxxp://www.jgefcu[.]com/pNVtNV

4bc8ea487a28d054b0edc8c2e68902eb1902b7054164b4e76042cef2f67492a5

5.2.2

hxxp://www.nymphz[.]com/CFlI4eS

9b819829301b6749e411ef2957e03b552e81fa18a3c2f939aead99db4da0c1e3

5.2.2

Other

128ac5c35a24b237fa64f78dcdec25f2bfc159613b8b3c470090214cf30b59eb

5.3.0

hxxp://82.221.100[.]52/nIbl

d0b21e4eb80b88be9affde3cb5cfdc898e547b13a5139061f8913143a39daacb

5.3.0

hxxp://www.sesbulmes[.]org/nfahlj

8a94046945bd1ad7cf7d869a18ae9bece4147fbcb94a4f94f602f4e8e81fb471

5.3.0

Other

ab380140eb82f434841e0b18fbb56b2d74baaafc0f8a8fba7aa92bef59841b94

5.3.1

hxxp://142.147.97[.]94/DJwoVWoWX7

44e5cb65269db661732bfe30a786ceacb100f973f4a402263ed4e9a7139d4e38

5.3.1

hxxp://82.221.100[.]52/7WL6QAbQy

afbabcbad8da6bac8b4937b983c9f2e1c48d49b5b97cdc33400493c69eac2335

5.3.1

hxxp://www.sesbulmes[.]org/ME3r

687ad7343ec1986129a14ebcd5b8e1a3a95b8cfa980ac94b081f808cee731f6c

5.3.1

hxxp://139.59.43[.]246/7QqsdvfM

4233011f20193b4ae35aff205a81c286cc133346c810ec1849343d08e09dc6b6

5.3.1

Other

07044463d615b4b9226b31d965313780e5e275b8eb30be8558cd4368e6af8ebb

5.3.2

hxxp://www3.lflink[.]com/VCtlz

2d640a90693bc11d444d21214037df23170572b86ba6104e1a04f1e78c5fc2f3

5.3.2

hxxp://www.bbist[.]com/SgOr1q3g

5cc1475c4401e18ff8023fe8e78822e97577977eac2c601c14987acdf52dc2a0

5.3.2

Other

644428e1041831e99603760a8e94aee2642a8641d2173690efaa550477c1623a

5.4.1

hxxp://151.106.53[.]147/VxQG

bdc4b9f5af9868e028dd0adc10099a4e6656e9f0ad12b2e75a30f5ca0e34489d5.4.1

hxxp://153.92.210[.]208/wBNh1

fb9f7fb3c709373523ff27824ed6a31d800e275ec5217d8a11024a3dffb577dd

5.4.1

hxxp://eservake.jetos[.]com/qIDj

d3450966ceb2eba93282aace7d7684380d87c6621bbd3c4f621caa079356004a

5.4.1

Other

f12df6984bb65d18e2561bd017df29ee1cf946efa5e510802005aeee9035dd53

5.5.0

hxxp://220.158.216[.]108/FtV800c9a5fec834e82d5dc8cc4d80fe76a7af5c34a1b329f0ad8baf1fb3c861ffcfff6bf8a2842a0fb2da8e6caad46e9936

5.5.0

hxxp://www.skilllm0dr[.]com/YDVmq5C

283c92fe67aab6b7f535e08c32e13a9d8298dc1e0d0515eb70c1e649957517edc1fb3c67744bd45a2dfd0906c767ebc8

5.5.0

hxxp://vitalikvasuluk.jetos[.]com/XGjk

75863d4048ce69765bf30074fb958ac99e3619e3b9fe939e1c990effaef7f6bda5a51283bf219563b2324bd20b6bbf95

5.5.0

Other

2ff388c14d76ff9b4e8ede392418c0bc7d6db5801a3e28836545ca9af7646e8ccbec52b9e956436ccbaa69278a246b9c

38

Blowfishを用いた暗号化の流れ
ver 5.0.0 beta1 ～ ver 5.4.1
平文(John)
4A 6F 68 6E 04 04 04 04
Blowfishで暗号化

モード
ブロックサイズ
鍵長
パディング

ECB
8バイト
256バイトPKCS#553 42 87 A8 64 F8 69 96
ランダム生成した値でXOR
利用した値を末尾に追加
E3 F2 37 18 D4 48 D9 26 B0
Base64でエンコード
先頭に<ランダム文字列>=を追加

L4NG2=4/I3GNRI2Saw
POST /VxQG?yeF=lyG/0eTv+2GrW98+ddVACePnIWkDX6AchLQXkphYUBIU&xp8=q/fWLXCJuZkqGLhPLWP
uPBQ=&Jg2GEA=zA1OZBp0UQo0GGfJIuSJd0M=&L4NG2=4/I3GNRI2Saw&bbiHYtG0=HPKJ2T1fubWzCAlx
NFBeULA=&dMQhFf=Aav4mcjcCUkLABvZa9qydJ+ZGEwpSbrH5I0cHA+wQYKw&GjLas=ilhyeCApFJWw&z
NEeg4=bxzE0gIARmV56hsPWVa5i7A=39

Chacha20を用いた暗号化の流れ
ver 5.5.0
平文
鍵の順序を変更
Chacha20で暗号化

Chacha20実施後の暗号文論理演算の組み合わせとランダム生成した値でXOR利用した値を末尾に追加
論理演算実施後の暗号文
Base64でエンコード
先頭に<ランダム文字列>=を追加
ePW6lNJV=hcEWJFof7zyD8TFhHQ==
POST /YDVmq5C?GXO=NDjm1NTub/PYNTb36dv5xk3jlHfTdNwcEbsn7Q==&xAV5IS8=TQTS4J3ZK/pEMd2Y+Avt&ljcp=Wg/H6o3JP+39&5xn7Y=xq5+Sh0=&ePW6lNJV=hcEWJFof7zyD8TFhHQ==&0vFGi=z/tKcSl6nU/fu14J
Zqdh3NFhZAIZlwLQo3bQEe4d&xGVhD=ue8jCmo/nVn1wB0=&9xQx06=jcEWJFof7zyDHQ==&mPMC0ck=zqd
bTWcd&dySvjQ=2YghYGcd&nGW=zYpzcTl10h0=&74G=9fZOdyxLlk2+HQ==&FX6oMWC6=5fNsXil10h0=&g1W=x45yFCl4gmW+9DFhCAe1GRMd40

Chacha20を用いた暗号化の流れ
鍵の順序を変更する
鍵：00c9a5fec834e82d5dc8cc4d80fe76a7af5c34a1b329f0
ad8baf1fb3c861ffcfff6bf8a2842a0fb2da8e6caad46e9936

41

Chacha20を用いた暗号化の流れ
平文の暗号化“expand 32-byte k”という文字列

Initial Chacha State
0x61707865 0x3320646e 0x79622D32 0x6B206574
key0
key1
key2
key3
key4
key5
key6
key7
counter
nonce0nonce1nonce2Chacha20 State
s0
s4
s8
s12s1
s5
s9
s13

s2
s6
s10s14“Chacha20 state” XOR “平文”
暗号文

42s3
s7
s11s15

Chacha20を用いた暗号化の流れ
論理演算の組み合わせでさらに暗号化
Chacha20後の暗号文:CC0=0x5F, C１=0xAC, … C26=0xF7
ランダム生成されたXOR鍵:K=0xBB(2) Kの暗号化(1) Cの暗号化
K(BB) & 2A = 2A
Ci(5F) & 2A = 0A~K(BB) & D5 = 44~Ci(5F) & D5 = 80
2A | 44 = 6E :K’
0A | 80 = 8A :C’i
(3) 新しい暗号文生成のためのXOR
C’i(8A) ^ K’(6E) = E4 :C”i
新しい暗号文:C”i
43

利用したXOR値を末尾に追加

対策

44

感染前の対策• マクロを無効にする• ポップアップが出た際に「はい」や「有効にする」を押さない• 既知のマルウェア通信先をブラックリストに登録する• 送信者と送信元メールアドレスの確認

45

感染後の対策• 攻撃に利用される様々な情報窃取ツール、Windowsコマンドの検知• KoadicやANELの通信パケットに含まれる特徴的な文字列で検知• Koadic• C2との通信の中でJScriptを利用したコマンドと結果の送受信を平文でやり取りしている• ANEL• 特徴的なBoundary format• 特徴的なCookieヘッダ

Koadic レスポンス(一部抜粋)
46

特徴的なBoundary format
C2サーバへコマンドの結果を送信する際のHTTP POST

47

特徴的なBoundary format
ver 5.5.0からは「7d」が消えて検知が困難に• “---------------------------7d<Random 12 strings>”

ver 5.2.2 rev2

48

ver 5.5.0 rev1

特徴的なCookieヘッダ
ver 5.2.2 rev2から実装されている• C2サーバからレスポンスを受信できなかった場合、ANELはCookieヘッダにエラーコードを追加する• Cookie: GetLastError=<エラーコード>

49

付録
50

IOC情報ファイル情報• Koadic downloader• 4edcff56f586bd69585e0c9d1d7ff4bfb1a2dac6e2a9588f155015ececbe1275• 1b5a1751960b2c08631601b07e3294e4c84dfd71896453b65a45e4396a6377cc• 5.0.0 beta1• dll• af1b2cd8580650d826f48ad824deef3749a7db6fde1c7e1dc115c6b0a7dfa0dd• 5.1.1 rc0• mail (Koadic downloader)• 76b1f75ee15273d1226392db3d8f1b2aed467c2875e11d9c14fd18120afc223a• exe• 2371f5b63b1e44ca52ce8140840f3a8b01b7e3002f0a7f0d61aecf539566e6a1• 5.1.2 rc1• dll• a5d46912f0767ae30bc169a85c5bcb309d93c3802a2e32e04165fa25740afac1• 5.4.1• Dropper doc• 3d2b3c9f50ed36bef90139e6dd250f140c373664984b97a97a5a70333387d18d51

IOC情報
接続先情報139.59.43[.]246
142.147.97[.]94
151.106.53[.]147
153.92.210[.]208
167.99.121[.]203
185.159.129[.]226
220.158.216[.]108
23.227.199[.]186
62.75.197[.]131
82.221.100[.]52
52

contacts.rvenee[.]com
eservake.jetos[.]com
trems.rvenee[.]com
vitalikvasuluk.jetos[.]com
webml.jetos[.]com
www.bbist[.]com
www.jgefcu[.]com
www.nymphz[.]com
www.sesbulmes[.]org
www.skilllm0dr[.]com
www3.lflink[.]com

53