Homebrew
更新チェックは実行。インストールは承認。
Homebrew のハードニングは、同じユーザー権限で動く別のコードによる /opt/homebrew の変更を防ぎます。Read & Update では、認識済みの確認コマンドと brew update を実行でき、インストールやアップグレードには Approval が必要です。対象は Apple Silicon の Homebrew です。ハードニング中はサービスとシェル補完を利用できません。
Homebrew の保護の仕組み
Automic Vault
macOS のセキュリティを基盤に
Apple は長年にわたり、Gatekeeper、公証、マルウェア検査、機密データへのアクセス許可によって Mac アプリのセキュリティを強化してきました。
コマンドラインツールは今も、同じユーザー権限で動く別のコードが読めるファイルやヘルパーに認証情報を保存することがあります。エージェントや依存パッケージが、そのアクセスを使って確認なしにリリースを公開したり、クラウド環境を変更したりできてしまいます。
Automic Vault は macOS のコード署名、Hardened Runtime、キーチェーンを基盤に、開発者の認証情報を保護し、対応するコマンドライン操作を認可します。
GitHub の場合、av harden gh で署名済みの改修版 CLI をインストールし、既存の認証情報を Automic Vault の管理下に移します。使うコマンドは引き続き gh です。認証が必要な操作は Authorization Gate を通るようになります。
ツールの保護の仕組みを見るIssue の閲覧、リリースの公開、トークンの表示には、それぞれ異なる権限が必要です。AV は操作全体を確認してから認証情報を適用します。
| コマンド | 判断 |
|---|---|
gh issue listIssue を読む | 許可済みRead Only |
gh issue createIssue を作成 | 承認が必要Remote Write |
gh auth tokenトークンを開示 | 承認が必要Secret Disclosure |
リモート側を変更しなくても、認証情報の開示には別の判断が必要です。
Homebrew
Homebrew のハードニングは、同じユーザー権限で動く別のコードによる /opt/homebrew の変更を防ぎます。Read & Update では、認識済みの確認コマンドと brew update を実行でき、インストールやアップグレードには Approval が必要です。対象は Apple Silicon の Homebrew です。ハードニング中はサービスとシェル補完を利用できません。
Homebrew の保護の仕組みAWS
通常の AWS コマンドには短期のセッション認証情報を渡します。長期キーは共有認証情報ファイルから取り除きます。AV は AWS プロセスごとにセッション認証情報を個別に取得します。
AWS の保護の仕組みDocker
レジストリの認証情報を渡す前に、AV は実行中の Docker Desktop プロセス、署名、ランタイム保護、起動元のプロセス階層、引数、要求されたレジストリを確認します。
Docker の保護の仕組みコマンドラインを保護
ツール、依存パッケージ、エージェントがファイルや認証情報ヘルパーから読み出せる認証情報を検出します。各 Finding で、露出の内容と対策を確認できます。
Finding に対応する Hardener を選び、導入後は av doctor で保護の状態を検証します。
対応するツールを見るcurl -fsSL https://www.automicvault.com/scanner.sh | bash最新リリースのソースからビルドした小さな単体スキャナーをダウンロードし、署名を検証してから、ネットワークにアクセスできない読み取り専用のサンドボックス内で実行します。
Scan で問題が見つからなくても、確認できたのは対応する検査項目だけです。Mac 全体の安全を保証するものではありません。
ツールとエージェントに許可する操作を選ぶ
エージェントの GitHub Gate は Read Only に設定し、ターミナルには別のポリシーを選べます。AV は各 Launcher の実行中のソフトウェアの識別情報を検証してから、ポリシーを適用します。
AV はエージェントをサンドボックス化せず、任意のローカルファイル変更も防ぎません。
Write Access でも、Secret の開示や、より強力な認証情報の使用には Approval が必要です。Unknown の操作は常に人が判断します。
対象となるエージェントタスクには、1 つの Gate で有効時間 10 分の Write Access を付与できます。表示される操作部から延長、一時停止、終了ができます。
権限の設定を読むコード署名が示すのは識別情報と完全性であり、意図ではありません。タスク ID は一時的な権限の対象を絞るための情報で、本人性を証明しません。
必要な機能をエージェントへ
エージェントがリリースノートを作成し、レビュー済みスクリプトが GitHub への公開と CDN の更新を行います。Blessed Script は、確認した正確な内容と宣言済みの権限に結び付きます。再入可能なスクリプトは、決められた入口からエージェントに情報を渡し、入力を待って処理を再開します。AV は呼び出しごとに認可します。編集すると Blessing は無効になります。
レビュー済みワークフローを作るエージェントの出力は使用前に検証してください。Secret Values はスクリプトの実行内に留めます。Blessing 自体がコードの安全性を保証するわけではありません。
実際の画面
操作を許可する前に、ソフトウェア、コマンド、引数、作業ディレクトリ、Secret Names を確認できます。
複数のプロジェクトで同じ Secret Name を使い、プロジェクトごとに異なる Project Value を保存できます。AV は物理ディレクトリをたどって最も近い値を選び、該当する値がなければ Global Value を使います。対応する HTTP クライアントでは、Secret Proxy が一時参照をアプリに渡し、承認済みの宛先にだけ実際の認証情報を適用します。
Project Values の仕組みを読む 認証情報プロキシの仕組みを見るディレクトリは値の選択に使い、権限は付与しません。ポリシーは同じ Secret Name の全 Values に適用されます。プロキシの参照は所持者が使用でき、セッションで付与済みの宛先へのアクセスに使えます。
同じ iCloud キーチェーンのアカウントに属する対象の iPhone から、登録済み Mac のリクエストを確認できます。各 Mac は Secrets、ポリシー、Authorization History を保持し、その Mac 上で判断を適用します。Mac ごとに Touch ID Approval を有効にして、生体認証による承認を使うこともできます。
iPhone と Touch ID Approval を設定する TestFlight で iPhone 公開ベータに参加iPhone Approval を有効にすると、Mac 上のマウスやキーボードによる許可操作はなくなります。iPhone Mirroring と Show on Mac を無効にするか、対象の全 iPhone で Face ID または Touch ID を必須にしてください。リレー障害で代替手段が有効になることはありません。
AV は、通常のユーザー権限で動くコードに対して、対応する認証情報を保護し、対応する Tool 操作を制御します。ラッパーはすべてのコマンドを捕捉するものではなく、パッケージをインストールしても安全性は保証されません。root やカーネルの侵害、任意のローカル破壊、Secret を受け取った後の Target の動作は保護範囲外です。
セキュリティモデルを読むAuthorization History は、許可・拒否されたリクエストをローカルに記録します。AV は許可された Secret Use の記録を保存・検証してから Secret を渡します。履歴には保存上限があり、改ざん耐性や完全なフォレンジック記録は保証しません。
正規の用語定義Mac アプリは無料で、Apache-2.0 ライセンスで公開しています。オプションの iPhone Approval で許可応答を送信するには、有効なサブスクリプションが必要です。拒否にはサブスクリプションは不要です。