Translated ['macos-hardening/macos-security-and-privilege-escalation/mac

This commit is contained in:
Translator 2023-11-02 18:02:01 +00:00
parent 1c81075c3e
commit df2dbf977a
1 changed files with 75 additions and 29 deletions

View File

@ -20,7 +20,7 @@
Gatekeeperの主要なメカニズムは、**検証**プロセスにあります。ダウンロードしたソフトウェアが**認識された開発者によって署名**されているかどうかをチェックし、ソフトウェアの信頼性を確認します。さらに、ソフトウェアが**Appleによって公証**されているかどうかも確認し、既知の悪意のあるコンテンツが含まれていないこと、および公証後に改ざんされていないことを確認します。
さらに、Gatekeeperは、ユーザーがダウンロードしたソフトウェアの初回の実行を承認するようユーザーに**プロンプトを表示**することで、ユーザーの制御とセキュリティを強化します。この保護機能により、ユーザーが無害なデータファイルと間違えて実行する可能性のある潜在的に有害な実行可能コードを誤って実行することを防ぎます。
さらに、Gatekeeperは、ユーザーがダウンロードしたソフトウェアの初回の実行を承認するようユーザーに**プロンプトを表示**することで、ユーザーの制御とセキュリティを強化します。この保護機能により、ユーザーが無害なデータファイルと間違えて害のある実行可能コードを誤って実行することを防ぐのに役立ちます。
### アプリケーションの署名
@ -28,17 +28,17 @@ Gatekeeperの主要なメカニズムは、**検証**プロセスにあります
以下は、その動作方法です。
1. **アプリケーションの署名:** 開発者がアプリケーションを配布する準備ができたら、**開発者が秘密鍵を使用してアプリケーションに署名**します。この秘密鍵は、Apple Developer Programに登録するとAppleが開発者に発行する**証明書**に関連付けられています。署名プロセスでは、アプリのすべての部分の暗号ハッシュを作成し、このハッシュを開発者の秘密鍵で暗号化することが含まれます。
1. **アプリケーションの署名:** 開発者がアプリケーションを配布する準備ができたら、**開発者が秘密鍵を使用してアプリケーションに署名**します。この秘密鍵は、開発者がApple Developer Programに登録する際にAppleから発行される**証明書**と関連付けられています。署名プロセスでは、アプリのすべての部分の暗号ハッシュを作成し、このハッシュを開発者の秘密鍵で暗号化することが含まれます。
2. **アプリケーションの配布:** 署名されたアプリケーションは、開発者の証明書と共にユーザーに配布されます。この証明書には、対応する公開鍵が含まれています。
3. **アプリケーションの検証:** ユーザーがアプリケーションをダウンロードして実行しようとすると、Macオペレーティングシステムは開発者の証明書から公開鍵を使用してハッシュを復号化します。その後、アプリケーションの現在の状態に基づいてハッシュを再計算し、これを復号化されたハッシュと比較します。一致する場合、開発者が署名した後にアプリケーションが**変更されていない**ことを意味し、システムはアプリケーションの実行を許可します。
アプリケーションの署名は、AppleのGatekeeperテクロジーの重要な部分です。ユーザーが**インターネットからダウンロードしたアプリケーションを開こうとする**と、Gatekeeperはアプリケーションの署名を検証します。Appleが既知の開発者に発行した証明書で署名されており、コードが改ざんされていない場合、Gatekeeperはアプリケーションの実行を許可します。それ以外の場合、Gatekeeperはアプリケーションをブロックし、ユーザーに警告を表示します。
アプリケーションの署名は、AppleのGatekeeperテクロジーの重要な部分です。ユーザーが**インターネットからダウンロードしたアプリケーションを開こうとする**と、Gatekeeperはアプリケーションの署名を検証します。Appleから既知の開発者に発行された証明書で署名されており、コードが改ざんされていない場合、Gatekeeperはアプリケーションの実行を許可します。それ以外の場合、Gatekeeperはアプリケーションをブロックし、ユーザーに警告を表示します。
macOS Catalina以降、**GatekeeperはアプリケーションがAppleによって公証されているかどうかもチェック**します。公証プロセスでは、アプリケーションが既知のセキュリティの問題や悪意のあるコードを含んでいないかどうかをチェックし、これらのチェックに合格した場合、AppleはGatekeeperが検証できるアプリケーションにチケットを追加します。
#### 署名の確認
**マルウェアサンプル**をチェックする場合は、常にバイナリの**署名を確認**する必要があります。署名した**開発者**が既に**マルウェアに関連している**可能性があるためです。
**マルウェアサンプル**をチェックする際には、常にバイナリの**署名を確認**する必要があります。署名した**開発者**が既に**マルウェアに関連している**可能性があるためです。
```bash
# Get signer
codesign -vv -d /bin/ls 2>&1 | grep -E "Authority|TeamIdentifier"
@ -59,7 +59,7 @@ codesign -s <cert-name-keychain> toolsdemo
Appleの公証プロセスは、ユーザーを潜在的に有害なソフトウェアから保護するための追加の安全策として機能します。これは、開発者が自分のアプリケーションをAppleの公証サービスに提出することを含みます。このサービスは、App Reviewとは異なるものであり、提出されたソフトウェアを悪意のあるコンテンツやコード署名の潜在的な問題から検査する自動化システムです。
ソフトウェアがこの検査を通過し、懸念事項がない場合、公証サービスは公証チケットを生成します。その後、開発者はこのチケットをソフトウェアに添付する必要があります。このプロセスは「ステープリング」と呼ばれます。さらに、公証チケットはオンラインで公開され、GatekeeperAppleのセキュリティ技術がアクセスできるようになります。
ソフトウェアがこの検査を通過し、懸念事項がない場合、公証サービスは公証チケットを生成します。その後、開発者はこのチケットをソフトウェアに添付する必要があります。このプロセスは「ステープリング」と呼ばれます。さらに、公証チケットはオンラインで公開され、GatekeeperAppleのセキュリティ技術がアクセスできるようになります。
ユーザーがソフトウェアを初めてインストールまたは実行する際、実行可能ファイルにステープルされているか、オンラインで見つかるかにかかわらず、公証チケットの存在はGatekeeperにソフトウェアがAppleによって公証されたことを通知します。その結果、Gatekeeperは初回起動ダイアログに説明的なメッセージを表示し、ソフトウェアがAppleによって悪意のあるコンテンツのチェックを受けたことを示します。このプロセスにより、ユーザーは自分のシステムにインストールまたは実行するソフトウェアのセキュリティに対する信頼性が向上します。
@ -67,20 +67,20 @@ Appleの公証プロセスは、ユーザーを潜在的に有害なソフトウ
GateKeeperは、信頼されていないアプリケーションの実行を防止するための複数のセキュリティコンポーネントであり、またその一部でもあります。
GateKeeperの状態を確認するには、次のコマンドを使用します:
GateKeeperの状態は、次のコマンドで確認することができます:
```bash
# Check the status
spctl --status
```
{% hint style="danger" %}
GateKeeperの署名チェックは、**Quarantine属性を持つファイル**にのみ実行されます。すべてのファイルに対して実行されるわけではありません。
GateKeeperの署名チェックは、**Quarantine属性を持つファイル**にのみ実行されます。
{% endhint %}
GateKeeperは、**設定と署名**に基づいてバイナリが実行可能かどうかをチェックします
GateKeeperは、**設定と署名**に基づいてバイナリが実行可能かどうかをチェックします
<figure><img src="../../../.gitbook/assets/image (678).png" alt=""><figcaption></figcaption></figure>
この設定を保持するデータベースは、**`/var/db/SystemPolicy`**にあります。次のコマンドをrootとして実行して、このデータベースを確認できます
この設定を保持するデータベースは、**`/var/db/SystemPolicy`**にあります。次のコマンドをrootとして実行して、このデータベースを確認できます
```bash
# Open database
sqlite3 /var/db/SystemPolicy
@ -126,13 +126,27 @@ GateKeeperによって**アプリが許可されるかどうかをチェック**
```bash
spctl --assess -v /Applications/App.app
```
GateKeeperに新しいルールを追加して、特定のアプリの実行を許可することが可能です。以下のコマンドを使用します:
GateKeeperに新しいルールを追加して、特定のアプリの実行を許可することが可能です。以下の手順を実行します:
```bash
spctl --add --label "Approved" /path/to/app
```
1. Open Terminal.
2. Enter the following command to add a new rule to GateKeeper:
```
sudo spctl --add --label "Approved" /path/to/application.app
```
Replace `/path/to/application.app` with the actual path to the application you want to allow.
3. Enter your administrator password when prompted.
4. GateKeeper will now allow the execution of the specified application.
このコマンドは、指定したパスにあるアプリを"Approved"というラベルでGateKeeperに追加します。これにより、アプリは実行可能となります。
GateKeeperに新しいルールを追加して、特定のアプリの実行を許可することが可能です。以下の手順を実行します:
1. ターミナルを開きます。
2. 次のコマンドを入力して、GateKeeperに新しいルールを追加します:
```
sudo spctl --add --label "Approved" /path/to/application.app
```
`/path/to/application.app`を実際のアプリケーションのパスに置き換えてください。
3. 管理者パスワードを入力します。
4. GateKeeperは指定したアプリケーションの実行を許可します。
```bash
# Check if allowed - nop
spctl --assess -v /Applications/App.app
@ -188,7 +202,7 @@ xattr portada.png
com.apple.macl
com.apple.quarantine
```
次に、拡張属性の値を確認し、quarantine属性を書き込んだアプリを特定します。
次に、**拡張属性**の**値**を確認し、次のコマンドでクォレンティン属性を書き込んだアプリを特定します。
```bash
xattr -l portada.png
com.apple.macl:
@ -226,7 +240,7 @@ XProtectは、macOSに組み込まれた**アンチマルウェア**機能です
XProtectデータベースは、Appleによって定期的に**更新**され、これらの更新は自動的にMacにダウンロードおよびインストールされます。これにより、XProtectは常に最新の既知の脅威と同期されます。
ただし、XProtectは**完全なアンチウイルスソリューションではありません**。XProtectは特定の既知の脅威のリストのみをチェックし、ほとんどのアンチウイルスソフトウェアのようなオンアクセススキャンは実行しません。
ただし、XProtectは**完全なアンチウイルスソリューションではありません**。XProtectは特定の既知の脅威のリストのみをチェックし、ほとんどのアンチウイルスソフトウェアのようにオンアクセススキャンを実行しません。
最新のXProtectの更新に関する情報を取得するには、次のコマンドを実行します
@ -247,27 +261,27 @@ XProtectに関連する別のアプリケーションである**`/Library/Apple/
## Gatekeeperの回避方法
Gatekeeperをバイパスする方法ユーザーに何かをダウンロードさせ、Gatekeeperがそれを許可しない場合に実行させる方法は、macOSの脆弱性と見なされます。これらは、過去にGatekeeperをバイパスするために使用されたいくつかの技術に割り当てられたCVEです
Gatekeeperをバイパスする方法ユーザーに何かをダウンロードさせ、Gatekeeperがそれを許可しないはずのときに実行させる方法は、macOSの脆弱性と見なされます。これらは、過去にGatekeeperをバイパスするために使用されたいくつかの技術に割り当てられたCVEです
### [CVE-2021-1810](https://labs.withsecure.com/publications/the-discovery-of-cve-2021-1810)
**Archive Utility**によって抽出されると、**886文字以上のパス**ファイルは、com.apple.quarantineの拡張属性を継承できず、これにより**Gatekeeperをバイパス**することが可能になります。
**Archive Utility**によって抽出されると、**886文字以上のパス**を持つファイルは、com.apple.quarantineの拡張属性を継承できず、これにより**Gatekeeperをバイパス**することが可能になります。
詳細については、[**元のレポート**](https://labs.withsecure.com/publications/the-discovery-of-cve-2021-1810)を参照してください。
### [CVE-2021-30990](https://ronmasas.com/posts/bypass-macos-gatekeeper)
**Automator**でアプリケーションが作成されると、実行するための情報は`application.app/Contents/document.wflow`にあり、実行可能ファイルには含まれていません。実行可能ファイルは、**Automator Application Stub**と呼ばれる汎用のAutomatorバイナリです。
**Automator**でアプリケーションが作成されると、実行するために必要な情報は`application.app/Contents/document.wflow`に含まれており、実行可能ファイルには単なる一般的なAutomatorバイナリである**Automator Application Stub**があります。
したがって、`application.app/Contents/MacOS/Automator\ Application\ Stub`を**シンボリックリンクでシステム内の別のAutomator Application Stubに指定**すること、`document.wflow`(スクリプト)内の内容を**Gatekeeperをトリガーせずに実行**することができます。実際の実行可能ファイルには隔離のxattrがないためです。
したがって、`application.app/Contents/MacOS/Automator\ Application\ Stub`を**シンボリックリンクでシステム内の別のAutomator Application Stubに指定**することで、`document.wflow`(スクリプト)内の内容を実行し、**Gatekeeperをトリガーせずに**実行することができます。実際の実行可能ファイルには検疫のxattrがないためです。
例として期待される場所`/System/Library/CoreServices/Automator\ Application\ Stub.app/Contents/MacOS/Automator\ Application\ Stub`
例として期待される場所は、`/System/Library/CoreServices/Automator\ Application\ Stub.app/Contents/MacOS/Automator\ Application\ Stub`です。
詳細については、[**元のレポート**](https://ronmasas.com/posts/bypass-macos-gatekeeper)を参照してください。
### [CVE-2022-22616](https://www.jamf.com/blog/jamf-threat-labs-safari-vuln-gatekeeper-bypass/)
このバイパスでは、zipファイルが作成され、`application.app`ではなく`application.app/Contents`から圧縮が開始されました。したがって、**`application.app/Contents`のすべてのファイルには隔離属性**が適用されましたが、`application.app`には適用されませんでした。Gatekeeperは`application.app`をチェックしていたため、Gatekeeperがバイパスされました。`application.app`がトリガーされたときには、隔離属性がなかったためです
このバイパスでは、zipファイルが作成され、`application.app`ではなく`application.app/Contents`から圧縮が開始されました。したがって、**`application.app/Contents`のすべてのファイルに検疫属性**が適用されましたが、Gatekeeperがチェックしていたのは`application.app`であり、`application.app`がトリガーされたときには**検疫属性が存在しなかったため**、Gatekeeperがバイパスされました
```bash
zip -r test.app/Contents test.zip
```
@ -275,7 +289,7 @@ zip -r test.app/Contents test.zip
### [CVE-2022-32910](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-32910)
コンポーネントは異なるものの、この脆弱性の悪用は前のものと非常に似ています。この場合、**`application.app/Contents`** からApple Archiveを生成し、**Archive Utility** によって展開されるときに **`application.app` には隔離属性が付与されない** ことになります。
コンポーネントは異なるものの、この脆弱性の悪用は前のものと非常に似ています。この場合、**`application.app/Contents`**からApple Archiveを生成し、**Archive Utility**によって展開されるときに**`application.app`には検疫属性が付与されない**ようにします。
```bash
aa archive -d test.app/Contents -o test.app.aar
```
@ -292,27 +306,59 @@ xattr: [Errno 13] Permission denied: '/tmp/no-attr'
```
さらに、**AppleDouble**ファイル形式は、そのACEを含むファイルをコピーします。
[**ソースコード**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html)では、xattrとして保存されているACLテキスト表現である**`com.apple.acl.text`**が、展開されたファイルのACLとして設定されることがわかります。したがって、他のxattrの書き込みを防止するACLを持つzipファイルにアプリケーションを圧縮した場合、quarantine xattrはアプリケーションに設定されませんでした。
[**ソースコード**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html)では、xattrとして保存されているACLテキスト表現である**`com.apple.acl.text`**が、展開されたファイルのACLとして設定されることがわかります。したがって、他のxattrの書き込みを防ぐACLを持つACLを持つアプリケーションを**AppleDouble**ファイル形式でzipファイルに圧縮した場合、quarantine xattrはアプリケーションに設定されませんでした。
```bash
chmod +a "everyone deny write,writeattr,writeextattr" /tmp/test
ditto -c -k test test.zip
python3 -m http.server
# Download the zip from the browser and decompress it, the file shuold be without a wuarantine xattr
```
詳細な情報については、[**元のレポート**](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/)を参照してください。
詳細については、[**元のレポート**](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/)を参照してください。
### [CVE-2023-27943](https://blog.f-secure.com/discovery-of-gatekeeper-bypass-cve-2023-27943/)
**Google Chromeは、いくつかのmacOSの内部的な問題のために、ダウンロードされたファイルに隔離属性を設定していませんでした**ということが発見されました
macOSの内部の問題により、**Google Chromeはダウンロードしたファイルに隔離属性を設定していませんでした**。
### [CVE-2023-27951](https://redcanary.com/blog/gatekeeper-bypass-vulnerabilities/)
AppleDoubleファイル形式は、ファイルの属性を`._`で始まる別のファイルに保存し、これによりmacOSマシン間でファイルの属性をコピーするのに役立ちます。しかし、AppleDoubleファイルを展開した後、`._`で始まるファイルには**隔離属性が設定されていない**ことがわかりました。
{% code overflow="wrap" %}
```bash
mkdir test
echo a > test/a
echo b > test/b
echo ._a > test/._a
aa archive -d test/ -o test.aar
# If you downloaded the resulting test.aar and decompress it, the file test/._a won't have a quarantitne attribute
```
{% endcode %}
ゲートキーパーをバイパスすることができるようになりました。クイックタイムのアプリケーションを作成するために、AppleDouble名規則`._`で始まるを使用してDMGファイルアプリケーションを作成し、クイックタイムのアプリケーションとして表示されるファイルを作成しました。この隠しファイルにはクイックタイムの属性が設定されていません。DMGファイルが実行されると、クイックタイムの属性がないため、ゲートキーパーがバイパスされます。
```bash
# Create an app bundle with the backdoor an call it app.app
echo "[+] creating disk image with app"
hdiutil create -srcfolder app.app app.dmg
echo "[+] creating directory and files"
mkdir
mkdir -p s/app
cp app.dmg s/app/._app.dmg
ln -s ._app.dmg s/app/app.dmg
echo "[+] compressing files"
aa archive -d s/ -o app.aar
```
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* **サイバーセキュリティ企業で働いていますか?** **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
* [**公式のPEASSHackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で私を**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **ハッキングのトリックを共有するには、PRを** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。**
</details>