脅威の調査

パキスタンのユーザーを標的にした新たな Android スパイウェア

SophosLabs は、トロイの木馬化され、主にパキスタン国内のユーザーを標的にした Android アプリの小規模なクラスターを発見しました。

** 本記事は、 New Android spyware targets users in Pakistan の翻訳です。最新の情報は英語記事をご覧ください。**

SophosLabs は、トロイの木馬化され、主にパキスタン国内のユーザーを標的にした Android アプリの小規模なクラスターを発見しました。攻撃者は正規のアプリ (Google Play ストアからダウンロード可能) に変更を加え、監視とスパイ活動に焦点を当てた悪意のある機能を追加しています。

問題のアプリは正規のアプリと同じ外見で、通常の機能も動作します。違いは、最初にデバイスのプロファイルを作成し、Android Dalvik executable (DEX) ファイルの形式でペイロードをダウンロードするように設計されている点です。DEX ファイルのペイロードには、ユーザーの連絡先や SMS メッセージの内容といった個人情報を密かに盗み出す機能など、悪意のある機能が多数含まれています。アプリは次に、これらの情報をいくつかのコマンドアンドコントロールの Web サイトのうちの 1 つに送信します。これらの Web サイトは東ヨーロッパのサーバー上でホストされています。

利用されたアプリは人気があるわけでも、特定の性質を持っているわけでもなく、選定の基準は独特です。また元のアプリの配布者は、これらのトロイの木馬化されたバージョンについて存在さえ認識しているわけでもないようです。トロイの木馬化されたアプリの中で最も有名なものはパキスタン政府によって公開されている Pakistan Citizen Portal (パキスタン市民ポータル) ですが、SophosLabs が確認している限り、トロイの木馬化されたバージョンが合法的な市場で公開された形跡はありません (SophosLabs は、本記事の投稿前にアプリの発行元であるパキスタン政府にこの情報の開示を複数回試みました)。

The Pakistan Citizen Portal Google Play Store listing
公式アプリである Pakistan Citizen Portal (画像) の悪意のある別バージョンが複数発見されました。

Virustotal records の記録によると、マルウェアサンプルの少なくとも 1 つは、今年の 8 月初旬に初めて登録されたドメインの Web サイト pmdu.info でホストされていました。TLS 証明書は 8 月 9 日にサイトに発行されています。このサイトは Google Play ストアのページのよく出来た模倣で、パキスタン政府がホストする実際のパキスタン市民ポータルページの要素も組み込まれています。とはいえ、完全ではありません。ページ上部のバナー画像は壊れており、一部テキストの右端が途切れています。

また興味深いのが、この Web サイトの著作権についての記載です。

Pakistan Citizen Portal アプリは、PMDU と呼ばれる政府機関によって2019年に作成されましたが、実際の Web サイトは独自の領域でホストされている .gov.pk ドメインに所属します。しかしこのサイトは、地理的にはオランダに設置された IP アドレス 5.2.78.240 でホストされていました。

.infoページには Google Play と Download App という 2 つのボタンがありますが、サイトのソースコードを確認すると、どのリンクをクリックしても .info ドメインでホストされている APK ファイル (悪意のあるバージョンのアプリ) を取得することになります。

ドメインの .info バージョンへのリンクを探しているとき、想定していなかった場所でマルウェアをホストしているドメインへのリンクに遭遇しました。パキスタンの公式政府部門であるパキスタン貿易公社 (TCP) のページの上部です。

このバナーは、パキスタン貿易公社 (TCP) の Web サイトの上部に数週間にわたって表示されていました。

悪意のある Android アプリをホストしているドメイン名のテキストは、パキスタンの商務省の部門の 1 つであるパキスタン貿易公社 (TCP) の Web ページの上にある一つながりの回転バナーの中の 1 つに、目立つように表示されていました。全体が 1 つの大きな静止画であるため、リンクをクリックすることはできませんでした。

マルウェアのターゲットユーザーは、偽の Pakistan Citizen Portal の Web ページからアプリをダウンロードするように指示する SMS メッセージまたはメールでリンクを受信した可能性があります。なぜ偽のドメインを追加するために Web ページを改ざんする必要があったのかは不明です。

厄介なことに、2021 年 1 月 10 日、この記事を公開する準備をしていたころ、TCP の Web ページが「Hacked by 9bandz (9bandz によってハッキング済)」という 1 行のテキストに置き換えられました。

この名前をざっと検索すると、2020 年 10 月以降、同じように改ざんされた少なくとも 93 の Web サイトが見つかり、それらも同様のメッセージに置き換えられていました。同時にあるクライムウェアフォーラム上の 9bands という名前のユーザーも、「ディレクトリとファイルへのフルアクセスを備えた政府の Web シェルを販売します」と投稿しています。

