正規アプリの署名を維持したまま内容を改変できるAndroidの脆弱性「Janus」
タレコミ by headless
headless 曰く、
正規のAndroidアプリの署名を維持したまま内容を改変できるというAndroidの脆弱性「Janus」を発見者のGuardSquareが解説している(GuardSquareのブログ記事、 BetaNewsの記事、 The Registerの記事)。
Androidのアプリケーションパッケージ(APK)ファイルはZIPファイルであり、ZIPエントリの外側に任意のデータを挿入できる。しかしJAR署名スキームではZIPエントリのみを使用して署名の整合性を確認するため、ZIPエントリの外にデータが挿入されても署名は有効のままとなる。一方、Dalvik実行可能ファイル(DEX)は末尾に任意のデータを追加できる。そのため、DEXファイルの末尾にAPKファイルをつなげて1つのファイルにすることでDEXファイルとしてもAPKファイルとしても有効なファイルとなり、署名も維持される。
AndroidランタイムはAPKファイルからDEXファイルを抽出して実行するが、ファイルの種類を識別する際にDEXヘッダーを見つけるとDEXファイルとして実行してしまうのだという。Androidでは署名が異なるAPKファイルでインストール済みアプリをアップデートすることはできないが、悪意あるDEXファイルを正規のAPKファイルと組み合わせることで、正規のアップデートとしてインストールさせることが可能となる。こういったAPKファイルがGoogle Playで配布されることはないものの、ユーザーをだましてインストールさせることで、高い権限を持つシステムアプリを置き換えたり、バンキングアプリを偽物に置き換えたりといった攻撃が可能だ。
Android 5.0以降がJanusの影響を受けるが、Android 7.0以降で利用可能なAPK署名スキームv2ではAPKファイル全体が署名の検証対象になるため、v2署名を使用したアプリは影響を受けない。GuardSquareではこの問題を7月31日にGoogleへ報告しており、12月のAndroidセキュリティアップデートでCVE-2017-13156として修正されている。
正規アプリの署名を維持したまま内容を改変できるAndroidの脆弱性「Janus」 More ログイン