Unit 42、日本を対象に開発されたDragonOKバックドアマルウェアの新種を発見

This post is also available in: English (英語)

概要

米Palo Alto Networksの調査チームUnit 42は、AutoFocus脅威インテリジェンスサービスを使用し、日本の組織に対する一連の標的型攻撃を調査しました。

AutoFocusを使い、WildFireやその他のPalo Alto Networksが共有する脅威情報をすばやく検索し、生成した情報を相関分析すると、公に「DragonOK」(※1)
として知られるグループとある攻撃を結び付けることができました。これら攻撃は2015年1月から3月の間に発生していました。

DragonOKはこれまで日本のハイテク業と製造業を狙っていました。今回われわれは彼らの開発者が開発した “FormerFirstRAT” と呼ばれる新種のバックドアツール
(使用者が知らないうちに通信を行う悪意あるプログラム)を検出しました。今回の永続型攻撃で用いられた3つのRATおよび2つのバックドアツールに関する
分析結果は “マルウェアの詳細” 項目を参照してください。

攻撃の詳細

今回の組織的攻撃では、HelloBridgeと呼ばれるSysgetマルウェアの異なる亜種をそれぞれ配信する5つの標的型攻撃が実施されました。
このマルウェアには、ファイルを開くようユーザーをだまそうとするファイルが添付されていました。この中には、他の種類のファイルとして表示するために
実行ファイルのアイコンを変更するもの (図1) と、ユーザーに正規ファイルを開いたように見せかける「おとり文書」が含まれていました。

figure 1 - dragon
1: Sysgetマルウェアの添付で使われたアイコン

この攻撃で使用されたSysgetファイルはいずれもbiosnews[.]info にホストされる単一のコマンドアンドコントロール (C2) サーバー(指揮統制サーバー)と通信します。
SysgetはHTTPプロトコルを使用してこのサーバーと通信します。コマンドアンドコントロール通信の仕様については「マルウェアの詳細」項を参照してください。
5つのすべての標的型攻撃は2ヶ月かけて日本のある製造業を対象としましたが、最後の攻撃では別の日本のハイテク組織が標的とされました (図2)。

figure 2 - dragon
2: 2つの日本組織を標的として使用された5つのSysget サンプル

5つのSysget亜種のうち4つは、マルウェアではない正規ファイルを開いたように見せかけてユーザーをだます「おとり文書」を含んでいました。
2つの実行ファイルは訃報を装うおとり文書を使用していました。図3に女性の訃報を含むGIFファイル、図4に男性の訃報を含むMicrosoft Wordドキュメントを示します。

figure 3 - dragon
3: 女性の訃報を含む日本語のおとり文書(GIFファイル形式)
figure 4 - dragon
4 男性の訃報を含むMicrosoft Word形式の日本語おとり文書

PDFアイコンで示されるSysgetサンプルではAdobe.exeという名前の第二段階の実行ファイルを生成し、以下の警告を表示します。

figure 5 - dragon
5: Adobe.exeにより生成されるエラーメッセージ「このアプリケーション用のアプリケーション記述子が見つかりませんでした。再インストールを試みるか、詳細を発行者に問い合わせてください」

最後のSysgetサンプルはMicrosoft Excelアイコンを使用しており、図6のようにセルに “XXXXXX” と記述されたExcel文書を開きます。

figure 6 - dragon
6: 複数の行と列にXが記載されたExcelシート

これらSysget亜種は今回の攻撃で第一段階のデータと考えられます。この脅威の分析において、われわれはbiosnews[.]info にホストされている
5つの別のバックドアツールを特定しました。このツールは攻撃者が足掛かりを築いた後にSysget亜種によってダウンロードされるものと考えられます。

NFlog、PoisonIvy、NewCTという3つのバックドアは既にDragonOKと公に関連付けられています。さらに攻撃者はツールキットに有名なPlugXという
バックドアを追加しました。もう一つ追加されたバックドアは、これまでわれわれがDragonOKやその他の攻撃グループと関連付けていない新しい
カスタマイズされたツールとみられます。開発者がツールを参照するために使用していたと思われる名前に沿って、われわれはこのツールを“FormerFirstRAT” と
名付けました。図7に、これらバックドアとそれぞれのコマンドアンドコントロール サーバーとの関係を示します。

