終了コードと安全性に関する注意
プロセスの終了コード、shk が保存するものと決して保存しないもの、そしてパターンベース検出の限界について説明します。
終了コード
| コード | 意味 |
|---|---|
0 |
アクティブなしきい値以上の検出結果がない、またはコマンドが正常に完了した。 |
1 |
スキャンまたは MCP 監査の検出結果がアクティブなしきい値に達した、または超えた。 |
2 |
ブロッキング AI pre-hook が発動した、またはスキャン/MCP 監査の実行時エラーか設定エラーが発生した。 |
--fail-on オプションと shk.toml の [thresholds] セクションで、どの重要度をしきい値にカウントするかを制御します。しきい値を参照してください。
安全性に関する注意
| 対象 | 動作 | 制約・確認点 |
|---|---|---|
| ローカル処理 | スキャン・マスクはローカルで実行 | パターンベースの検出。専用のシークレットスキャン基盤の完全な代替ではない |
| ドキュメント | Office とテキストレイヤー付き PDF から抽出 | 画像だけの PDF は外部 OCR が必要。抽出できなければ info のスキップ結果 |
| Office マスク | --output で新しい .docx / .xlsx / .pptx を作成 |
shk.toml が必要。機密 env ファイルや保護されたホーム設定への出力は拒否 |
| JSON レポート | redacted_value は [REDACTED] |
value_hash は --with-value-hash 時のみ。公開ルール ID を使う決定的な指紋で、低エントロピー値は辞書攻撃で推定され得る |
| 監査ログ | 件数・ツール・フェーズ・ルール ID・操作分類・表示パス | 検出値・プロンプト本文・コマンド本文は保存しない。shk audit --no-paths で表示パスを省略 |
| allowlist のハッシュ | 特定値の検出抑制に利用 | 暗号学的な秘密の保管ではない |
| post-tool フック | 操作後の検査 | ブロックしない |
スキャン範囲と修正対象
| 操作 | 範囲・変更内容 |
|---|---|
scan --git-history |
Git ref から到達可能なコミット済み blob。まず --preview で件数を確認し、--ref / --since / --max-commits で絞る |
scan --changed-since <rev> |
<rev> との merge base 以降に現在のブランチで変更したファイル。PR の CI 向け |
doctor ignore --fix |
.gitignore に不足パターンを追記。既存行は削除しない |
doctor workflows --fix |
persist-credentials: false のない actions/checkout を修正。shk.toml が必要で、対象ファイルを直接編集 |
検出には shk 独自ルールと gitleaks 由来の secret.gitleaks.* ルールを使用します。値ハッシュを含むレポートは機密情報として扱ってください。
Env シークレットストアの脅威モデル
デフォルトでは、shk env は dotenv の秘密鍵を OS キーリングに保存します。チームは、共有ボールトによる配布、集中管理された失効、Business 向け監査ログのために 1Password にオプトインできます。
1Password は主にチーム運用の面での強化(配布、オフボーディング、監査)です。また、ローカルのキーリングに鍵を永続化することも避けられます。デスクトップアプリの認可は CLI セッションの間持続することがあるため、shk env run のたびに生体認証による承認が行われる保証にはなりません。可視性のためには、短いボールト自動ロック時間と 1Password Business のアクセスログを推奨します。
Env シークレットストアおよび shk env key migrate を参照してください。
脆弱性の報告
セキュリティ上の問題は、公開の Issue ではなく、リポジトリの SECURITY.md に記載されたプロセスを通じて非公開で報告してください。