When you gaze into the Bottle,…
2021/01/28
Rintaro Koike, Hajime Takai

自己紹介
小池倫太郎
••
•

NTTセキュリティ・ジャパンで脅威情報の収集・分析やマルウェア解析に従事
チームnao_secで研究者として活動
JSACやVB、HITCON CMT、AVAR、Black Hat USA Arsenalなどで講演

高井一•
••

2

ソフトウェア開発者からセキュリティ技術者に転身
SOCアナリストとして、セキュリティデバイスのアラート監視やマルウェア解析を担当
JSACやVB等で講演

日本における主要なExploit Kit観測状況

Provided by Augma System (nao_sec)3

モチベーションとゴール
日本を標的としたExploit Kitとマルウェアの登場と進化
Bottle Exploit Kit••••

日本のユーザのみが標的
新たな脆弱性を悪用するようにアップデート
解析・検知妨害の強化

Cinobi•••

日本のユーザのみを標的とする、マルチステージなBanking Trojan
解析・検知妨害の強化

防衛手法•
•

4

ネットワーク上での検知
端末上での挙動による検知

Bottle Exploit Kit

Bottle Exploit Kit
2019年12月に報告された新たなExploit Kit
2019年9月頃から活動していると思われる
2020年も極めて活発に活動
Cinobiと呼ばれるBanking Trojanを実行することが目的•••

2020年7月に大幅なアップデートが行われた
CVE-2020-0674を悪用
HTTPS化
解析・検知を妨害する新たな機能の追加••••

タイムゾーンによる絞り込み••

Control Flow Flattening
演算子などの関数化
Shellcodeとマルウェアの暗号化•

6タイムライン[2019/09]
Bottle Exploit Kit v1 登場[2019/04]
偽サイトを用いたCinobiの配布

7[2020/07 ~ 2020/11]
Bottle Exploit Kit v2 活発化[2019/12 ~ 2020/02]
Bottle Exploit Kit v1 活発化

Version 1
Traffic8Version 1
大まかな挙動91.

Landing Pageがmain.jsを読み込み

2.

main.jsがユーザ環境を調査

3.

攻撃対象であると判断した場合はconn.phpにGETリクエストを送信

4.

conn.phpのレスポンスに合わせて、vbs.vbsかswf.swfを読み込み

5.

A: vbs.vbsを読み込んだ場合、CVE-2018-8174を悪用してShellcodeを実行
B: swf.swfを読み込んだ場合、CVE-2018-15982を悪用してShellcodeを実行

6.

Shellcodeがconn.phpにGETリクエストを送信

7.

レスポンスを%TEMP%配下にsvchost.exeとして保存して実行Version 1
CVE-2018-8174••

Internet Explorerの脆弱性
PoCが公開されており、様々なExploit Kitが悪用

CVE-2018-15982••

10Adobe Flash Playerの脆弱性
PoCが公開されており、様々なExploit Kitが悪用Shellcode - Version 1
1. Shikata Ga Nai Encode

2. Resolve API➢11

imul83hAdd

Shellcode - Version 1
3. Create Mutex

4. Download & Execute Malware

12Version 2
Traffic

13

Version 2
大まかな挙動141.

Landing Pageがmain.jsを読み込み

2.

main.jsがユーザ環境を調査

3.

攻撃対象であると判断した場合はconn.phpにGETリクエストを送信

4.

r.jsあるいはjquery.jsを読み込み、CVE-2020-0674を悪用してShellcodeを実行

5.

Shellcodeがpd.binあるいはp.jpgをダウンロード・復号

6.

%TEMP%配下にsvchost.exeあるいはa.dllと、1.txtとして保存して実行Version 2
CVE-2020-0674
•

•

15

Internet ExplorerのRCEの脆弱性
2020年5月にPoCが公開

Bottle Exploit Kit v2

