セキュリティ
Gatekeeperは本来の仕事を果たせていないアプリがある
インターネットからダウンロードされ、少なくとも一度は実行されたAppleのmacOSアプリは、悪意あるバージョンにすり替えることが可能だと、2人の研究者が指摘しています。この指摘は、同社の「Gatekeeper」による防御の徹底ぶりに疑問を投げかけるものです。
Appleは説明の中で、「ユーザーがApp Store以外からアプリ、プラグイン、インストーラーパッケージをダウンロードして開くと、Gatekeeperはそのソフトウェアが身元の確認された開発者によるものであり、既知の悪意あるコンテンツを含まないことをAppleが公証済みであり、かつ改変されていないことを検証する」としています。
セキュリティ研究者のTalal Haj Bakry氏とTommy Mysk氏は、Gatekeeperおよびそれに付随するコード署名の仕組みに抜け穴を発見したと述べています。この抜け穴により、「攻撃者は昇格した権限を必要とせずに、ウェブからダウンロードされた任意のアプリのメイン実行ファイルを密かに置き換えることができる」といいます。
この攻撃を行うには、悪意あるアプリやダウンロードしたスクリプトなど、ユーザー権限でのコード実行手段を攻撃者が確保している必要があります。そのため、リモートの攻撃者が展開できるゼロクリック脆弱性ではありません。とはいえ、この発見はGatekeeperの「門番」としての役割がかなり緩いものであることを示しています。
Bakry氏とMysk氏は、ウェブからダウンロードした(App Storeからではない)macOSアプリを改変することに成功しましたが、Gatekeeperはこれを阻止しませんでした。
Mysk氏のチームが本誌The Registerに語ったところによると、この手法はMac App Storeのアプリには通用しないとのことです。App Storeのアプリはrootユーザーの所有となっているため、現在のユーザー権限で動作するプロセスがそれらを上書きすることはできないためです。
しかし、Brave、Slack、Signal、Visual Studio Codeなど、ウェブからダウンロードされる多くのmacOSアプリには、この危険性が潜んでいます。
この攻撃シナリオが成立するには、ウェブからダウンロードされたアプリが一度実行されていること(これによりGatekeeperが初回の検証を完了させます)と、ユーザー権限のコードを実行できることが条件となります。
Gatekeeperが行う初回検証フェーズは、たとえ管理者権限があったとしても、その後のアプリケーションバンドルへの変更を防ぐことを目的としています。しかしMysk氏のチームは、ダウンロード済みで一度実行されたアプリをtar(ファイルアーカイブユーティリティ)でアーカイブし、元のファイルを削除して悪意あるバージョンに置き換えることで、macOSが再承認を要求しないことを突き止めました。
両氏はこの攻撃の仕組みを実演する動画を公開しています。
Mysk氏のチームによると、攻撃者がGatekeeperを回避するために必要なアクセス権を得る手段は数多くあるといいます。コマンドラインからインストールされるツール、ターミナルにコマンドをコピー&ペーストするよう相手を説得する手口、悪意あるアプリのダウンロードと実行、AIエージェントに対するプロンプトインジェクション攻撃、あるいはnpmやbrewなど他のパッケージマネージャーを介したサプライチェーン攻撃などが挙げられます。
そして、いったんアプリの「偽物」バージョンが仕込まれると、既知のアプリからのものに見えるため、ユーザーが信用しやすい偽の確認画面を表示することで、その悪影響をさらに拡大させることができます。
Tommy Mysk氏は、この問題の正確な原因については確信が持てないとしながらも、キャッシュされた値の保持が関係している可能性があると推測しています。
「アプリを初めて開き、すべての検証チェックを通過すると、macOSはそのアプリを信頼済みとしてマークし、このデータを保存します」と同氏は述べています。
「その後、実行ファイルを改変すると、macOSはバンドルの変更を検知し、その整合性を再検証しようとします。しかし、キャッシュされた信頼の値のせいで、バンドルが変更されているにもかかわらず検証を通過してしまうようです」
Mysk氏のチームはこの発見をAppleに報告しましたが、Appleはこの問題を対応不要として終了させたと伝えられています。
「Appleはこの攻撃を署名済み実行ファイルの『改変』とはみなしていません」とMysk氏のチームは説明しています。「その代わりAppleは、アーカイブ/復元によってアプリバンドルを操作するこの概念実証コードは、アプリバンドル全体を上書きすることになり、その結果としてローカルでビルドされたものとして扱われる、と主張しています」
「ローカルでビルドされたアプリバンドルはmacOSの保護対象にはなりません。KeychainやTCC保護下のディレクトリへのアクセスにシステムの承認プロンプトが必要とされているのはこのためです。そして、ユーザーがそれらを承認してしまうかどうかはソーシャルエンジニアリング攻撃の領域であり、Appleはこれを対象範囲外と考えています」
Appleはコメント要請に応じませんでした。®