もっと詳しく

トレンドマイクロでは最近、シリア電子政府サイト上に掲載された悪意あるAndroidマルウェアのサンプルに関する調査を実施しました。トレンドマイクロでは攻撃者グループ「StrongPity(別名:PROMETHIUM)」の犯行の可能性が高いと考えています。また、弊社の知る限り、同グループが攻撃の一環としてAndroid向け不正アプリを使用していることが確認されたのは、今回が初めてです。

本ブログ記事では、Androidマルウェアに関連した同グループの攻撃の戦術・技術・手順(TTP)および今回の攻撃活動の帰属が攻撃者グループ「StrongPity」であると判断した理由について取り上げます。

■調査の端緒と検体の取得

弊社は「MalwareHunter Team」のTwitter上での投稿をきっかけに本サンプルの存在を確認しました。スレッド上でのやり取りによると、シェアされているサンプルはシリア電子政府のAndroidアプリをトロイの木馬化したバージョンで、被害者のデバイスから連絡先リストを窃取し、特定のファイル拡張子をもつファイルを収集していることが分かっています。また、スレッド内での投稿では、悪意あるAPKファイルが水飲み場型攻撃に類似した手口で拡散された可能性があると指摘されています。つまり、攻撃者はシリア電子政府の公式サイトを侵害し、公式のAndroidアプリファイルをトロイの木馬に置き換えたとしています。この攻撃活動を確かめるために、トレンドマイクロはさらなる調査を進めることにしました。

