セキュリティー・インテリジェンス

Androidを狙う金融マルウェアExobot、その脅威のメカニズム

金融機関を標的にした Android のトロイの木馬、ExoBot のソース・コードが最近流出した事件を受けて、IBM の世界的なセキュリティー研究開発機関である X-Force は、このマルウェアの内部動作を徹底的に調査しました。そして金融機関を狙ったクロスチャネルの詐欺に悪用されるその動的メカニズムと機能を解明しました。

ExoBot の起源

ExoBot は、以前から存在する Marcher と呼ばれるコードを起源とした Android のマルウェアです。このコードは、オーバーレイ手法を使用して金融機関を狙うトロイの木馬を実行します。つまり、ユーザーが開いている元のアプリを隠す偽のウィンドウをポップアップさせて、被害者が偽のインターフェースに金融機関用の資格情報を入力するように仕向けます。口座にアクセスするための詳細情報を盗んだ後、このマルウェアは SMS メッセージと電話を傍受することもできます。このようにして、犯罪者は被害者の銀行口座やその他の金融機関口座を思いのままに乗っ取ることができるのです。
ExoBot が感染デバイス上で不正な活動を手助けする機能としては、管理者特権の取得、オーバーレイ画面の起動、感染デバイスからの SMS、データ、および情報の取り出しなどがあります。
2016 年からしばらくの間、ExoBot の開発者は一般の Web でマルウェアを販売しており、2017 年 5 月にはアップグレードの宣伝すらしていました。2018 年 1 月に、関係者は地下でこのマルウェアを売却することに決定しましたが、2018 年 5 月までに正体不明の関係者によってソース・コードがオンラインに流出しました。
ソース・コードの流出、特に Android のマルウェア・コードの流出がここ最近は起きるようになっています。流出が発生すると、同じマルウェアの亜種が増加し、より多くの犯罪者が簡単にモバイル・マルウェアの現場に参入してモバイル・バンキング詐欺に手を染めるようになります。

ExoBot の内部動作の詳細な調査

以下のセクションでは、X-Force のモバイル脅威研究者 Shahar Tavor の分析による、ExoBot の技術的な詳細について説明します。

アーキテクチャーの基礎

ExoBot の流出したソース・コードを分析した X-Force の研究者は、このマルウェアにいくつかの注目すべき機能が備わっていることを発見しました。例えば、実行時にロードされる動的モジュール、一般的なサンドボックスを巧みに避けるいくつかのエミュレーション回避トリックなどです。
以下の図は、マルウェアのアーキテクチャーを示しています。ルーチン全体は以下のように進んでいきます。

  1. Android モバイル・デバイスのユーザーは、SMS スパムを介して、または公式ストアから直接、ローダー・アプリを知らないうちにダウンロードします。
  2. ローダー・アプリは攻撃者のコマンド&コントロール(C2)サーバーと通信を行い、応答として最新バージョンのマルウェア・バイナリーを受信します。
  3. ExoBot がデバイスにフェッチされ、実行されます。
  4. ExoBot は C2 サーバーから .dex ファイルをダウンロードします。このファイルはマルウェアのメインモジュールです。このコンポーネントは ExoBot の機能の中心であり、これがなければマルウェア機能のほとんどは動作しません。
  5. これで攻撃者はマルウェアにコマンドを送信できるようになります。これらのコマンドは、メインモジュールによって処理されます。

図 1: ExoBot のアーキテクチャー
図 1: ExoBot のアーキテクチャー

ExoBot の感染ルーチン

ExoBot はほとんどの場合、SMS スパムを介して新しいデバイスに拡散し、場合によっては公式ストアに侵入したダウンローダー・アプリを介して広がることもあります。

初回実行

デバイスの初回実行時に、ExoBot はアプリケーション・アイコンをホーム画面から削除し、実行中のアプリをすべて最小化した後、ホーム画面を表示します。これにより、感染したユーザーはデバイスに何か新しいものが入ったことに気付きません。

OpSec 検査

