macOS Gatekeeper / Quarantine / XProtect
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Gatekeeperは、Macオペレーティングシステム向けに開発されたセキュリティ機能で、ユーザーが信頼できるソフトウェアのみを実行することを保証するように設計されています。これは、ユーザーがApp Store以外のソースからダウンロードして開こうとするソフトウェア(アプリ、プラグイン、インストーラーパッケージなど)を検証することによって機能します。
Gatekeeperの主要なメカニズムは、その検証プロセスにあります。ダウンロードされたソフトウェアが認識された開発者によって署名されているかを確認し、ソフトウェアの真正性を保証します。さらに、ソフトウェアがAppleによって公証されているかを確認し、既知の悪意のあるコンテンツが含まれておらず、公証後に改ざんされていないことを確認します。
加えて、Gatekeeperは、ユーザーにダウンロードしたソフトウェアを初めて開くことを承認するよう促すことで、ユーザーの制御とセキュリティを強化します。この保護機能は、ユーザーが無害なデータファイルと誤解して実行してしまう可能性のある有害な実行可能コードを誤って実行するのを防ぐのに役立ちます。
アプリケーション署名、またはコード署名は、Appleのセキュリティインフラストラクチャの重要な要素です。これらは、ソフトウェアの著者(開発者)の身元を確認するために使用され、コードが最後に署名されて以来改ざんされていないことを保証します。
以下はその仕組みです:
アプリケーションの署名: 開発者がアプリケーションを配布する準備が整ったとき、彼らはプライベートキーを使用してアプリケーションに署名します。このプライベートキーは、Apple Developer Programに登録した際にAppleが開発者に発行する証明書に関連付けられています。署名プロセスは、アプリのすべての部分の暗号ハッシュを作成し、このハッシュを開発者のプライベートキーで暗号化することを含みます。
アプリケーションの配布: 署名されたアプリケーションは、開発者の証明書と共にユーザーに配布されます。この証明書には、対応する公開鍵が含まれています。
アプリケーションの検証: ユーザーがアプリケーションをダウンロードして実行しようとすると、彼らのMacオペレーティングシステムは開発者の証明書から公開鍵を使用してハッシュを復号化します。その後、アプリケーションの現在の状態に基づいてハッシュを再計算し、これを復号化されたハッシュと比較します。一致すれば、アプリケーションは開発者によって署名されて以来変更されていないことを意味し、システムはアプリケーションの実行を許可します。
アプリケーション署名は、AppleのGatekeeper技術の重要な部分です。ユーザーがインターネットからダウンロードしたアプリケーションを開こうとすると、Gatekeeperはアプリケーション署名を検証します。Appleが知られた開発者に発行した証明書で署名されており、コードが改ざんされていない場合、Gatekeeperはアプリケーションの実行を許可します。そうでない場合、アプリケーションはブロックされ、ユーザーに警告されます。
macOS Catalina以降、GatekeeperはアプリケーションがAppleによって公証されているかどうかも確認します。これにより、セキュリティの追加層が加わります。公証プロセスは、アプリケーションに既知のセキュリティ問題や悪意のあるコードがないかをチェックし、これらのチェックに合格すると、AppleはGatekeeperが検証できるチケットをアプリケーションに追加します。
いくつかのマルウェアサンプルをチェックする際は、署名を確認することが常に重要です。署名した開発者がすでにマルウェアに関連している可能性があるためです。
Appleのノータリゼーションプロセスは、ユーザーを潜在的に有害なソフトウェアから保護するための追加の安全策として機能します。これは、開発者が自分のアプリケーションを Appleのノータリーサービスに審査のために提出することを含み、App Reviewとは混同しないでください。このサービスは、自動化されたシステムであり、提出されたソフトウェアに悪意のあるコンテンツやコード署名に関する潜在的な問題がないかを精査します。
ソフトウェアがこの検査を問題なく通過すると、ノータリーサービスはノータリゼーションチケットを生成します。開発者はこのチケットを自分のソフトウェアに添付する必要があり、このプロセスは「ステープリング」として知られています。さらに、ノータリゼーションチケットはオンラインでも公開され、Appleのセキュリティ技術であるGatekeeperがアクセスできるようになります。
ユーザーがソフトウェアを初めてインストールまたは実行する際、ノータリゼーションチケットの存在 - 実行可能ファイルにステープルされているか、オンラインで見つかるかにかかわらず - Gatekeeperに対してそのソフトウェアがAppleによってノータリゼーションされたことを通知します。その結果、Gatekeeperは初回起動ダイアログに説明的なメッセージを表示し、そのソフトウェアがAppleによって悪意のあるコンテンツのチェックを受けたことを示します。このプロセスにより、ユーザーは自分のシステムにインストールまたは実行するソフトウェアのセキュリティに対する信頼が高まります。
Sequoiaバージョンから、**spctl
**はもはやGatekeeperの設定を変更することを許可しませんので注意してください。
spctl
は、Gatekeeperと対話し、列挙するためのCLIツールです(XPCメッセージを介してsyspolicyd
デーモンと)。例えば、次のコマンドでGatekeeperのステータスを確認することができます:
GateKeeperの署名チェックは、Quarantine属性を持つファイルに対してのみ実行され、すべてのファイルに対して行われるわけではありません。
GateKeeperは、設定と署名に基づいてバイナリが実行可能かどうかを確認します:
**syspolicyd
**は、Gatekeeperを強制するための主要なデーモンです。これは/var/db/SystemPolicy
にあるデータベースを維持しており、データベースをサポートするコードはこちらとSQLテンプレートはこちらで見つけることができます。データベースはSIPによって制限されておらず、rootによって書き込み可能で、データベース/var/db/.SystemPolicy-default
は、他のデータベースが破損した場合の元のバックアップとして使用されます。
さらに、バンドル**/var/db/gke.bundle
と/var/db/gkopaque.bundle
**には、データベースに挿入されるルールを含むファイルがあります。このデータベースはrootとして次のコマンドで確認できます:
syspolicyd
は、assess
、update
、record
、cancel
などの異なる操作を持つ XPC サーバーも公開しており、これらは Security.framework
の SecAssessment*
API を使用してアクセス可能です。また、xpctl
は実際に XPC を介して syspolicyd
と通信します。
最初のルールが "App Store" で終わり、2 番目のルールが "Developer ID" で終わることに注意してください。また、前の画像では App Store と認識された開発者からのアプリを実行することが有効 でした。 その設定を App Store に 変更すると、"Notarized Developer ID" ルールは消えます。
type 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に新しいルールを追加して、特定のアプリの実行を許可することが可能です:
Regarding kernel extensions, the folder /var/db/SystemPolicyConfiguration
contains files with lists of kexts allowed to be loaded. Moreover, spctl
has the entitlement com.apple.private.iokit.nvram-csr
because it's capable of adding new pre-approved kernel extensions which need to be saved also in NVRAM in a kext-allowed-teams
key.
Upon downloading an application or file, specific macOS applications such as web browsers or email clients attach an extended file attribute, commonly known as the "quarantine flag," to the downloaded file. This attribute acts as a security measure to mark the file as coming from an untrusted source (the internet), and potentially carrying risks. However, not all applications attach this attribute, for instance, common BitTorrent client software usually bypasses this process.
The presence of a quarantine flag signals macOS's Gatekeeper security feature when a user attempts to execute the file.
In the case where the quarantine flag is not present (as with files downloaded via some BitTorrent clients), Gatekeeper's checks may not be performed. Thus, users should exercise caution when opening files downloaded from less secure or unknown sources.
コード署名の 有効性を確認することは、コードとそのバンドルされたリソースの暗号学的ハッシュを生成することを含むリソース集約的なプロセスです。さらに、証明書の有効性を確認するには、発行後に取り消されたかどうかを確認するためにAppleのサーバーにオンラインチェックを行う必要があります。これらの理由から、アプリが起動するたびに完全なコード署名とノータリゼーションのチェックを実行することは非現実的です。
したがって、これらのチェックは隔離属性を持つアプリを実行する際にのみ実行されます。
この属性はファイルを作成/ダウンロードするアプリケーションによって設定される必要があります。
ただし、サンドボックス化されたファイルは、作成するすべてのファイルにこの属性が設定されます。サンドボックス化されていないアプリは、自分で設定するか、Info.plistにLSFileQuarantineEnabledキーを指定することで、作成されたファイルにcom.apple.quarantine
拡張属性を設定させることができます。
Moreover, all files created by a process calling qtn_proc_apply_to_self
are quarantined. Or the API qtn_file_apply_to_path
adds the quarantine attribute to a specified file path.
It's possible to check it's status and enable/disable (root required) with:
ファイルが隔離拡張属性を持っているかどうかを確認することもできます:
拡張属性の値を確認し、次のコマンドで隔離属性を書き込んだアプリを特定します:
実際、プロセスは「作成したファイルに対して隔離フラグを設定できる」(作成したファイルにUSER_APPROVEDフラグを適用しようとしましたが、適用されませんでした):
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)