XProtectとは何か?
XProtectはAppleの内蔵マルウェア対策技術で、2009年のSnow Leopard以降macOSに組み込まれています。署名ベースの検出システムとして動作し、既知のマルウェア署名のデータベースを保持し、ファイルが開かれたとき、実行されたとき、または変更されたときに照合します。
macOS Ventura以降では、XProtectシステムは主に2つの要素で構成されています。1つ目はXProtect本体で、インターネットからダウンロードされたファイルや、ほかの隔離対応アプリ経由で受け取ったファイルを開くときに署名ベースのスキャンを行います。macOSがダウンロードしたファイルに隔離フラグを付けると、そのファイルを開いたタイミングでXProtectのスキャンが実行されます。既知のマルウェア署名に一致した場合、macOSはそのファイルをブロックし、警告を表示します。
2つ目はXProtect Remediatorで、旧来のMalware Removal Toolに代わるものです。XProtect Remediatorは、ファイルが開かれたときだけでなく定期的にバックグラウンドスキャンを実行し、すでにシステムに入っているマルウェアを検出して削除できます。これは、初回実行時にしか脅威を止められなかった元のXProtectに比べて大きな改善です。Remediatorのスキャンは静かに行われ、ユーザー操作は不要です。
AppleはXProtectのシグネチャを、通常のmacOSシステムアップデートとは別のバックグラウンド処理で更新します。これらのシグネチャ更新はSoftware Updateの仕組みを通じて配信され、メジャーなmacOSのバージョンで自動更新を無効にしていても自動的にインストールされます。つまり、ユーザーが何もしなくてもXProtectのマルウェア定義は最新に保たれます。
XProtectの限界は、署名ベースの検出に共通するものです。既に知っているものしか検出できません。新しいマルウェアがまだ解析されておらず、Appleのシグネチャデータベースに追加されていなければ、XProtectは検出しません。新種のマルウェアが野外に現れてからAppleが更新シグネチャを配信するまでには、どうしても時間差があります。XProtectは動作の分析やヒューリスティック検出も行いません。疑わしい振る舞いのパターンではなく、既知の悪意あるコード署名だけを判定します。
Gatekeeperとは何か?
Gatekeeperは、アプリを開くときのmacOSの第一の防御線で、マルウェアの検出ではなく、信頼性の確認に重点を置いています。XProtectが「このファイルは既知の悪意あるものか」を問うのに対し、Gatekeeperは別の問いを投げかけます。「このソフトウェアは、Appleが確認した提供元のものか?」
アプリをダウンロードして開くと、Gatekeeperは2つを確認します。まず、そのアプリが有効なApple Developer ID証明書でコード署名されているかを検証します。コード署名は、アプリを登録済みの開発者に暗号学的に結びつけるもので、開発者が作成してから改ざんされていないことを保証します。署名が無効か、存在しない場合、Gatekeeperはアプリをブロックし、ユーザーに警告します。
次に、Mac App Store以外で配布されるアプリについては、Appleによる公証が済んでいるかを確認します。公証については次のセクションで詳しく扱いますが、要するにAppleの自動システムがアプリをスキャンし、既知のマルウェアや悪意あるコンポーネントが含まれていないことを確認した、という意味です。
Gatekeeperのmacセキュリティ設定は、システム設定の「プライバシーとセキュリティ」で変更できます。標準設定では、App Storeと確認済みの開発元のアプリが許可されます。今では、どこからでもアプリを許可する目に見える選択肢はなくなっており、特定のアプリでGatekeeperを回避したい場合は、そのアプリを右クリックして「開く」を選ぶか、ターミナルのコマンドでGatekeeper全体を無効にするしかありません。Appleは後者を強く推奨していません。
隔離システムはGatekeeperと連携して動作します。Safari、Chrome、メール、メッセージ、そして一般的な多くのアプリのような隔離対応アプリ経由でファイルをダウンロードすると、macOSはそのファイルにcom.apple.quarantineという拡張属性を付与します。この属性が、ファイルを開こうとしたときにGatekeeperの確認を引き起こします。一方、一部のコマンドラインのダウンロードツールや直接のファイルコピーのような、隔離に対応していない経路で届いたファイルには、この属性が付かないことがあり、その場合はGatekeeperの確認が起動しないことがあります。これは、高度なユーザーにも攻撃者にも知られている既知の例外ケースです。
公証(Notarisierung)が全体像を完成させる
公証は、Appleのセキュリティ三本柱の中で最も新しい要素で、macOS Mojaveで導入され、macOS Catalina以降はMac App Store外で配布されるすべてのソフトウェアに必須となりました。これは、ソフトウェアを誰が作ったかを確認するコード署名と、既知のマルウェアを確認するXProtectとの間を埋めるものです。
公証の流れはこうです。開発者は配布前にアプリをAppleの公証サービスへアップロードします。Appleの自動システムがアプリをスキャンして既知のマルウェアを探し、問題のあるコード署名の不備を確認し、承認済みのAPIを使っていて既知の悪意あるコンポーネントを含まないことを検証します。これらの確認を通過すると、Appleは公証チケットを発行し、それがアプリにステープルされるか、オンラインで利用可能になります。通常、この処理は数分で完了します。
ユーザーが公証済みアプリを開くと、Gatekeeperはアプリに付属するステープル済みチケット、またはAppleのサーバーをオンラインで確認することで、公証チケットを検証します。これにより、Appleのシステムがそのソフトウェアを確認し、提出時点で問題を見つけなかったことがわかります。ユーザーには、未確認の開発元に関する不安をあおる警告ではなく、標準的な確認ダイアログが表示されます。
公証は完全なセキュリティレビューではありません。Appleのドキュメントでも明確に述べられています。これは自動スキャンであり、人手によるコードレビューではありません。既知のマルウェアシグネチャを確認し、コード署名の連鎖を検証し、アプリがhardened runtimeを使用していることを確かめます。hardened runtimeは、コードインジェクションや動的ライブラリのハイジャックのような、危険になりうる一部の機能を制限します。しかし、実行時の挙動を解析したり、収集するデータを調べたり、どのようなネットワーク接続を行うかを評価したりはしません。
この違いは重要です。というのも、公証はユーザーに、実態よりも安心感を与えかねないからです。公証済みアプリはAppleの自動確認を通過していますが、それでもユーザーが望ましくないと感じる挙動を行う可能性はあります。たとえば、攻撃的なデータ収集、継続的なトラッキング、広告ネットワークへの接続、あるいは詳細な利用データをサードパーティのサーバーへ送るテレメトリーです。公証が確認するのは、既知のマルウェアがないことまでであって、プライバシーを尊重する挙動があることではありません。これは、プライバシーを重視するユーザーにとって、macOSのセキュリティモデルで最も重要な抜け穴の一つです.
macOSセキュリティがカバーしない部分
XProtect、Gatekeeper、Notarizationが何を対象としていないかを理解することは、何を対象としているかを理解するのと同じくらい重要です。これらの抜けは不具合でも見落としでもなく、それぞれのツールが担う範囲が限られているだけです。ですが、基本的なマルウェア対策だけでなく、プライバシーとセキュリティを重視するユーザーにとって、この抜けは大きな問題です。
送信ネットワーク接続は、macOSのセキュリティ機能ではまったく監視されません。XProtectは、アプリがどのサーバーに接続するかを確認しません。Gatekeeperは、アプリが広告ネットワークにデータを送るかどうかを評価しません。Notarizationは、アプリがどのようなテレメトリーを収集するかを審査しません。アプリがいったんMac上で動き始めれば、インターネット上のどのサーバーにも送信接続を行えますし、AppleのmacOS標準セキュリティ機能がこれを警告したりブロックしたりすることはありません。
トラッカーや分析のブロックは、macOSのセキュリティモデルには含まれていません。検証済みの開発者による、Notarization済みでコード署名されたアプリにも、Facebook SDKによるトラッキング、Google Analytics、Mixpanel、Amplitude、あるいは他の分析や広告の仕組みを含められます。これらの接続はマルウェアではありません。ソフトウェアに意図的に組み込まれた機能です。macOSには、これらを検出したり、報告したり、ブロックしたりする仕組みがありません。
正規のソフトウェアによるプライバシー侵害的な挙動は、こうした保護の対象外です。アプリがクリップボードの内容を読み取ったり、サンドボックスの権限内でファイルシステムの動作を監視したり、利用パターンの詳細なプロファイルを作成したりしても、与えられた権限の範囲内で動いている限り、macOSのセキュリティポリシーに反してはいません。macOSの権限システムは、カメラ、マイク、連絡先など特定のリソースへのアクセスを制御しますが、送信データの転送は制御も監視もしません。
新しいマルウェアやゼロデイ型のマルウェアには、シグネチャが更新されるまでの猶予があります。XProtect Remediatorで反応速度は改善されましたが、まったく新しい脅威がまだ検出されない期間は必ずあります。Gatekeeperを回避するようユーザーを説得するソーシャルエンジニアリング攻撃も、驚くほど一般的な手口ですが、ユーザーが保護を明示的に上書きしてしまうため、コード署名とNotarizationの連鎖全体を無効にしてしまいます。
これらの抜けは理論上の話ではありません。すでにインストールして信頼しているアプリを通じて、すべてのMacユーザーに毎日影響しています。
抜けを埋める: 送信トラフィックの制御
macOSのセキュリティ機能で最も大きな抜けは、送信トラフィックの監視と制御がないことです。Appleは、ソフトウェアが実行される前に正規のものかを確認するツールと、既知のマルウェアを検出するツールを提供しています。しかし、実行後に、正規でNotarization済み、かつGatekeeperが許可したアプリがネットワーク接続を使って何をしているかを見たり制御したりする手段は与えていません。
そこで活躍するのがアプリケーションレベルのファイアウォールです。主に着信接続を制御し、フィルタリング機能も比較的基本的な内蔵macOSファイアウォールとは異なり、送信トラフィック・ファイアウォールは、Mac上のすべてのアプリがインターネットへ試みるすべての接続を監視します。
NetMuteは、この抜けを埋めるために作られています。Mac上のアプリがサーバーへ接続しようとしたとき、それが正規のコンテンツサーバーでも、分析用エンドポイントでも、広告ネットワークでも、正体不明のトラッキング・ドメインでも、NetMuteが接続を遮断し、何が起きているかを正確に表示します。アプリ名、接続先サーバー、接続頻度が見えます。そこから、どの接続でもワンクリックで許可またはブロックできます。
これにより、XProtect、Gatekeeper、Notarizationがそもそも想定していなかった保護層が得られます。ソフトウェアが悪意あるものかを問う代わりに、NetMuteはもっと実用的で、より細かな問いを立てられるようにします: この特定のアプリは、自分が許容できるサーバーに接続しているか? コード署名され、Notarization済みのテキストエディタが、第三者のサーバーへキーストロークの分析データをひそかに送っていたとしても、Appleの基準ではどう定義してもマルウェアではありませんが、知っていれば多くのユーザーがブロックしたくなる挙動です。
送信トラフィック制御の価値は、最初に使った瞬間にすぐ分かります。ほとんどのユーザーは、アプリが裏でどれほど多くの接続を行っているか、そしてその多くがアプリ本来の機能ではなく、トラッキング、広告、データ収集に関連するドメインへ向かっていることに驚きます。
NetMuteは netmute.com から無料でダウンロードでき、Premiumはアプリ内課金の買い切りです。サブスクリプションもアカウントも不要です。macOSの内蔵セキュリティ機能と併用し、それらが開けたままにしている特定の抜けを埋めます。つまり、アプリが外へ送っているものを見える化し、制御できます。