サンドボックスと自動分析を回避するために、ExoBot は実行前に以下に示すいくつかの検査を実行します。

  1. エミュレーション回避のための検査
    • ほかのマルウェアと同様に、Android のマルウェアはモバイル脅威研究者のエミュレーターやサンドボックスによって分析されることがよくあります。この分析をすり抜けるために、ExoBot は環境のビルド・モデル、IMEI、および登録されているオペレーターを検査します。
  2. デバッグ回避
    • 自動化ツールによるデバッグを回避するために、ExoBotは isDebuggerConnected() 関数を使用して、デバッガーがデバイスに接続されているかどうかを判別します。
  3. 国別フィルター

    現地法の適用範囲が及ばないように、マルウェア・コードによっては東欧諸国での実行を回避するものがあります。ExoBot の開発者は、マルウェアを実行させない国として以下の特別なリストを組み込んでいました。

    • アルメニア
    • アゼルバイジャン
    • ベラルーシ
    • カナダ
    • カザフスタン
    • キルギス
    • モルドバ
    • ロシア
    • セルビア・モンテネグロ
    • スロバキア
    • タジキスタン
    • トルクメニスタン
    • ウクライナ
    • アメリカ合衆国
    • ウズベキスタン

    興味深いことに、カナダと米国がターゲットから外れる国のリストに入っています。

    2 番目のフィルターは、デバイス上で設定されている言語によって適用されます。以下の言語が指定されていると、デバイス上で ExoBot の実行が停止されます。

    • アルメニア語
    • アゼリー語 (ローマ文字)
    • ベラルーシ語
    • 中国語
    • チェコ語
    • インド・ヨーロッパ語
    • キルギス語
    • ルーマニア語
    • ロシア語
    • スロバキア語
    • トルコ語
    • ウクライナ語
    • ウズベク語 (ローマ文字)

デバイス管理要求

すべての機能を使用可能にするために (特に、ユーザーの画面のロック、ロック画面のパスワードの変更、およびアプリケーションの随時強制終了)、ExoBot は管理者権限で実行する必要があります。 この必要な権限レベルを取得するために、感染ユーザーを誘い入れるべくExoBot は GNU General Public License と称した偽の画面を表示します。

図 2: 偽の GNU ページによって管理者権限を要求する ExoBot

図 2: 偽の GNU ページによって管理者権限を要求する ExoBot

管理者権限レベルを取得することによって、ExoBot が永続メカニズムを確立することも可能になり、ユーザーは同等な権限によってマルウェアを使用不可にしなければ、アプリを削除できなくなります。ExoBot を消去するには、デバイス管理者のアプリ・リストから手動で削除する必要があります。厄介なことに、削除した後も、ExoBot はユーザーにアクティブ化を求める画面をポップアップ表示します。

難読化

リソースを常に保護するために、ExoBot の開発者は以下の 2 つの難読化手法を使用しています。

  1. ストリング保護 – マルウェアのオペレーターは、任意に選択したキーを使用してすべてのストリング文字を置換できます。

    図 3: ストリング保護

    図 3: ストリング保護

    これを戻すには、新規キーをデフォルトのキーに置換し、前のストリングに戻す復号機能を使用します。

    図 4: ストリング難読化の反転

    図 4: ストリング難読化の反転

  2. C2 サーバーからの要求と応答の AES 暗号化、およびマルウェアの構成の暗号化。暗号化は、ハードコーディングされたキー、および Base64 エンコードを使用して実装されていました。

ExoBot の継続的な C2 通信

新たに感染するときExoBot は C2 サーバーからモジュールを取得し、その後もサーバーと継続的に連絡を取って攻撃者から割り当てられた新規タスクを確認します。新規タスクが見つかると、ExoBot はディスク上の専用フォルダーに配置された指定のファイル内で、これらのタスクを実行用のキューに入れます。キュー内の情報はすべて、暗号化形式で保存されます。このキュー・ファイルは、マルウェアの活動期間とライフサイクルの全体にわたって使用されます。

タスクを常に把握するために、ExoBot は定期的にかつアラーム設定利用によりこれらを検査します。要求と応答は JavaScript Object Notation (JSON)フォーマットで常に暗号化されます。

図 5: 処理待ちタスクを含むキュー・ファイル

図 5: 処理待ちタスクを含むキュー・ファイル

新規タスクが送り込まれるまで、マルウェアはデバイス、インストール済みアプリ、および構成状況に関する最新情報を C2 サーバーに継続的に通知します。

図 6: ExoBot はデバイス情報を含む要求を C2 サーバーに送信する

図 6: ExoBot はデバイス情報を含む要求を C2 サーバーに送信する

ExoBot の C2 通信は SSL によって保護されます。

デバイスを識別するために、それぞれの感染デバイスは ID (IMEI、ビルド・モデル、CPU、および Android ID) を含む固有の MD5 を受信します。詳細は、それぞれの JSON 要求内で「I」フィールドを使用して C2 サーバーに送信されます。

動的なモジュールのロード

類似したマルウェアとは異なり、ExoBot は独自の方式を使用してモジュールを動的にロードします。以下の図は、この戦術を実現するコードを示しています。

図 7: ExoBot の動的なモジュールのロードを示すコード・スニペット

図 7: ExoBot の動的なモジュールのロードを示すコード・スニペット

