JapanSl ysan
Ayecuritt:
edocllehSnined化Confe202ecnre0di
進HのlT
NIREviGPDB

Malware Researcher

CiYi "YCY" Yu
Aragorn TsengMalware Researcher!

CiYi "YCY" Yu
1PMalware Analysis
Campaign Tracking
Automated Analysis

Aragorn Tseng
2P

Malware analysis
Incident response
Machine learning

AGENDA✚ 攻撃グループ「HUAPI」概要✚ マルウェア「DBGPRINT 」概要✚ DBGPRINTの進化✚ DBGPRINTの仕組み✚ セキュリティ製品との鬼ごっこ✚ 検出と対策

攻撃グループ「HUAPI」概要
別名: BlackTechu 活動: 2007~uu

マルウェア:u TSCOOKIEu KIVARS
u CAPGELDu DBGPRINTマルウェア「DBGPRINT 」概要
別名: Waterbear
u 2009 年以前から活動
u

DLLエクスポート関数名 “DbgPrint”
u 第二段階のマルウェア
u 高度なデザイン
u Stager 経由方式を採用
u プラグインシステムuマルウェア「DBGPRINT 」概要
標的となる業種

政府

教育

シンクタンク

金融

情報技術

医療

Evil Hidden in Shellcode: The Evolution of Malware DBGPRINT

DBGPRINTの進化バージョン観測
0.13

0.17

0.1
2010

0.2
2011

2012

2013

2014

0.16
2015

2016

観測された日時

1
0.2b

2017

2018

2019

2020

b.0.1

0.14
リッスンポート

0.1.0

0.1.n

0.24

ペイロードの読み込み
EXE

EXE

最初のexeEXE
DLL

DLLStager Payload

EXE

Stager PayloadDLLの中DLL

DLLStager Payload

Stager Payload

外部ペイロード

二重DLLサイドローディングペイロードの RC4 キー
mov al, byte ptr [ecx]mov dl, al
shr dl, 3shl al, 5or dl, al
mov byte ptr [ecx], dl
inc ecx
dec esijnz short 100010CD

XOR / ビットシフト

0103

FF

89

1372

D10A

40

C021

BB

ランダムな16 Bytes

C:\Program
Files\NVIDIA
Corporation\Display\nvwss.ptn\x00

Miss You! printupg.PNF

ファイルパス

固定文字列 + ファイル名

Evil Hidden in Shellcode: The Evolution of Malware DBGPRINT

DBGPRINTの仕組み

実行の流れ読み込み

復号Stager
ペイロード

DBGPRINT コントローラ❶ 本体を要求本体❷ 通信を待つDBGPRINT Stagerの仕組み

DBGPRINT Stager

PEB!IsDebugged
チェック

通信チェック

アドレステーブルの初期化

セッションキー生成

ハッシュテーブルからAPIの初期化

チャレンジチェック

プロキシチェック

本体の復号・メモリ内で実行

一部のバージョンのみ

失敗

通信終了

DBGPRINT Stagerの仕組み
DBGPRINTコントローラ

DBGPRINT Stager
リクエストパケットを作成

セッションキーを提供し、DBGPRINTの本体を要求する
セッション準備キー・チャレンジを算出

チャレンジチェック

本体の復号・メモリ内で実行

チャレンジを送信

DBGPRINT本体を送信

本体を分割・暗号化

DBGPRINT Stagerの仕組み
DBGPRINTコントローラ

DBGPRINT Stager

セッションキーを提供し、リクエストパケットをリクエストパケットの生成- ヘッダ部分
DBGPRINTの本体を要求する
作成
固定値
チャレンジチェック40

1f

GetTickCount() mod 0xff

本体の復号・メモリ内で実行(GetTickCount()/0xff)*2 mod 0xff

チャレンジを送信

セッション準備キー・チャレンジを算出

データサイズ (リトルエンディアン)

03
コマンド (GetTickCount()/0xff)>>1 mod 0xff
DBGPRINT本体を送信
本体を分割・暗号化

DBGPRINT Stagerの仕組み
DBGPRINTコントローラ

DBGPRINT Stager
Request the DBGPRINT implantwith session keys

リクエストパケットの生成 - セッションキー
Calculate the random
key and challenge
Send the calculated challenge
Check for challenge固定の認証キー ⊕ 乱数 = セッション準備キー

セッション準備キー ⊕ 0x6162636465666768696A6B6C6D6E6F00 = セッションキー 1
セッション準備キー ⊕ 0x01020304050607080900010203040506 = セッションキー 2

Decrypt implant andexecute in memory

Send the DBGPRINT implant