PoC(https://github.com/maxpl0it/CVE-2020-0674-Exploit)

Shellcode - Version 2
差分

16

1.

解決するAPIの増加

1.

Mutex

Shellcode - Version 2
マルウェアのダウンロード・デコード

171.

pd.binをダウンロード

2.

先頭4byteを仕切り目、直後の0x3CbyteをXOR鍵として、以降のデータをデコード

Shellcode - Version 2
マルウェアのダウンロード・デコード

18

3.

デコードしたデータを仕切り目で区切って、1.txtとsvchost.exeという名前で保存

4.

svchost.exeを実行

Version 2
Encoded Malware

19

Obfuscation
文字列置換・暗号化

20

Obfuscation
文字列置換・暗号化

21

Obfuscation
文字列置換・暗号化+
1. Change Array Order
2. Base64 Decode
3. URL Decode
4. RC422Obfuscation
Bogus Control Flow23

Obfuscation
関数化24Obfuscation
Control Flow Flattening

25

Obfuscation
Encrypted Shellcode26

日本に特化した処理
ブラウザの言語設定

タイムゾーン27

CinobiCinobi - Summary
Infection Chain••

Cinobiは4つのマルウェアから構成され、最終的にStage4が感染端末に永続化される。
Stage4に金融機関のサイトに入力したデータを窃取する機能が実装されている。
Stage3

Bottle Exploit Kit

Stage1
download& execute

29

Stage2
download& executepersistStage4

Cinobi - Stage1
Infection Chain
Stage3

Bottle Exploit Kit

Stage1
download& execute

32

Stage2
download& executepersistStage4

Stage1 - Version 1
シェルコードのデコード•••

Version1のバイナリ中にXORでエンコードされたシェルコードが埋め込まれている。
主要な機能はこのシェルコードに実装されている。
シェルコードをデコードし、CreateThread()により実行される。
Stage1のバイナリ中にエンコードされたシェルコードが埋め込まれている

鍵長0x3CでメインモジュールをXORデコード

33

CreateThread()でデコードされたシェルコードが実行される

Stage1 - Version 1
日本語環境チェック•

GetUserDefaultUILanguage()の戻り値が0x411(=日本語)でない場合、以降の処理をせずに終了してしまう。

0x411

GetUserDefaultUILanguage()34

Stage1 - Version 1
TORのダウンロードと実行
アーカイバーを下記何れかのURLからダウンロードする。

1.
••

Zip圧縮されたTORを下記何れかのURLからダウンロードする。

2.
••

3.
4.

ftp://ftp.cadwork.ch/DVD_V20/cadwork.dir/COM/unzip.exe
ftp://freddy-ru.starlink.ru/ckJlag/antivir/SDFix/apps/unzip.exe
https://archive.torproject.org/tor-package-archive/torbrowser/8.0.8/tor-win32-0.3.5.8.zip
https://x.x/8.p

ダウンロードしたアーカイバーでTORを解凍する。
“tor.exe”のファイル名を”taskhost.exe”に変更し、実行する。

C＆Cサーバーとの通信にはTORが利用される。

Stage1 - Difference between versions
シェルコードのデコード••

Ver.1ではStage1のバイナリ中にエンコードされたシェルコードが含まれていたが、Ver.2ではエンコードされたシェルコードが別ファイルに分割された。
デコードされたシェルコードを実行する関数がCreateThread関数からEnumUILanguagesA関数に変更された。

VM検知機能•36

Ver.2で新たに実装された。

Stage1 - Version 2
シェルコードのデコード••

Ver.2ではエンコードされたシェルコードが別ファイルに分割された。
EnumUILanguagesA()のcallback関数を利用して、シェルコードが呼び出された。

外部から指定されたファイルを読み込む

xorでデコード37

EnumUILanguagesA()の第一引数にデコードされたシェルコードを指す
メモリ上のアドレスが指定される

Stage1 - Version 2
VM検知機能下記ファイルが存在している場合、Stage2を起動せずに終了する。

••
•
•
•
•

•
•

%Windows%¥system32¥driver¥vmmouse.sys%Windows%¥system32¥driver¥vmusbmouse.sys%Windows%¥system32¥driver¥vmrawdsk.sys%Windows%¥system32¥driver¥vboxmouse.sys%Windows%¥system32¥driver¥vboxguest.sys%Windows%¥system32¥driver¥vboxsf.sys%Windows%¥system32¥driver¥vboxvideo.sys

VmwareVirtualBox

vmmouse.sysの存在確認
38

Cinobi - Stage2
Infection Chain
Stage3

Bottle Exploit Kit

Stage1
download& execute

39

Stage2
download& executepersistStage4

Stage2 - Version 1
シェルコードのデコード•••

Stage2のバイナリ中にエンコードされたシェルコードが埋め込まれている。
Stage2の主要な機能はこのシェルコードに実装されている。
シェルコードをデコードし、CreateThread()により実行される。

Stage2のバイナリ中にエンコードされたシェルコードが埋め込まれている

xorデコード

CreateThread()でシェルコードを実行
40

Stage2 - Version 1
感染端末の情報窃取•

41

Windowsのバージョン番号、UACに関する設定、フォルダの作成可否等を調査し、C&Cサーバーに送信している。

Stage2 - Version 1
Stage3, Stage4のダウンロード••

Stage3: %TEMP%¥<random>¥<random>¥A<random>.dll
Stage4: %TEMP%¥<random>¥<random>¥C<random>.dll

Stage3の実行

CreateProcessW()
コマンド: rundll32.exe %TEMP%¥<random>¥<random>¥C<random>.dll, dSVbw1PM%TEMP%¥<random>¥<random>¥C<random>.dll
42

Stage2 - Difference between versions
シェルコードのデコード••

Ver.2でエンコードされたシェルコードが別ファイルに分割された。
シェルコードを実行する関数がCreateThread()からEnumUILanguagesA()に変更された。

感染端末の情報窃取•

Ver.2では追加で情報が窃取される。

Stage3, Stage4のダウンロード•

43

Ver.2では追加で別のファイルがダウンロードされる。

Stage2 - Version 2
感染端末の情報窃取
Ver.1で窃取した情報に加えて、下記のPowerShellコードを実行していた。

••
••

44

powershell.exe /c Get-WmiObject Win32_ComputerSystemProduct | Select-Object UUID
powershell.exe /c Get-WmiObject Win32_bios | Select-Object SerialNumber
powershell.exe /c Get-WmiObject Win32_PhysicalMedia | Select-Object SerialNumber

Stage2 - Version 2
Stage3, Stage4のダウンロード•••.txtという拡張子のファイルにエンコードされたシェルコードが含まれる。
Dで始まるバイナリは、対応するシェルコードが2種類存在する。
64BitのStage4はVersion2から実際の攻撃で利用されるようになったと推測される。
〇: 観測済みの検体 △: ダウンロードする処理は存在するが、観測できていない検体
× : ダウンロードする処理が存在しない検体
ファイルパス
説明
Ver.1
Ver.2

45%TEMP%¥<random>¥<random>¥A<random>.dll〇〇(32bit)Stage4%TEMP%¥<random>¥<random>¥B<random>.dll△〇(64bit)Stage4%TEMP%¥<random>¥<random>¥C<random>.dll〇〇

Stage3%TEMP%¥<random>¥<random>¥D<random>.dll

△

△

不明

%TEMP%¥<random>¥<random>¥i.txt

×〇

Stage3のエンコードされた
メインモジュール

%TEMP%¥<random>¥<random>¥xo.txt

×△D<random>.dllの実行時に引数として指定される%TEMP%¥<random>¥<random>¥xn.txt

×△

D<random>.dllの実行時に引数として指定される

Cinobi - Stage3
Infection Chain
Stage3

Bottle Exploit Kit

Stage1
download& execute46

Stage2
download& executepersistStage4

Stage3 - Version 1
Stage4の永続化•••WSCInstallProviderAndChains()を用いて、感染端末上の全32bitプロセスが呼び出したWSAStartup()に処理を永続的に追加する。
感染端末に永続的に追加される処理は、
WSCInstallProviderAndChains()の第2引数に指定される、実行形式のファイルに定義されている。
Stage4はWSCInstallProviderAndChains()の第2引数に指定される。

WSCInstallProviderAndChains()

47

WSAStartup()に追加される処理が実装されているDllファイル(Stage4)

Stage3 - Version 1
Stage3のその他機能一覧
Stage3のバイナリ中にXORエンコードされたシェルコードが含まれており、そのシェルコードをデコードし、実行する。
(Stage4の永続化のため)Print Spoolerという印刷関連のサービスの自動起動を有効にする。
%TEMP%配下にあるCinobi関連のファイルを%PUBLIC%にコピーし、%TEMP%配下のファイルを削除する。
%PUBLIC%フォルダにコピーしたTORを起動する。
Windows UpdateやWindows Defenderに関連する設定を無効にする。

•••

•
•

下記のレジストリーを削除•••••

下記のレジストリー設定を変更

••
••

48

•

SYSTEM¥CurrentControlSet¥Services¥UsoSvc
SYSTEM¥CurrentControlSet¥Services¥wuauserv
SYSTEM¥CurrentControlSet¥Services¥WaasMedicSvc
SYSTEM¥CurrentControlSet¥Services¥SecurityHealthService
パス: SOFTWARE¥Policies¥Microsoft¥Windows Defender
キー: DisableAntiSpyware
値: 1

処理完了後に感染端末を再起動する。

Stage3 - Difference between versions
シェルコードのデコード•

Ver.2でエンコードされたシェルコードが別ファイルに分割された。

再起動処理
•

Ver.2では感染端末を再起動処理が削除されている。

Stage4の永続化•

49

Ver.2で64bitに対応した。

Stage3 - Version 2
Stage4の永続化
32bitと64bitの両方に対応した関数を使用している。

•••

32bit版のStage4: %PUBLIC%¥<random>¥<random>A<random>.dll
64bit版のStage4: %PUBLIC%¥<random>¥<random>B<random>.dll

WSCInstallProviderAndChains64_32()

50

Cinobi - Stage4
Infection Chain
Stage3

Bottle Exploit Kit

Stage1
download& execute

51

Stage2
download& executepersistStage4

Stage4 - Version 1
Stage4の概要
感染端末上の32bitプロセスがWSAStartup()を呼び出す度に実行される。
Stage1-3と同様、主要な機能はXORでエンコードされたシェルコードに実装されている。
大きく２つのモジュールに分けることができる。

••
•
•
•

•

Stage4A: browserの送信データを窃取するモジュール
Stage4B: 窃取したデータをC&Cサーバーに送信するモジュール実行されたプロセスのファイル名に従って、実行されるモジュールが異なる。
プロセスのファイル名

52

実行されるモジュール

firefox.exe

Stage4A

iexplorer.exe

Stage4A

chrome.exe

Stage4A

spoolsv.exe(PrintSpoolerという印刷関連のサービス)

Stage4B

lsass.exe

Stage4B

上記以外

特に処理は行われないStage4A - Version 1
通信に関連する関数のフック•

通信に関連する関数を書き換えて、関数にフックを掛ける。
Fig.) 関数書き換え前後のHttpSendRequestW()の先頭部分のコードjmp命令に書き換えられている