ここで開発者が行ったのは、ペイロードを使用してモジュールのロードを管理することです。メインモジュールは、初回実行時に C2 からモジュールをダウンロードするコンポーネントであり、後で実行する必要が生じたときにモジュールを処理するコンポーネントでもあります。

モジュールはリフレクションでメモリーにロードされます。これにより、マルウェアはクラス、メソッド、属性を実行時に検査して動的に呼び出すことができ、コンパイル時にこれを行う必要がなくなります。

リフレクションは Android の DexClassLoader API を使用して実装されています。アプリケーションはこのクラス・ローダーを使用して、.jar ファイルと APK ファイルをロードできます。このメソッドを使用すると、既存のアプリの一部として以前にインストールされていなかったコードを実行でき、そのアプリにコードを実行時に ロードできます。

ExoBot の .dexファイルはディスクにまだ存在しますが、コードは APK 内にパックされていないことに注意してください。このケースでリフレクションを使用することにより、マルウェアはモジュールの静的分析を回避でき、これらのモジュールがアンチウィルス・エンジンに認識されないようにすることができます。 さらに、実行時のロードにより、ExoBot の俊敏性が高まります。C2 サーバーから新規モジュールをいつでもフェッチでき、既に感染しているデバイス上で機能を素早く簡単に追加/更新できるのです。

モジュールの実行

モジュールを実行するために、ExoBot の C2 サーバーは関連したパラメーターを指定したコマンドをマルウェアに送信するとともに、モジュールを含む .dex ファイルの MD5 ハッシュを送信して、正しいものが確実に実行されるようにしています。

data/data/app_package_name/m/md5(module_name).dex

その後マルウェアは、感染デバイス上で必要なアクションの実行に進みます。

場合によっては、デバイス上のマルウェアのフォルダーにモジュールが存在せず、C2 サーバーからモジュールをダウンロードする要求を開始することがあります。

図 8: 被害者の連絡先を取得するために C2 サーバーからモジュールのダウンロードを要求する ExoBot

図 8: 被害者の連絡先を取得するために C2 サーバーからモジュールのダウンロードを要求する ExoBot

次に、ExoBot はディスク上の必要なモジュールのハッシュを生成し、その MD5 を C2 サーバー上でそのモジュールに関連付けられているものと比較します。この手順は、改ざんとエラーを防ぐために行われます。一致を確認した上で、マルウェアは要求されたモジュールをロードし、結果の報告を C2 サーバーに返します。

図 9: 被害者のチャット用アプリから連絡先を取得するための ExoBot の要求

図 9: 被害者のチャット用アプリから連絡先を取得するための ExoBot の要求

JSON フォーマットの結果には、モジュールから返されたデータとともに、モジュールが正しく実行されたか失敗したかを示す API 状況フィールドが含まれます。

ExoBot のモジュール・リスト

以下の表に、ExoBot の機能を実現するモジュールを示します。1 つ目の表は既存のモジュールを示し、2 つ目の表は開発者によってまだ追加されていなかったモジュールを示しています。

アクティブなモジュール名 説明
notification 通知を表示します。通知画面をタップすると、指定されたアプリが起動します。
ussd USSD コードを実行します。
send_sms (sms) ボットから指定された電話番号に単一の SMS を送信します。
mass_sms すべての連絡先に SMS を送信します。
mass_sms_plus 「設定」に指定されている URL のリストによって SMS を送信します。
screen_lock_on サーバーが送信する指定された Web ページでデバイスの画面をロックします。
screen_lock_off 画面ロックを無効にします。
intercept_on すべての着信 SMS を攻撃者のコントロール・パネルに送信します。Android v4.4 より古いデバイスからの SMS は削除します (これより上位の場合は、削除された SMS を使用)。
intercept_off SMS の傍受を無効にします。
kill_on 画面を永続的に無効にして、サウンドを消音にし、ロック画面パスワードを変更します。* パラメーター: パスワード (デフォルト値: 9990)。
kill_off 画面のロックを解除してロック画面パスワードを削除します。
update_info ボットの情報すべてを更新します (言語、オペレーター、アプリのリスト、連絡先、IMEI、OS バージョン、番号、デバイス・モデル)。
sms_redirect 着信 SMS を指定された電話番号に転送します。
repeat_inject 前のオーバーレイのアクティブ化を繰り返します。
get_contacts 電話のアドレス帳から連絡先を取得します。
fire_cc 被害者のクレジット・カードの詳細を要求する偽の画面を表示します。

以下のモジュールは、現時点ではアクティブになっていません。