Split implant intoencrypted blocks

DBGPRINT Stagerの仕組み
DBGPRINTコントローラ

DBGPRINT Stager
リクエストパケットを作成

セッションキーを提供し、リクエストパケットの生成
DBGPRINTの本体を要求する
本体をリクエストするコマンド

セッション準備キー・チャレンジを算出

00000000 da 40 1f b5 03 6d 20 チャレンジを送信
00 00 00
チャレンジチェック
0000000A 35 c5 da 9c ae 62 04 f7 5a 36 29 19 b3 37 2d 45 セッションキー 10000001A 55 a5 ba fc ce 02 64 97 3a 5c 43 77 dd 5d 47 43 セッションキー 2
本体の復号・メモリ内で実行

DBGPRINT本体を送信

本体を分割・暗号化

DBGPRINT Stagerの仕組み
DBGPRINT Stager

DBGPRINTコントローラ

セッションキーを提供し、リクエストパケットをDBGPRINTの本体を要求する
セッション準備キー・チャレンジの算出
作成
セッション準備キー・

セッションキー1 ⊕ 0x6162636465666768696A6B6C6D6E6F00 = セッション準備キー
チャレンジを算出
セッション準備キー ⊕ 固定の認証キー = サーバからのチャレンジ
チャレンジを送信
チャレンジチェック チャレンジコマンド

サーバからのチャレンジ

00000000 de 40 1f ee 01 bd 10 00 00 00 58 88 dc e1 84 f700000010 18 b2 50 8f 04 40 19 eb 47 a1
DBGPRINT本体を送信
本体の復号・メモリ内
本体を分割・暗号化で実行DBGPRINT Stagerの仕組み
DBGPRINTコントローラ

DBGPRINT Stager
リクエストパケットを作成

セッションキーを提供し、DBGPRINTの本体を要求する

チャレンジチェック

セッション準備キー・
チャレンジを算出
if (サーバーからのチャレンジ ⊕ セッション準備キー) == 固定の認証キー:
チャレンジチェック

本体の復号・メモリ内で実行

チャレンジを送信- Yes: 続く- No: 中止-

DBGPRINT本体を送信

本体を分割・暗号化

DBGPRINT Stagerの仕組みDBGPRINTコントローラ

DBGPRINT Stager
リクエストパケットを作成

セッションキーを提供し、本体の暗号化と分割DBGPRINTの本体を要求する

セッション準備キー・# Modified_RC4_PRGA
チャレンジを算出
for char in prga_data:x = (x + 1) % 256 チャレンジを送信
チャレンジチェック y = (y + box[x]) % 256
box[x], box[y] = box[y], box[x]z = (box[x] + box[y]) % 256
box[z] = ((box[z] << 4) & 0xf0) + ((box[z] >> 4) & 0x0f)
DBGPRINT本体を送信
本体の復号・メモリ内本体を分割・暗号化で実行DBGPRINT Stagerの仕組み
DBGPRINTコントローラ

DBGPRINT Stager
リクエストパケットを作成
0000001A
0000002A
0000003A
チャレンジチェック
0000004A
0000005A…
…
本体の復号・メモリ内…
で実行

セッションキーを提供し、本体の暗号化と分割
DBGPRINTの本体を要求する
PRGA_data2

PRGA_data1

PRGA_data3

セッション準備キー・
90 15 8f 2a 96 e6 4e f8 91 ed 64 7c dc 46
47 30
チャレンジを算出
07 10 2c 6a 3d ac 47 e0 51 f7 86 02 07 2c 5e 0a
44 b9 b6 f4 チャレンジを送信
38 3d 63 79 b3 d1 53 58 b3 f1 10 ac
95 35 52 17 f3 3b 1f ab 28 80 45 f2 c3 8c c2 d4
a7 62 5a 76 48 25 8e 33 31 ba 33 b0 19 46 b0 17
PRGA_data4

DBGPRINT本体を送信

本体を分割・暗号化

DBGPRINT Stagerの仕組み
DBGPRINTコントローラDBGPRINT Stager
リクエストパケットを作成

セッションキーを提供し、DBGPRINTの本体を要求する
本体の復号・メモリ内で実行
セッション準備キー・
チャレンジを算出

RC4_KSA(セッション準備キー)
チャレンジを送信
復号ヘッダのサイズ= RC4_PRGA(PRGA_data1)
チャレンジチェック
復号データのサイズ = Modified_RC4_PRGA(PRGA_data2)
復号ヘッダ = Modified_RC4_PRGA(PRGA_data3)
復号データ = Modified_RC4_PRGA(PRGA_data4)
DBGPRINT本体を送信
本体の復号・メモリ内で実行