関数書き換え前53

関数書き換え後Stage4A - Version 1
ブラウザの通信データをファイルに保存••

HttpSendRequestA, HttpSendRequestWの引数からURLやPOSTデータ(HttpSendRequestの第4引数)等を窃取し、ファイルに保存する。
ファイルに保存されるデータはRC4で暗号化される。
Fig.) ファイルに保存されるデータの構造
固定値(4Byte)

1:Firefox 2:Google Chrome 3:Internet Explorer

ブラウザの種類を表す値(1Byte)
URLの長さ(2Byte)
URL

現在時刻 の文字列長(2Byte)
現在時刻Fig.) ファイルに保存されるデータの例

54

CryptCreateHash()で生成した値

ハッシュ値(16Byte)

POSTデータ長(4Byte)
POSTデータStage4A - Version 1
ブラウザの通信データをファイルに保存••

特定の金融機関のサイトにアクセスした場合のみ、通信データを保存する。
金融機関はどれも日本国内の金融機関であった。

金融機関のサイトのドメインリストが記載されたファイルで、RC4で暗号化されている(※1)

金融機関のサイトのドメインリスト
55(※1)「zeyzriul」はランダムな文字列で、毎回変わります。

Stage4B - Version 1
Stage4Bの機能一覧
Stage4Aが窃取したブラウザの通信データをC&Cサーバーに送信する。
通信先のC&Cサーバー(Onionドメイン)を更新する。
起動されていない場合、TORを起動する。
Firefoxの設定ファイルに下記の設定を行う。

