フォトアプリやゲームアプリを装うアドウェアをGoogle Playで確認、800万回以上ダウンロード

今日のモバイルプラットフォームは、ユーザにとって場所や時間を問わず手軽に利用可能なものとなっています。ネット詐欺師やサイバー犯罪者が目を付けて、収益のために利用しようと考えるのは想定可能な成り行きです。 例えば、無害を装うアドウェアをユーザにインストールさせることで、広告収益を上げることが可能になります。アドウェアは煩わしく迷惑なものにすぎないと考えられているかもしれませんが、モバイル広告詐欺およびアドウェア関連の事例は2018年広範的に確認されており、企業に多額の経済的実害をもたらしています。

トレンドマイクロは、GooglePlay上に確認されたアドウェアの事例をこれまでも報告してきましたが、2019年8月8日、そのようなアドウェアを再び確認しました。弊社はこのアドウェアを「AndroidOS_Hidenad.HRXH」として検出します。このアドウェアはこれまでに確認されてきた典型的なアドウェアファミリとは違い、閉じるのが難しい広告を頻繁に表示するだけでなく、タイムスタンプを利用して検出回避を行うユニークな手法を採用しています。

このアドウェアが埋め込まれた不正アプリは、Google Play上でフォトアプリやゲームアプリとして85個確認され、合計800万回以上のダウンロードを記録していました。 弊社はこの調査結果をGoogleに開示し、これらのアプリはすでにGoogle Playストアから削除されています。

図1:アドウェアが埋め込まれた不正アプリの例
図1:アドウェアが埋め込まれた不正アプリの例

■タイムスタンプを利用した検出回避方法

最初にアプリが立ち上がると、以下の2つのタイムスタンプが記録されます。

  • ユーザデバイスの現在時刻(システム時刻)である「installTime」
  • 正規のAPI「RESTful API」を利用して取得されるネットワーク時刻である「networkInstallTime」。このタイムスタンプ「networkInstallTime」は、ネットワーク時刻は現在時刻と違いデバイス上で変更不可であることを理由に検出回避を目的として使用されます。

図2: 現在時刻(システム時刻)を記録するコード
図2: 現在時刻(システム時刻)を記録するコード

図3:「RESTful API」を介してネットワーク時刻を取得するコード
図3:「RESTful API」を介してネットワーク時刻を取得するコード

その後、インテントアクション「android.intent.action.USER_PRESENT」に対するブロードキャストレシーバー(BroadcastReceiver)を動的に登録します。ブロードキャストレシーバーは、ブロードキャストからの通知を受信するコンポーネントです。このコンポーネントの登録によって、ユーザがデバイスを起動(ロック解除)したかどうか監視することが可能になります。

図4:ブロードキャストレシーバーを登録するコード
図4:ブロードキャストレシーバーを登録するコード

アドウェアは、ユーザがデバイスのロックを解除する度にいくつかの確認を行います。まず現在時刻(デバイスのシステム時刻)と「installTime」として保存されたタイムスタンプを比較します。次に、RESTful APIを介して取得される現在のネットワーク時刻と「networkInstallTime」として保存されたタイムスタンプを比較します。これによって、アプリがインストールされてから、ディレイタイムとして設定されている30分以上が経過したかどうかを判断します。アプリの時間は「networkInstallTime」を利用するだけで設定できるため、ネットワーク時間を利用することはタイムベースの検出や従来のサンドボックスで採用されているトリガーをある程度回避するのに役立ちます。

図5: 「installTime」および「networkInstallTime」を介して時間を確認するコード
図5: 「installTime」および「networkInstallTime」を介して時間を確認するコード

アドウェアは、アプリがインストールされてから30分以上経過したと判断すると、アンインストールされるのを防ぐためにホーム画面のアイコンを消し、かわりにショートカットを作成します。ショートカットが作成される前にユーザに通知する機能が有効になっていない限り、この不審な挙動がユーザに気づかれる可能性は低いでしょう。これで、「アンインストール」の部分にアイコンをドラッグアンドドロップしてアンインストールされることを阻止します。さらに、アイコンを消すためにアプリのランタイム動作の検査または変更を可能にするJavaリフレクションが利用されていますが、base64でAPI文字列をエンコードし検出を回避しています。

