mcpField
M
macos-security-bypass

macos-security-bypass

github.com/yaklangセキュリティ2.6k3.5k 回インストール6 週間前に更新
リポジトリ

macos-security-bypass について

許可を得たセキュリティ作業向けのmacOSセキュリティ回避リファレンススキルです。TCC、Gatekeeper、SIP、サンドボックス、コード署名、エンタイトルメント、永続化を、バージョン別の例やコマンドとともに扱います。

主な機能

  1. 01TCC回避の手法と前提条件
  2. 02Gatekeeperの隔離属性回避
  3. 03SIPの制限と過去の回避事例
  4. 04サンドボックス脱出の経路
  5. 05コード署名とエンタイトルメントの分析
  6. 06回避後の永続化手法

活用シーン

  1. 01TCC権限と露出範囲の評価
  2. 02エンドポイントでのGatekeeper動作の確認
  3. 03アプリの権限と署名の監査
  4. 04サンドボックス脱出と永続化リスクの調査

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/yaklang/hack-skills --skill macos-security-bypass

インストール後、Claude Code で/macos-security-bypassを入力して読み込まれたか確認します。

同梱ファイルTCC_BYPASS_MATRIX.md

詳細

スキル:macOS セキュリティバイパス — エキスパート向け攻撃プレイブック

AI 読み込み指示:macOS の高度なセキュリティバイパス手法です。TCC バイパス、Gatekeeper の回避、SIP の制限、サンドボックスからの脱出、エンタイトルメントの悪用を扱います。ベースモデルでは、バージョンごとのバイパスの細かな違いや、保護機能同士の相互作用の影響を見落としがちです。

0. 関連するルーティング

詳しく調べる前に、次の読み込みを検討してください。

  • 初期アクセスの獲得後に dylib インジェクション、XPC の悪用、または Electron の悪用が必要な場合は、macos-process-injection
  • macOS にも適用される Unix レイヤーの権限昇格手法(SUID、cron、書き込み可能なパス)については、linux-privilege-escalation
  • Unix で共通するセキュリティバイパスの概念については、linux-security-bypass
高度なリファレンス

次の情報が必要な場合は、TCC_BYPASS_MATRIX.md も読み込んでください。

  • macOS のバージョンごとの TCC バイパスのマッピング
  • 保護の種類ごとの手法(カメラ、マイク、FDA、自動化)
  • MDM/構成プロファイルの悪用パターン

1. TCC(透明性、同意、制御)の概要

TCC は macOS の権限フレームワークで、機密リソース(カメラ、マイク、連絡先、フルディスクアクセスなど)へのアクセスを制御します。

1.1 TCC データベースの場所
データベースパス制御対象保護
ユーザーレベル~/Library/Application Support/com.apple.TCC/TCC.dbユーザーごとの同意判断Catalina 以降は SIP で保護
システムレベル/Library/Application Support/com.apple.TCC/TCC.dbシステム全体の同意判断SIP で保護
MDM 管理対象構成プロファイル経由PPPC(プライバシー環境設定ポリシー制御)を配信デバイス管理
-- Query TCC database (requires FDA or SIP off)
sqlite3 ~/Library/Application\ Support/com.apple.TCC/TCC.db \
  "SELECT service, client, allowed FROM access;"
1.2 TCC バイパスのカテゴリ
カテゴリ仕組み一般的な前提条件
FDA アプリの悪用すでにフルディスクアクセスを許可されているアプリに便乗するFDA アプリのバンドルまたはプラグインディレクトリへの書き込みアクセス
DB の直接変更TCC.db を編集して同意を付与するSIP の無効化または FDA
権限の継承子プロセスが親プロセスの TCC 許可を継承するFDA が許可されたアプリのコンテキストでコードを実行
自動化の悪用Apple Events/osascript で TCC 許可済みのアプリを制御する自動化の許可(TCC への直接アクセスより低いハードル)
マウントの手口変更済みの TCC.db を含む細工したディスクイメージをマウントするローカルアクセス、Ventura より前
TCC の SQL インジェクションTCC サブシステムで SQL インジェクションを引き起こす不正なバンドル IDCVE-2023-32364 など
1.3 既知の TCC バイパスパターン