figure 7 - dragon
7: 今回の攻撃においてDragonOKによって使用された5つの追加バックドア(馬マークとこぶしマーク)とそのコマンドアンドコントロールサーバーとの関係

次項では、今回の攻撃で使用されたマルウェアの機能について詳しく説明します。

マルウェアの詳細

SysgetとHelloBridge

今回の攻撃ではメールにSysgetサンプルが添付され、ユーザーをだましてシステムへ感染するようにさせるため、さまざまなアイコンが使用されました。
これらサンプルの大半は、正規ファイルと悪意あるダウンローダーを含む自己解凍型の実行ファイルです。自己解凍型の実行ファイルを起動すると、
ダウンローダーと正規ファイルは次のどちらかのディレクトリに置かれ、その後実行されます。

  • %PROGRAMFILES%
  • %WINDIR%\Temp

悪意あるダウンローダーが実行されると、まず一つのインスタンスを確実に実行するために “mcsong[]” イベントを生成します。
その後 “Chrome-Update” というウィンドウ名を持つ “C:\\windows\\system32\\cmd.exe” という新しいインスタンスを生成します。
FindWindowW APIコールを使用してウィンドウハンドルの取得を試み、実行ファイルに以下のコマンドを送信します。
これにより、マルウェアはcmd.exeプロセス内でコマンドを間接的に実行できるようになります。

このレジストリキーにより、後でダウンロードされる実行ファイルがリブート後に動作するよう設定されます。
そしてその実行ファイルに “exit” コマンドを送信し、このプロセスを強制終了します。

マルウェアはその後以下のファイルを読み込もうとします。このファイルはネットワーク通信時に受信したデータの復号化に使用する鍵を保存するために用いられます。

ファイルが存在しない場合、次のGETリクエストを実施します。

ファイル名 (fn) と名前 (name) の各パラメータは上記リクエスト内で静的に設定されます。サーバーは以下のデータで応答します。

応答した最初の2つのデータ (“17” と “gh204503254”) はその後、前述のibmCon6.tmpファイルに書き込まれます。
マルウェアは “notilv.exe” という実行ファイル名で %TEMP% ディレクトリに自身をコピーします。先ほど書き込んだレジストリキーにより、パソコンを
再起動してユーザーがログインしたときにこのファイルが実行されます。
次にマルウェアは以下のリクエストを行います。

ファイル名 (fn) とuidの各パラメータは上記リクエスト内で静的に設定されます。レスポンスデータはRC4ストリーム暗号を使って復号化されます。
先にダウンロードした “gh204503254” というデータは暗号鍵として使用されます。以下のPythonコードは “gh204503254” という暗号鍵を使った復号化に利用できます。

この段階では、リモートサーバーは多くの異なるレスポンスを送信することができます。以下のレスポンスは、マルウェアにリモートの実行ファイルをダウンロードさせるよう指示します。

“filename.exe” はダウンロードされたファイルが保存されるパスで、 “01234567890123456789012345678901” は後続のHTTPリクエストで指定される値です。
このコマンドを受信した場合、以下のリクエストが生成されます。

このとき、リモートサーバーは、マルウェアがシステムに保存する暗号化されていないファイルで応答します。
リモートサーバーは下記の例のようなレスポンスも送信できます。このレスポンスにより、指定されたファイルをアップロードするようマルウェアが指示します。

アップロードリクエストの例を以下に示します。

リモートサーバーは以下のようなレスポンスを送信することもできます。このレスポンスはマルウェアに指定されたコマンドを実行するよう指示します。

この実行結果は %TEMP% ディレクトリ内の一時的なテキストファイルに保存されます。実行結果は前述したものと同じ技術を使って暗号化されます。この結果のアップロード例を以下に示します。

PlugX

PlugXは標的型攻撃で多く使用されるバックドアです。今回使用されたPlugXはシマンテック社の製品になりすまそうとします。以下のアイコンがサンプル内に存在します。

figure 8 - dragon
8 シマンテック社のロゴアイコンを使用するPlugX ファイル

