TruffleHog は、コードの履歴やファイル、クラウドのストレージに紛れ込んだ API キーやパスワードを探すツールです。見つけた鍵を発行元のサービスに送って、今も使えるかを確かめる機能があるので、使う前にこの仕組みを理解しておきましょう。
この記事は、GitHub などでコードを管理している開発者に向けています。読み終えると、次のことができるようになります。
- 自分のリポジトリやフォルダから秘密情報を探す
- 鍵の確認(検証)を止めたり、結果を絞り込んだりする
- 秘密情報が見つかったときに、正しく後始末をする
TruffleHog でできること
TruffleHog には、調べる対象ごとにサブコマンドがあります。README に載っている主なものは次のとおりです。
| サブコマンド | 調べるもの |
|---|---|
git |
Git リポジトリのコミット履歴 |
github / gitlab |
GitHub・GitLab 上のリポジトリや組織 |
filesystem |
ファイルやディレクトリ |
docker |
Docker イメージ |
s3 / gcs |
Amazon S3・Google Cloud Storage のバケット |
stdin |
標準入力から渡したテキスト |
ほかに huggingface、syslog、circleci、travisci、postman、jenkins、elasticsearch、multi-scan もあります。README によると、TruffleHog は 800 種類を超える秘密情報を見分けられます。
検証の仕組み:見つけた鍵を発行元に送る
TruffleHog は、見つけた鍵ごとに、その鍵が属するサービスの API へ実際に接続して、有効かどうかを確かめます。README はこれを credential verification と呼んでいます。たとえば AWS の鍵なら、AWS の API に GetCallerIdentity を呼び出して確かめます。
検証は既定で動きます。結果は次の 3 種類に分かれます。
| 結果 | 意味 |
|---|---|
| verified | API で確かめた結果、有効だった |
| unverified | 見つけたが、有効とは確かめられなかった(無効・期限切れ・検証を止めた場合を含む) |
| unknown | 確かめようとしたが、通信や API のエラーで失敗した |
検証と出力は、次のオプションで変えられます。
| オプション | 働き |
|---|---|
--no-verification |
検証をしない。鍵を外部のサービスへ送らない |
--results=verified |
有効と確かめられたものだけ表示する |
--results=verified,unknown |
有効なものと、確かめられなかったものを表示する |
--results を付けないときは、verified,unverified,unknown がすべて表示されます。また、README によると、よく漏れる 20 種類ほどの鍵については、analyze サブコマンドで多数のリクエストを送り、その鍵の権限や使える範囲まで調べられます。
安全な試し方:自分のテスト用フォルダを調べる
実在する鍵は使わず、自分で作ったテスト用のフォルダとダミーの文字列で試します。最初は --no-verification を付けて、外部への送信を止めておきましょう。
-
TruffleHog をインストールします。macOS では
brew install trufflehogで入ります。Windows と Linux はリリース一覧から OS 用のファイルを入手して展開します。Docker イメージtrufflesecurity/trufflehogもあります。 -
練習用のフォルダ(例:
practice)を作り、設定ファイル風のテキストにダミーの文字列を書きます。実在するサービスの鍵は入れないでください。 -
次のコマンドを実行します。
trufflehog filesystem practice --no-verification -
何も見つからないと、TruffleHog のロゴの行だけが出て終わります。ダミーの文字列は、形式によっては検出されないことがあります。
公式の README は、例に test_keys という練習用リポジトリを使っています。Git の履歴の調べ方を練習するときは、これを手元に複製し、その外側のフォルダから実行します。
git clone https://github.com/trufflesecurity/test_keys.git
trufflehog git file://test_keys --no-verification
主な使い方
| やりたいこと | コマンドの例 |
|---|---|
| 自分のリポジトリの履歴を調べる | trufflehog git file://. --no-verification |
| フォルダやファイルを調べる | trufflehog filesystem path/to/dir |
| CI で、新しいコミットだけ調べて失敗させる | trufflehog git file://. --since-commit main --branch feature-1 --results=verified,unknown --fail |
--fail を付けると、結果が見つかったときに終了コード 183 で終わります。エラーなしで何も見つからなければ 0、エラーが起きると 1 です。コミット前に止めたいときは、公式の PreCommit.md に pre-commit フックの設定方法があります。特定の行を除外したいときは、その行に trufflehog:ignore というコメントを書きます。
Gitleaks との違い
どちらも秘密情報を探すツールです。公式の情報で確かめられる違いは次のとおりです。
| TruffleHog | Gitleaks | |
|---|---|---|
| 見つけた鍵の検証 | あり(既定で有効) | README に検証機能の説明はない |
| ライセンス | AGPL-3.0 | MIT |
| 調べる対象 | Git、ファイル、クラウドのストレージ、CI など多数 | Git、ディレクトリ、標準入力 |
手元だけで完結させたいなら、Gitleaks か、TruffleHog に --no-verification を付けて使います。
注意点
- 調べる対象は、自分か自分の組織のリポジトリに限ってください。他人のリポジトリで見つけた鍵を検証すると、他人の認証情報を使ってサービスに接続することになります。許可なく行ってはいけません。
- 他人のリポジトリを調べる必要があるときは、書面で許可を得たうえで、
--no-verificationを付けてください。 - 秘密情報が見つかったら、ファイルや履歴から消すだけでは足りません。鍵は発行元のサービスで無効にして、新しいものを作り直してください。過去のコミットや複製されたリポジトリに残っている可能性があります。
- 結果には鍵そのものが表示されます。画面共有中や、ログが他人に見える場所では実行しないでください。
- TruffleHog には更新を確認する機能があります。止めたいときは
--no-updateを付けます。
次に読む
出典
- 公式リポジトリ READMEgithub.com/trufflesecurity/trufflehog
- ライセンス(LICENSE)github.com/trufflesecurity/trufflehog/blob/main/LICENSE
- リリース一覧github.com/trufflesecurity/trufflehog/releases
- pre-commit フックの説明(PreCommit.md)github.com/trufflesecurity/trufflehog/blob/main/PreCommit.md
- 練習用リポジトリ test_keysgithub.com/trufflesecurity/test_keys
- Gitleaks 公式リポジトリ READMEgithub.com/gitleaks/gitleaks
確認日 2026-10-25
似たツール
Gitleaks
影響範囲 手元だけGit リポジトリやファイルに紛れ込んだパスワード、API キー、トークンなどの秘密情報を見つけるコマンドラインツール。
- 用途
- 防御
- 形式
- コマンドライン
- 難易度
- 初級
- ライセンス
- 自由に使えるMIT
- 分類
- 脆弱性スキャン
Infisical
影響範囲 手元だけAPI キーやパスワードなどの秘密情報を 1 か所に保管し、アプリや CI に実行時に渡すシークレット管理基盤。クラウド版と自前で動かす版がある。
- 用途
- 防御
- 形式
- サーバーで動かす
- 難易度
- 中級
- ライセンス
- 要確認MIT(ee ディレクトリは商用の Enterprise ライセンス)
- 分類
- 防御・エンドポイント/アプリケーションセキュリティ