•••
•
•

•
•
•
•

56

spdy関連の設定の無効化
自動アップデートの無効化

Google Chromeに関連する下記の処理を行う。

••

user_pref("network.http.spdy.enabled", false)
user_pref("network.http.spdy.enabled.http2", false)
user_pref("app.update.auto", false)

Google Chromeの自動アップデートを無効にする。
古いバージョンのGoogle Chromeのインストーラーをダウンロードする。

Windows Updateのサービスを停止する。

Stage4 - Difference between versions
Stage4の64bit対応••

57

Ver.1では32bitのみであったが、Ver.2では32bitだけでなく、64bitのブラウザからも情報を窃取できるようになった。
Ver.2の64bit版のStage4はChromeには対応しておらず、Internet Explorer及びFirefoxに対応している。

Defense

Detection
ネットワーク上での検知•Bottle Exploit KitのURLパターン/conn.phpのパラメータ

••
•

59

攻撃対象であるかチェックする通信
Shellcodeによる通信

Detection
端末上での挙動による検知•

Bottle Exploit KitのShellcodeによる挙動%TEMP%ディレクトリに対するファイル書き込み•••

Cinobiによる挙動%TEMP%や%PUBLIC%ディレクトリに対するファイル書き込み••<random>ディレクトリ以下のtaskhost.exe、1.exe、1.zip、torrc、Tor¥tor.exe

CinobiがTORをダウンロードする挙動

•
•

60

svchost.exe、a.dll、1.txt

svchost.exeあるいはrundll32.exeからarchive.torproject.orgに対する通信Yara Rule61

Cinobi v1