マルウェアが実行されると、以下のパラメータを持つサービスとしてインストールされます。

Service Name RasTls
Service Display Name RasTls
Service Description Symantec 802.1x Supplicant

また動作を持続させるため以下のレジストリキーを設定することもあります。

PlugXは標的型攻撃で長く使用されてきた背景もあり、よく研究されているマルウェアです。その歴史の詳細については以下のリンクを参照してください。

FormerFirstRAT

このリモート管理ツール (RAT) は作者によって “FormerFirstRAT” と呼ばれています。FormerFirstRATは本来暗号化されたHTTPSが使われるはずのポート443上で非暗号化HTTPを使って通信します。ポート番号と通信プロトコルを不適当に組み合わせて使うことは、標的型攻撃において珍しいことではありません。
またポート番号とプロトコルが一致しない通信は、悪意ある活動の痕跡となります。
このマルウェアは起動時に持続性を確保するため、以下のレジストリキーを書き込みます。

マルウェアはその後、被害者のシステムに関する情報をHTTP POSTリクエストで送信します。このとき以下の情報が収集されます。

  • 被害者の IP アドレス
  • ユーザー名
  • 管理者権限
  • RAT ステータス (アクティブかスリープいずれか)
  • RAT バージョン (今回のケースでは 0.8)
  • Microsoft Windows バージョン
  • UserID (ボリュームシリアル番号に続けてアンダースコアと “1” の連続)
  • 言語設定

コマンド アンド コントロールには以下のパラメータが使用されます。

このマルウェアはAES-128暗号を使用してネットワーク通信を暗号化します。暗号鍵を生成するために “tucwatkins” という文字列のMD5(関数の一種)を使用します。すべてのデータはHTTP POSTリクエストで送信されます。独特なTTP (Tactics, Techniques and Procedures; 戦術、技術、手順) ではないためこのマルウェアの作者はホームドラマのファンかもしれません。以下のコードはPythonを使用してマルウェア通信を復号する方法を示したものです。

次にマルウェアはリモートサーバーへ定期的にリクエストを送信するループに入ります。リモートサーバーはRATに応答して指示を与えることができます。
われわれは以下の機能を特定しました。

  • リクエスト間のスリープタイマーを変更
  • コマンド実行とコマンド出力のリターン
  • ファイルシステムの閲覧
  • ファイルのダウンロード
  • ファイルの削除
  • 被害者の情報搾取

HTTP POSTリクエストの例を以下に示します。

NFlog

実行中のプロセスに読み込まれるとNFlogはまず新規スレッドを生成します。この新規スレッドはDLLによって生成されたすべての悪意ある活動を担当します。最初にマルウェアは以下のレジストリキーを設定します。

ここで [current_executable_filename] は実行中の実行ファイルのパスで、GetModuleFileNameAのプログラムを呼び出すことで取得されます。
このレジストリキーは現在のユーザーがログインしているときに再起動した後もマルウェアが持続できるようにします。

このマルウェアサンプルには複数の文字列難読化ルーチンが含まれています。バイナリに含まれる文字列は、0x25という1バイトの鍵でバイナリを単純に排他的論理和 (XOR、2つの命題のうち片方のみが真となる論理演算) することで復号化されます。

次にマルウェアは “GoogleZCM” という名前付きイベントオブジェクトを生成しますが、このイベントはマルウェアのインスタンスが同時に一つだけ実行されるようにするために使われます。次にマルウェアは “GoogleZCM” という名前付きイベントオブジェクトを生成しますが、このイベントはマルウェアのインスタンスが同時に一つだけ実行されるようにするために使われます。

そしてマルウェアはローカルホスト上のポート1139への関連付けを試みます。

マルウェアはwww.microsoft.comへリクエストを送ることでインターネット接続の確認を行います。以下に例を示します。

コマンド 説明 URI
CMD 与えられたコマンドを実行 /news/STravel.asp
Browse 与えられたディレクトリをディレクトリ リスティングする /news/SJobs.asp
UploadFile 指定ファイルをアップロード /news/SSports.asp
DownLoad 指定ファイルをダウンロード /news/SWeather.asp
DelFile 指定ファイルを削除 N/A

PoisonIvy

