macOS Gatekeeper / Quarantine / XProtect
Gatekeeper
Gatekeeperは、Macオペレーティングシステム向けに開発されたセキュリティ機能で、ユーザーがシステム上で信頼されたソフトウェアのみを実行することを保証するために設計されています。ユーザーがApp Store以外のソースから(アプリ、プラグイン、またはインストーラーパッケージなど)ダウンロードして開こうとするソフトウェアを検証することで機能します。
Gatekeeperの主要なメカニズムは、その検証プロセスにあります。ダウンロードしたソフトウェアが認識された開発者によって署名されているかどうかをチェックし、ソフトウェアの信頼性を確認します。さらに、Appleによってノータライズされているかどうかを確認し、既知の悪意のあるコンテンツが含まれていないこと、およびノータライズ後に改ざんされていないことを確認します。
さらに、Gatekeeperは、ユーザーがダウンロードしたソフトウェアの初めての実行を承認するようユーザーに促すことで、ユーザーの誤って害のある実行可能コードを実行するのを防ぐのに役立ちます。
アプリケーション署名
アプリケーション署名、またはコード署名としても知られるものは、Appleのセキュリティインフラストラクチャの重要な部分です。これらは、ソフトウェアの著者(開発者)の身元を確認し、コードが最後に署名されてから改ざんされていないことを確認するために使用されます。
動作方法は次のとおりです:
アプリケーションの署名: 開発者がアプリケーションを配布する準備が整ったとき、開発者はプライベートキーを使用してアプリケーションに署名します。このプライベートキーは、AppleがApple Developer Programに登録したときに開発者に発行する証明書と関連付けられています。署名プロセスには、アプリのすべての部分の暗号ハッシュを作成し、このハッシュを開発者のプライベートキーで暗号化することが含まれます。
アプリケーションの配布: 署名されたアプリケーションは、開発者の証明書とともにユーザーに配布されます。この証明書には、対応する公開キーが含まれています。
アプリケーションの検証: ユーザーがアプリケーションをダウンロードして実行しようとすると、Macオペレーティングシステムは、開発者の証明書から公開キーを使用してハッシュを復号化します。その後、アプリケーションの現在の状態に基づいてハッシュを再計算し、これを復号化されたハッシュと比較します。一致する場合、それは開発者が署名したときからアプリケーションが変更されていないことを意味し、システムはアプリケーションの実行を許可します。
アプリケーション署名は、AppleのGatekeeperテクノロジーの重要な部分です。ユーザーがインターネットからダウンロードしたアプリケーションを開こうとすると、Gatekeeperはアプリケーションの署名を検証します。Appleが既知の開発者に発行した証明書で署名されており、コードが改ざんされていない場合、Gatekeeperはアプリケーションの実行を許可します。そうでない場合、アプリケーションをブロックしてユーザーに警告します。
macOS Catalinaからは、GatekeeperはアプリケーションがAppleによってノータライズされているかどうかも確認し、追加のセキュリティレイヤーを追加します。ノータライズプロセスは、アプリケーションを既知のセキュリティ問題や悪意のあるコードに対してチェックし、これらのチェックに合格した場合、AppleはGatekeeperが検証できるアプリケーションにチケットを追加します。
署名の確認
いくつかのマルウェアサンプルをチェックするときは、常にバイナリの署名を確認する必要があります。署名した開発者がすでにマルウェアと関連付けられている可能性があるためです。
Notarization
Appleのノータリゼーションプロセスは、ユーザーを潜在的に有害なソフトウェアから保護する追加の保護手段として機能します。これには、開発者が自分のアプリケーションをAppleのノータリサービスによる審査に提出することが含まれます。このサービスは、App Reviewとは異なる自動化システムであり、提出されたソフトウェアを悪意のあるコンテンツやコードサイニングに関する潜在的な問題の有無を調査します。
ソフトウェアがこの検査をパスし、懸念事項がない場合、ノータリサービスはノータリゼーションチケットを生成します。その後、開発者はこのチケットを自分のソフトウェアに添付する必要があります。このプロセスは「ステープリング」として知られています。さらに、ノータリゼーションチケットはオンラインでも公開され、Gatekeeper(Appleのセキュリティテクノロジー)がアクセスできます。
ユーザーがソフトウェアを初めてインストールまたは実行する際、実行可能ファイルにステープリングされているかオンラインで見つかるかにかかわらず、ノータリゼーションチケットの存在により、GatekeeperにそのソフトウェアがAppleによってノータリゼーションされたことが通知されます。その結果、Gatekeeperは初回起動ダイアログに記述的なメッセージを表示し、Appleによる悪意のあるコンテンツのチェックを受けたことを示します。このプロセスにより、ユーザーは自分のシステムにインストールまたは実行するソフトウェアのセキュリティに対する信頼を高めることができます。
Enumerating GateKeeper
GateKeeperは、信頼されていないアプリケーションの実行を防止するいくつかのセキュリティコンポーネントであり、またその1つでもあります。
GateKeeperのステータスを確認することができます:
GateKeeperの署名チェックは、Quarantine属性を持つファイルにのみ実行されることに注意してください。
GateKeeperは、設定と署名に従ってバイナリが実行できるかどうかをチェックします:
この構成を保持するデータベースは**/var/db/SystemPolicy
**にあります。これをルートとして次のコマンドで確認できます:
注意してください、最初のルールは "App Store" で終わり、2番目のルールは "Developer ID" で終わり、前の画像ではApp Storeおよび識別された開発者からのアプリの実行が有効になっていました。 その設定をApp Storeに変更すると、"Notarized Developer ID" ルールが消えます。
GKEタイプのルールも何千もあります:
これらは、/var/db/SystemPolicyConfiguration/gke.bundle/Contents/Resources/gke.auth
、/var/db/gke.bundle/Contents/Resources/gk.db
、および**/var/db/gkopaque.bundle/Contents/Resources/gkopaque.db
**から取得されるハッシュです。
または、前述の情報をリストすることもできます:
オプション**--master-disable
と--global-disable
は、spctl
の署名チェックを完全に無効**にします。
完全に有効にすると、新しいオプションが表示されます:
GateKeeper によってアプリが許可されるかどうかをチェックすることが可能です。
GateKeeperに新しいルールを追加して、特定のアプリケーションの実行を許可することが可能です:
ファイルの隔離
特定のmacOS アプリケーション(Webブラウザやメールクライアントなど)が、アプリケーションやファイルをダウンロードする際に、拡張ファイル属性である一般的に知られている "隔離フラグ" をダウンロードされたファイルに添付します。この属性は、ファイルを信頼できないソース(インターネット)から取得したものとしてマークし、潜在的なリスクを持つ可能性があることを示すセキュリティ対策として機能します。ただし、すべてのアプリケーションがこの属性を添付するわけではなく、たとえば一般的なBitTorrentクライアントソフトウェアは通常、このプロセスをバイパスします。
隔離フラグが存在する場合、ユーザーがファイルを実行しようとすると、macOSのGatekeeperセキュリティ機能が作動します。
隔離フラグが存在しない場合(一部のBitTorrentクライアントを介してダウンロードされたファイルなど)、Gatekeeperのチェックが実行されない可能性があります。したがって、ユーザーは安全でないまたは不明なソースからダウンロードしたファイルを開く際には注意を払う必要があります。
コード署名の有効性をチェックすることは、コードとそのバンドルされたリソースの暗号ハッシュを生成するなど、リソースを多く消費するプロセスです。さらに、証明書の有効性をチェックするには、発行後に取り消されたかどうかをAppleのサーバーにオンラインで確認する必要があります。これらの理由から、アプリケーションを起動するたびに完全なコード署名と公証チェックを実行するのは現実的ではありません。
したがって、これらのチェックは隔離属性を持つアプリを実行するときにのみ実行されます。
この属性は、ファイルを作成/ダウンロードするアプリケーションによって設定する必要があります。
ただし、サンドボックス化されたファイルは、作成されるすべてのファイルにこの属性が設定されます。サンドボックス化されていないアプリケーションは、自分で設定するか、Info.plistでLSFileQuarantineEnabledキーを指定することで、システムにcom.apple.quarantine
拡張属性をファイルに設定させることができます。
さらに、**qtn_proc_apply_to_self
**を呼び出すプロセスによって作成されたすべてのファイルは隔離されます。また、API **qtn_file_apply_to_path
**は指定されたファイルパスに隔離属性を追加します。
状態をチェックして有効/無効にする(ルート権限が必要)ことが可能です。
あるファイルがクォータンティン拡張属性を持っているかどうかを次のようにして見つけることもできます:
拡張属性の値をチェックし、quarantine属性を書き込んだアプリを特定します。
実際にプロセスは「作成するファイルに隔離フラグを設定できる可能性があります」(作成したファイルにUSER_APPROVEDフラグを適用しようとしましたが、適用されませんでした):
Last updated