図6:ショートカットが作成されたデバイスのホーム画面
図6:ショートカットが作成されたデバイスのホーム画面

図7:Javaリフレクションを使用してアプリのアイコンを非表示にするコード
図7:Javaリフレクションを使用してアプリのアイコンを非表示にするコード

■全画面広告を表示し、遠隔から設定変更も可能

このアプリは、もう一つブロードキャストレシーバーをandroid.intent.action.USER_PRESENTインテントのために動的に登録し、ユーザがデバイスのロックを解除したかどうかを確認します。解除が確認されると、ユーザデバイスの画面に広告が表示されます。前述のアイコンを非表示にする手法と同様、広告を表示する前に時間の確認が行われ、タイムスタンプ「installTime」と「networkInstallTime」を使用してインストールされてから経過した時間を特定します。さらに、同じ広告が表示される頻度を減らすために最後に表示された広告の確認も行います。

図8:広告を表示するための ブロードキャストレシーバーを登録するコード
図8:広告を表示するための ブロードキャストレシーバーを登録するコード

図9
図9

図10
図10

図9、10:広告を表示する前に時間確認を行うコード

このようにして、なりすましたアプリの機能を実装してはいるものの、図11に示されているように広告が全画面で表示されることになります。 ユーザは、広告を閉じるために、またはアプリに戻る前に、広告を最後まで見る必要があります。 さらに、広告を表示する頻度はデフォルトで5分に設定されていますが、その頻度は作成者が遠隔から設定できるため、ユーザにとっての煩わしさが増大する可能性もあります。

図11:全画面で表示される広告の例
図11:全画面で表示される広告の例

■被害に遭わないためには

モバイル機器に侵入するアドウェアを防ぐ方法はいくつか挙げられます。例えば、いくつかの最新のAndroidデバイスにはホーム画面でのショートカットの作成を制限する機能が実装されています。この機能を利用することで、ショートカットが作られる前に不正アプリをアンインストールすることが可能です。Android 8.0以降のバージョンのデバイスでは、アプリによるショートカットの作成を許可する前にユーザの確認を求める機能が実装されています。今回の不正アプリはまず自身のアイコンを隠し、ホーム画面にショートカットを生成しますが、ユーザがそのような機能によってショートカットの作成の許可を求められれば、インストールの際の異常な動作に気づきやすいと考えられます。また、モバイル機器を保護するためにセキュリティ対策のベストプラクティスを講じるだけでなく、インストールする前にアプリのレビューをよく読んで、不審な動作が見られないかを確認することも効果的です。

図12:アドウェアが埋め込まれていたアプリのレビューの例
図12:アドウェアが埋め込まれていた不正アプリのレビューの例

■トレンドマイクロの対策

トレンドマイクロでは、モバイル環境での総合セキュリティ対策として、個人利用者向けには「ウイルスバスターモバイル」、法人利用者向けには「Trend Micro Mobile Security™」を提供しています。これらの製品ではトレンドマイクロのクラウド型セキュリティ基盤「Trend Micro Smart Protection Network(SPN)」の機能である「Mobile App Reputation(MAR)」技術や「Web レピュテーション(WRS)」技術により、不正/迷惑アプリの検出や、関連する不正 Webサイトのブロックに対応しています。

Trend Micro Mobile Security」は、モバイルデバイス、アプリケーション、データの可視化と制御を標準装備の単一コンソールで実現するとともに、脆弱性攻撃や不正アクセスから端末を保護し、マルウェアや不正なWebサイトをブロックします。

■侵入の痕跡(Indicators of Compromise 、IoCs)

侵入の痕跡(Indicators of Compromise、IoCs)はこちらを参照してください。

参考記事:

翻訳: 下舘 紗耶加(Core Technology Marketing, Trend Micro™ Research)