seatbelt-sandboxer
macOSのSeatbeltサンドボックス設定を最小構成で生成します。許可リストベースのプロファイルを使ってmacOSアプリケーションをサンドボックス化・隔離・制限したい場合に活用してください。
description の原文を見る
Generates minimal macOS Seatbelt sandbox configurations. Use when sandboxing, isolating, or restricting macOS applications with allowlist-based profiles.
SKILL.md 本文
macOS Seatbelt サンドボックス プロファイリング
アプリケーション用の最小限の権限を持つ allowlist ベースの Seatbelt サンドボックス設定を生成します。
使用するとき
- ユーザーが macOS 上のアプリケーションを「サンドボックス化」「隔離」または「制限」することを要求している
- ファイル/ネットワークアクセスが制限された macOS プロセスをサンドボックス化する
- サプライチェーン攻撃が懸念される場合の多層防御的な隔離を作成する
使用しないとき
- Linux コンテナ (代わりに seccomp-bpf、AppArmor、または namespaces を使用)
- Windows アプリケーション
- 正当にシステムへの広範なアクセスが必要なアプリケーション
- サンドボックス化のオーバーヘッドが正当化されない一時的なスクリプト
プロファイリング方法論
ステップ 1: アプリケーション要件の識別
これらのリソースカテゴリ全体でアプリケーションが何を必要とするかを決定します:
| カテゴリ | 操作 | 一般的なユースケース |
|---|---|---|
| ファイル読み取り | file-read-data, file-read-metadata, file-read-xattr, file-test-existence, file-map-executable | ソースファイル、設定、ライブラリの読み取り |
| ファイル書き込み | file-write-data, file-write-create, file-write-unlink, file-write-mode, file-write-xattr, file-clone, file-link | 出力ファイル、キャッシュ、一時ファイル |
| ネットワーク | network-bind, network-inbound, network-outbound | サーバー、API 呼び出し、パッケージダウンロード |
| プロセス | process-fork, process-exec, process-exec-interpreter, process-info*, process-codesigning* | 子プロセスの生成、スクリプト実行 |
| Mach IPC | mach-lookup, mach-register, mach-bootstrap, mach-task-name | システムサービス、XPC、通知 |
| POSIX IPC | ipc-posix-shm*, ipc-posix-sem* | 共有メモリ、セマフォ |
| Sysctl | sysctl-read, sysctl-write | システム情報の読み取り (CPU、メモリ) |
| IOKit | iokit-open, iokit-get-properties, iokit-set-properties | ハードウェアアクセス、デバイスドライバ |
| シグナル | signal | プロセス間のシグナルハンドリング |
| 疑似 TTY | pseudo-tty | ターミナルエミュレーション |
| システム | system-fsctl, system-socket, system-audit, system-info | 低レベルシステムコール |
| ユーザー設定 | user-preference-read, user-preference-write | ユーザーデフォルトの読み取り/書き込み |
| 通知 | darwin-notification-post, distributed-notification-post | システム通知 |
| AppleEvents | appleevent-send | アプリ間通信 (AppleScript) |
| カメラ/マイク | device-camera, device-microphone | メディアキャプチャ |
| 動的コード | dynamic-code-generation | JIT コンパイル |
| NVRAM | nvram-get, nvram-set, nvram-delete | ファームウェア変数 |
各カテゴリについて、以下を決定します: 必要か? および 特定のスコープ (パス、サービスなど)
アプリケーションが Webpack などの Javascript バンドラーの build および serve コマンドのように、大きく異なる操作を実行する複数のサブコマンドを持つ場合は、以下を実行してください:
- サブコマンドを個別にプロファイリング
- 各サブコマンド用に個別の Seatbelt 設定を作成
- 元のバイナリのドロップイン置換として機能し、渡されたサブコマンドに応じて適切な Seatbelt プロファイルでサンドボックス化されたアプリケーションを実行するヘルパースクリプトを作成
ステップ 2: 最小プロファイルで開始
デフォルト拒否と必須のプロセス操作で開始し、.sb 拡張子を持つ適切に名前付けられた Seatbelt プロファイルファイルに保存します。
(version 1)
(deny default)
;; 任意のプロセスで必須
(allow process-exec*)
(allow process-fork)
(allow sysctl-read)
;; メタデータアクセス (stat、readdir) - ファイルの内容を露出しない
(allow file-read-metadata)
ステップ 3: ファイル読み取りアクセスを追加 (Allowlist)
allowlist ベースの読み取りに file-read-data (not file-read*) を使用します:
(allow file-read-data
;; システムパス (ほとんどのランタイムで必須)
(subpath "/usr")
(subpath "/bin")
(subpath "/sbin")
(subpath "/System")
(subpath "/Library")
(subpath "/opt") ;; Homebrew
(subpath "/private/var")
(subpath "/private/etc")
(subpath "/private/tmp")
(subpath "/dev")
;; パス解決用のルートシンボリックリンク
(literal "/")
(literal "/var")
(literal "/etc")
(literal "/tmp")
(literal "/private")
;; アプリケーション固有の設定 (必要に応じてカスタマイズ)
(regex (string-append "^" (regex-quote (param "HOME")) "/\\.myapp(/.*)?$"))
;; ワーキングディレクトリ
(subpath (param "WORKING_DIR")))
file-read-data を file-read* の代わりに使用する理由は?
file-read*は、任意のパスからのすべてのファイル読み取り操作を許可しますfile-read-dataは、リストされたパスからのみファイル内容の読み取りを許可しますfile-read-metadata(広くに許可) と組み合わせると、以下が得られます:- ✅ 任意の場所で stat/readdir が可能 (パス解決に必要)
- ❌ allowlist 外のファイル内容は読み取り不可
ステップ 4: ファイル書き込みアクセスを追加 (制限付き)
(allow file-write*
;; ワーキングディレクトリのみ
(subpath (param "WORKING_DIR"))
;; 一時ディレクトリ
(subpath "/private/tmp")
(subpath "/tmp")
(subpath "/private/var/folders")
;; 出力用のデバイスファイル
(literal "/dev/null")
(literal "/dev/tty"))
ステップ 5: ネットワークを設定
ネットワークアクセスの 3 つのレベル:
;; オプション 1: すべてのネットワークをブロック (最も制限的 - ビルドツール用)
(deny network*)
;; オプション 2: ローカルホストのみ (開発サーバー、ローカルサービス用)
;; ローカルポートにバインド
(allow network-bind (local tcp "*:*"))
;; インバウンド接続を受け入れ
(allow network-inbound (local tcp "*:*"))
;; ローカルホスト + DNS へのアウトバウンド
(allow network-outbound
(literal "/private/var/run/mDNSResponder") ;; DNS 解決
(remote ip "localhost:*")) ;; ローカルホストのみ
;; オプション 3: すべてのネットワークを許可 (最も制限的でない - 可能な限り回避)
(allow network*)
ネットワークフィルター構文:
(local tcp "*:*")- 任意のローカル TCP ポート(local tcp "*:8080")- 特定のローカルポート(remote ip "localhost:*")- ローカルホストへのアウトバウンドのみ(remote tcp)- 任意のホストへの TCP アウトバウンド(literal "/private/var/run/mDNSResponder")- DNS 用の Unix ソケット
ステップ 6: 反復的にテスト
Seatbelt プロファイルを生成または編集した後、サンドボックス内でターゲットアプリケーションの機能をテストします。何かが機能しなくなった場合は、Seatbelt プロファイルを修正します。このプロセスを反復的に繰り返して、最小限の権限を持つ Seatbelt ファイルを生成し、生成した Seatbelt プロファイルを使用してサンドボックス内でアプリケーションが正常に機能することを経験的に確認するまで続けます。
プログラムが完全に機能するために外部入力が必要な場合 (バンドルするアプリケーションが必要な Javascript バンドラーなど)、よく知られた理想的には公式ソースからサンプル入力を見つけます。例えば、Rspack バンドラーのこれらのサンプルプロジェクト: https://github.com/rstackjs/rstack-examples/tree/main/rspack/
# 基本実行のテスト
sandbox-exec -f profile.sb -D WORKING_DIR=/path -D HOME=$HOME /bin/echo "test"
# 実際のアプリケーションをテスト
sandbox-exec -f profile.sb -D WORKING_DIR=/path -D HOME=$HOME \
/path/to/application --args
# セキュリティ制限をテスト
sandbox-exec -f profile.sb -D WORKING_DIR=/tmp -D HOME=$HOME \
cat ~/.ssh/id_rsa
# 予想: Operation not permitted
一般的な失敗パターン:
| 症状 | 原因 | 修正 |
|---|---|---|
| 終了コード 134 (SIGABRT) | サンドボックス違反 | どの操作がブロックされているかを確認 |
| 終了コード 65 + 構文エラー | 無効なプロファイル構文 | Seatbelt 構文を確認 |
既存ファイルの ENOENT | file-read-metadata の欠落 | (allow file-read-metadata) を追加 |
| プロセスがハング | IPC 権限の欠落 | 必要に応じて (allow mach-lookup) を追加 |
Seatbelt 構文リファレンス
パスフィルター
(subpath "/path") ;; /path およびすべての子孫
(literal "/path/file") ;; 完全なパスのみ
(regex "^/path/.*\\.js$") ;; 正規表現マッチ
パラメータ置換
(param "WORKING_DIR") ;; 直接使用
(subpath (param "WORKING_DIR")) ;; subpath 内で
(string-append (param "HOME") "/.config") ;; 連結
(regex-quote (param "HOME")) ;; 正規表現用にエスケープ
操作
ファイル操作:
(allow file-read-data ...) ;; ファイル内容の読み取り
(allow file-read-metadata) ;; stat、lstat、readdir (内容なし)
(allow file-read-xattr ...) ;; 拡張属性の読み取り
(allow file-test-existence ...) ;; ファイルの存在確認
(allow file-map-executable ...) ;; 実行ファイルの mmap (dylibs)
(allow file-write-data ...) ;; 既存ファイルへの書き込み
(allow file-write-create ...) ;; 新しいファイルの作成
(allow file-write-unlink ...) ;; ファイルの削除
(allow file-write* ...) ;; すべての書き込み操作
(allow file-read* ...) ;; すべての読み取り操作 (慎重に使用)
プロセス操作:
(allow process-exec* ...) ;; バイナリの実行
(allow process-fork) ;; 子プロセスのフォーク
(allow process-info-pidinfo) ;; プロセス情報のクエリ
(allow signal) ;; シグナルの送受信
ネットワーク操作:
(allow network-bind (local tcp "*:*")) ;; 任意のローカル TCP ポートにバインド
(allow network-bind (local tcp "*:8080")) ;; 特定のポートにバインド
(allow network-inbound (local tcp "*:*")) ;; TCP 接続を受け入れ
(allow network-outbound (remote ip "localhost:*")) ;; ローカルホストへのアウトバウンドのみ
(allow network-outbound (remote tcp)) ;; 任意のホストへの TCP アウトバウンド
(allow network-outbound
(literal "/private/var/run/mDNSResponder")) ;; Unix ソケット経由の DNS
(allow network*) ;; すべてのネットワーク (慎重に使用)
(deny network*) ;; すべてのネットワークをブロック
IPC 操作:
(allow mach-lookup ...) ;; Mach IPC ルックアップ
(allow mach-register ...) ;; Mach サービスの登録
(allow ipc-posix-shm* ...) ;; POSIX 共有メモリ
(allow ipc-posix-sem* ...) ;; POSIX セマフォ
システム操作:
(allow sysctl-read) ;; システム情報の読み取り
(allow sysctl-write ...) ;; sysctl の変更 (レア)
(allow iokit-open ...) ;; IOKit デバイスアクセス
(allow pseudo-tty) ;; ターミナルエミュレーション
(allow dynamic-code-generation) ;; JIT コンパイル
(allow user-preference-read ...) ;; ユーザーデフォルトの読み取り
既知の制限
- 非推奨だが機能: Apple は sandbox-exec を非推奨としていますが、macOS 14+ で動作します
- 一時ディレクトリアクセスがしばしば必須: 多くのアプリケーションは
/tmpおよび/var/foldersへのアクセスが必要です
例: 汎用 CLI アプリケーション
(version 1)
(deny default)
;; プロセス
(allow process-exec*)
(allow process-fork)
(allow sysctl-read)
;; ファイルメタデータ (パス解決)
(allow file-read-metadata)
;; ファイル読み取り (allowlist)
(allow file-read-data
(literal "/") (literal "/var") (literal "/etc") (literal "/tmp") (literal "/private")
(subpath "/usr") (subpath "/bin") (subpath "/sbin") (subpath "/opt")
(subpath "/System") (subpath "/Library") (subpath "/dev")
(subpath "/private/var") (subpath "/private/etc") (subpath "/private/tmp")
(subpath (param "WORKING_DIR")))
;; ファイル書き込み (制限付き)
(allow file-write*
(subpath (param "WORKING_DIR"))
(subpath "/private/tmp") (subpath "/tmp") (subpath "/private/var/folders")
(literal "/dev/null") (literal "/dev/tty"))
;; ネットワーク無効
(deny network*)
使用法:
sandbox-exec -f profile.sb \
-D WORKING_DIR=/path/to/project \
-D HOME=$HOME \
/path/to/application
参考文献
ライセンス: CC-BY-SA-4.0(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- trailofbits
- リポジトリ
- trailofbits/skills
- ライセンス
- CC-BY-SA-4.0
- 最終更新
- 不明
Source: https://github.com/trailofbits/skills / ライセンス: CC-BY-SA-4.0
関連スキル
superfluid
Superfluidプロトコルおよびそのエコシステムに関するナレッジベースです。Superfluidについて情報を検索する際は、ウェブ検索の前にこちらを参照してください。対応キーワード:Superfluid、CFA、GDA、Super App、Super Token、stream、flow rate、real-time balance、pool(member/distributor)、IDA、sentinels、liquidation、TOGA、@sfpro/sdk、semantic money、yellowpaper、whitepaper
civ-finish-quotes
実質的なタスクが真に完了した際に、文明風の儀式的な引用句を追加します。ユーザーやエージェントが機能追加、リファクタリング、分析、設計ドキュメント、プロセス改善、レポート、執筆タスクといった実際の成果物を完成させるときに、明示的な依頼がなくても使用します。短い返信や小さな修正、未完成の作業には適用しません。
nookplot
Base(Ethereum L2)上のAIエージェント向け分散型調整ネットワークです。エージェントがオンチェーンアイデンティティを登録する、コンテンツを公開する、他のエージェントにメッセージを送る、マーケットプレイスで専門家を雇う、バウンティを投稿・請求する、レピュテーションを構築する、共有プロジェクトで協業する、リサーチチャレンジを解くことでNOOKをマイニングする、キュレーションされたナレッジを備えたスタンドアロンオンチェーンエージェントをデプロイする、またはアグリーメントとリワードで収益を得る場合に利用できます。エージェントネットワーク、エージェント調整、分散型エージェント、NOOKトークン、マイニングチャレンジ、ナレッジバンドル、エージェントレピュテーション、エージェントマーケットプレイス、ERC-2771メタトランザクション、Prepare-Sign-Relay、AgentFactory、またはNookplotが言及された場合にトリガーされます。
web3-polymarket
Polygon上でのPolymarket予測市場取引統合です。認証機能(L1 EIP-712、L2 HMAC-SHA256、ビルダーヘッダー)、注文発注(GTC/GTD/FOK/FAK、バッチ、ポストオンリー、ハートビート)、市場データ(Gamma API、Data API、オーダーブック、サブグラフ)、WebSocketストリーミング(市場・ユーザー・スポーツチャネル)、CTF操作(分割、統合、償却、ネガティブリスク)、ブリッジ機能(入金、出金、マルチチェーン)、およびガスレスリレイトランザクションに対応しています。AIエージェント、自動マーケットメーカー、予測市場UI、またはPolygraph上のPolymarketと統合するアプリケーション構築時に活用できます。
ethskills
Ethereum、EVM、またはブロックチェーン関連のリクエストに対応します。スマートコントラクト、dApps、ウォレット、DeFiプロトコルの構築、監査、デプロイ、インタラクションに適用されます。Solidityの開発、コントラクトアドレス、トークン規格(ERC-20、ERC-721、ERC-4626など)、Layer 2ネットワーク(Base、Arbitrum、Optimism、zkSync、Polygon)、Uniswap、Aave、Curveなどのプロトコルとの統合をカバーします。ガスコスト、コントラクトのデシマル設定、オラクルセキュリティ、リエントランシー、MEV、ブリッジング、ウォレット管理、オンチェーンデータの取得、本番環境へのデプロイ、プロトコル進化(EIPライフサイクル、フォーク追跡、今後の変更予定)といったトピックを含みます。
xxyy-trade
このスキルは、ユーザーが「トークン購入」「トークン売却」「トークンスワップ」「暗号資産取引」「取引ステータス確認」「トランザクション照会」「トークンスキャン」「フィード」「チェーン監視」「トークン照会」「トークン詳細」「トークン安全性確認」「ウォレット一覧表示」「マイウォレット」「AIスキャン」「自動スキャン」「ツイートスキャン」「オンボーディング」「IP確認」「IPホワイトリスト」「トークン発行」「自動売却」「損切り」「利益確定」「トレーリングストップ」「保有者」「トップホルダー」「KOLホルダー」などをリクエストした場合、またはSolana/ETH/BSC/BaseチェーンでXXYYを経由した取引について言及した場合に使用します。XXYY Open APIを通じてオンチェーン取引とデータ照会を実現します。