Tool brief · 2026-10-06
Kingfisher 密钥扫描工具
MongoDB 开源的密钥扫描工具 Kingfisher:它能做什么,安全团队怎么用,攻击者拿到它之后能造成什么破坏。
先说结论
Kingfisher 是 MongoDB 2025-06-16 开源的密钥扫描工具,Apache 2.0 许可,用 Rust 写成。它在代码、git 历史、整个 GitHub 组织、S3、容器镜像里找密钥,再逐个调用服务商接口确认密钥是否还能用。
它本身不入侵系统,破坏来自速度:几分钟内把一堆偷来的字符串筛成“哪些还能用、每把能碰到什么”的清单。
一、它是什么
- 开发者
- MongoDB 安全工程师 Mick Grove,2024 年 7 月开始做的个人项目,后来成为 MongoDB 内部安全流程的一部分
- 开源时间
- 2025-06-16,Apache 2.0 许可,不收费
- 代码
- github.com/mongodb/kingfisher
- 技术
- Rust;Hyperscan / Vectorscan 正则引擎做匹配;Tree-sitter 解析 20 多种编程语言的源码
- 来历
- 最早从 Praetorian 公司开源的 Nosey Parker 分叉出来,后来重写扩展
- 安装
brew install kingfisher、uv tool install kingfisher-bin,或 Docker 镜像ghcr.io/mongodb/kingfisher:latest;支持 macOS、Linux、Windows
MongoDB 的发布文章里说,做它是因为现有开源扫描工具慢、不灵活、误报多。文章附了和 TruffleHog、Gitleaks 的耗时对比,Kingfisher 在每种语言的测试仓库上都最快。
二、能力
2.1 找密钥
发布时有 700 多条检测规则;第三方评测网站 AppSec Santa 2026 年的统计是 1,051 条,覆盖 16 种语言。规则文件是 YAML,可以自己加。能扫的地方:
- 本地文件、目录、git 仓库连同全部提交历史
- 代码托管平台:GitHub、GitLab、Azure Repos、Bitbucket、Gitea、Hugging Face,可以按整个组织扫
- 云存储:AWS S3、Google Cloud Storage
- 容器镜像和镜像仓库
- 协作工具:Jira、Confluence、Slack、Microsoft Teams,以及 Postman
- 压缩包、SQLite 数据库、Python 字节码
kingfisher scan /path/to/repository
kingfisher scan github --organization my-org
kingfisher scan docker ghcr.io/owasp/wrongsecrets/wrongsecrets-master:latest-master
kingfisher scan s3 my-bucket --prefix backups/production/
命令照抄自项目 README。
2.2 验证密钥是否还能用
这是它和老一代扫描工具最大的区别。找到疑似密钥后,它会拿去调用对应服务商的接口:AWS 密钥调 GetCallerIdentity,数据库连接串试着连一下,GitHub 令牌查一下身份。结果分“有效”和“无效”。AppSec Santa 统计 1,051 条规则里有 516 条带这种在线验证。
kingfisher validate --rule github-pat "$GITHUB_PAT"
2.3 画出影响范围
README 里叫 Access Map / blast radius:对验证有效的密钥,继续查它属于哪个身份、有哪些权限、能碰到哪些资源。支持 43 家服务商,AWS 能分析角色切换,GCP 能分析服务账号冒用。
2.4 吊销
对支持的密钥类型,可以直接调服务商接口把它作废,例子是 GitHub PAT。
kingfisher revoke --rule github-pat "$GITHUB_PAT"
结果可以输出成 JSON、JSONL、SARIF、HTML 等格式,方便接进 CI 或安全平台。
三、正常使用场景
- CI 里每次提交扫一遍,发现密钥就拦下合并。
- 安全团队定期扫全组织的仓库、S3 和镜像,找历史遗留的硬编码密钥。
- 出了泄露事件,把所有可疑文本丢进去,快速分出哪些密钥还活着、先换哪一把。
- 做渗透测试或红队演练时评估一个组织的密钥卫生。
它全程在本机运行,扫出来的密钥不会发给 MongoDB。验证那一步会连服务商接口,这是验证本身的需要。
四、落到攻击者手里
防守方和攻击方用的是同一套功能。Kingfisher 是公开、免费、装一条命令就能用的工具,攻击者用它不需要任何门槛。
4.1 攻击者怎么用
- 拿到入口:一个能读仓库的令牌,一批泄露的 CI 日志,或者一个公开 S3 桶。
- 扫:
scan github --organization把整个组织的仓库连历史扫一遍;CI 日志、镜像也一起扫。 - 验证:自动把每个候选密钥拿去服务商那里试,筛掉已经作废的。
- 排序:用影响范围功能看哪把是管理员、能碰到生产数据库、能推镜像。
- 动手:拿排在前面的密钥做真正的事,比如跑大模型(LLMjacking)、下载数据、推后门镜像。这一步不再用 Kingfisher。
4.2 会造成的破坏
| 方面 | 说明 |
|---|---|
| 把泄露变成可用清单 | 一次泄露常常有几十上百个字符串。手工逐个试要几小时,它几分钟给出“还能用的有哪些”。防守方换密钥的时间窗口被压缩 |
| 找到被忘掉的密钥 | 扫 git 全部历史,早就删掉但没作废的密钥也会被找出来 |
| 定位最值钱的目标 | 影响范围功能直接告诉攻击者哪把密钥权限最大,省掉试探 |
| 验证动静小 | AWS 的 GetCallerIdentity 不需要任何权限,被拒绝的密钥也能调,很少有告警规则盯它 |
| 跨平台 | 同一次运行里验证 AWS、GitHub、Slack、OpenAI、数据库等多家的密钥,每家只在自己的日志里留一条 |
| 吊销功能被滥用 | 能力上可以把受害方的有效令牌作废,造成服务中断。没有查到公开的实际案例,列为可能性 |
它不会利用漏洞,不会植入后门,不会改数据。真正的损失发生在攻击者拿着验证过的密钥去用的那一步。
五、怎么防
- 自己先扫:在 CI 和定期任务里跑 Kingfisher 或同类工具,攻击者能扫到的先扫到。
- 少用长期密钥:GitHub Actions 连 AWS 改用 OIDC 拿临时凭证,不在 Actions 密钥里放 AWS access key。
- 泄露后按“已被验证”处理:攻击者几分钟内就能知道哪些密钥有效,轮换要按小时算,不能按天。
- 盯身份查询:对来自陌生 IP 的
GetCallerIdentity设告警,GuardDuty 能做一部分。 - 给密钥加来源限制:IAM 策略加
aws:SourceIp或 VPC 条件,被偷走的密钥在别处验证得过,用起来会被拒。 - 开 GitHub 的密钥扫描和推送拦截,阻止密钥进仓库。
六、方法与来源
工具信息来自项目 README、MongoDB 发布文章和几篇报道,取于 2026-10-06。规则数量有两个口径:发布时官方说 700 多条,1,051 条和 516 条来自第三方评测网站,没有在官方文档里核对到。吊销功能被攻击者滥用的说法是按能力推断,没有找到实际案例。
- MongoDB,github.com/mongodb/kingfisher,项目 README
- MongoDB 博客,Mick Grove,《Introducing Kingfisher: Real-Time Secret Detection and Validation》,2025-06-16,mongodb.com
- The Stack,《MongoDB open-sources “Kingfisher” secrets scanner》,thestack.technology
- It’s FOSS,《MongoDB Launches an Open Source Real-Time Secret Scanner》,itsfoss.com
- AppSec Santa,《Kingfisher 2026: MongoDB's Rust Secret Scanner》,appsecsanta.com