当社のAIエンジンNeutronが、UCバークレーのCyberGymベンチマークで96.75%のスコアを記録しました。 詳細を見る

セキュリティ

セキュリティ

Androidマルウェア「GodFather」の解析

さまざまな形で出現し続け、主に銀行や暗号資産のアプリを標的として、ユーザーの資金や機密情報を盗み出すAndroidマルウェア「GodFather」を解析します。

私はずっとマルウェア解析に魅了されてきました。マルウェア解析は、オペレーティングシステムやアプリケーションの防御メカニズムを回避するハッカーの巧妙さだけでなく、重要なデータを盗むためにユーザーを欺く手口の巧妙さも浮き彫りにする作業です。

マルウェアを解析するには、大きなカップに入ったコーヒー、鋭い分析力、そしてアプリケーションの謎を解き明かすためのリバースエンジニアリング用の適切なツールが必要です。

本記事では、さまざまな形で出現し続け、主に銀行や暗号資産のアプリケーションを標的とするマルウェアGodFatherを解析します。

端末上でGodFatherマルウェアを実行すると、送金や、電話番号、インストール済みアプリの一覧、バッテリーの詳細といった端末情報の収集などの悪意ある動作を行います。さらに、感染した端末で付与された権限を悪用することで、このマルウェアはSMSメッセージの傍受、VNCを使った端末画面の操作、電話の転送、そしてユーザーに気づかれることなくURLを開くことができます。

解析には主にOstorlabプラットフォームを使用します。Ostorlabプラットフォームでは、次のことが可能です。

  • APKのソースコードとアセンブリを取得する
  • Manifestとリソースを読みやすいテキスト形式に変換する
  • ネイティブコード(アプリケーション内の.soファイル)のアセンブリを取得する
  • 関数の特性とリスクに基づいてラベルを付けながら、関数の呼び出しツリーを取得する
  • アプリケーションから送信されるトラフィックを傍受する

スキャンの結果と解析環境には、こちらのリンクからアクセスできます。

最初の検出結果

プラットフォームでアプリケーションをスキャンしたとき、最初に目に付くのは、Androidの設定アイコンと同じアプリケーションのアイコンです。

アプリの解析
マルウェアアプリケーションの解析

概要セクションを見ると、このアプリケーションが22個の権限を要求しており、そのうち8個が危険な権限であることが分かります。

アプリの権限
マルウェアアプリケーションの権限

  • android.permission.RECORD_AUDIO
  • android.permission.SEND_SMS
  • android.permission.READ_CONTACTS
  • android.permission.READ_SMS
  • android.permission.READ_PHONE_STATE
  • android.permission.RECEIVE_SMS
  • android.permission.WRITE_EXTERNAL_STORAGE
  • android.permission.CALL_PHONE
  • android.permission.DISABLE_KEYGUARD

このアプリケーションは、SMSとやり取りするために2つのコンポーネント(サービス1つとブロードキャストレシーバー1つ)をエクスポートしています。

アプリの権限
マルウェアアプリケーションのすべての権限

アプリのブロードキャストレシーバー
マルウェアアプリケーションのブロードキャストレシーバー

検出結果をざっと見ると、このアプリケーションはroot化された端末で実行されているかどうかをチェックしていることが分かります。また、デバッグモードになっており、ネットワーク構成の設定を一切実装していません。

アプリの検出結果
アプリケーション概要の検出結果

さらに、スキャナーは暗号に関する重大度「中」の検出結果を2件報告しています。

  • ハードコードされた鍵の使用:
  • ランダムでない初期化ベクトル(IV)の使用

SecretKeyの呼び出し
secretKeyのコード

SecretKeyの呼び出し
secretkey_init_taint

テイントトレースから、SMSの送信時、キーログ、端末ログのデータを暗号化するためにこの暗号化処理が使われていることが分かります。

解析環境を使う

アプリケーション内を移動してその挙動を容易に把握するために、Ostorlabの解析環境を使用します。最初に確認するファイルはAndroidManifestで、アプリケーションのメインアクティビティを探します。

manifest_ideの呼び出し
manifest_ide

メインアクション
main_activity

メインアクティビティの名前はcom.rduzmauwns.jieliysagr.aJtzcrQbcpuSYfzです。

そこで、静的解析セクションを使ってそのソースコードを解析します。