Terminal/iTerm の FDA 継承:Terminal.app に FDA が許可されている → 実行したコマンドはすべて FDA を継承する → 任意のファイルを読み取れる。

# If Terminal has FDA, this reads protected files directly
cat ~/Library/Mail/V*/MailData/Envelope\ Index
cat ~/Library/Messages/chat.db

Finder の自動化:より低い権限で Finder を自動化し、保護された場所にあるファイルにアクセスする。

tell application "Finder"
  set f to POSIX file "/Users/target/Library/Mail/V9/MailData/Envelope Index"
  duplicate f to desktop
end tell

システム環境設定/システム設定へのインジェクション:Application Scripts フォルダに書き込んで、すでに TCC 権限を持つプロセスにインジェクションする。

MDM プロファイルの悪用:PPPC プロファイルを使うと、TCC 権限を事前に承認できます。不正な MDM 登録、または侵害された MDM サーバーから PPPC ペイロードを配信します。


2. Gatekeeper のバイパス

Gatekeeper は署名されていないアプリ、または公証されていないアプリの実行をブロックします。基本的な強制は com.apple.quarantine 拡張属性に依存します。

2.1 隔離属性の削除
# Check quarantine attribute
xattr -l /path/to/app
# Output: com.apple.quarantine: 0083;...

# Remove quarantine (requires write access)
xattr -d com.apple.quarantine /path/to/app
# Recursive for app bundles
xattr -rd com.apple.quarantine /path/to/MyApp.app
2.2 バイパス手法
手法仕組みmacOS のバージョン
xattr -d による削除実行前に隔離属性を削除しますすべて(ローカルアクセスが必要)
アプリのトランスロケーションのバイパス特定の場所にあるアプリはトランスロケーションをスキップしますCatalina より前
隔離属性を除去するアーカイブツール隔離属性を引き継がない展開アプリもありますツールによって異なります
署名済みバンドル内の未署名コード公証済みアプリバンドルに未署名のネストされたヘルパーが含まれていますVentura より前(CVE-2022-42821)
Safari の自動展開と起動ダウンロードした ZIP が自動展開され、隔離属性が完全に適用される前にアプリが起動しますSafari 固有、修正済み
ACL の悪用ダウンロード前に設定された ACL により、com.apple.quarantine がブロックされる可能性があります事前の配置が必要
ディスクイメージ(DMG)の悪用ネットワーク共有からマウントされた DMG には隔離属性が付与されない場合がありますネットワーク共有の状況によります
BOM(部品表)のバイパス細工された pkg 内の BOM により、展開されたファイルの隔離属性がスキップされますCVE-2022-22616
2.3 Gatekeeper のチェックフロー
App launched
│
├── com.apple.quarantine attribute present?
│   ├── No → execute (no Gatekeeper check)
│   └── Yes ↓
│
├── Code signature valid?
│   ├── No → block
│   └── Yes ↓
│
├── Notarized (stapled ticket or online check)?
│   ├── No → block (Catalina+)
│   └── Yes → execute
│
└── User override? (right-click → Open → confirm)
    └── Bypasses Gatekeeper once for this app

3. SIP(システム整合性保護)

SIP は、保護されたシステム領域の変更、未署名のカーネル拡張機能の読み込み、システムプロセスのデバッグを root に対して制限します。

