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)の使用


テイントトレースから、SMSの送信時、キーログ、端末ログのデータを暗号化するためにこの暗号化処理が使われていることが分かります。
解析環境を使う
アプリケーション内を移動してその挙動を容易に把握するために、Ostorlabの解析環境を使用します。最初に確認するファイルはAndroidManifestで、アプリケーションのメインアクティビティを探します。


メインアクティビティの名前はcom.rduzmauwns.jieliysagr.aJtzcrQbcpuSYfzです。
そこで、静的解析セクションを使ってそのソースコードを解析します。

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

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

- 2つ目のチェックは、実行コンテキストに関するものです。実機上で実行されていない場合、マルウェアは実行されません。
こうしたチェックを回避するスクリプトや方法は数多く存在するため、アプリケーションが実機かどうかをどのようにチェックしているのかを確認するのが私は好きです。
call stackタブを使い、isEmulatorを確認して、最後に行われたチェックを見てみます。
このケースでは、端末の組み込みパラメーターに、「generic」、「Emulator」、「Genymotion」などの既知の値が含まれていないかをチェックしています。

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

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


この段階で、マルウェアアプリケーションはバックグラウンドで実行されています。
準備は整いました。始めましょう。
マルウェアはcom.rduzmauwns.jieliysagr.vCdmvEHqFNkYwsBという新しいサービスを開始します。

このサービスはjava.lang.Runnableインターフェースを実装しており、そのコードは別スレッドで実行されます。
このスレッドで、スパイ用メソッドの一つであるSendNewUserを開始します。

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

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

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

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

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

このマルウェアには、主に3つのエンドポイントがあります。
henkormerise.combanerrokutepera.comheikenmorgan.com
まとめ
時が経つにつれ、銀行を狙う脅威のリスクは高まり、より高度になっています。GodFatherマルウェアはその代表的な例です。このバージョンのマルウェアには、機密データの収集を可能にする悪意ある機能が含まれています。
結論として、マルウェア解析は細部への注意を必要とする魅力的な作業です。GodFatherマルウェアは、銀行業界や暗号資産業界が直面する進化し続ける脅威の一例にすぎません。このマルウェアがどのように動作し、どの程度の被害をもたらし得るのかを理解することで、こうした攻撃から自分自身と端末をよりよく守ることができます。