返回整理

Tool brief · 2026-10-06

Kingfisher 密钥扫描工具

MongoDB 开源的密钥扫描工具 Kingfisher:它能做什么,安全团队怎么用,攻击者拿到它之后能造成什么破坏。

资料截至 2026-10-06工具说明

先说结论

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,可以自己加。能扫的地方:

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 或安全平台。

三、正常使用场景

它全程在本机运行,扫出来的密钥不会发给 MongoDB。验证那一步会连服务商接口,这是验证本身的需要。

四、落到攻击者手里

防守方和攻击方用的是同一套功能。Kingfisher 是公开、免费、装一条命令就能用的工具,攻击者用它不需要任何门槛。

4.1 攻击者怎么用

  1. 拿到入口:一个能读仓库的令牌,一批泄露的 CI 日志,或者一个公开 S3 桶。
  2. 扫:scan github --organization 把整个组织的仓库连历史扫一遍;CI 日志、镜像也一起扫。
  3. 验证:自动把每个候选密钥拿去服务商那里试,筛掉已经作废的。
  4. 排序:用影响范围功能看哪把是管理员、能碰到生产数据库、能推镜像。
  5. 动手:拿排在前面的密钥做真正的事,比如跑大模型(LLMjacking)、下载数据、推后门镜像。这一步不再用 Kingfisher。

4.2 会造成的破坏

Kingfisher 在攻击里起的作用
方面说明
把泄露变成可用清单一次泄露常常有几十上百个字符串。手工逐个试要几小时,它几分钟给出“还能用的有哪些”。防守方换密钥的时间窗口被压缩
找到被忘掉的密钥扫 git 全部历史,早就删掉但没作废的密钥也会被找出来
定位最值钱的目标影响范围功能直接告诉攻击者哪把密钥权限最大,省掉试探
验证动静小AWS 的 GetCallerIdentity 不需要任何权限,被拒绝的密钥也能调,很少有告警规则盯它
跨平台同一次运行里验证 AWS、GitHub、Slack、OpenAI、数据库等多家的密钥,每家只在自己的日志里留一条
吊销功能被滥用能力上可以把受害方的有效令牌作废,造成服务中断。没有查到公开的实际案例,列为可能性

它不会利用漏洞,不会植入后门,不会改数据。真正的损失发生在攻击者拿着验证过的密钥去用的那一步。

五、怎么防

  1. 自己先扫:在 CI 和定期任务里跑 Kingfisher 或同类工具,攻击者能扫到的先扫到。
  2. 少用长期密钥:GitHub Actions 连 AWS 改用 OIDC 拿临时凭证,不在 Actions 密钥里放 AWS access key。
  3. 泄露后按“已被验证”处理:攻击者几分钟内就能知道哪些密钥有效,轮换要按小时算,不能按天。
  4. 盯身份查询:对来自陌生 IP 的 GetCallerIdentity 设告警,GuardDuty 能做一部分。
  5. 给密钥加来源限制:IAM 策略加 aws:SourceIp 或 VPC 条件,被偷走的密钥在别处验证得过,用起来会被拒。
  6. 开 GitHub 的密钥扫描和推送拦截,阻止密钥进仓库。

六、方法与来源

工具信息来自项目 README、MongoDB 发布文章和几篇报道,取于 2026-10-06。规则数量有两个口径:发布时官方说 700 多条,1,051 条和 516 条来自第三方评测网站,没有在官方文档里核对到。吊销功能被攻击者滥用的说法是按能力推断,没有找到实际案例。

  1. MongoDB,github.com/mongodb/kingfisher,项目 README
  2. MongoDB 博客,Mick Grove,《Introducing Kingfisher: Real-Time Secret Detection and Validation》,2025-06-16,mongodb.com
  3. The Stack,《MongoDB open-sources “Kingfisher” secrets scanner》,thestack.technology
  4. It’s FOSS,《MongoDB Launches an Open Source Real-Time Secret Scanner》,itsfoss.com
  5. AppSec Santa,《Kingfisher 2026: MongoDB's Rust Secret Scanner》,appsecsanta.com