BlackMoonの攻撃活動、韓国の100,000以上のユーザーに影響

はじめに

ゼロデイのサンプルを特定するために設計された、ビヘイビアベース、インハウスのフレームワークであるFortiGuardのVirtualization Execution X(VEX)システムが、トロイの木馬BlackMoonの未発見バージョンを検出しました。

BlackMoonは、韓国の様々な金融機関からユーザーの認証情報をフィッシングで盗み取るよう設計された銀行系トロイの木馬です。これは2014年初めに発見され、コード内に「BlackMoon」というデバッグ用の文字列があったことから、BlackMoonと名付けられました。

BlackMoonのマルウェアコードは犯人たちによって常に更新されていますが、キャンペーンによる感染の規模は把握されていませんでした。今回の記事では、BlackMoonの拡散状況やコードの最新情報に関するFortiGuard Lion Teamの調査結果を共有したいと思います。

マルウェアの最新情報

PACファイルの利用

従来、BlackMoonは感染したシステムのローカルのhostsファイルを書き換え、特定のウェブサイトにアクセスがあった際、アタッカーの管理下にあるフィッシングページへとユーザーをリダイレクトしていました。しかし、このマルウェアの最新バージョンでは、これを行うのにプロキシ自動設定(PAC)ファイルを使用しています。

PACファイルは、特定のURLに対し、ウェブブラウザの適切なプロキシサーバーを自動的に定義するために用いられる関数です。これには、ユーザーの認証情報をインターセプトするためにBlackMoonが悪用しているJavaScriptの関数が含まれています。以下は、BlackMoonがローカルホストに設定した、難読化されたPACファイルのスクリーンショットです。

JavaScriptの難読化を解除してみると、マルウェアが認証情報のフィッシングのために監視しているウェブサイトのハッシュ値の一覧がありました。

このマルウェアは、独自のアルゴリズムを使ってウェブサイトのハッシュ値を計算しています。このアルゴリズムもPACのJavaScriptコードの一部です。この手法により、標的となっているウェブサイトをセキュリティリサーチャーによって特定されるのを一層難しくしています。

以前標的とされていたウェブサイトを確認するため、BlackMoonの過去のサンプルをバックトレースしてみました。PACのJavaScript自体に入っているマルウェアのアルゴリズムを使い、これらのウェブサイトのハッシュ値を生成し、上のハッシュ値一覧と比較してみました。ハッシュ値は107ありますが、標的となっている韓国のウェブサイトを61個確認することができました。

一覧にあるハッシュ値の1つと合致するウェブサイトをユーザーが開くと、ユーザーは偽のエラーメッセージを表示するページへと誘導されます。

このエラーメッセージが、さらなる情報を要求するフィッシングページへとユーザーをリダイレクトします。

このマルウェアはWindowsのどのブラウザでも、このフィッシングルーチンを表示させることができます。

アンチデバッガーを使ってコードのワークフローを制御

これまでのBlackMoonの亜種は、そのペイロードを含むDLLをドロップし、これを実行しますが、新バージョンは巧みなアンチデバッグトリックを用い、ドロッパーを介して配信されます。これらのアンチデバッグトリックは、予定されているプログラム実行のワークフローを制御するために主に使用されています。

このマルウェアはまず、API RtlAddVectorExceptionHandlerを呼び出して、例外ハンドラ関数を設定します。

その後、SetThreadContext APIを呼び出して以下の関数上に複数のハードウェアブレークポイントを設定します。

  • マルウェアコード内のコールバックルーチン
  • DbgUiRemoteBreakin
  • CreateThreadThreadEx+0x20
  • SendMessageA