本体を分割・暗号化

DBGPRINT 本体
u

ファイルの転送・管理
コマンドコード機能2

ドライブリスト3

ファイルリスト4

ファイルをC2にアップロード

5

ファイルをC2からダウンロード

6

ファイル名を変更

7

フォルダ作成8

ファイルを削除

10

ファイルを実行11

ファイルを移動

12

NtSetInformationFile

DBGPRINT 本体

u

ウィンドウの管理・スクリーンショット
コマンドコード

機能

807
808
809810
811
812
814
815

ウィンドウリスト
ウィンドウを非表示
ウィンドウを表示
ウィンドウを閉じる
ウィンドウを最小化
ウィンドウを最大化
スクリーンショット
スクリーンショットオブジェクトに対しSetEvent()する

u

リモートデスクトップ

uプロセス/ネット通信/ サービス管理

DBGPRINT 本体

コマンドコード

機能

816
817
818
820
821
822
827

リモートデスクトップ
プロセスリストプロセスを終了
ネット通信状態
ネット通信を中断
サービスリストサービス操作DBGPRINT 本体
u

リモートシェル・レジストリ管理
コマンドコード

機能

1006
1007
1008
2011
2013
2014
2015
2016

リモートシェルを開始
リモートシェルを終了
リモートシェルのPIDを取得
レジストリリスト
レジストリキーの作成
レジストリキーを変更
レジストリキーを削除
レジストリキーの値を削除

Evil Hidden in Shellcode: The Evolution of Malware DBGPRINT

セキュリティ製品との鬼ごっこ

