Japan Computer Emergency Response
Team Coordination Center

電子署名者 : Japan Computer Emergency Response TeamCoordination Center
DN : c=JP, st=Tokyo, l=Chiyoda-ku,
email=office@jpcert.or.jp, o=Japan Computer Emergency
Response Team Coordination Center, cn=Japan Computer
Emergency Response Team Coordination Center
日付 : 2014.02.26 15:43:12 +09'00'

Fight Against
Citadel in Japan

2014/02/18
JPCERT/CC 分析センター
中津留 勇

目次
背景

—日本における不正送金被害

Citadel の分析
—動作概要
—暗号化

メイキング Citadel Decryptor
Citadel Decryptor
—復号方法
—デモ1

Copyright©2014 JPCERT/CC All rights reserved.

背景2

Copyright©2014 JPCERT/CC All rights reserved.

日本における不正送金被害

14億600万円
標的となった金融機関は

32

3億800万円
4800万円
2011年

2012年

2013年

http://www.npa.go.jp/cyber/pdf/H260131_banking.pdf
3

Copyright©2014 JPCERT/CC All rights reserved.

その裏で・・・

http://www.npa.go.jp/cyber/pdf/H260131_banking.pdf
4

Copyright©2014 JPCERT/CC All rights reserved.

不正送金に関連したマルウェア

ZeuS

SpyEyeIce IX

CitadelGameOver5

Copyright©2014 JPCERT/CC All rights reserved.

Carberpetc.

Citadel の感染被害

http://blog.trendmicro.co.jp/archives/7547
6

Copyright©2014 JPCERT/CC All rights reserved.

インシデント全体像

リモート操作用サーバ

攻撃者

インターネット
バンキング

ユーザ

7

Copyright©2014 JPCERT/CC All rights reserved.

管理サーバ

Web Injects

インターネット
バンキング

ユーザ
8

Copyright©2014 JPCERT/CC All rights reserved.

Web Injects デモ

9Copyright©2014 JPCERT/CC All rights reserved.

マルウェアの作成・管理ツール

10

Copyright©2014 JPCERT/CC All rights reserved.

アンダーグラウンドでの売買

11

Copyright©2014 JPCERT/CC All rights reserved.

インシデント対応

リモート操作用サーバ

攻撃者

インターネット
バンキング

情報共有
12

ユーザ

Copyright©2014 JPCERT/CC All rights reserved.

管理サーバインシデント対応するためにどこの？

どこの？
リモート操作用サーバ

どこの？

インターネット
バンキング

どのサイト？
13

攻撃者

ユーザ

Copyright©2014 JPCERT/CC All rights reserved.

管理サーバ

どうやって？

CITADEL の分析

14

Copyright©2014 JPCERT/CC All rights reserved.

Citadel の分析を行うにあたって
リーク版

リーク版

CitadelZeuS

Web パネル

Web パネル

ビルダー

ビルダー

ZeuS
ソースコードWeb パネル
ソース
ビルダー
ソース
ビルドされたサーバ
デバッグ情報15

Copyright©2014 JPCERT/CC All rights reserved.

ブログ記事等

Sophos

LEXSI

分析手法
表層分析
• ファイル情報等の情報収集
動的分析• 監視ツール、Sandbox、デバッグ
静的分析• ソースコードを読む、アセンブリコードを読む
16

Copyright©2014 JPCERT/CC All rights reserved.

静的分析
ZeuS との差分を調査

17

Copyright©2014 JPCERT/CC All rights reserved.

Citadel の挙動
送信用レポートWeb
Injects

現在の設定など

18

Copyright©2014 JPCERT/CC All rights reserved.

2つの設定ファイル
Base Config• 初期設定• 暗号鍵、Dynamic Config の URL など• エンコードされてハードコード
Dynamic Config• 追加の設定• Webパネルの URL、Web Injects、etc…
• サーバからダウンロード
19

Copyright©2014 JPCERT/CC All rights reserved.

Base Config
botnet "CIT"
timer_config 4 9
timer_logs 3 6
Dynamic Config の URL
timer_stats 4 8timer_modules 1 4
timer_autoupdate 8
url_config1 "http://citadelhost/folder/file.php|file=config.dll"
url_config2 "http://reserve-citadelhost/folder/file.php|file=config.dll"
remove_certs 1
disable_cookies 0
encryption_key "key123"
RC4 鍵を生成するためのreport_software 1
enable_luhn10_get 0
パスワード
enable_luhn10_post 1
disable_antivirus 0
use_module_video 1
antiemulation_enable 0
disable_httpgrabber 0
use_module_ffcookie 1
20

Copyright©2014 JPCERT/CC All rights reserved.