最初のアンチデバッグトリックは、GetTickCountを介してCPU実行時間をチェックするというものです。このマルウェアは、500ミリ秒ごとにティックカウントチェックを実行するスレッドを作成します。しかし、このティックカウント値を得るのに、GetTickCount の「コード引き抜き」テクニックが用いられています。得られるティックカウント値が、この典型的なアンチデバッグによるチェックの迂回を試みるフックによって変更されないようにするためです。次のトリックは SendMessageAのハードウェアブレークポイントを介したものです。これは最も注目すべきものです。簡単に言えば、SendMessageAのプロローグをEB FE(自身へのジャンプ)に書き換えるということです。これにより、 SendMessageAがマルウェアによって呼び出されると、無限ループが引き起こされます。このマルウェアの作成者は、動的デバッガーによる解析を避けるために並外れた方法を用いようとしているようです。

デバッガーがある場合、SendMessageAが呼び出されるとデバッガーが主導権を握ります。アタッチされているデバッガーにより、それまでに登録されていたベクトル化例外処理(Vectored Exception Handling, VEH)は実行されず、「自身へのジャンプ」命令により、無限ループに陥ります。また、SendMessageA APIのフックを復元しようと試みると、他のデッドループルーチンのためにマシンのCPU使用率が高くなってしまうか、サンプルのデバッグ時に見つかるアノーマリ次第ではCSRSS.exeを一時停止してシステム停止を引き起こすことが可能です。

アナリストたちの解析をさらに困難にするため、このマルウェアは自身にとって重要ないくつかのAPI関数上に設定されているソフトウェアブレークポイントを検出します。以下のAPI関数にソフトウェアブレークポイントが見つかると、このマルウェアはここでもデッドループに陥ります。

  • GetThreadContext
  • SetThreadContext
  • RtlMoveMemory
  • GetWindowTextA
  • IsWindowVisible
  • IsWindow

デバッガーがない場合には、 SendMessageA APIは「自身へのジャンプ」フックに陥ることなく、常にVEHハンドラをトリガーします。こうして、マルウェアは常にSendMessageA APIを呼び出し、デバッガーがあればそれを使いものにならない状態にしてしまうのです。だからこそ、以下の図に示されるように、コード注入のルーチンが実際に実行される前に、大量のSendMessageA APIが繰り返し呼び出されていることに私たちは気づいたのです。VEHハンドラが主導権を握るたびに、そこでもティックカウント値のチェックが行われます。ティックカウント値が合致しないと、ここでもプログラムはデッドループへと陥ることになります。つまり、このマルウェアにデバッガーを使って動的デバッグを行うということは、プログラムのワークフローを変えてしまうのと同じことであり、結果としてマルウェアが正しく実行されなくなってしまうのです。

コード注入

閾値に達すると、マルウェアはコード注入ルーチンへと進みます。まず、サスペンドモードでプロセスCACLS.EXEを作成し、そのコードを注入します。ここでなぜCACLS.EXEが選ばれたのかはわかりません。CACLS.EXEはコマンドラインユーティリティであり、実行後にバックグラウンドプロセスとして実行されたままになっているべきものではなく、明らかに疑いを強めてしまうからです。ですから、技術に詳しくなくても鋭いユーザーであれば、実際に侵害指標として捉える可能性もあるでしょう。

プロセスがサスペンド状態に入ると、CACLS.EXEの元のイメージベースを、メインのペイロードである実行可能ファイルで上書きします。私たちが行った予備解析によると、これにバックドアと認証情報を盗み出す機能が含まれていると思われます。

拡散状況

C&Cサーバーに接続するため、このマルウェアはまず、ソーシャルメディアのサイトからコンフィグレーションをダウンロードします。これがC&CのIPアドレスの入ったレスポンスを返します。

BlackMoonが使用しているC&CのIPアドレスには、中国語を用いているオープンディレクトリがあることがわかりました。以下は、BlackMoonの最新のC&Cの1つのスクリーンショットです。感染したPCのIPアドレスとMACアドレスを示しているようです。