アクティブでないモジュール名 説明
unblock_inject 指定されたアプリのオーバーレイの表示を開始します。
block_inject 指定されたアプリのオーバーレイの表示を停止します。
admin_phone SMS によってボットを制御する管理者を設定します。
api_server API サーバー・リストを変更します。
request_coordinates 現在の場所を取得します。
request_token デバイス・フォルダーから被害者のワンタイム・パスワード/トークンを要求します。

ExoBot のオーバーレイ画面の仕組み

オーバーレイ・マルウェアはしばらく前から出回っていましたが、GM Bot が地下でこのマルウェアの商品化を開始してからこの方式は一般的になりました。GM Bot 以降、金融機関を狙ったさまざまな Android のトロイの木馬がオーバーレイ戦術を使用し、さまざまな方法で実用化しています。

ExoBot のケースで、オーバーレイ画面をポップアップ表示する手口は、フォアグラウンド・アプリを検出した後で、そのアプリと一致するカスタム Web ページのアクティビティーを表示するというものです。金融機関、暗号通貨の交換、決済およびショッピング用のアプリの場合は、偽の画面がそのアプリのログイン画面と一致するようになっています。

最初に、ExoBot はターゲット・リストを C2 サーバーから取得します。マルウェアは、/proc 仮想ファイル・システムの下にあるすべてのファイルをスキャンして、ユーザーが開始した実行中のプロセスすべてをマップします。ユーザー自身が起動できないアプリとプロセスは、スキャンしません。

図 10: /proc  からのアクティブ・プロセスをすべてリスト

図 10: /proc  からのアクティブ・プロセスをすべてリスト

起動時に、Android オペレーティング・システムのサービスは bg_non_interactive 状態で実行されます。この状態の意味は、その時点でのサービスの優先度が低く、サービスによる CPU の使用率が 5% を超えてはならないことです。目的のアプリがフォアグラウンドで実行されていることを判別するために、マルウェアはアプリのプロセス ID (PID) が非対話式状態リストに含まれていない ことを確認します。

図 11: フォアグラウンドで実行されているプロセスの検索

図 11: フォアグラウンドで実行されているプロセスの検索

ターゲットのアプリがフォアグラウンドで実行されている場合、ExoBot は新規アクティビティーを元のアプリに重ねてポップアップ表示して、そのアプリを覆い隠し、偽の画面に高い優先度を付けます。オーバーレイの中で、カスタム Web ページが元のアプリのログイン・インターフェースを偽装して、被害者の資格情報をフィッシングします。

クレジット・カード情報の執拗な要求

モバイル・バンキングなどの金融アプリケーション、ソーシャル・アプリ、およびチャット・アプリをターゲットにするほかに、ExoBot は決済カード情報を盗むために設計されたモジュールを保有しています。

このモジュールの目的は、偽の画面のポップアップを頻繁に表示して、決済カードの詳細をアクティビティーに入力するように被害者に要求することです。このおとりは、Google Play からの通知、または Android ベースのデバイス用のその他のサービスから出される通知として設定されています。

進化を続けるモバイル・マルウェア

ExoBot のコード流出は、ほかの流出事件とまったく同じように、サイバー犯罪者がそれぞれ独自に不正操作と攻撃に応用できるマルウェアの基礎を提供する結果になります。 このコード流出により、今後数カ月以内に ExoBot から派生したマルウェアが登場するとともに、さまざまな地域で新しい犯罪者がそのマルウェアを使用して、モバイル・バンキングのユーザーを攻撃の糸口に当地の金融機関を狙うと、X-Force の研究者は予想しています。

モバイル・マルウェアが企業に及ぼす脅威を抑制するために、IBM Trusteer を使用して企業のアプリを保護できます。従業員用モバイル・デバイスを管理している方々は、IBM の統合エンドポイント管理 MaaS360 について詳しく確認することをお勧めします。

ここではソースコードを直接調査しましたが、このバージョンを解析するための最近のExobotのサンプルは以下です。

  • 42751858e99b7add2f4ac9e00e348d40
  • 285197e39072bda563ccebc0fba78648
  • 80b5821c7f1649b176381efaadb90f68
  • f1ad35e91b45b5375e08666b39ca791b
  • 3ff9fadb87812571f799a35c13d8490c

X-Force ExchangeにあるExobotのコレクションの管理更新も随時行っています。


この記事は次の記事の抄訳です。
IBM X-Force Delves Into ExoBot’s Leaked Source Code

More セキュリティー・インテリジェンス stories
2019-09-27

【オンデマンドWebセミナー】マルチクラウド時代におけるサイバーセキュリティーの考慮点

オンデマンドWebセミナーのご案内 マルチクラウド時代におけるサイバーセキュリティーの考慮点 今日、多くの企業 […]

さらに読む