
credactor v2.6.0
スキャン。編集。クリーンコミット。
Credactor
シークレットを見つけて、修正し、クリーンな状態でコミットしましょう。
シークレットスキャナーは警報を鳴らすのは得意ですが、その後の消火にはあまり役に立ちません。漏洩した認証情報のリストを手渡して、後始末はあなた任せです。Credactor はそのループを閉じます。ハードコードされたシークレットを見つけ、その場で書き換えるため、漏洩が検出から修正まで一つのコマンドで完了します。
認証情報をソースコードから排除することは、基本中の基本のセキュリティ対策であり、オプションではありません。Credactor はその基本をコスト安く維持できるようにします。コミット前の自分のマシンでも、マージ前の CI でも実行できます。単独で動かすことも、すでに信頼しているスキャナーと併用することも可能です。
# Credactor はこれを見つけます:
db_password = "h8Tq2vKp9mRz4Wd"
# デフォルトでは、シークレットを実行時に大声で失敗するセンチネルに書き換えます:
db_password = "REDACTED_BY_CREDACTOR"
# --replace-with env を使うと、環境変数を読み取る参照を書き込みます:
db_password = os.environ["DB_PASSWORD"]
編集は ワーキングツリー 内のファイルを書き換えます。シークレットがすでにコミットされている場合は、キーをローテーションし、履歴もスクラブしてください(例:
git filter-repoを使用)。ファイルの書き換えは、漏洩した認証情報を無効化する代わりにはなりません。
Credactor の特長
- 検出だけでなく編集も行います。 ほとんどのスキャナーは発見で止まります。Credactor はその場でシークレットを置き換えます。デフォルトでは実行時に失敗する
REDACTED_BY_CREDACTORというセンチネル、あるいは言語に応じた環境変数参照(Python、JavaScript/TypeScript、Go、Java/Kotlin、Ruby、PHP、シェル)例えばos.environ["KEY"]に置き換えます。置き換え後のコードは有効です。ファイルに該当する import(例:import os)がまだ含まれていない場合は、追加してください。 - デフォルトで安全です。 アトミック書き込み、自動
.bakバックアップ、シンボリックリンク境界とファイルパーミッションのガード、すべての出力における完全なシークレットマスキング。安全なバックアップが書き込めない場合は、ファイルを盲目的に書き換えるのではなくスキップし、書き込み中のクラッシュでも元のファイルはそのまま残ります。 - ゼロランタイム依存関係。 純粋な Python 3.11+ 標準ライブラリ、非 UTF-8 エンコーディング用のオプションの追加パッケージのみ。
- パイプライン向けに設計されています。 GitHub Code Scanning 用の SARIF 出力、精密な終了コードを備えた読み取り専用の
--ciゲート、pre-commit フック(ベータ版)、Gitleaks または TruffleHog レポートの取り込み(ベータ版、さらに追加予定)。Gitleaks や TruffleHog で検出し、Credactor で修復します。
インストール
pip install credactor
Python 3.11+ が必要です。その他の依存関係はありません。Linux、macOS、Windows で動作します(CI テストは Linux と Windows で実施)。
ソースからインストールする場合:
git clone https://github.com/rxb06/credactor.git
cd credactor
pip install -e .
その後、任意のディレクトリから credactor が使用できるようになります。
クイックスタート
編集する前に、まず
--dry-runを実行して結果を確認してください。誤検知が発生する可能性があり、--fix-allを使用すると誤検知も書き換えられてしまいます。既知の安全な値は# credactor:ignoreまたは.credactorignoreエントリで抑制してください。
credactor --dry-run . # スキャンのみ、変更なし
credactor . # スキャン後、対話的に編集(発見ごとに y/n)
credactor --fix-all . # 1回の確認後、すべて編集
credactor --fix-all --yes . # 非対話的に編集(CI / スクリプト向け)
credactor --ci . # 読み取り専用ゲート:発見があると終了コード1
credactor --replace-with env . # センチネルの代わりに環境変数参照に編集
Pre-commit フック(ベータ版)
フックの統合はベータ版です。信用する前に手動で
credactor --dry-run .を実行してください。
# .pre-commit-config.yaml
repos:
- repo: https://github.com/rxb06/credactor
rev: v2.5.0 # 最新のリリースタグに固定
hooks:
- id: credactor
検出
Credactor は最も頻繁に漏洩する認証情報の種類を検出し、それぞれに重要度を割り当ててひと目でトリアージできるようにします。
| カテゴリ | 例 | 重要度 |
|---|---|---|
| クラウドプロバイダーキー | AWS (AKIA…)、GCP (AIza…)、Stripe (sk_live_…)、Slack (xoxb-…) | Critical |
| プラットフォームトークン | GitHub (ghp_, github_pat_)、GitLab (glpat-)、npm (npm_)、PyPI (pypi-) | Critical |
| 秘密鍵 | PEM ブロック (-----BEGIN … PRIVATE KEY-----) | Critical |
| JWT | eyJ… 3セグメントトークン | High |
| 接続文字列 | インライン認証情報を含む URL (scheme://user:pass@host) | High |
| 認証情報変数 | password = "…", api_key = "…", secret_key = "…" | High/Medium/Low |
| XML 属性 | <add key="Password" value="…" /> | High/Medium/Low |
| 高エントロピー文字列 | 引用符で囲まれた16進数(32~64文字) / Base64(60文字以上) | Medium/Low |
決定論的なプロバイダートークン(上記の接頭辞)は、エントロピーに関係なくフラグが立てられます。ヒューリスティック検出器(JWT、接続文字列、16進数、Base64)は、エントロピーの下限をクリアする必要があります。単独の16進数またはBase64は、引用符で囲まれている場合のみフラグが立てられます。引用符で囲まれていない高エントロピー値は、認証情報という名前の変数でのみ捕捉され、これにより git SHA やチェックサムは除外されます。完全な検出ルールと重要度については、マニュアル を参照してください。
Credactor のネイティブルールセットは専用のスキャナーよりも狭く、一部のプロバイダー形式(例:SendGrid、Twilio、Slack ウェブフック)は検出されません。その強みは修復にあります。最も広範な検出のために Gitleaks または TruffleHog と組み合わせるか、単独で実行してください。
別のスキャナーと組み合わせて一括編集(ベータ版)
Credactor は単独でも動作しますが、他のツールと組み合わせることでさらに強力になります。すでに Gitleaks または TruffleHog を実行していますか?そのレポートを Credactor に渡すと、Credactor はそれらの結果を統合し、自身の発見結果と重複排除した上で編集します(重複時は重要度の高い方が優先されます)。1回の修復パスで、あなたのスキャン結果とそれらの結果の両方をカバーします:
gitleaks dir . -f json -r gitleaks.json
credactor --from-gitleaks gitleaks.json --fix-all --yes .
--from-gitleaks / --from-trufflehog(または .credactor.toml の [ingest] テーブル)にはディレクトリターゲットが必要です。CI 統合ガイド を参照してください。
その他の機能
- 対話型またはバッチ編集。カスタム置換文字列は
--replacementで指定。--scan-historyで git コミット履歴をスキャン。 - 安全なバックアップ:
--secure-delete(.bakファイルを上書きして削除; カジュアルな復元を防ぐためのものであり、フォレンジック保証はありません)、または--secure-backup-dirでリポジトリ外にバックアップを保存。 - インライン
# credactor:ignoreおよび.credactorignoreによる許可リスト(グロブ、file:line、値リテラル)。 - リポジトリごとの設定を
.credactor.tomlで管理。 - 標準で29種類のソース/設定/ノートファイルタイプ(
.txtを含む)に対応。--scan-jsonで JSON を含める。--fail-on-errorで読み取り不可ファイルがある場合に失敗。
スキャン対象ファイルタイプ
.py.js.ts.jsx.tsx.sh.bash.env.cfg.ini.toml.yaml.yml.rb.go.java.php.cs.kt.tf.hcl.conf.config.properties.xml.pem.key.crt.txt
さらに .env.* / .env-* 形式(.env.local、.env.production)および SSH / 秘密鍵ファイル(id_rsa、id_dsa、id_ecdsa、id_ed25519)は、拡張子ではなくファイル名でマッチします。JSON はデフォルトで除外されます(API レスポンスが多くの誤検知を生むため)。含めるには --scan-json を追加してください。コマンドラインで直接指定されたファイルは、その拡張子がリストになくてもスキャンされます。
終了コード
| コード | 意味 |
|---|---|
0 | 発見なし、またはすべて解決済み |
1 | 未解決の発見あり |
2 | エラー(例: 不正なパス、危険な --replacement、--ci --fix-all、または --fail-on-error で読み取り不可ファイル) |
サプライチェーンの強化
セキュリティツールは、実行時に安全であるだけでなく、インストール時にも安全であるべきです。Credactor のビルドとリリースパイプラインはエンドツーエンドで強化されています。詳細は セキュリティ文書 を参照してください。
- ゼロランタイム依存関係。 デフォルトの
pip install credactorはサードパーティパッケージを一切引き込みません(オプションの[encoding]追加パッケージを除く)。そのため、インストール時に調査すべきものはありません。 - ハッシュピン留めされたツールチェーン。 CI とリリースビルドは
--require-hashesロックファイルからインストールされ、ビルドバックエンドも含めて(ピン留めされた setuptools に対してpython -m build --no-isolationを使用)、改変された依存関係はビルドを失敗させます。 - 成果物はソースとバイトレベルで検証されます。 プッシュのたび、公開のたびに、
scripts/audit_wheel.pyがホイールと sdist をコミットされたソースとバイト単位で比較します(sha256 vsgit HEAD)。追加、欠落、変更されたファイルがあるとゲートが失敗するため、ビルドステップでコードが密かに注入されることはありません。 - SHA ピン留め、最小権限の CI。 GitHub Actions はコミット SHA にピン留めされ、ワークフロートークンは狭い範囲に保たれています。デフォルトでは
contents: read、公開ジョブでのみid-token: writeです。
ドキュメント
| 文書 | 説明 |
|---|---|
| セットアップガイド | インストール、設定、CI/CD 統合 |
| マニュアル | 完全なリファレンス:すべてのフラグ、モード、組み合わせ、置換とバックアップの動作、検出と重要度、終了コード、制限事項(動作はテストで検証済み) |
| 例 | 出力付きの一般的なワークフロー |
| CI 統合 | Pre-commit フック、CI パイプライン |
| セキュリティ | 脅威モデル、強化策、既知の制限 |
| 変更履歴 | バージョン履歴 |
| コントリビューション | 開発環境のセットアップ、コードスタイル、PR プロセス |
| 免責事項 | 制限事項、安全な使用法、保証 |
ライセンス
Apache 2.0。 LICENSE を参照してください。