このページを簡単に訳してみると、BlackMoonのキャンペーンがどれほど拡散しているのかがよくわかります。具体的に言えば、1行目は感染の統計を示しています。それを見ると、世界各地における感染が110,000を超えています。そのうち109,000弱が韓国のものです

C&Cは韓国の被害者の感染数を個別に表示していますが、他の国のPCが感染していることもうかがえます。合計のヒット数と韓国のヒット数には1,280の違いがあります。

C&Cが示す統計では、感染の重複が取り除かれています。これも重要な点です。これはつまり、1台のPCが二度感染しても、「今日の訪問」数のみが更新されるということです。従って、上に示される感染数は、一意の感染数ということになります。

また、上のC&CにおけるGMT+8時間帯の2016年4月20日12:30から2016年4月22日15:30までの時間ごとの感染数も監視してみました。感染数は午後、特に15:30(GMT+9の韓国では16:30)以降に大幅に増加することがわかりました。アクターたちがこの時間の前後でマルウェアを拡散している可能性があります。

結論

今回の研究で、少なくとも2年は実行されているにもかかわらず、何とか目立たないように活動してきた悪意のあるキャンペーンの影響をよく理解することができました。BlackMoonは韓国の被害者を標的としているようですが、他の国でも多くの感染数が確認されています。

BlackMoonには、複数のアンチデバッグテクニックを含む、ユニークなコーディングスタイルがあります。その意図はもちろん、マルウェアリサーチャーによる解析を回避するためです。しかし、今回の記事に掲載した調査結果を考えると、世界中の多くのユーザーに影響を与えている深刻かつ持続的な脅威であることがわかりました。

フォーティネットでは、BlackMoonのバイナリをW32/Banbra 亜種として検出し、IPSシグネチャ Blackmoon.Botnetを介してBlackMoonのネットワーク通信をブロックしています。

情報提供: Tien Phan、Tony Loi、Kenny Yang、Floser Bacurio

-= FortiGuard Lion Team =-

IOC(侵害指標)

関連するハッシュ値:
9CB45F0170E80CE0EC8601030C540CB0 W32/Banbra.TLBY!tr
DFD4DC577D02B76EFEA004CD2C131FF7 W32/Banbra.TLBY!tr
163F885CC88C0E69A4094122E5667190 W32/Banbra.TLBY!tr
3CFD66340F204E1B8697E7A8514C00AB W32/Banbra.TLBY!tr
EE0DEF01D390CA7FD7CED414C83F9782 W32/Banbra.TLBY!tr
2AABD4FA21CCA0F153F57CCC1F3C54C0 W32/Banbra.TLBY!tr
BBCBD3DC203829C9CDBF7D1B057F0E79 W32/Banbra.KR!tr

ファイルをドロップ:
C:\WINDOWS\8000

書き換えられるレジストリ:
プロセスのパス: C:WINDOWS\system32\cacls.exe
鍵: HKCU\Software\Microsoft\Internet Explorer\Main
タイプ: REG_SZ
値: Start Page
データ: www.naver.com

プロセスのパス: C:\WINDOWS\system32\cacls.exe
鍵: HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings
タイプ: REG_SZ
値: AutoConfigURL
データ: http://127.0.0.1:1176/{alphanumeric characters}

プロセスのパス: {Original Filename}.exe
鍵: HKCU\Software\Microsoft\Windows Script\Settings
タイプ: REG_DWORD
値: JITDebug
データ: 0

オートラン:
プロセスのパス: {Original Filename}.exe
鍵: HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
タイプ: REG_SZ
値: {Random Alphanumeric Value}
データ: {Original Filename}.exe

C&C:
100.43.185.34
174.139.0.211
107.151.158.196
206.161.216.35
207.226.136.14
100.43.185.42
174.139.194.82
205.209.141.84

フィッシングページで盗まれる情報:
部署: 個人顧客、企業顧客
名前
社会保障番号
口座番号
口座のパスワード
携帯電話の番号
証明書のパスワード