macOS Gatekeeper / Quarantine / XProtect
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2Fpentest.eu%2FRENDER_WebSec_10fps_21sec_9MB_29042024.gif&width=768&dpr=4&quality=100&sign=bc0743d1&sv=1)
Gatekeeper
Gatekeeperは、Macオペレーティングシステム向けに開発されたセキュリティ機能で、ユーザーが信頼できるソフトウェアのみを実行することを保証するために設計されています。これは、ユーザーがApp Store以外のソースからダウンロードして開こうとするソフトウェア(アプリ、プラグイン、インストーラーパッケージなど)を検証することによって機能します。
Gatekeeperの主要なメカニズムは、その検証プロセスにあります。ダウンロードされたソフトウェアが認識された開発者によって署名されているかを確認し、ソフトウェアの真正性を保証します。さらに、ソフトウェアがAppleによって公証されているかを確認し、既知の悪意のあるコンテンツが含まれておらず、公証後に改ざんされていないことを確認します。
加えて、Gatekeeperは、ユーザーがダウンロードしたソフトウェアを初めて開くことを承認するよう促すことで、ユーザーの制御とセキュリティを強化します。この保護機能は、ユーザーが無害なデータファイルと誤解して実行してしまう可能性のある有害な実行可能コードを誤って実行するのを防ぐのに役立ちます。
アプリケーション署名
アプリケーション署名、またはコード署名は、Appleのセキュリティインフラストラクチャの重要な要素です。これらは、ソフトウェアの著者(開発者)の身元を確認するために使用され、コードが最後に署名されて以来改ざんされていないことを保証します。
以下はその仕組みです:
アプリケーションの署名: 開発者がアプリケーションを配布する準備が整ったとき、彼らはプライベートキーを使用してアプリケーションに署名します。このプライベートキーは、Apple Developer Programに登録した際にAppleが開発者に発行する証明書に関連付けられています。署名プロセスは、アプリのすべての部分の暗号ハッシュを作成し、このハッシュを開発者のプライベートキーで暗号化することを含みます。
アプリケーションの配布: 署名されたアプリケーションは、開発者の証明書とともにユーザーに配布されます。この証明書には、対応する公開鍵が含まれています。
アプリケーションの検証: ユーザーがアプリケーションをダウンロードして実行しようとすると、彼らのMacオペレーティングシステムは開発者の証明書から公開鍵を使用してハッシュを復号化します。その後、アプリケーションの現在の状態に基づいてハッシュを再計算し、これを復号化されたハッシュと比較します。一致すれば、アプリケーションは開発者が署名して以来変更されていないことを意味し、システムはアプリケーションの実行を許可します。
アプリケーション署名は、AppleのGatekeeper技術の重要な部分です。ユーザーがインターネットからダウンロードしたアプリケーションを開こうとすると、Gatekeeperはアプリケーション署名を検証します。これがAppleによって知られた開発者に発行された証明書で署名されており、コードが改ざんされていなければ、Gatekeeperはアプリケーションの実行を許可します。そうでない場合、アプリケーションはブロックされ、ユーザーに警告されます。
macOS Catalina以降、GatekeeperはアプリケーションがAppleによって公証されているかどうかも確認します。これにより、セキュリティの追加層が加わります。公証プロセスは、アプリケーションに既知のセキュリティ問題や悪意のあるコードがないかをチェックし、これらのチェックに合格すると、AppleはGatekeeperが検証できるチケットをアプリケーションに追加します。
署名の確認
いくつかのマルウェアサンプルを確認する際は、常にバイナリの署名を確認するべきです。署名した開発者がすでにマルウェアに関連している可能性があるためです。
Notarization
Appleのノータリゼーションプロセスは、ユーザーを潜在的に有害なソフトウェアから保護するための追加の安全策として機能します。これは、開発者が自分のアプリケーションを Appleのノータリーサービスに審査のために提出することを含み、App Reviewと混同しないでください。このサービスは、自動化されたシステムであり、提出されたソフトウェアに悪意のあるコンテンツやコード署名に関する潜在的な問題がないかを精査します。
ソフトウェアがこの検査を問題なく通過すると、ノータリーサービスはノータリゼーションチケットを生成します。開発者はその後、このチケットを自分のソフトウェアに添付する必要があり、このプロセスは「ステープリング」と呼ばれます。さらに、ノータリゼーションチケットはオンラインでも公開され、Appleのセキュリティ技術であるGatekeeperがアクセスできるようになります。
ユーザーがソフトウェアを初めてインストールまたは実行する際、ノータリゼーションチケットの存在 - 実行可能ファイルにステープルされているか、オンラインで見つかるかにかかわらず - GatekeeperにそのソフトウェアがAppleによってノータリゼーションされたことを通知します。その結果、Gatekeeperは初回起動ダイアログに説明的なメッセージを表示し、そのソフトウェアがAppleによって悪意のあるコンテンツのチェックを受けたことを示します。このプロセスにより、ユーザーは自分のシステムにインストールまたは実行するソフトウェアのセキュリティに対する信頼が高まります。
Enumerating GateKeeper
GateKeeperは、信頼されていないアプリの実行を防ぐいくつかのセキュリティコンポーネントであり、またそのコンポーネントの一つでもあります。
GateKeeperのステータスを確認することができます:
注意してください。GateKeeperの署名チェックは、Quarantine属性を持つファイルに対してのみ実行され、すべてのファイルに対して行われるわけではありません。
GateKeeperは、設定と署名に基づいてバイナリが実行可能かどうかを確認します:
この設定を保持するデータベースは**/var/db/SystemPolicy
**にあります。rootとしてこのデータベースを確認することができます:
注意してください、最初のルールは "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
**からのハッシュです。
または、次の情報をリストすることもできます:
The options --master-disable
and --global-disable
of spctl
will completely 無効化 these signature checks:
完全に有効にすると、新しいオプションが表示されます:
アプリがGateKeeperによって許可されるかどうかを確認することができます:
新しいルールをGateKeeperに追加して、特定のアプリの実行を許可することが可能です:
Quarantine Files
アプリケーションやファイルをダウンロードすると、特定のmacOS アプリケーション(ウェブブラウザやメールクライアントなど)がダウンロードしたファイルに、一般に「隔離フラグ」として知られる拡張ファイル属性を付加します。この属性は、ファイルが信頼できないソース(インターネット)から来ていることを示すセキュリティ対策として機能し、潜在的なリスクを伴います。しかし、すべてのアプリケーションがこの属性を付加するわけではなく、一般的なBitTorrentクライアントソフトウェアは通常このプロセスを回避します。
隔離フラグの存在は、ユーザーがファイルを実行しようとしたときにmacOSのGatekeeperセキュリティ機能に信号を送ります。
隔離フラグが存在しない場合(一部のBitTorrentクライアントを介してダウンロードされたファイルなど)、Gatekeeperのチェックは行われない可能性があります。したがって、ユーザーは、あまり安全でないまたは未知のソースからダウンロードしたファイルを開く際には注意を払うべきです。
コード署名の 有効性を確認することは、コードとそのバンドルされたリソースすべての暗号学的ハッシュを生成することを含むリソース集約的なプロセスです。さらに、証明書の有効性を確認するには、発行後に取り消されているかどうかを確認するためにAppleのサーバーにオンラインチェックを行う必要があります。このため、アプリが起動するたびに完全なコード署名と公証のチェックを実行することは非現実的です。
したがって、これらのチェックは隔離属性を持つアプリを実行する際にのみ実行されます。
この属性は、ファイルを作成/ダウンロードするアプリケーションによって設定される必要があります。
ただし、サンドボックス化されたファイルは、作成するすべてのファイルにこの属性が設定されます。そして、サンドボックス化されていないアプリは自分で設定するか、Info.plistにLSFileQuarantineEnabledキーを指定することで、システムが作成されたファイルにcom.apple.quarantine
拡張属性を設定するようにできます。
さらに、**qtn_proc_apply_to_self
**を呼び出すプロセスによって作成されたすべてのファイルは隔離されます。また、API **qtn_file_apply_to_path
**は指定されたファイルパスに隔離属性を追加します。
そのステータスを確認し、有効/無効にする(rootが必要)ことが可能です:
あなたはまた、ファイルが隔離の拡張属性を持っているかどうかを確認することができます:
拡張属性の値を確認し、次のコマンドを使用して隔離属性を書き込んだアプリを特定します:
実際、プロセスは「作成したファイルに対して隔離フラグを設定できる」(作成したファイルにUSER_APPROVEDフラグを適用しようとしましたが、適用されませんでした):
Last updated