弊社ではまず、悪意あるAPKファイル(https://egov[.]sy/mobile/egov[.]apk)がホストされているURLを確認しました。本稿執筆時点で同サイトよりダウンロード可能なアプリのバージョンはシリア電子政府Androidアプリの正規版で、Twitter上で話題になった上述の悪意あるバージョンのアプリとは異なります。これは、ある時点で悪意あるバージョンのアプリが同サイトから削除されたことを意味しています。

VirusTotalでは、同一のアプリケーション名(“بوابتي”)およびパッケージ名(com.egov.app.*)をもつ他のサンプルが少なくとも6個特定されています。トレンドマイクロは今回の調査でこれら6検体すべてを検証し、それらすべてが悪意あるサンプルではない、との結論に至りました。悪意のないバージョンのアプリ6個は2020年2月から2021年3月までの期間に作成されています。つまり、そのすべてがシリア電子政府のホームぺージ上で入手可能な公式アプリである、というのが弊社の見解です。

Twitterのスレッド上で話題になった悪意あるサンプルはVirusTotal上で入手可能であり、本稿執筆時点において、数件が不正ファイルとして検出されています。一部のセキュリティベンダはこの悪意のあるサンプルの帰属を別の攻撃者グループである「Bahamut(別名:Windshift)」としていますが、弊社ではこれに対して疑念を抱いていました。そして更なる調査の結果、今回の悪意あるサンプルとStrongPityとの関連を示唆するいくつかの事実が判明しました。

悪意あるサンプルの解析
正規アプリをリパッケージして作成されている

悪意あるバージョンのアプリは2021年5月に作成されました。ファイル内のタイムスタンプは2021年5月3日が作成日であることを示しており、ファイルは2021年5月24日にVirusTotalにアップロードされていました。このアプリは異なる証明書で署名されており、シリア政府の正規アプリをリパッケージして作成されています。一方で、正規アプリはすべてこれとは別の証明書で署名されています。

図1:正規アプリ(上)と不正アプリ(下)の署名に使用されている証明書の比較-1
図1:正規アプリ(上)と不正アプリ(下)の署名に使用されている証明書の比較-2
図1:正規アプリ(上)と不正アプリ(下)の署名に使用されている証明書の比較

不正アプリではAndroidManifest.xmlに変更が加えられています。後述する追加されたクラスの参照が組み込まれており、またデバイス上で追加のアクセス権を要求しています(図2)。

図2:不正アプリの変更されたAndroidManifest.xml
図2:不正アプリの変更されたAndroidManifest.xml
追加されたクラス

攻撃者はアプリに下記のクラスを追加しており、その一部は不正アプリ内の変更が加えられたAndroidManifest.xmlでも引用されています(com.egov.app.NetworkStatusService, com.egov.app.Receiver)。

図3:(左)正規アプリのクラス (右)不正アプリに追加されたクラス
図3:(左)正規アプリのクラス (右)不正アプリに追加されたクラス

図3は他の多くのクラスにはランダムに作成されたクラス名・メソッド名がつけられていることを示しています。この命名パターンは難読化ツールによって作成された可能性があります。

追加されたコンポーネント

悪意あるバージョンのアプリには、サービスとレシーバー、二つの主要なコンポーネントが追加されています。このレシーバーは悪意あるサービスを開始します。悪意あるサービスはAndroidサービス(Android Service)と宣言されており、バックグラウンドで長時間のタスクを実行可能なアプリのコンポーネントです。

この悪意あるサービスはクラス名”com.egov.app.NetworkStatusService”で宣言されており、レシーバークラスによって開始されます。「Receiver」の構成およびコードを解析した結果、複数の手法でこのサービス(NetworkStatusService)を開始していることが判明しました。

  • デバイスの接続が変更されるとこのサービスを開始します。「djdeeu」クラスは「CONNECTIVITY_CHANGE」ブロードキャストレシーバーを登録します。
  • このサービスはランチャー機能やそれ以外の登録済み「Receiver」により開始される場合があります。
  • 「アラーム」機能を使用すると、このサービスが開始される場合があります。

このサービス(NetworkStatusService)が開始されると、特定のメッセージ処理を担当する一連のメッセージハンドラー経由で悪意ある機能が実行されます。

バックドアのアーキテクチャ

このサンプルでは、「ハンドラー」機能を利用して、悪意ある動作を引き起こすメッセージをディスパッチしています。メッセージタイプの定義にはカスタマイズした構造体を使用し、7通りのメッセージタイプを列挙して定義しています(図4)。

図4:7通りのメッセージの定義を示すコード
図4:7通りのメッセージの定義を示すコード

各メッセージがハンドラー経由で異なる動作を起動します。各メッセージの目的および動作の要旨は以下の通りです。

MSG_TRIG_ALARM_HEARTBEAT

このメッセージを受信すると、heartbeatメッセージ用の定期的なタスクが設定されます。

MSG_TRIG_ALARM_SYNC

このメッセージを受信すると、syncメッセージ用の定期的なタスクが設定されます。

MSG_HEARTBEAT

このメッセージはheartbeat機能を起動します。heartbeat機能は、C&Cサーバにリクエストを送信し、暗号化されたペイロードで応答を受信します。

暗号化されたペイロードはまず、最初にディレクトリ「<DIR>/.android/water.zip」に保存されます。その後、「water.zip」ファイルが復号され、復号済みのペイロードをディレクトリ「<DIR>/.android/e.zip」に書き込みます。

次に、「e.zip」ファイルを解凍してディレクトリ「<DIR>/.android」に格納し、「config.properties」のファイル名をもつファイルにアクセスします。

最後に、このファイルを読み込んでパース(構文解析)をします。これらのプロパティは、ローカル共有設定の構成設定として抽出および書き込まれ、マルウェアが構成に応じて動作を変更できるようにします。

MSG_SYNC

syncは周期的な動作です。感染したデバイス上で収集したファイルを3,000秒周期でアップロードします。

MSG_SYNCのハンドラーは以下の機能を実行します。

まず最初に、ディレクトリ「<DIR>/.android/.lib2」配下にある全てのファイルを列挙します。次に「<uniqueId>.zip」という名前のzipファイルを作成します(この「unique ID」は実際の「device ID」ではなく、マルウェアがdevice IDの値を基にunique IDを計算しているだけということに注意してください)。その後、ファイルを圧縮ファイルに書き込みます。

最後に、zipファイルをC&Cサーバにアップロードし、圧縮ファイル「<uniqueId>.zip」およびディレクトリ「<DIR>/.android/.lib2」内の全てのファイルを削除します。

MSG_COLLECT

このメッセージのハンドラーは被害者のデバイスからデータを収集します。最初に連絡先、次に利用可能なWi-Fiネットワークに関する情報を収集します。

その後、デバイス内のファイルを検索し、事前に定められたファイル拡張子に一致するファイルをすべて収集します。

.asc .dgs .doc .docx
.edf .gpg .jpeg .jpg
.key .m2r .meo .pdf
.pgp .pir .pkr .pub
.rjv .rms .sem .sit
.skr .sys .xls .xlsx
図5:ファイル収集コードの一部
図5:ファイル収集コードの一部
MSG_TRIG_ALARM_COLLECT

このメッセージを受信すると、「collect message」ハンドラー用の定期的なタスクが設定されます。

MSG_CONNECTIVITY

このメッセージは記述された全てのメッセージを一つずつ送信します。

バックドアのモジュール機能

このサンプルでは、高度にモジュール化されたコンポーネントを使用して、コンポーネントのロード・アンロード用に柔軟性の高いアーキテクチャを作成しています。実際に「onCreate」関数および「onDestroy」関数を見ると、コンポーネントのロード・アンロードに共通のアプローチが使用されていることがわかります。

図6:「onCreate」関数および「onDestroy」関数を示すコードの一部
図6:「onCreate」関数および「onDestroy」関数を示すコードの一部

サンプルで使用されているコンポーネントは以下の通りです。

  • pekmek(Crypt Manager):AESを使用してファイルおよび文字列の復号・暗号化します。
  • Itymcr(Helper Class):一意のIDを計算、構成ファイルを解析、共有設定を書き込む/読み込む、そして暗号化キーを定義、といった多くのユーティリティ関数が含まれています。
  • sadwoo:PowerWakeLockとして使用されるコンポーネント
  • phkyxc:WifiWakeLockとして使用されるコンポーネント
  • tfsdne:heartbeatやsync等のC&C通信用のWrapper
  • itxdrx(Net Manager):HTTPプロトコルの通信処理を担うコンポーネント
  • nhnhpi:C&Cサーバの管理を担うコンポーネント
図7:Itymcr(Helper Class)コンポーネントのコードの一部
図7:Itymcr(Helper Class)コンポーネントのコードの一部
図8:itxdrxコンポーネントのコード

図8:itxdrxコンポーネントのコード

このコンポーネントには初期のC&Cサーバの定義も含まれており、初期値の上書きが可能です。StrongPityのバックドアにはheartbeatコマンドを実行することで構成を更新し、C&Cサーバのアドレスを更新(あるいは削除・追加)する機能が備わっています。

図9:C&Cサーバの追加・削除を操作するコード
図9:C&Cサーバの追加・削除を操作するコード
■今回の攻撃の帰属

トレンドマイクロでは、StrongPityが正規アプリをトロイの木馬化した亜種にリパッケージする方法を確認した後、VirusTotalにて同様の手法でリパッケージされ悪意のあるコンポーネントが内包された他のアプリケーションを検索してみることにしました。

同一の攻撃者による類似したサンプルをさらに解析

弊社は、同一の攻撃者によって作成された他のサンプルを複数発見しました。これらのサンプルは、最後の検体を除き、正規アプリを基にリパッケージされており、類似する悪意あるコードが挿入されていたため、類似性が高いと判断しました。

提出日 SHA256 特定されたC&C サーバ その他
2019年8月2日 374d92f553c28e9dad1aa7f5d334a07dede1e5ad19c3766efde74290d0c49afb upeg-system-app[.]com Kingorootからリパッケージされた可能性あり
2020年6月8日 be9214a5804632004f7fd5b90fbac3e23f44bb7f0a252b8277dd7e9d8b8a52f3 networktopologymaps[.]com Snaptubeからリパッケージされた可能性があるが、596257ef017b02ba6961869d78a2317500a45f00c76682a22bbdbd3391857b5dとは別のもの
2020年6月8日 a9378a5469319faffc48f3aa70f5b352d5acb7d361c5177a9aac90d9c58bb628 networktopologymaps[.]com net[.]cybertik[.]wifiからリパッケージされた可能性あり ( 元のアプリは、イエメンのWebサイト“cybertik[.]net”からダウンロード可能).
2021年6月13日 596257ef017b02ba6961869d78a2317500a45f00c76682a22bbdbd3391857b5d upeg-system-app[.]com Snaptubeからリパッケージされた可能性あり.
202111 75dc2829abb951ff970debfba9f66d4d7c6b7c48a823a911dd5874f74ac63d7b upn-sec3-msd[.]com 機能をテストするためのボタンがあるため、テストサンプルである可能性あり。このサンプルには、他のサンプルには見られなかったいくつかの新機能も含まれる。開発者がバックドアのAPKバージョンの開発に積極的であることを示す

表1:VirusTotalで確認された同様の悪意ある検体

表中に太字で示された最後のサンプルは、StrongPityが使用していたインフラであると複数の研究チームにより過去に特定されたC&Cサーバと通信していました。この類の情報は帰属を特定するための重要な役割を果たしており、これは同時にStrongPityの帰属であると紐づける重要なヒントとなっています。

StrongPityがWindowsシステムを攻撃する際の戦術・技術・手順(TTP)

本稿執筆時点では、StrongPityが攻撃に悪意あるAndroidアプリを使用していることを示すレポートは存在していません。本攻撃の帰属がStrongPityであるという弊社の見解の信頼性を強化するために、StrongPity が用いるWindowsを狙ったサンプルを調査し、その攻撃手法に類似する戦術・技術・手順(TTP)を特定することができるか確認することにしました。

Androidアプリで確認した通り、StrongPityは正規のインストーラーをリパッケージしてトロイの木馬化したバージョンのアプリを作成するという手口を好んで用います。同様に、これらバックドアの主な機能は被害者のコンピュータからファイルを検索・収集し、抜き取ることです。

StrongPityの別のサンプルを一例として見てみましょう。このサンプルはまず、「TrustedInstaller.exe」という名前のファイルをディレクトリ「<DIR>/AppData/Local/Temp」にドロップ・実行します。ドロップされたこのファイルは正規のWinRARインストーラーです。

図10:「TrustedInstaller.exe」ファイルのコード
図10:「TrustedInstaller.exe」ファイルのコード

次にディレクトリ「<DIR>/AppData/Local/Temp/lang_be29c9f3-83we」を作成し、悪意あるファイルをドロップ・実行します。

図11:ディレクトリの作成を示すコード
図11:ディレクトリの作成を示すコード

StrongPityの別のサンプルを調べてみても、ロジックは類似しています。Tempディレクトリに正規のインストーラーをドロップし、ディレクトリを作成して、悪意あるファイルをドロップします。

こちらにWindowsのサンプルとAndroidのサンプルの顕著な類似点を3点列挙します。

  1. どのサンプルも正規アプリを使用し、通常のアプリを装っていました。Androidのサンプルでは正規アプリがトロイの木馬バージョンにリパッケージされている一方、Windowsのサンプルでは元のプログラムが同梱されたトロイの木馬化したインストーラーが使用されていました。
  2. Android・Windowsどちらのサンプルとも感染したデバイスからファイルを収集し、抜き取っていました。
  3. どちらのサンプルにも高度なモジュールが使用されていました。Windowsのサンプルにはスタンドアロンのファイル抜き取り・検索モジュールが備わっていました。この特徴はAndroidファイルでも確認することができました。
今回の攻撃の帰属とStrongPityとの関連性

弊社は悪意あるAndroid向け不正アプリのサンプルの帰属がStrongPityであることを示す複数の手掛かりを発見しました。

今回のサンプルはURL( hxxps://www.upn-sec3-msd[.]com/ProxyServer/service/)と通信をしています。このURLのドメイン名「upn-sec3-msd[.]com」はStrongPityに関する別のレポートで言及されています。

ドメインの命名パターンやドメイン取得手口も非常に似ています。例えば、StrongPityが2020年に使用したドメイン名は、今回特定されたAndroidサンプルで使用されたドメインと同じ命名パターンを持っています。

ドメイン名の一つである「networktopologymaps[.]com」は、Gandiでの登録が期限切れとなった時に購入された可能性があります。このドメインはPorkbunネットワークレジスタ経由で取得されています。これは以前Talosレポートにて言及された「hostoperationsystems[.]com」のドメインに類似しています。このドメインも同じくPorkbunネットワークレジスタ経由で取得されており、ドメインの命名パターンが類似しているという特徴があります。

StrongPityとの関係性を示すもう一つの注目すべき点は、Androidサンプルで見られたファイル拡張子リストです。StrongPityが用いるWindowsシステム向けの亜種におけるファイル拡張子のリストが、今回確認されたAndroidサンプルで見られたリストと類似しています。例えば、弊社がこれまでに調査したWindowsシステム向けのあるサンプルでは、以下のファイル拡張子を対象に収集していました。

.7z .asc .dgs .doc
.docx .gpg .pdf .pgp
.ppt .pptx .rar .rjv
.rms .rtf .sft .tc
.txt .xls .xlsx

前述の通り、StrongPityの攻撃者が悪意あるAndroidアプリを攻撃に使用したことを示すレポートはこれまで公開されていません。しかしながら弊社は、StrongPityのWindowsを狙った攻撃における不正コードの埋め込み手口、そしてトロイの木馬の機能を調査し、これと類似したパターンが複数あることを特定しました。このことから、トレンドマイクロでは今回の攻撃の帰属はStrongPityの可能性があるとの結論に至りました。

StrongPityは新たな悪意あるAndroidアプリを積極的に開発中か

トレンドマイクロは、StrongPityが現在積極的にAndroid用バックドアを開発していると考えています。攻撃者は、今回弊社が特定したテストサンプルを基に、攻撃者はアプリのリパッケージ、Webサイトの侵害、人気アプリに偽装した亜種など、複数の手法を試みていることが分かります。

例えば、Samsungのセキュリティ・サービス・アプリケーションに偽装したアプリで確認された追加機能について、我々が確認したAPKファイルのうち、リパッケージされたアプリケーションはAndroid版トロイの木馬の最初のバージョンにバンドルされており、偽のアプリケーションは次のバージョンのための作業中である可能性があると考えられます。

第2のバージョンでは、攻撃者は追加のコンポーネントを開発・組み込み、また、より多くのメッセージタイプのサポートしていることが確認されました。

攻撃者が定義したタイプは下表の通りです。

メッセージタイプ 内容
MSG_ADD_MODULE 新規モジュールの追加
MSG_GET_MODULE モジュールインスタンスの取得
MSG_DEL_MODULE <DIR>/.android/.li/<module name>配下にあるモジュールファイルを削除
MSG_DEL_APK ダウンロードディレクトリ配下のAPKファイルを削除
MSG_START_MODULES  

表2:攻撃者が定義したメッセージタイプ

このバージョンでは、MSG_COLLECTがMSG_START_MODULESに置き換えられたと考えられます。MSG_START_MODULESは、共有された環境設定からすべてのモジュール名を読み取り、それらを1つずつ起動/初期化するために使用されます。

弊社はMSG_START_MODULESを入手できませんでしたが、解析したコード機能の一部から、このモジュールは被害者のデバイスからデータを収集し、収集したデータをローカルSQLiteデータベースファイルに書き込むように設計されているものと考えています。しかし、このモジュールはどこにも見当たりませんでした。

他にも、バージョン1とバージョン2には他にもいくつか重要な違いがありました。

・バージョン2におけるheartbeatメッセージのハンドラーは、現在ではheartbeatとtaken_config の2つに分割されています。いずれのメッセージもバージョン1と同様、C&Cサーバからの応答を受信し、応答を復号後、ローカルの設定を更新します。

・バージョン2では異なるAES暗号キーが使用されています。

・バージョン2にはScreenReceiverクラスが追加されています。このレシーバーの目的は画面のオン/オフ時に悪意あるサービスを開始することです。

・バージョン2では、デバイスがルート化されている場合、suコマンドを実行する機能があります。root権限の主な用途は、自由にアクセス権を与えることが可能になります。この権限にはアクセシビリティや通知などが含まれます。しかし弊社では、このサンプルがデバイスのroot化を試みた証拠を突きとめることができませんでした。

・バージョン2ではアクセシビリティおよび通知用にコンポーネントが2つ追加されました。

・バージョン2では、収集したデータの保存にSQLiteが使用されています。さらに、zipはもう使用されていません。

・バージョン2では、「MSG_START_MODULE」内で使用される追加モジュールは、heartbeatメッセージまたはtaken_configメッセージ経由でC&Cサーバからダウンロードされます。このモジュールは応答の一部としてディレクトリ「<DIR>/.android/.li」上で解凍された後、実行されている可能性があります。

結論

今回の調査では、シリア電子政府のWebサイト上に掲載されていたAndroid向けマルウェアのサンプルがStrongPityに帰属するものであると示す証拠が得られました。弊社はさらに追加のAndroid向けトロイの木馬ファイルを特定し、攻撃者のTTPおよび使用されたネットワークインフラの類似性に基づき、既存の公的レポートと関連付けることができました。

StrongPityに帰属する悪意のあるAndroidアプリケーションはこれまでに知られていませんでした。しかしながら我々は、StrongPityがAndroidを標的とした新しい悪意のあるコンポーネントを積極的に開発している最中であると考えています。

攻撃者は、攻撃対象にアプリケーションを配信するために複数の方法を模索していると考えられます。例えば、正規のアプリに装ったり、侵害されたWebサイトを水飲み場型攻撃として悪用したりして、悪意のあるアプリをインストールさせようとしています。通常、これらのWebサイトでは、ユーザに対して自分のデバイスに直接アプリケーションをダウンロードするよう要求します。そのためには、ユーザ側で「提供元不明」のアプリケーションのインストールを有効にする必要があります。これにより、Androidシステムの「トラストチェーン(信頼の連鎖)」が回避され、攻撃者が悪意のある追加コンポーネントを容易に配信できるようになります。

侵入の痕跡(Indicators of Compromises, IoCs)

今回の記事に関する侵入の痕跡は、こちらを参照してください。

参考記事:

StrongPity APT Group Deploys Android Malware for the First Time

By Zhengyu Dong, Fyodor Yarochkin, Steven Du

翻訳: 谷口 厚志(Core Technology Marketing, Trend Micro™ Research)

The post 攻撃者グループ「StrongPity」がAndroidマルウェアを用いた標的型攻撃を開始か first appeared on トレンドマイクロ セキュリティブログ.