Cinobi v2$hex_v1_1 = { 00 48 c6 05 }$hex_v1_2 = { 00 51 c6 05 }$hex_v1_3 = { 00 6d c6 05 }$hex_v1_4 = { 00 3a c6 05 }$hex_v1_5 = { 00 79 c6 05 }$hex_v1_6 = { 00 44 c6 05 }$hex_v1_7 = { 00 5c c6 05 }$hex_v1_8 = { 00 6f c6 05 }$hex_v2_1 = { 10 48 c6 05 }$hex_v2_2 = { 10 51 c6 05 }$hex_v2_3 = { 10 6d c6 05 }$hex_v2_4 = { 10 3a c6 05 }$hex_v2_5 = { 10 79 c6 05 }$hex_v2_6 = { 10 44 c6 05 }$hex_v2_7 = { 10 5c c6 05 }$hex_v2_8 = { 10 6f c6 05 }

Yara Rule
Rich Header

pe.rich_signature.version(40219) and pe.rich_signature.toolid(171)pe.rich_signature.version(40219) and pe.rich_signature.toolid(158)
pe.rich_signature.version(40219) and pe.rich_signature.toolid(170)pe.rich_signature.version(30729) and pe.rich_signature.toolid(147)
pe.rich_signature.version(0)and pe.rich_signature.toolid(1)pe.rich_signature.version(40219) and pe.rich_signature.toolid(175)pe.rich_signature.version(40219) and pe.rich_signature.toolid(157)62

Attribution
フィッシングキャンペーンとの関連性
2019年4月頃、ゆうちょ銀行を模したWebサイトからCinobi v1が配布•

www.bank-japanpostpo[.]jp
www.bank-japanpost[.]com
www.jp-bamk[.]jp
www.jp-bank.japanp0st[.]jp
www.jp-bank.japampost[.]jp

•
••
•
•

関連付けられたIPアドレスや登録情報が一部のフィッシングキャンペーンと一致•

金融機関を装ったフィッシングについて - tike blog

•
•

63

https://tike.hatenablog.com/entry/2019/12/28/234925

Attribution
MageCartの一部グループとの関連性
2019年4月頃に使用されたCinobi v1のC&Cサーバー••

このIPアドレスはgooglead[.]techというMageCartに関連するドメインでも使用

•
•

64

cionx.inteleksys[.]com (5[.]188.231.236)
JavaScriptの難読手法も一致

外部組織との連携
Cloudflare••

警告画面の表示 -> ドメインの変更
Cloudflareによって隠れていた本当のIPアドレスが一時的に公開$ nslookup vtfound.tk
Name:vtfound.tk
Addresses: 111.90.151.176

65

外部組織との連携
MyCERT/Cyber999•

66

サーバのダウン一時的な活動停止

67Wrap-up

まとめ
日本を標的としたExploit Kitとマルウェアの登場と進化
Bottle Exploit Kit•••

日本のユーザのみが標的
新たな脆弱性の悪用、解析・検知妨害の強化

Cinobi•••

日本のユーザのみを標的とする、マルチステージなBanking Trojan
解析・検知妨害の強化

フィッシングキャンペーンやMageCartとの関連•

防衛手法
ネットワーク・端末上での挙動による検知••69

特徴的なURLや挙動は長期間変化せず

Appendix

Appendix-1: IoC• *.inteleksys[.]com

•
•
•
•••
••
•

71

conforyou[.]ml
cyoumer[.]tk
vtfound[.]tk
cdnsok[.]tk
dnstod[.]tk
tokmix[.]tk
sortsoft[.]tk
softbring[.]tk
cksoft[.]tk

Appendix-1: IoC
••
•
•
•
•

725[.]188.231.236
66[.]42.51.168
111[.]90.151.176
139[.]99.115.204
139[.]180.136.22
156[.]32.15.3

Appendix-1: IoC• ftp://ftp.cadwork[.]ch/DVD_V20/cadwork.dir/COM/unzip.exe• ftp://freddy-ru.starlink[.]ru/ckJlag/antivir/SDFix/apps/unzip.exe• https://archive.torproject[.]org/tor-packagearchive/torbrowser/8.0.8/tor-win32-0.3.5.8.zip• https://x[.]x/8.p• http://ddx2.dh57x[.]com/test/chrome5302785133.zip• http://e7biunhxnia2336s[.]onion/conn.php• http://skmeym7dr5mq2b41[.]onion/connect.php

73Appendix-2: Tools
ツール公開予定
後ほど解析補助ツールを公開します
NTTセキュリティ・ジャパンのTwitterアカウントをご参照ください

•

•
•

74

@GlobalNTT_JP (https://twitter.com/globalntt_jp)

Thank you