Dynamic Config
url_loader "http://citadelhost/folder/file.php|file=soft.exe"
url_server "http://citadelhost/folder/gate.php"
file_webinjects "injects.txt"
url_webinjects "http://citadelhost/folder/file.php"
entry "AdvancedConfigs""http://reserve-host1/folder/file.php|file=config.bin"
set_url https://www.wellsfargo.com/ GP"http://reserve-host2/folder/file.php|file=config.bin"
data_before
end<div><strong><label for="userid">Username</laentry "WebFilters""#*wellsfargo.com/*" data_end
data_inject"@*payment.com/*"<input type="text" accesskey="U" id="userid" na"!http://*.com/*.jpg"<DIV><STRONG><LABEL for=userid>ATM Pin</Lend
style="WIDTH: 147px" tabIndex="2" maxLength=<DIV><STRONG><label for="password">Passwo(snip)<input type="password" accesskey="P" id="pass<input type="hidden" name="screenid" value="SI<input type="submit" value="Go" name="btnSign<input type="hidden" id="u_p" name="u_p" value</form>data_end
21

Copyright©2014 JPCERT/CC All rights reserved.

情報の暗号化

22

Copyright©2014 JPCERT/CC All rights reserved.

暗号化されたデータ

23

Copyright©2014 JPCERT/CC All rights reserved.

暗号化されたデータの内容

パケット
送信データ
（レポート）

Dynamic Config

追加モジュール

24

Copyright©2014 JPCERT/CC All rights reserved.

ファイル

レジストリ

レポート

現在の設定

追加モジュール

Dynamic Configのバックアップのバックアップ

Citadel が用いる暗号方式
AES+• AES に XOR エンコードを組み合わせた方式
RC4+• RC4 に XOR エンコードを組み合わせた方式RC4+ * 2• RC4+ による復号を 2度行う
Installed Data
• インストール時にランダムに生成した AES 鍵を使用した
AES+
25

Copyright©2014 JPCERT/CC All rights reserved.

Citadel が扱うデータ形式
BinStrage
ヘッダアイテム
アイテム
アイテム
UCL 圧縮26

Copyright©2014 JPCERT/CC All rights reserved.

StrageArray
サイズ (XOR)
暗号化 BinStrage
サイズ (XOR)
暗号化 BinStrage
サイズ (XOR)
暗号化 BinStrage

Dynamic Config の場合
XOR
Base
Config

UCL 圧縮DynamicConfig
AES+
27

Copyright©2014 JPCERT/CC All rights reserved.

0x400 バイトのオーバーレイ
インストール前の Citadel

インストール後

実行ファイル

実行ファイル

XOR 鍵

Install Setting
パディング
28

Copyright©2014 JPCERT/CC All rights reserved.

ID, インストールパス,ランダム AES 鍵、ランダム StrageArray 鍵など

Installed Data
パディング

復号対象まとめカテゴリ

パケットファイル

レジストリ

29

対象

形式

暗号方式

レポート

暗号化 BinStrage

RC4+

Dynamic Config

暗号化 BinStrage

AES+

追加モジュール

実行ファイル

RC4+ * 2

レポートファイル

StrageArray

Installed Data

モジュールのバックアップ

StrageArray

Installed Data

Dynamic Config のバックアップ

暗号化 BinStrage

Installed Data

Copyright©2014 JPCERT/CC All rights reserved.

メイキング
CITADEL DECRYPTOR
30

Copyright©2014 JPCERT/CC All rights reserved.

ゴール
インシデント対応に必要な情報を復号する

31

Copyright©2014 JPCERT/CC All rights reserved.

実装

32Python

PyCrypto

pefileUCLCopyright©2014 JPCERT/CC All rights reserved.

RC4+ 復号処理

RC4 鍵取得

RC4VisualDecrypt

33

Copyright©2014 JPCERT/CC All rights reserved.

RC4+ 実装
def rc4_plus_decrypt(login_key, base_key, buf):
S1 = base_key['state']
S2 = map(ord, login_key)out = ""
i=j=k=0
for c in buf:i = (i + 1) & 0xFF
j = (j + S1[i]) & 0xFF
S1[i], S1[j] = S1[j], S1[i]out += chr((ord(c) ^ S1[(S1[i]+S1[j])&0xFF])^ S2[k%len(S2)])k += 1
return out34

Copyright©2014 JPCERT/CC All rights reserved.

AES+ 復号処理

AES 鍵取得

AES 復号

VisualDecrypt35

Copyright©2014 JPCERT/CC All rights reserved.