この投稿を、改ざんを行った人物に結び付ける証拠はありません。しかし、相関関係を無視することはできません。

トロイの木馬化された他のアプリ

公式アプリである Pakistan Citizen Portal (com.govpk.citizensportal) アプリに加えて、Pakistan Salat Time (com.tos.salattime.pakistan) と呼ばれるイスラム教徒向けの礼拝時間アプリ、Mobile Packages Pakistan (com.blogspot.istcpublishers.mobilepackagespakistan) という携帯電話のプラン料金比較に使用されるアプリ、Registered SIMs Checker (com.siminformation.checker) という携帯電話の SIM カードの有効性を確認できるユーティリティ、および「消費者への損害保険の直接販売をパキスタンで初めて開始した保険会社」と称する TPL Insurance (com.tpl.insuranceapp) によって公開されたアプリについて、悪意のあるバージョンが見つかりました。

Pakistan Chat (com.PakistanChatMessenger) と呼ばれるアプリは変則的で、同じ名前の正規のアプリを発見することができませんでした。このアプリは ChatGum と呼ばれる正当なチャットサービスの API を利用しているようで、ChatGum サーバーに接続しますが、同時にユーザーのデバイスからデータの監視と抽出を行います。

Malicious android app permissions list
悪意のある保険アプリでは、デバイスに保存されている実質的にすべての個人情報へのアクセスが要求されます。正規のバージョンでは、このような権限は要求されません。