このマルウェアは有名なPoisonIvyリモートアクセス型トロイの木馬 (RAT) として特定されました。復号化して置かれるいずれかのファイル内に埋め込まれる以下のデバッグ用文字列が発見されました。

PoisonIvyはまず、以下の場所に3つのファイルを作成します。

%APPDATA%\\svchosts.exe
%APPDATA%\\PotPlayer.dll
%APPDATA%\\demo.dat

次にマルウェアはWinExecのコールによりsvchosts.exeの実行ファイルを実行します。svchosts.exeマルウェアはまず、PotPlayer.dllライブラリを自身のプロセス内に読み込む前に復号化します。そしてPotPlayer.dllから以下のエクスポート関数をロードします。

PreprocessCmdLineExW
UninitPotPlayer
CreatePotPlayerExW
DestroyPotPlayer
RunPotPlayer
SetPotPlayRegKeyW

PotPlayer.dllの読み込みにより、悪意あるコア機能が含まれるDLLのDllEntryPoint関数が呼び出されます。PotPlayer.dllの最初の読み込み時にマルウェアはシェルコードのスタブをロードして実行します。このシェルコードはサスペンド状態で実行ファイルの新しいインスタンスを生成します。
その後、以下のアルゴリズムを使用して “demo.dat” ファイルを復号化します。

この復号化されたコードは、プロセスが再開される前にサスペンドされたプロセス内に注入されます。新しく作成された svchost.exe プロセスはまず多数のライブラリや関数を動的に読み込みます。このマルウェアは主にシェルコードで構成されています。次に以下のミューテックス (排他制御) を作成します。

続いて元の実行ファイルの削除を試みます。その後以下のレジストリキーを設定します。管理者として実行されている場合はHKLM (HKEY_LOCAL_MACHINE) が使用されます。
それ以外の場合はHKCU (HKEY_CURRENT_USER) 内に設定されます。

次にマルウェアはネットワーク通信の準備を開始します。プロキシが使われているか調査が行われます。被害者のMACアドレスとホスト名を収集しそれらを1つの文字列につなぎ合わせます。

PoisonIvyはbbs reweblink[.]comドメインと通信するよう設定されています。以下に生成されるHTTPリクエストの例を示します。

POST HTTP://bbs.reweblink.com/index.html
HTTP/1.1
Cookie: id=000C298D2341josh-9f59dff661
Connection: keep-alive
Content-Length: 256

[256 Bytes of Data]

マルウェアからは、以下の設定値が抽出されました。

RAT Identifier 12008
Proxy Count 0
Communications Key DF#671d@!
Auto-remove Dropper True
C&C bbs.reweblink[.]com:80

NewCT

コマンド アンド コントロール サーバーに定期的なリクエストを行うNewCT 64ビット DLL バックドアです。このマルウェア群はインターネット接続を確認するためにwww.microsoft.comへのリクエストを行います。これと同じ手法は前述のNFlogマルウェアのサンプルでも確認されています。

インターネットへの接続が確認されると、マルウェアは以下のようなPOSTリクエストを送信します。

POST / HTTP/1.1
Accept-Language: en-en
Content-Type: application/octet-stream
Pragma: no-cache
Cache-Control: max-age=259200
Connection: Close
Content-Length: 1588
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0;Windows NT 5.1)
Host: bbs.jpaols.com

[BINARY_DATA]

以下は上記POSTリクエストに含まれるデコードされたデータで、キャンペーン (攻撃) 識別子情報もありました。

Key 0x30303137
Domain bbs.jpaols.com:80
Victim ID 60F81DCC2FCF_WIN-71FN1PE1AT8
Campaign APR1_2.3
URI index.asp

まとめ

DragonOKの首謀者は、2つの新しいマルウェア群(内1つは特注とみられる)を使用することでTTPを進化させてきたようです。
しかしコマンド アンド コントロールやマルウェア ホスティング用のドメイン登録には同じ電子メールアドレスを使い続け、これらドメインの一部を数年間にわたって再利用しています。これは新しいマルウェアであっても彼らを追跡することは非常に簡単で、新しいマルウェアそのものはグループが過去に使用したものと比べて特に進歩していないことを意味します。