3.1 SIP で保護される場所
/System/
/usr/ (except /usr/local/)
/bin/
/sbin/
/var/ (selected subdirs)
/Applications/ (pre-installed Apple apps)
3.2 SIP の状態と設定
csrutil status              # Check SIP status
csrutil disable             # Recovery Mode only
csrutil enable --without fs # Partial disable (risky)
3.3 SIP をバイパスするエンタイトルメント
エンタイトルメント効果
com.apple.rootless.installSIP で保護されたパスへの書き込み
com.apple.rootless.install.heritable子プロセスが SIP バイパスを継承します
com.apple.security.cs.allow-unsigned-executable-memoryメモリ内での JIT/未署名コード
com.apple.private.security.clear-library-validation未署名ライブラリの読み込み
3.4 過去の SIP バイパス
CVEmacOS手法
CVE-2021-30892(Shrootless)Monterey 12.0.1 より前署名済み pkg 内の system_installd +インストール後スクリプト
CVE-2022-22583Monterey 12.2 より前packagekit +マウントポイントの操作
CVE-2022-46689(MacDirtyCow)Ventura 13.1 より前コピーオンライトの競合状態を利用して SIP ファイルを上書き
CVE-2023-32369(Migraine)Ventura 13.4 より前systemmigrationd を介した移行アシスタントの TCC/SIP バイパス
CVE-2024-44243Sequoia 15.2 より前StorageKit デーモンの悪用

4. サンドボックスからの脱出

macOS のサンドボックス(App Sandbox、sandbox-exec またはエンタイトルメントを使用)は、アプリによるファイルシステム、ネットワーク、IPC へのアクセスを制限します。

4.1 Office サンドボックスからの脱出パターン
ベクトル説明
開く/保存ダイアログの悪用ユーザーがダイアログでファイルアクセスを許可する → マクロがサンドボックスの外部のファイルを読み書きします
~/Library/LaunchAgents/ への永続化一部のサンドボックスプロファイルでは、LaunchAgent の plist への書き込みが許可されます
ログイン項目の操作サンドボックスの外部にあるペイロードを指すログイン項目を追加します
共有コンテナの悪用同じ App Group コンテナを共有する複数のアプリを利用します
4.2 IPC ベースの脱出
IPC の仕組み脱出ベクトル
XPC サービスクライアントの検証が不十分な、特権を持つ XPC サービスに接続します
Mach ポート特権を持つタスクポートへの送信権を取得します
Apple イベントサンドボックス化されていないアプリを自動操作し、処理を実行させます
分散通知サンドボックス化されていないヘルパーに通知を送り、ペイロードを実行させます
ペーストボードペイロードをペーストボードに書き込み、サンドボックス化されていないアプリに読み込ませます
4.3 ブラウザーのサンドボックス
  • Chromium:マルチプロセスモデルで、レンダラープロセスはサンドボックス化されていますが、ブラウザープロセスはされていません
  • Safari:WebContent プロセスはサンドボックス化されていますが、親の Safari プロセスはより多くの権限を持ちます
  • エクスプロイトチェーン:レンダラーの RCE → サンドボックスからの脱出(ブラウザープロセスの IPC の脆弱性を利用)→ システムへのアクセス

5. コード署名とエンタイトルメント

5.1 署名とエンタイトルメントの確認
codesign -dv --verbose=4 /path/to/app       # Signature details
codesign -d --entitlements :- /path/to/app   # Dump entitlements
security cms -D -i /path/to/mobileprovision  # Provisioning profile

# Verify signature validity
codesign --verify --deep --strict /path/to/app
spctl --assess --type execute /path/to/app   # Gatekeeper assessment
5.2 権限昇格のためのエンタイトルメント悪用
エンタイトルメント悪用シナリオ
com.apple.security.cs.disable-library-validationエンタイトルメントを持つプロセスに攻撃者の dylib をロードする
com.apple.security.cs.allow-dyld-environment-variablesDYLD_INSERT_LIBRARIES によるインジェクション
com.apple.security.get-task-allowデバッガーをアタッチし、コードをインジェクトする
com.apple.security.cs.debugger任意のプロセスをデバッグする
com.apple.private.apfs.revert-to-snapshotAPFS スナップショットを復元し、変更を回避する
5.3 Hardened Runtime の回避

Hardened Runtime は、DYLD 環境変数、デバッグ、署名されていないメモリでの実行を防ぎます。回避方法:

  • Hardened Runtime を弱める(disable-library-validation)エンタイトルメントを持つアプリを探す
  • JIT のエンタイトルメントを持つアプリ(ブラウザー、VM)を悪用して、署名されていないコードを実行する
  • 本番環境に残された get-task-allow エンタイトルメントを持つデバッグビルドを使用する
