请参见我们的公告文章 https://www.praetorian.com/blog/titus-open-source-secret-scanner/。Titus 仓库可在 https://github.com/praetorian-inc/titus 找到
Nosey Parker 是一个 CLI 工具,用于在文本数据中查找密钥和敏感信息。它本质上是一个专门用于检测密钥的特殊 grep 类工具。
它专为攻击性安全设计(例如,在红队中实现横向移动),但也可以用于防御性安全测试。它在 Praetorian 的数百次攻击性安全参与中发现了密钥。
主要特性:
典型工作流程分为三个阶段:
scan 命令扫描感兴趣的输入report 命令报告扫描结果的详细信息brew install noseyparker
最新发布页面 包含适用于 x86_64/aarch64 Linux 和 macOS 的预编译二进制文件。
docker pull ghcr.io/praetorian-inc/noseyparker:latest
最新提交也可以通过 main 标签获取。
docker pull ghcr.io/praetorian-inc/noseyparker-alpine:latest
最新提交也可以通过 main 标签获取。
https://aur.archlinux.org/packages/noseyparker
Nosey Parker 不原生支持 Windows 构建(#121)。但可以使用 WSL1 和原生 Linux 版本在 Windows 上运行。
已在多种 Ubuntu Linux 和 macOS 版本以及 x86_64 和 aarch64 架构上测试通过。
所需依赖:
cargo:推荐方式:从 https://rustup.rs 安装cmake:用于构建 vectorscan-sys crate 和其他一些依赖boost:用于构建 vectorscan-sys crate(支持的版本 >=1.57)git:用于将版本信息嵌入 noseyparker CLIpatch:用于构建 vectorscan-sys cratepkg-config:用于构建 vectorscan-sys cratesha256sum:用于计算摘要(通常由 包提供)运行 noseyparker 二进制文件而不带参数将打印顶层帮助信息并退出。您可以通过运行 noseyparker COMMAND -h 获取特定命令的简要帮助。更详细的帮助信息可通过 help 命令或长格式 --help 选项获取。
预发布版本还附带手册页,将命令行帮助信息集中在一处。这些手册页已转换为 Markdown 格式,并存储在仓库的 docs/v0.17.0/man/man1 目录中。
如果您有本文档未回答的问题,请 发起讨论。
数据存储 是一个特殊目录,Nosey Parker 用它来记录发现和维护内部状态。scan 命令会在需要时隐式创建数据存储。
每个扫描的输入称为一个 数据块。每个数据块都有一个唯一的数据块 ID,它是一个采用与 git 相同方式计算的 SHA-1 摘要。
每个数据块关联一个或多个 溯源 条目。溯源条目是描述输入如何被发现的元数据,例如文件系统上的文件或 Git 仓库历史中的文件。
Nosey Parker 是一个基于正则表达式的规则系统。每条 规则 包含一个模式,其中至少有一个捕获组,用于从上下文中隔离匹配内容。您可以使用 noseyparker rules list 列出可用规则。
规则集合按 规则集 组织。Nosey Parker 的默认规则集包含用于检测看起来像密钥的规则。还有其他可用规则集;您可以使用 noseyparker rules list 列出它们。
当规则的模式匹配输入时,会产生一个 匹配。匹配由规则、数据块 ID、起始字节偏移量和结束字节偏移量唯一确定;这些字段用于计算唯一的匹配标识符。
共享相同规则和捕获组的匹配被组合成一个 发现。换句话说,发现 是一组匹配。这是 Nosey Parker 报告的最高级别单元。
使用 Docker 镜像时,请将以下命令中的 noseyparker 替换为使用挂载卷的 Docker 调用:
docker run -v "$PWD":/scan ghcr.io/praetorian-inc/noseyparker:latest <ARGS>
Docker 容器以 /scan 作为工作目录,因此将 $PWD 挂载到容器中的 /scan 将使制表符补全和命令行中的相对路径正常工作。

Nosey Parker 原生支持扫描文件、目录以及 Git 仓库的完整历史。
例如,如果您在本地 cpython.git 目录下有一个 CPython 的 Git 克隆,您可以使用 scan 命令扫描它。Nosey Parker 将在 cpython.np 创建一个新的数据存储,并将扫描结果保存其中。(名称 cpython.np 不重要,可以是任何名称。)
$ noseyparker scan -d cpython.np cpython.git
Scanned 19.19 GiB from 335,849 blobs in 17 seconds (1.11 GiB/s); 2,178/2,178 new matches
Rule Findings Matches Accepted Rejected Mixed Unlabeled
──────────────────────────────────────────────────────────────────────────────────────────────
Generic API Key 1 8 0 0 0 1
Generic Password 8 1,283 0 0 0 8
Generic Username and Password 2 40 0 0 0 2
HTTP Bearer Token 1 108 0 0 0 1
PEM-Encoded Private Key 61 151 0 0 0 61
netrc Credentials 27 588 0 0 0 27
Run the `report` command next to show finding details.
详情请参阅 noseyparker help scan。
例如,扫描 Nosey Parker 自己的仓库:
noseyparker scan --datastore np.noseyparker --git-url https://github.com/praetorian-inc/noseyparker
详情请参阅 noseyparker help scan。
使用 --github-user=USER 或 --github-org=ORG。例如,扫描 octocat 用户可访问的仓库:
noseyparker scan --datastore np.noseyparker --github-user octocat
这些输入说明符将使用 NP_GITHUB_TOKEN 环境变量中(如果可用)的可选 GitHub 令牌。提供访问令牌可获得更高的 API 速率限制,并可能使您访问更多仓库。
详情请参阅 noseyparker help scan。
请参阅配套项目 Nosey Parker Explorer:



Nosey Parker 在完成扫描后会打印发现的摘要。您也可以在扫描后单独运行此步骤:
$ noseyparker summarize --datastore np.cpython
Rule Distinct Groups Total Matches
───────────────────────────────────────────────────────────
PEM-Encoded Private Key 1,076 1,192
Generic Secret 331 478
netrc Credentials 42 3,201
Generic API Key 2 31
md5crypt Hash 1 2
通过 --format=FORMAT 选项还支持其他输出格式,包括 JSON 和 JSON lines。
详情请参阅 noseyparker help summarize。
使用 github repos list 命令列出属于 GitHub 用户或组织的仓库 URL。此命令使用 GitHub REST API 枚举属于用户或组织的仓库。例如:
$ noseyparker github repos list --user octocat
https://github.com/octocat/Hello-World.git
https://github.com/octocat/Spoon-Knife.git
https://github.com/octocat/boysenberry-repo-1.git
https://github.com/octocat/git-consortium.git
https://github.com/octocat/hello-worId.git
https://github.com/octocat/linguist.git
https://github.com/octocat/octocat.github.io.git
https://github.com/octocat/test-repo1.git
此命令将使用 NP_GITHUB_TOKEN 环境变量中(如果可用)的可选 GitHub 令牌。提供访问令牌可获得更高的 API 速率限制,并可能使您访问更多仓库。
通过 --format=FORMAT 选项还支持其他输出格式,包括 JSON 和 JSON lines。
详情请参阅 noseyparker help github。
Nosey Parker 有几个第三方集成:
如果您有未在此列出的集成想分享,请创建一个 PR。
请在 讨论 区域提问或分享想法。
欢迎贡献,特别是新的正则表达式规则。开发新的正则表达式规则在 单独文档 中有详细说明。
如果您正在考虑进行重大代码更改,请先 提交问题 或 发起讨论。
本项目启用了多个 pre-commit 钩子,建议您使用。要在本地仓库中安装它们,请确保已安装 pre-commit 并运行:
$ pre-commit install
这些检查将有助于快速检测简单错误。
Nosey Parker 基于 Apache License, Version 2.0 许可。
coreutilszsh:用于构建脚本create-release.zsh 脚本构建$ rm -rf release && ./scripts/create-release.zsh
如果成功,将在 release 目录下生成包含发布工件的目录结构。命令行程序将在 release/bin/noseyparker。