DragonOKの首謀者が技術的に最も優れているわけではないかもしれませんが、彼らは比較的短い期間に何度も標的を狙うという高いねばり強さを実証しました。
いわゆる“APT (Advanced Persistent Threat)” と呼ばれる多くのグループは Advanced (高度) というよりも Persistent (持続的) であり、DragonOKはそのカテゴリに分類されます。残念ながら、悪質な首謀者は十分な時間を持ってこれらのツールと標的型フィッシング攻撃を組み合わせ、多くの攻撃を成功させています。
本ブログで説明したマルウェアのサンプルはすべてPalo Alto Networksのサンドボックス型クラウドサービスWildFireでマルウェアとして識別されました。

われわれは、これらの攻撃の痕跡を現状のセキュリティソリューションで確認し、必要に応じて確認するための手法を追加し、積極的にネットワークを調査することを推奨します。理想的なセキュリティソリューションとは、攻撃への一連の対策の各段階でそれぞれ保護を実行し、未知の脅威を防ぐために自動で新しい保護を追加するようなプラットフォームへのアプローチを採用することです。

サンプル要約

Sysget/HelloBridge

ファイル名 ].exe
初回確認 2015年1月19日
SHA256 227de988efdcf886bc0be7dc3df9f51a727664593de47352df31757853e42968
C2サーバー biosnews[.]info
分割IP 23.229.234.160
PDBへのパス D:\Work\1021WinInetGEnc1\Release\WinInetG.pdb
ファイル名 A.exe
初回確認 2015年1月27日
SHA256 35784ec1968d322092cb6826f7795f65eeb0b8365ac8c7d8756851c92acf31ae
C2サーバー biosnews[.]info
分割IP 23.229.234.160
PDBへのパス D:\Work\1021WinInetGEnc1\Release\WinInetG.pdb
ファイル名
初回確認 2015年3月10日
SHA256 0b97ced3fabb14dbffa641d9bd1cc9dd8c97eab9cb6160d43202ee078e017989
C2サーバー biosnews[.]info
分割IP 23.229.234.160
PDBへのパス D:\Work\1021WinInetGEnc1\Release\WinInetG.pdb
ファイル名 address.exe
初回確認 2015年3月16日
SHA256 287e29ca7b2177fdaa561a96284726ada636dbbdaadfdbeadf88164e625ed88e
C2サーバー biosnews[.]info
分割IP  23.229.234.160
PDBへのパス D:\Work\1021WinInetGEnc1\Release\WinInetG.pdb

PlugX

ファイル名 schost.exe
初回確認 2015年3月16日
SHA256 70ac649d31db748c4396a9a3f7a9c619c8d09e6400492ab3447520fb726083c4
C2サーバー http.tourecord.com
分割IP  103.20.193.62

PoisonIvy

ファイル名 shost.exe
初回確認 17 Mar 2015
SHA256 6e95215a52e1cbf4a58cb24c91750151170ea3d59fa9dbfe566e33a2ffc04f4c
C2サーバー bbs.reweblink.com
分割IP  103.20.193.62

FirstFormerRAT

ファイル名 RpcRtRemote.dll
初回確認 16 Mar 2015
SHA256 e68b70eaaf45fa43e726a29ce956f0e6ea26ece51165a1989e22597aebba244f
C2サーバー https.reweblink.com
分割IP  103.20.193.62

Nflog

ファイル名 chrome_frame_helper.dll
初回確認 17 Mar 2015
SHA256 64cbcb1f5b8a9d98b3543e3bf342e8c799e0f74f582a5eb0dc383abac7692f63
C2サーバー new.hotpmsn.com
分割IP  58.64.156.140

NewCT

ファイル名 shost.exe
初回確認 17 Mar 2015
SHA256 6e95215a52e1cbf4a58cb24c91750151170ea3d59fa9dbfe566e33a2ffc04f4c
C2サーバー bbs.reweblink.com
分割IP  103.20.193.62

(※1)「DragonOK」:Operation Quantum Entanglement – Thoufique Haq, Ned Moran, Sai Vashisht, and Mike Scott – https://www.fireeye.com/resources/pdfs/white-papers/fireeye-operation-quantum-entanglement.pdf