5.4 ライブラリ検証の回避

ライブラリ検証により、Apple 署名済み、または同じチームによって署名された dylib のみがロードされます。

# Find apps with library validation disabled
codesign -d --entitlements :- /Applications/*.app/Contents/MacOS/* 2>/dev/null | \
  grep -l "disable-library-validation"

6. 回避後の永続化

方法場所再起動後も維持備考
LaunchAgent~/Library/LaunchAgents/はいユーザーレベルで、ログイン時に実行
LaunchDaemon/Library/LaunchDaemons/はいルートレベルで、起動時に実行
ログイン項目~/Library/Application Support/com.apple.backgroundtaskmanagementagent/はいシステム設定に表示される
Croncrontab -eはい防御側に見落とされがち
Dylib ハイジャック書き込み可能な dylib 検索パスはい対象アプリの起動時にトリガーされる
フォルダーアクション~/Library/Scripts/Folder Action Scripts/はいフォルダーのイベント時にトリガーされる

7. macOS セキュリティ回避の判断ツリー

Target is macOS endpoint
│
├── Need to execute untrusted binary?
│   ├── Quarantine attribute present?
│   │   ├── Yes → xattr -d com.apple.quarantine (§2.1)
│   │   └── No → execute directly
│   └── Gatekeeper still blocks?
│       ├── Signed but not notarized → right-click → Open override
│       └── Unsigned → embed in signed bundle or use archive tricks (§2.2)
│
├── Need access to TCC-protected resources?
│   ├── FDA-granted app available?
│   │   ├── Yes → exploit FDA app context (§1.3)
│   │   └── No ↓
│   ├── Automation permission obtainable?
│   │   ├── Yes → Apple Events to TCC-granted app (§1.3)
│   │   └── No ↓
│   ├── SIP disabled?
│   │   ├── Yes → direct TCC.db modification (§1.2)
│   │   └── No → check version-specific TCC bypass (→ TCC_BYPASS_MATRIX.md)
│   └── MDM present?
│       └── Compromised MDM → push PPPC profile (§1.3)
│
├── Need to bypass SIP?
│   ├── Check macOS version → historical SIP CVE? (§3.4)
│   ├── Find entitled Apple binary → piggyback SIP-bypass entitlement (§3.3)
│   └── Recovery Mode access? → csrutil disable (§3.2)
│
├── Need sandbox escape?
│   ├── Office macro context → dialog/LaunchAgent tricks (§4.1)
│   ├── XPC service with weak validation → IPC escape (§4.2)
│   └── Browser context → renderer → sandbox escape chain (§4.3)
│
├── Need to inject into signed process?
│   ├── disable-library-validation entitlement? → dylib injection
│   ├── allow-dyld-environment-variables? → DYLD_INSERT_LIBRARIES
│   ├── get-task-allow? → debugger attach
│   └── None → check macos-process-injection SKILL.md
│
└── Need persistence?
    └── Choose method by access level (§6)

8. クイックリファレンス:ツールコマンド

# Enumerate TCC permissions
tccutil reset All                              # Reset all TCC (admin)
sqlite3 TCC.db "SELECT * FROM access;"         # Read TCC DB

# Gatekeeper status
spctl --status                                 # Gatekeeper enabled?
spctl --assess -v /path/to/app                 # Check app assessment

# SIP status
csrutil status

# Find interesting entitlements across system
find /System/Applications /Applications -name "*.app" -exec sh -c \
  'codesign -d --entitlements :- "$1" 2>/dev/null | grep -q "disable-library-validation" && echo "$1"' _ {} \;

# List loaded kexts (kernel extensions)
kextstat | grep -v com.apple

# Sandbox profile inspection
sandbox-exec -p "(version 1)(allow default)" /bin/ls  # Test sandbox rules

コメント