本文へ移動
Automic Vault
GitHub macOS 版をダウンロード

Max Howell

macOS はアプリを守ります。 私たちはコマンドラインを守ります。

私が Homebrew を作ってから、Apple は Mac アプリのセキュリティを大きく進化させました。私はコマンドラインにも同じように取り組んでいます。

Automic Vault は対応 CLI ツールの認証情報を保護し、操作ごとに使用を認可することで、macOS のセキュリティを補完します。いつものコマンドはそのまま使えます。

無料・オープンソース。普段のコマンドをそのまま使えます。エージェント用プラグインは不要です。

Automic Vault の概要画面。ハードニング済みの Tool と対応が必要な項目。

認証情報の露出を確認したパッケージ 15,000+ 件

macOS のセキュリティを基盤に

ターミナルの認証情報を保護する。

Apple は長年にわたり、Gatekeeper、公証、マルウェア検査、機密データへのアクセス許可によって Mac アプリのセキュリティを強化してきました。

コマンドラインツールは今も、同じユーザー権限で動く別のコードが読めるファイルやヘルパーに認証情報を保存することがあります。エージェントや依存パッケージが、そのアクセスを使って確認なしにリリースを公開したり、クラウド環境を変更したりできてしまいます。

Automic Vault は macOS のコード署名、Hardened Runtime、キーチェーンを基盤に、開発者の認証情報を保護し、対応するコマンドライン操作を認可します。

GitHub の場合、av harden gh で署名済みの改修版 CLI をインストールし、既存の認証情報を Automic Vault の管理下に移します。使うコマンドは引き続き gh です。認証が必要な操作は Authorization Gate を通るようになります。

ツールの保護の仕組みを見る

シークレットの用途まで確認する、シークレットマネージャー。

Issue の閲覧、リリースの公開、トークンの表示には、それぞれ異なる権限が必要です。AV は操作全体を確認してから認証情報を適用します。

1 つのトークン。3 つの判断。
GitHub · Read Only ポリシーの Verified Launcher
コマンド判断
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 の保護の仕組み
通常の操作はポリシーで。それ以外はあなたが判断。

コマンドラインを保護

Mac に保存された認証情報から始めましょう。

ツール、依存パッケージ、エージェントがファイルや認証情報ヘルパーから読み出せる認証情報を検出します。各 Finding で、露出の内容と対策を確認できます。

Finding に対応する Hardener を選び、導入後は av doctor で保護の状態を検証します。

対応するツールを見る
インストールせずにスキャン
curl -fsSL https://www.automicvault.com/scanner.sh | bash

最新リリースのソースからビルドした小さな単体スキャナーをダウンロードし、署名を検証してから、ネットワークにアクセスできない読み取り専用のサンドボックス内で実行します。

Scan で問題が見つからなくても、確認できたのは対応する検査項目だけです。Mac 全体の安全を保証するものではありません。

Detector ごとの検査内容と、Hardener の対応状況を確認できます。
Detector ごとの検査内容と、Hardener の対応状況を確認できます。

ツールとエージェントに許可する操作を選ぶ

GitHub の閲覧は許可。書き込みは承認してから。

エージェントの GitHub Gate は Read Only に設定し、ターミナルには別のポリシーを選べます。AV は各 Launcher の実行中のソフトウェアの識別情報を検証してから、ポリシーを適用します。

AV はエージェントをサンドボックス化せず、任意のローカルファイル変更も防ぎません。

Write Access でも、Secret の開示や、より強力な認証情報の使用には Approval が必要です。Unknown の操作は常に人が判断します。

対象となるエージェントタスクには、1 つの Gate で有効時間 10 分の Write Access を付与できます。表示される操作部から延長、一時停止、終了ができます。

権限の設定を読む

コード署名が示すのは識別情報と完全性であり、意図ではありません。タスク ID は一時的な権限の対象を絞るための情報で、本人性を証明しません。

同じ Tool でも、Verified Launcher ごとにルールを設定できます。
同じ Tool でも、Verified Launcher ごとにルールを設定できます。

必要な機能をエージェントへ

リリーススクリプトを一度レビューする。

エージェントがリリースノートを作成し、レビュー済みスクリプトが GitHub への公開と CDN の更新を行います。Blessed Script は、確認した正確な内容と宣言済みの権限に結び付きます。再入可能なスクリプトは、決められた入口からエージェントに情報を渡し、入力を待って処理を再開します。AV は呼び出しごとに認可します。編集すると Blessing は無効になります。

レビュー済みワークフローを作る

エージェントの出力は使用前に検証してください。Secret Values はスクリプトの実行内に留めます。Blessing 自体がコードの安全性を保証するわけではありません。

ChatGPT が公開スクリプトを起動。AV は Approval の前に宣言済みの権限を表示し、ChatGPT を Verified Launcher として識別します。
ChatGPT が公開スクリプトを起動。AV は Approval の前に宣言済みの権限を表示し、ChatGPT を Verified Launcher として識別します。

プロジェクトの秘密情報を平文ファイルに置かない

複数のプロジェクトで同じ Secret Name を使い、プロジェクトごとに異なる Project Value を保存できます。AV は物理ディレクトリをたどって最も近い値を選び、該当する値がなければ Global Value を使います。対応する HTTP クライアントでは、Secret Proxy が一時参照をアプリに渡し、承認済みの宛先にだけ実際の認証情報を適用します。

Project Values の仕組みを読む 認証情報プロキシの仕組みを見る

ディレクトリは値の選択に使い、権限は付与しません。ポリシーは同じ Secret Name の全 Values に適用されます。プロキシの参照は所持者が使用でき、セッションで付与済みの宛先へのアクセスに使えます。

1 つの Secret Name に Global Value と 2 つの Project Value。Secret Values は非表示です。
1 つの Secret Name に Global Value と 2 つの Project Value。Secret Values は非表示です。

複数の Mac の操作を承認する

同じ 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 を必須にしてください。リレー障害で代替手段が有効になることはありません。

Maliwan と Pangolin からの 2 件の保留中リクエストを、1 台の iPhone に表示。
Maliwan と Pangolin からの 2 件の保留中リクエストを、1 台の iPhone に表示。

保護の範囲と限界

AV は、通常のユーザー権限で動くコードに対して、対応する認証情報を保護し、対応する Tool 操作を制御します。ラッパーはすべてのコマンドを捕捉するものではなく、パッケージをインストールしても安全性は保証されません。root やカーネルの侵害、任意のローカル破壊、Secret を受け取った後の Target の動作は保護範囲外です。

セキュリティモデルを読む

認証情報の使用状況を確認する

Authorization History は、許可・拒否されたリクエストをローカルに記録します。AV は許可された Secret Use の記録を保存・検証してから Secret を渡します。履歴には保存上限があり、改ざん耐性や完全なフォレンジック記録は保証しません。

正規の用語定義

無料。オープンソース。macOS。

Mac アプリは無料で、Apache-2.0 ライセンスで公開しています。オプションの iPhone Approval で許可応答を送信するには、有効なサブスクリプションが必要です。拒否にはサブスクリプションは不要です。