AES+ 実装
def unpack_aes_plus(login_key, base_key, xor_key,aes_key, data):
aes = AES.new(aes_key)
tmp = aes.decrypt(data)out = ""
for i in range(len(tmp)):out += chr(ord(tmp[i]) ^ord(xor_key[i%len(xor_key)]))return out

36

Copyright©2014 JPCERT/CC All rights reserved.

必要なパラメータ

BaseConfig

InstalledData

その他

RC4 鍵

StrageArray
鍵Salt

ランダムAES 鍵

LoginKeyAES XOR 鍵

37

Copyright©2014 JPCERT/CC All rights reserved.

必要なパラメータの取得

re.compile(".*¥x56¥xBA(..)¥x00¥x00¥x52¥x68(....)¥x50¥xE8....¥x8B¥x0D.*", re.DOTALL)
38

Copyright©2014 JPCERT/CC All rights reserved.

UCL Decompress

http://www.oberhumer.com/opensource/ucl/
39

Copyright©2014 JPCERT/CC All rights reserved.

UCL Decompress 実装
def _ucl_decompress(self, data):
ucl = cdll.LoadLibrary(UCL)
compressed = c_buffer(data)
decompressed = c_buffer(DECOMPRESS_MAX_SIZE)
decompressed_size = c_int()
result = ucl.ucl_nrv2b_decompress_le32(pointer(compressed),c_int(len(compressed.raw)),
pointer(decompressed),pointer(decompressed_size))
return decompressed.raw[:decompressed_size.value]

40

Copyright©2014 JPCERT/CC All rights reserved.

CITADEL DECRYPTOR

41

Copyright©2014 JPCERT/CC All rights reserved.

動作に必要な環境
Windows + 32bit Python•コードおよび使用しているライブラリが 64bit に対応していないため

PyCrypto•Python の暗号モジュール•AES 復号を行うために使用•Windows 用のバイナリは•http://www.voidspace.org.uk/python/modules.shtml#pycryptopefile•Python の Windows 実行ファイルをパースするモジュール•セクション等をパースして、必要な鍵を取り出すために使用

42

Copyright©2014 JPCERT/CC All rights reserved.

復号に必要なデータ復号対象
アンパックされた Citadel 本体• ベース RC4 鍵• AES+ 用の XOR 鍵• RC4+ 用の XOR 鍵（LOGINKEY）• RC4+ 用の salt

インストールされた後の Citadel 本体• Installed Data
• ランダムに生成された AES 鍵• ランダムに生成された StrageArray 鍵
43

Copyright©2014 JPCERT/CC All rights reserved.

citadel_decryptor.py
Citadel が扱う暗号化された様々なデータを復号するス
クリプト
復号対象と、アンパックした本体は常に引数に入れる必要がある>citadel_decryptor.py
usage: citadel_decryptor.py [-h] [-n] [-a] [-d][-o OUT] [-D] [-l LOGIN][-k KEY] [-x XOR] [-s SALT][-i INSTALLED][-m MODE] [-v]
DAT EXE
citadel_decryptor.py: error: too few arguments>
44

Copyright©2014 JPCERT/CC All rights reserved.

目的別オプション
以下のオプションと、復号対象およびアンパック後のCitadel を指定する
カテゴリ

パケット

ファイル

レジストリ
45

対象

指定オプション

レポート-m2

Dynamic Config

-d

モジュール

-m3 -n

レポートファイル

-a -i [Install Data を持つ実行ファイル]

モジュールのバックアップ-a -i [Install Data を持つ実行ファイル]

Dynamic Config の-d -i [Install Data を持つ実行ファイル]
バックアップCopyright©2014 JPCERT/CC All rights reserved.

実践

46

Copyright©2014 JPCERT/CC All rights reserved.

Tips
レジストリデータのバイナリ化• regedit を用いエクスポートしたデータを FileInsight のプラグインでバイナリデータに変換• https://github.com/nmantani/FileInsight-plugins

アンパック• パッカーが呼び出す API でブレークする方法が簡単• WriteProcessMemory• CreateProcessW• VirtualFree / VirtualFreeEx / RtlFreeHeap• 仮想メモリ上から実行ファイルそのものを取り出す• オーバーレイの 0x400 バイトを忘れずに切り取る
47

Copyright©2014 JPCERT/CC All rights reserved.

今後の活動今持っているツール• Citadel Decryptor• ZeuS Decryptor• Ver 2.0.8.9• Ver 2.9.6.1• Ice IX Decryptor• etc.

持っていないツール• Gameover (P2P ZeuS) Decryptor
48

Copyright©2014 JPCERT/CC All rights reserved.

Thank You!
連絡先
aa-info@jpcert.or.jp
https://www.jpcert.or.jp
インシデント報告
info@jpcert.or.jp
https://www.jpcert.or.jp/form/