悪意のあるアプリはいずれも、主な機能としてユーザーの監視と個人情報の漏えいを目的としたコードを備えています。アプリを実行した場合、最初にデバイスの一意の IMEI 識別子とタイムスタンプ、およびユーザー名とパスワードの組み合わせ (それぞれ a#def) が、サーバーへの HTTP POST リクエストを使用してコマンドアンドコントロール (C2) サーバーに送信されます。

これらの情報を送信したすぐ後に、アプリは DEX ペイロードを取得し、一連のデータのバーストを HTTP POST へ本格的に開始します。ほとんどの場合、ペイロードの名前は class.dex ですが、トロイの木馬化された TPL Insurance アプリの場合、class_tpl.dex というファイル名となっています。

アプリは DEX ファイルのペイロードをロードしたら、コマンドアンドコントロール (C2) サーバーへデータのアップロードを開始します。このマルウェアが送信する個人情報は、デバイスに関する詳細なプロファイル情報、位置情報、ユーザーの連絡先、テキストメッセージの内容、通話履歴、およびデバイス上の内部ストレージまたは SD カードのディレクトリリストなどです。

Pakistan Salat Time をテストデバイスで数日間実行したまま放置しました。アプリのインストールから 4 日後、デバイスのロックを解除すると、アプリは急速にデータの転送を開始し、メッセージの内容だけでなく、調査の過程で作成されたスクリーンショットが多数保存されていたディレクトリのコンテンツがすべて送信されました。

Pakistan Citizen Portal アプリは、市民 ID カード (CNIC) 番号、パスポートの詳細、Facebook やそのほかのアカウントのユーザー名とパスワードといった情報を入力するようユーザーに求めます。今回のテストでは、これら情報はほかのデータと合わせて盗み出されました。

実行したそれぞれの検体では、スパイウェアを最初にインストールしたときに SMS メッセージ、連絡先、デバイスの詳細情報など、被害者の個人情報へのアクセスを要求します。このプライバシー侵害のような権限要求が、スパイウェアを見抜くヒントになります。

A packet capture of the malware stealing SMS messages
SMS テキストメッセージの内容とデバイスのすべての写真を C2 サーバーに送信している Pakistan Salat Time アプリ

これらのアクセス権限は、ごく限られた条件下では許可することも問題ないかも知れませんが、たとえば以下の Salat Time (イスラム教徒向け礼拝時刻) アプリのように、必要以上にアクセス権限を要求しているアプリは、その要求項目の多さを確認することで注意深いユーザーであれば脅威の兆候を察知することが可能です。

Android permissions comparison between benign and malicious apps
悪意のあるバージョンのアプリは必要以上のアクセス権限を要求しており、これらがアプリの目的を知るヒントになります。比較すると、Pakistan Salat Time の正規のバージョン (左の画像) は、インストール時に特別な許可を必要としません。

偽装されたスパイウェアのコンポーネント

アプリ内の AndroidManifest.xml ファイルは、サービス名やレシーバー名などを決定します。これらのスパイウェアアプリでは、マニフェストファイルにいくつかの追加のサービスとレシーバーがリストされており、未発見の悪意のあるコードのセクションを参照しているようでした。これらのセクションは、将来実装予定の機能のために空けられているものと考えられます。たとえば、サービス名「SoundRecordService」と「CallRecordService」は、アプリによる監視活動を目的としているように見えます。

AndroidManifest.xml 内の追加のサービスとレシーバー

デバイスからデータをアップロードする過程で、マルウェアはこれらの機能を参照するコンフィギュレーションを受け取っていました。コンフィギュレーションは、JSON 形式のプレーンテキストでした。

スパイウェアのコンポーネントは、最終的にアプリにまとめられた 2 つの追加パッケージのうちの 1 つの形式を取っています。com.android.volley または com.android.update という名前です。これは、ライブラリの内容を偽装するためかもしれません。Google 製の com.android.volley という名前の正規の HTTP ライブラリパッケージがあります。中身を自ら確認しない限り、Android のアップデートパッケージとして完全に無害な印象を与える名前です。

ステルスを目的とした設計

今回の攻撃者は、アプリのステルス性能に強いこだわりを持っています。正規のアプリを模倣し、悪意のあるコードを正規のライブラリに偽装するだけでなく、AES とハードコードされたキーを使用して機密性の高い文字列を暗号化しています。文字列には、コマンドアンドコントロール (C2) サーバーアドレスと、スパイウェアがデータを盗み出し、命令を要求する際に使用する URL パスが含まれます。

ボットが使用するプレーンテキストの C2 アドレスとパスは、AES とマルウェアにハードコードされたキーを使用して暗号化されています

被害者に検知されるのを防ぐため、検体の多くは当初、最小限のデータ流出機能しか含まれていませんでした。その後、マルウェアの APK が C2 サーバーでホストされているコンパイル済みの .dexAndroid バイナリをひそかにダウンロードします。この .dex ファイルには、マルウェアが使用する監視用のコードとデータ抽出用のコードのほとんどが含まれています。つまり、このコードはアプリインストール時のセキュリティスキャンでは排除されません。このダウンロード可能な .dex ファイルを利用した手口を使うことで、作成者はスパイウェアの機能をシームレスに更新することもできます。

uploaded pakchat data
マルウェアは、盗み出されたデータ (青色ハイライト) をアップロード前にあらかじめエンコードしています

アプリのステルス性について話を続けると、スパイウェアは C2 サーバーに送信するデータのほとんどを XOR 演算しています。収集されたデータを盗み出すと、アプリは「システムは必要なメンテナンス中です。しばらく経ってからお試しください」などのダイアログボックスや警告メッセージを表示する場合があります。

スパイウェアが SD カードのディレクトリリストを盗み出している様子 (この場合、クリアテキストでの HTTP POST 送信の形式をとっている)

この悪意のあるネットワークの管理者は、模倣アプリとの関連が疑われるドメイン名も登録していました。Pakistan Chat アプリ (およびそのほかのいくつかのアプリ) は、ラトビアのサーバーでホストされているドメイン pakchat.online に接続し、偽の TPL Insurance アプリは、盗んだデータをドメイン tplinsurance にアップロードし、ブルガリアのサーバーでホストされているドメイン tplinsurance.xyz から DEX ファイルを取得しています。パキスタンの Salat Time アプリは、珍しいことに、ダイナミック DNS サービス kv33.zapto.org のホスト名を C2 として使用していました。そのドメインは、米国に配置された IP アドレスで処理されています。

ペイロード配信とデータ抽出に使用される URL、およびそれらが使用する IP アドレス

アプリの入手場所に注意を

このスパイウェアは現在も開発が進んでいます。今回の調査を進める過程で、SophosLabs はスパイウェアのテストバージョンと思われるものも発見しました。これは、マルウェアの作成者がコードを正規のアプリと統合する前にテスト用に使用したと考えられます。

現在の Android では、コードが正当なソースから発信されていることを証明する方法としてアプリが暗号により署名されており、開発者に結び付けられています。ただし、署名されたアプリの証明書が正当でないか、検証されていない場合、Android はこれをエンドユーザーに知らせることは得意ではありません。そのため、ユーザーにとってアプリが実際に正規の開発者によって公開されたものかどうか判断することは困難です。

これにより、攻撃者は人気のアプリの偽のバージョンを開発して公開することができます。多数のアプリストアが存在し、ユーザーが事実上どこからでもアプリをインストールする自由があるため、このような脅威への対応はさらに困難になっています。

このような悪意のあるアプリの被害に遭わないように、ユーザーは Google Play などの信頼できるソースからのみアプリをインストールする必要があります。人気のアプリの開発者は、多くの場合ユーザーを本物のアプリに誘導する Web サイトを持っています。ユーザーは、アプリが正規の開発者によって作られたものかどうかをしっかり確認する必要があります。また、Sophos Intercept X for Mobile などのウイルス対策アプリをインストールして、デバイスとデータを脅威から保護することもおすすめです。

Sophos Intercept X for Mobileは、今回のスパイウェアを Andr/Spy-BDD として検出しています。また、SophosLabs は Github 上にてセキュリティ侵害の痕跡 (IOC) を公開しています。