Androidマルウェア検出は文脈判定の段階を欠くと精度が崩壊する

電話のバックアップアプリはストレージ、連絡先、SMS、通話履歴へのアクセスを要求します。デバイス管理ツールはそれ以上の権限を求めます。どちらも機械学習ベースのマルウェアスキャナーにかければ、フラグが立って返ってきます。

Drebin、MalScan、MaskDroidを含む、広く研究に用いられているAndroid検出器6種は、Google Playの49カテゴリーから集めた良性テストセットのアプリのうち半数以上でこの結果を示しました。最も成績が悪かったのはLAMDというLLMベースの検出器で、80%のアプリにフラグを立てました。アプリストアの審査や企業導入、ビルドパイプラインの可否判断をこうした検出結果に委ねている人は、実質的には正規ソフトウェアばかりが並ぶキューを処理していることになります。

シンガポールマネジメント大学と南開大学の研究者らは、AndroZooから良性アプリを抽出し、宣言されている危険な権限の数でランク付けした上位270件を用いてこのテストセットを構築しました。このセットに含まれるすべてのアプリは、少なくとも9つの権限を宣言しています。研究者らが開発した検出器PRAXISは、このうち13%にフラグを立てました。

検出器は過去のマルウェアのパターンと照合するだけ

Drebinはマニフェストとコードの特徴をベクトル化し、サポートベクターマシンを訓練します。MalScan、MsDroid、MaskDroidはコールグラフとセンシティブAPIのサブグラフを対象に動作します。いずれも過去のマルウェアから分布を学習し、新しいアプリをその分布への適合度でスコアリングする仕組みです。

権限の幅広さはマルウェアと相関します。しかし同時に、バックアップツールやアンチウイルス、ペアレンタルコントロール、その他デバイスを管理するあらゆるアプリとも相関します。この相関関係が判定を左右してしまうため、権限の範囲が広い正規ソフトウェアが誤った側に分類されてしまうのです。

研究者らはこの失敗の本質を「逸脱は悪意を意味しない」という一言に集約しています。

同じ操作でも、誰がそれを引き起こしたか、そのアプリが何をうたっているかによって評価は正反対になります。メッセージアプリが受信SMSを読み取るのは普通のことです。クラウドバックアップアプリがユーザーの監視なしにバックグラウンドでファイルをアップロードするのも普通のことです。しかし、銀行アプリが密かにSMSを読み取り、その内容を遠隔サーバーに送信していれば、それはOTP傍受攻撃を実行していることになります。しかも、これら3つのケースで使われているAPI呼び出し自体は見た目上まったく同じなのです。

コードに裏付けを取らせる

PRAXISは3段階で動作します。まずマニフェストから権限とコンポーネントを、Sootを通じてバイトコードからセンシティブなAPI呼び出しと暗黙的インテントアクションを、Ghidraを通じてネイティブライブラリから関数名を抽出し、こうして集めた情報一式をLLMに渡して、攻撃者がそれらを使って狙う可能性のある攻撃意図を推測させます。

Image

PRAXISの概要(出典:研究論文)

各攻撃意図は、コード上の裏付けがないまま仮説として返ってきます。第2段階では、この仮説を「エントリー」「ソース」「エフェクト」という枠組みで捉え直し、それぞれの役割に該当する候補関数を検索した上で、呼び出しエッジやコンポーネント間遷移、共有フィールドを通じてその順序で互いに到達可能な組み合わせだけを残します。到達可能な連鎖が見つからない仮説は棄却されます。

第3段階では、生き残った仮説を審査します。バックグラウンドのブロードキャストを通じてのみ到達する挙動は、ユーザーに知られることなく実行されます。画面操作から呼び出される挙動については、その画面が説明している機能と実際の動作が一致しているかどうかが照合されます。

Bank Mellatを装う銀行トロイの木馬の例では、エクスポートされたSMS_RECEIVEDレシーバーからPDU解析、HttpURLConnectionによる書き込みへと至る連鎖が確認され、その上にはFlutter製のログイン画面が被せられている一方で、実際の銀行バックエンドは存在しませんでした。

検出精度を支えているのはたった1つの段階

3段階すべてを実行した場合、PRAXISが見逃すマルウェアサンプルはおよそ9件に1件です。ところが文脈判定の段階を取り除くと、見逃し率は95.3%まで跳ね上がります。

挙動そのものは依然として存在しています。コード上の証拠も依然として存在しています。しかし、同じ材料を単純な判定プロンプトに渡すと、モデルはほとんどすべてを素通りさせてしまいます。検出精度の大部分を支えているのは最終段階のプロンプトであり、それより前の段階はすべてこのプロンプトへの入力を用意しているに過ぎません。

残された課題

アプリ固有の関数をすべて要約するコストは、検出モデル自体の処理コストを差し引いても1アプリあたり約$0.56かかります。この価格は、1件のサンプルを調べるアナリストの用途には見合っていますが、ストアが大量の申請アプリをスキャンする用途には見合いません。

判定段階ではUIのテキスト、アプリのラベル、パッケージ名、逆コンパイルされた識別子を読み取ります。この4つはすべて攻撃者が制御できる要素です。SMS権限をもっともらしく説明するログイン画面は、文脈推論そのものを直接攻撃する手口であり、そうした攻撃者を想定した評価は今回の研究には含まれていません。

さらに、訓練データの問題もあります。比較対象となった学習ベースの検出器は2021年から2023年までのアプリで再訓練されていますが、テストには2026年に至るまでのサンプルが用いられています。PRAXISはDeepSeek-V4-Pro、GPT-5.2、GPT-5.4-miniの上で動作しますが、これらのモデルの訓練コーパスには、これらのサンプル自体と、著者らが正解データの構築に用いたKasperskyやESETの公開レポートの両方が含まれている可能性があります。妥当性への脅威を論じたセクションでは、データセットの幅、アノテーターの主観性、デコーディングのばらつきについては触れられていますが、汚染(コンタミネーション)の問題には言及がありません。

100件の良性アプリのうち13件は、依然として悪性と判定されてしまいます。これは人間によるレビューを前提としたキューとしてなら成立しますが、同じ数字を基準にストアの審査ゲートを構築すれば、正常に動作するソフトウェアが棚から下ろされることになります。

翻訳元: https://www.helpnetsecurity.com/2026/07/29/android-malware-detection-research/

ソース: helpnetsecurity.com