メインアクティビティの静的コード
static_code_main_activity

OnCreateメソッドでは、悪意ある動作を開始する前に一連のチェックを行っています。

メインアクティビティのonCreate
on_create_main_activity

  • 1つ目のチェックは、端末の国・地域コードに関するものです。端末がロシアまたはタジキスタンのものである場合、マルウェアは実行されません。

isEmulatorのコード
isEmulator_code

  • 2つ目のチェックは、実行コンテキストに関するものです。実機上で実行されていない場合、マルウェアは実行されません。

こうしたチェックを回避するスクリプトや方法は数多く存在するため、アプリケーションが実機かどうかをどのようにチェックしているのかを確認するのが私は好きです。

call stackタブを使い、isEmulatorを確認して、最後に行われたチェックを見てみます。

このケースでは、端末の組み込みパラメーターに、「generic」、「Emulator」、「Genymotion」などの既知の値が含まれていないかをチェックしています。

エミュレーターのチェック2
emulator_check_2

マルウェアは起動すると、自身のアイコンを無効化し、バックグラウンドで実行されます。

アプリの挙動の変更
change_app_behavior

そのために、アプリケーションはパラメーター2、1を指定してsetComponentEnabledSettingsメソッドを使用します。

無効化状態の設定
enable_state_disabled

DONT_KILL_APPのドキュメント
dont_kill_app_doc

この段階で、マルウェアアプリケーションはバックグラウンドで実行されています。

準備は整いました。始めましょう。

マルウェアはcom.rduzmauwns.jieliysagr.vCdmvEHqFNkYwsBという新しいサービスを開始します。

サービス開始のコード
start_service_code

このサービスはjava.lang.Runnableインターフェースを実装しており、そのコードは別スレッドで実行されます。

このスレッドで、スパイ用メソッドの一つであるSendNewUserを開始します。

SendNewUserの呼び出し元グラフ
senduser_called_graph

このメソッドは被害者の端末の詳細情報を取得し、サーバーにPOSTします。

SendNewUserの呼び出し先グラフ
senduser_callee_graph

このマルウェアは、USSD(Unstructured Supplementary Service Data)通話を発信することで送金を行えます。 USSDをご存じない方のために説明すると、USSDはGSM携帯電話がサービスプロバイダーのコンピューターと通信するために使用する通信プロトコルです。ユーザーは、アカウント残高の確認、通話料金のチャージ、送金、各種サービスへの加入など、さまざまなサービスを利用できます。

USSD送信のコード
send_usd_code

うまい(あるいは困った)ことに、このマルウェアはダイヤラーのユーザーインターフェースを使わずに発信します。

USSDの隠れた発信
ussd_hidden_call

このマルウェアは、ほかにも次のことを行います。

  • SmsSender()メソッドを使って、複数パートからなるテキストベースのSMSを送信する
  • 被害者の端末にあるSMSを盗む
  • callForward()メソッドを使い、被害者への着信をサーバーから指定された番号に転送する
  • linkopen()メソッドにより、ユーザーの操作なしに端末のブラウザーでURLを開く
  • アプリケーションのログを盗む
  • VNC Viewerを使い、感染した端末の画面をリモートで閲覧・操作する

VNCの起動
vnc_open_code

アタックサーフェス

データを送信し、コマンドを受信するためのエンドポイントは、マルウェア内に直接定義されていません。マルウェアはそれらを、説明欄に暗号化されたエンドポイントアドレスが記載されたTelegramチャンネルから受け取ります(先ほどスキャナーが報告した、ECBモードを使用している暗号化処理です)。

Telegramチャンネルのコード
telegram_channel_code

このマルウェアには、主に3つのエンドポイントがあります。

  • henkormerise.com
  • banerrokutepera.com
  • heikenmorgan.com

まとめ

時が経つにつれ、銀行を狙う脅威のリスクは高まり、より高度になっています。GodFatherマルウェアはその代表的な例です。このバージョンのマルウェアには、機密データの収集を可能にする悪意ある機能が含まれています。

結論として、マルウェア解析は細部への注意を必要とする魅力的な作業です。GodFatherマルウェアは、銀行業界や暗号資産業界が直面する進化し続ける脅威の一例にすぎません。このマルウェアがどのように動作し、どの程度の被害をもたらし得るのかを理解することで、こうした攻撃から自分自身と端末をよりよく守ることができます。