如何快速发现泄露的凭证:TruffleHog 凭证检测 3 个高频用法
【免费下载链接】trufflehogFind, verify, and analyze leaked credentials项目地址: https://gitcode.com/GitHub_Trending/tr/trufflehog
TruffleHog 是一款开源的凭证检测工具,内置 800 多种检测器,能扫描代码、仓库和云存储中的 API 密钥与密码,并逐一调用对应服务验证凭证是否真实有效,帮你在泄露酿成事故前把它揪出来。
某天 CI 突然红,才发现密钥早就进了仓库
想象这个场景:一个实习生把.env提交进了仓库,里面有一把 AWS Access Key。三个月后安全团队审计时才发现——而密钥可能早已被扫描器抓取并滥用。更麻烦的是,即使后来删掉了那行代码,只要仓库没有 force push,历史提交里依然留着它。
靠git log -p人工翻历史、或者 grep 几个已知关键字,覆盖率低、误报高。这正是 TruffleHog 要解决的问题:自动遍历 Git 历史(包括已删除提交),用 800 多个检测器识别密钥类型,再向对应服务的 API 发起验证请求,告诉你这把 key 是"还活着"还是"已失效"。
它是什么:先分类,再验证
TruffleHog 的定位是凭证的发现、分类、验证、分析一体化扫描器。和只做正则匹配的工具不同,它的核心价值在"验证"这一步:
- 发现:扫描 Git 仓库、GitHub/GitLab 组织、文件系统、S3/GCS 存储桶、Docker 镜像、stdin 等 18 类数据源
- 分类:内置 800+ 检测器(AWS、Stripe、GitHub token、私钥、JWT 等),自动识别密钥类型
- 验证:对识别出的凭证调用其所属服务 API 确认有效性,结果分
verified/unverified/unknown三档 - 分析:
trufflehog analyze可对常见凭证进一步检查权限范围和可访问资源
从零到第一条扫描命令
macOS 用户一行装好:
brew install trufflehogLinux/Windows 或从源码安装,克隆仓库后运行安装脚本:
git clone https://gitcode.com/GitHub_Trending/tr/trufflehog cd trufflehog && ./scripts/install.sh -b /usr/local/bin第一条能跑通的命令——扫描一个 Git 仓库,只看验证过的结果:
trufflehog git https://github.com/trufflesecurity/test_keys --results=verified输出会列出检测器类型(如AWS)、命中文件、行号、提交哈希和作者信息,Verified: true表示这把 key 确实还能用。
三个高频用法
用法一:扫描本地仓库和历史提交
在仓库外部的目录执行,本地仓库走file://协议:
trufflehog git file:///path/to/repo --results=verified,unknown扫描时会克隆仓库到临时目录再分析,天然覆盖历史提交;想限定范围可加--since-commit <commit>或--max-depth N。只想扫普通文件目录则用trufflehog filesystem <path>。
用法二:接入 CI,卡住每次提交
配合官方 GitHub Action,每次 PR 和 push 到main时只扫描变更提交,发现活密钥即让流水线失败:
- uses: trufflesecurity/trufflehog@main with: extra_args: --results=verified,unknown --fail--fail会让进程以退出码 183 结束,CI 据此拦截。不想用 Action 也可以直接在流水线里跑 CLI,参考 GitLab CI 示例;想在密钥离开本机前就拦下,可以看 pre-commit 钩子配置。
用法三:写自定义检测器补盲区
内置检测器覆盖不了的自研系统(比如内部网关 token),可以用自定义检测器:一个 YAML 定义正则 + 关键字,再配一个 webhook 做验证,用--config加载。仓库里有两个现成模板可直接改:
trufflehog git file://. --config examples/generic_config_secrets.yml完整写法见 自定义检测器文档,examples/generic.yml 是带验证 webhook 的示例,examples/generic_config_secrets.yml 则专门用于标记.env、.properties里的通用硬编码密码。
容易踩的坑
- 只看到横幅就以为扫完了:输出只有
🐷🔑🐷 TruffleHog. Unearth your secrets.说明没有命中,不是程序报错 - 验证会消耗真实 API 调用:
--no-verification可关闭验证提速,但会失去"是否有效"的判断;内网服务可用--verifier指向自定义验证端点 - 误报太多时用过滤参数:
--filter-entropy 3.0按香农熵过滤低质量未验证结果;扫描时已知误报可在源码行尾加trufflehog:ignore注释跳过 - GitHub 组织扫描慢:未带 token 时受 API 限流,加
--token(或设GITHUB_TOKEN)提速
常用命令速查
| 场景 | 命令 |
|---|---|
| 扫描远程 Git 仓库 | trufflehog git <url> --results=verified |
| 扫描本地仓库 | trufflehog git file://. --since-commit main |
| 扫描文件/目录 | trufflehog filesystem <path> |
| 扫描 S3 桶 | trufflehog s3 --bucket=<name> |
| 扫描 Docker 镜像 | trufflehog docker --image <image:tag> |
| JSON 输出 | 加--json |
| 发现结果即失败(CI 用) | 加--fail(退出码 183) |
| 指定并发数 | 加--concurrency N |
更多子命令(s3、gcs、syslog、postman、multi-scan等)参数可用trufflehog <cmd> --help查看。
凭证泄露往往不是"会不会发生"而是"何时被扫到"的问题。装上 TruffleHog,先给你的仓库跑一次--results=verified,看看历史提交里有没有还活着的 key 🐷
【免费下载链接】trufflehogFind, verify, and analyze leaked credentials项目地址: https://gitcode.com/GitHub_Trending/tr/trufflehog
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考