Androidは、セキュリティに配慮して設計された、優れたOSです。しかし、OSのバージョンやアプリの数が非常に多く、全部に目を配れというのは無理な注文です。そのため、内蔵のセキュリティメカニズムを回避する仕組みがしばしば登場します。Androidをハッキングする最新の手法に「Man-in-the-Disk」と呼ばれるものがありますが、今回はこれについてお話ししましょう。
Androidセキュリティの基盤「サンドボックス」
「すべてのアプリは他のアプリから隔絶されていなければならない」というのがAndroidの大原則です。これを実現するのが、いわゆるサンドボックスです。各アプリとその関連ファイルは、他のアプリがアクセスできない「サンドボックス」の中にあります。
サンドボックスの意図するところは、Androidデバイスが悪意あるアプリに感染しても、健全なアプリによって保存されたデータ(オンラインバンキングアプリのユーザー名とパスワード、メッセージ履歴など)を悪意あるアプリに盗まれないようにすることです。当然ながらハッカーは、サンドボックスのメカニズムを回避する方法を何とかして探し出そうとし、時折成功しています。
DEF CON 26でのスラヴァ・マカヴィーヴ(Slava Makkaveev)氏の講演は、特に危険なところや怪しいところのない権限を持つアプリがサンドボックスをすり抜ける方法についてのものでした。同氏はこの手法を、Man-in-the-Middle攻撃(中間者攻撃)にちなんで「Man-in-the-Disk」(英語記事)と名付けました。
Man-in-the-Disk攻撃の仕組み
Androidには、アプリのファイルが格納されているサンドボックス領域とは別に、共用の外部ストレージがあります。アプリがこのストレージにアクセスするには、「デバイス上の写真、メディア、ファイルへのアクセス」の権限(実質的にはREAD_EXTERNAL_STORAGEとWRITE_EXTERNAL_STORAGEという2つの権限)を利用者から付与されなければなりません。これらの権限は危険なものと見なされないのが普通で、ほぼすべてのアプリがこの権限を要求するため、要求自体は不審なものではありません。
アプリは外部ストレージをさまざまな用途に利用します。たとえば、スマートフォンとコンピューターの間でファイルを送る(またはやりとりする)などです。外部ストレージは、インターネットからダウンロードしたデータを一時的に格納する場所としてもよく使われます。データはディスクの共有部分に書き込まれたのちに、特定のアプリだけがアクセス可能な隔離された領域へ移されます。
アプリの中には、機能拡張のための補完的なモジュール、辞書などの追加コンテンツ、アップデートなどを、その領域に一時的に格納するものがあります。問題は、外部ストレージへの読み取り/書き込み権限を持つアプリであれば、こうしたファイルにアクセス可能であること、これらファイルを変更して何か悪意あるものを追加できるということです。
現実に、ゲームなどの一見無害そうなアプリをインストールしたらスマートフォンが何か厄介なものに感染してしまう、という状況が考えられます。
Androidの開発元は外部ストレージ使用の危険性を把握しており、Android開発者サイトにアプリ開発者向けの対策とヒントを掲載しています。
しかし、すべてのアプリ開発者がこのアドバイスに従っているわけではなく、Google社員や特定のスマートフォンメーカーについても同様です。スラヴァ・マカヴィーヴ氏が発表した例では、Google翻訳、Yandex.Translate、Google音声入力、Google 音声読み上げ、またLG製のシステムアプリとXiaomiブラウザーの脆弱性が悪用されていました。
ところで、Googleのリサーチャーは先日、超有名ゲーム「フォートナイト(Fortnite)」のAndroid版でまさにこのMan-in-the-Disk攻撃が行われていたことを突き止めました(英語記事)。このゲームをダウンロードするには、まず補助アプリをダウンロードする必要があり、この補助アプリがゲームファイルをダウンロードします。何者かがMan-in-the-Disk攻撃を使って、この補助アプリに悪意あるアプリをインストールさせていたことが発覚しました。フォートナイトの開発元であるEpic Gamesはこの脆弱性に気付き、新バージョンのインストーラーを公開しました。フォートナイトをお使いの場合は、バージョン2.1.0以降であれば安全です。フォートナイトをすでにインストール済みの場合は、いったんアンインストールしてから、安全なバージョンを新たにインストールしてください。
Man-in-the-Disk攻撃からAndroidを守るには
マカヴィーヴ氏がデモで取り上げたのは一部の有名アプリのみでしたが、脆弱なアプリは他にも無数にあります。
どうしたら自分を守れるでしょうか。簡単に実行できるヒントをいくつかご紹介します。
- アプリをインストールするときには必ず、Google Playのような公式のストアから入手しましょう。マルウェアが忍び込んでいる可能性がないわけではありませんが、確率はかなり低いですし、マルウェアの駆除が定期的に実施されています。
- スマートフォンやタブレットの設定で、サードパーティ製アプリのインストールを無効にしましょう。不明な提供元からアプリを入手するのは非常に危険です。設定を変更するには、[設定]-[セキュリティ]の順に選択し、[提供元不明のアプリ]をオフにします。※Android 7以前のバージョンの場合
- 信頼できる開発者が作成したアプリを使用しましょう。アプリの評価を確認し、レビューにも目を通しましょう。疑わしいと思ったものは、決してインストールしないでください。
- 不要なものはインストールしないでください。スマートフォンにインストールするアプリは、できるだけ少なくしておきましょう。
- 使わなくなったアプリは忘れずに削除しましょう。
- 信頼できるモバイル向けのセキュリティ製品を使用して、悪意あるアプリがデバイスへ侵入しようとした場合に通知がすぐ表示されるようにしておきましょう。