パターンの抹消
1213141516......
èê..0.1.........
....Mutex.......
....login.narllab.com...........
................
................
................
................
................
............P.».
................
abcdefghijklmno.
./e.Oó{-cÓF5Ç².ä

F.P...M...~...H1....b.0.1.......
....M...........
................
................
................
................
................
................
................
................
................
........abcdefgh
ijklmno../e.O.{-MutexM}8ºýáÈÒß¶î3ù.¿R–¸...0.24........
.... ...........
....ÎÏÑÍÏÑÎÎÈÑÎÎ
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿÿÿÿÿ©a..
................
................
........q.ßä®;©ò
Õ=uÌÓ.Wrê„.|žÚ„.
スペース (0x20)

パターンの抹消
1213141516......
è...0.1.........
....Mutex.......
....usr.narllab.
com.............
................
................
................
................
................
............».P.
................
abcdefghijklmno.
./e.Oó{-cÓF5Ç².ä

´Þ‹·CV•Ô©.²´w;Ôó¸...0.17........
.... ...........
....ÎÏÑÇÑÉÑÌÍÿÿÿ
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿÿÿÿÿP...
................
................
........¸ñî®.¥îù

オリジナル

XOR with 0xff

F.P...M...~...H1....b.0.1.......
....M...........
................
................
................
................
................
................
................
................
................
........abcdefgh
ijklmno../e.O.{cF5...........V.
リッスンポート....%hM]........

x64 版

自己書き換え
H.\$.H.l$.H.t$ WATAUAVAWH..0.....XH..!.....H......H......QPH1......XI.
.u...I..C...M).L..PH..ATY.H1..........%h...X.(.eH.`.......PA\A..$=....
t.u..I......I....XYH..H...H...u...x...H..H........E1.E1.H....N........
H..(...H........E1.E1.H......|......E1.L......L..h...1.H......H.D$PH..
vH.........(...I..H........1.9+v3L.L$PL..(...A.M.L........I..$H..tY..I...I...A..;+r...H......r..q...H....H....p...H..H..I..H........A..H..H.
...P...H....h...H.\$XH.l$`H.t$hH..0A_A^A]A\_.H.\$.WH.. 3.H..H..H;.t<D.
C.H.L$@.D$8..D$9..D$:..D$;........D.8H..0D.?.D.?0D..H...|.H.\$0H.. _.H.\$.UVWH..@D......H......H......H........H........D......H......H.....
.......u.H........H...H.........D......H..8...H........H..H....8...D..
....H..8...H..................D......H..@...H........L.L$`L.D$hH..H...
.@...D......H..@...H..............A...D......H......H........D.D$`H.T$
hH........D......H......H..H........H........D.D$`H.L$h3.......D......
H.. ...H........A.....H..H.... ...D......H.. ...H..H........H..tv3.A..
...H........D......H..0...H......L._.H.G.H.L$(H..L.\$ H.D$0H.|$8......
L.L$ L..H..H....0...D......H..0...H........3.A.....H....8...H.L$h3.A..
.....8...H........H........H.\$p.....H..@_^].@SH.. H..H.........H..D..
....H..p...H........L..I..A..p...H.C.H.K.3.A.......8...L.[.H..A.......
....H.. [.H.\$.H.l$.H.t$.WATAUH..p...D......H..X...H......H..3.......D.g.L..$P...A..H....X...D......H..X...H........D.G.H.T$@E3.H...........
u.3..F...D......H......H........H.T$@H........D......H......H.........
|$D&r...l$DH.T$HE3.D.E.H...........t.D......H..`...H.........U.L..$P..
.H.L$E..`...D......H..`...H........A.MZ..fD9\$E..A........H.L$ M......
..........k..+.@...@...H.T.@......D......H..X...H........L..$`...H.L$
A....X...D......H..X...H..........h...D......H..P.....H..i.<.........H.T$@A.....H....P...D......H..P...H........H.T$FH.L$0A.....M..D.d$@D.l$....!....P...ko....I_....GqI..@.U...#b7.;...-K(4q..)..%.."......... .Z..O. C.U:<w....{.a.....N{.C...qgB.._.z......q....-N.a.b....s.7..&..s.#cO.31c.d.~......[w"S.-......V..`P...U..z....._#..VF.....U.`..&.A-/.}..
......"90...U..O.a1miH.Yr0E.4......Y.0=!...).!..O8.Hd..Y......mq......
j..v>...z..........gA0%...g@'.3..|'.|...&......qk...qy1.q..8l...(77"l.
.}.......d.X.7tF....]...,....l..........?4-.....}.+G+'........d. .....
...f}....t.q.D...N.....Y.a-.........q...6......m.K..W.[{ygZ.<).y......
8L...N4dx......cc...........^..Z{..3.".a.u.|D..eK..,....@..........p..
.m.[.......kZ.|.<1.._W.Z{.)..kt.t.O.Y_.Z{.).....<1..I..Z{.).qkt.t.y...
C.zH....y...I....Z3.l....]3.jB......./.".5.0.C.|...../.".tt.y.Y..Z{.).
.kt.t.!{......).....<13..s[[{H..V.u.<y=....Z3.m.F.u.<};.....?l.gZ.<)..
!.......z..j<).q.C.._...].ykt........Z?.%..jt....B......5..jt..u.#.|.~..)...l.<1..I3.Z{.)..kt.t.y.E/+..I./.......C.._._(...N....!.......j..j<)...C.._......j5.41.C.|....]..kt.x.1..........j<).y=.1`|[{H..<....p.C......]..ht.x.1..........j</...C..Y.o./h."........]._h...ND..M.{1`|[{H...NT......._......j0)...C.._.KI./...]...C.....H"/.".i...A....7l...+..
.1..Y..Z{.)...t.<1....C.yH.gZ6P..0.C..W.;..r.@SH.. H..H.........H..D..
....H..p...H........L..I..A..p...H.C.H.K.3.A.......8...L.[.H..A.......
....H.. [...m.K.~.~k.+[.r#.hp..O..^{H..P.u.<y=....Z3..'.jt.....1d|[{H.
..z8/...A......)...,.<1..M..Z{.)..kt.t.}.]_.Z{./h."...q.p.._...Z-.j.Z.
D.p...Y{H..Rnv.<y=.V..Z3.i.B.u.<y;.......1..jt....A......./.".i...B..T&_..]ge...u......H.....<)..%............J=1..Ed.[{H......=1.......l.-.
j</p...]..Z{.).9kt.t.%#......].ykt.}.......B..j..5]....F.\........U.2c.4._....,...........U.....n4]...C.._..I./....=1..E<+..I./....\2.C.z.~[.)...,.<1..M..Z{.)..kt.t.}.]_.Z{.1G.jt...VB......./...........P.....j</h...v..Z{.)...$.<1..M..Z{.)..kt.t.}.]_.Z{./{.,</p...s..Z{.).....|u>/.

実行前

自己書き換え後、残されたのはポートをリッスンするコードのみ

二重DLLサイドローディング
正常なEXE (ホワイト)

悪意のあるDLL (グレイ)

悪意のあるDLL (ブラック)

「某セキュリティ製品」対策
インジェクト

RC4 復号

インジェクト「某セキュリティ製品」対策
ペイロード1

某セキュリティ製品

svchost.exe

悪意のあるDLL

通信を待つ

RC4 復号

インジェクト

攻撃者
DBGPRINTペイロード2

質疑応答
ycy@teamt5.org
aragorn@teamt5.org