praetorian-inc/noseyparker
GitHub: praetorian-inc/noseyparker
一款基于 Rust 的高性能命令行工具,专注于从文本数据及 Git 历史记录中挖掘 secrets 和敏感信息。
Stars: 2310 | Forks: 129
# Nosey Parker 现已被 Titus 取代。Nosey Parker 已正式退役
请参阅我们的公告文章 https://www.praetorian.com/blog/titus-open-source-secret-scanner/。Titus 仓库可以在 https://github.com/praetorian-inc/titus 找到。
## 概述
Nosey Parker 是一款用于在文本数据中发现秘密和敏感信息的 CLI 工具。
从本质上讲,它是一个类似于 `grep` 的专用工具,用于检测秘密。
它的设计初衷是用于进攻性安全测试(例如,在红队行动中实现横向移动),但它也可用于防御性安全测试。
在 [Praetorian](https://praetorian.com) 的数百次进攻性安全评估中,它都发现了秘密。
**关键特性:**
- **灵活性:** 原生支持扫描文件、目录、GitHub 和 Git 历史记录,并具有可扩展的输入枚举机制
- **实战检验的规则:** 使用正则表达式,包含根据安全工程师反馈选出的 [188 条规则](crates/noseyparker/data/default/builtin/rules),具有高精确度
- **信噪比:** 对共享相同秘密的匹配项进行去重,将审查负担减少 10-1000 倍甚至更多
- **速度与可扩展性:** 可以在多核系统上以 GB/s 的速度进行扫描,并在安全评估中扫描过高达 20TB 的输入
典型的工作流程分为三个阶段:
1. 使用 `scan` 命令扫描感兴趣的内容
2. 使用 `report` 命令报告扫描结果的详细信息
3. 审查并对发现进行分类
## 安装
### [Homebrew](https://brew.sh) formula
```
brew install noseyparker
```
### 预编译二进制文件
[最新发布页面](https://github.com/praetorian-inc/noseyparker/releases/latest) 包含针对 x86_64/aarch64 Linux 和 macOS 的预编译二进制文件。
### Docker: x86_64/aarch64
```
docker pull ghcr.io/praetorian-inc/noseyparker:latest
```
**最近的提交** 也可以通过 `main` 标签获取。
### Docker: x86_64/aarch64, Alpine 基础镜像:
```
docker pull ghcr.io/praetorian-inc/noseyparker-alpine:latest
```
**最近的提交** 也可以通过 `main` 标签获取。
### Arch Linux 软件包
### Windows
Nosey Parker 无法原生在 Windows 上构建 ([#121](https://github.com/praetorian-inc/noseyparker/issues/121))。
但可以使用 [WSL1](https://en.wikipedia.org/wiki/Windows_Subsystem_for_Linux) 和原生 Linux 版本在 Windows 上运行。
### 从源代码构建
```
Docker 容器运行时以 `/scan` 作为其工作目录,因此将 `$PWD` 挂载到容器中的 `/scan` 将使命令行调用中的 tab 补全和相对路径正常工作。
### 扫描文件系统内容,包括本地 Git 仓库

Nosey Parker 原生支持扫描文件、目录和 Git 仓库的完整历史记录。
例如,如果你在本地 `cpython.git` 处有一个 [CPython](https://github.com/python/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`。
### 扫描来自 HTTPS URL 的 Git 仓库
例如,要扫描 Nosey Parker 仓库本身:
```
noseyparker scan --datastore np.noseyparker --git-url https://github.com/praetorian-inc/noseyparker
```
有关更多详细信息,请参阅 `noseyparker help scan`。
### 扫描 GitHub 用户或组织的 Git 仓库
使用 `--github-user=USER` 或 `--github-org=ORG`。例如,要扫描属于 [`octocat`](https://github.com/octocat) 用户的可访问仓库:
```
noseyparker scan --datastore np.noseyparker --github-user octocat
```
如果 `NP_GITHUB_TOKEN` 环境变量中有可用的 GitHub token,这些输入说明符将使用它。
提供访问令牌可以获得更高的 API 速率限制,并可能使你能够访问更多仓库。
有关更多详细信息,请参阅 `noseyparker help scan`。
### 交互式审查和注释发现
请参阅配套项目,[Nosey Parker Explorer](https://github.com/praetorian-inc/noseyparkerexplorer):

### 以人类可读的文本格式报告发现

### 以 JSON 格式报告发现

### 汇总发现
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 枚举仓库
使用 `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 token,此命令将使用它。
提供访问令牌可以获得更高的 API 速率限制,并可能使你能够访问更多仓库。
通过 `--format=FORMAT` 选项支持其他输出格式,包括 JSON 和 JSON lines。
有关更多详细信息,请参阅 `noseyparker help github`。
## 集成
Nosey Parker 有一些第三方集成:
- Nosey Parker 打包在 [Homebrew](https://formulae.brew.sh/formula/noseyparker) 中
- Nosey Parker 打包在 [Arch Linux](https://aur.archlinux.org/packages/noseyparker) 中
- 提供了一个运行 Nosey Parker 的 [GitHub Action](https://github.com/bpsizemore/noseyparker-action)
- [DefectDojo](https://defectdojo.org) 包含一个 [Nosey Parker v0.16 JSON 解析器](https://github.com/DefectDojo/django-DefectDojo/blob/c182e9ca9d8f981c15de2018f948fe69c4d1a800/docs/content/en/integrations/parsers/file/noseyparker.md)
- [Nemesis](https://github.com/SpecterOps/Nemesis) 包含对 Nosey Parker 的支持
- [noseyparker-compact](https://github.com/metaory/noseyparker-compact) 提供紧凑的报告后处理器
- [segfault.net 一次性 root 服务器](https://www.thc.org/segfault/) 预装了 Nosey Parker
如果你有一个未在此处列出的集成想要分享,请创建一个 PR。
## 贡献
请在 [讨论](https://github.com/praetorian-inc/noseyparker/discussions) 区提问或分享想法。
欢迎贡献,特别是新的正则表达式规则。
开发新的正则表达式规则在[单独的文档](docs/RULES.md)中有详细说明。
如果你正在考虑进行重大的代码更改,请先[提出 issue](https://github.com/praetorian-inc/noseyparker/issues/new) 或[发起讨论](https://github.com/praetorian-inc/noseyparker/discussions/new/choose)。
这个项目启用了许多鼓励你使用的 [pre-commit](https://pre-commit.com/) hooks。
要在你的本地仓库中安装它们,请确保你已经安装了 `pre-commit` 并运行:
```
$ pre-commit install
```
这些检查将有助于快速检测简单的错误。
## 许可证
Nosey Parker 根据 [Apache License, Version 2.0](LICENSE) 获得许可。
#### 1. 安装前置条件
这已在 x86_64 和 aarch64 架构的多个 Ubuntu Linux 和 macOS 版本上进行了测试。
必需的依赖项:
- `cargo`:推荐方法:从 安装
- `cmake`:用于构建 `vectorscan-sys` crate 和其他一些依赖项
- `boost`:用于构建 `vectorscan-sys` crate(支持的版本 `>=1.57`)
- `git`:用于将版本信息嵌入到 `noseyparker` CLI 中
- `patch`:用于构建 `vectorscan-sys` crate
- `pkg-config`:用于构建 `vectorscan-sys` crate
- `sha256sum`:用于计算摘要(通常由 `coreutils` 包提供)
- `zsh`:构建脚本需要
#### 2. 使用 [`create-release.zsh`](scripts/create-release.zsh) 脚本进行构建
```
$ rm -rf release && ./scripts/create-release.zsh
```
如果成功,这将在 `release` 处生成一个包含发布产物的目录结构。
命令行程序将位于 `release/bin/noseyparker`。
## 获取帮助
运行不带参数的 `noseyparker` 二进制文件会打印顶级帮助信息并退出。
你可以通过运行 `noseyparker COMMAND -h` 来获取特定命令的简略帮助。
使用 `help` 命令或长格式的 `--help` 选项可以获得更详细的帮助。
预编译的发布版本还包含将命令行帮助收集在一起的 manpages。
这些 manpages 也已转换为 Markdown 格式,并包含在仓库 [此处](docs/v0.17.0/man/man1)。
如果你有本文档未解答的问题,请[发起讨论](https://github.com/praetorian-inc/noseyparker/discussions/new/choose)。
## 术语和数据模型
### 数据存储 (Datastore)
_数据存储_ 是 Nosey Parker 用来记录其发现并维护其内部状态的特定目录。
如果需要,`scan` 命令会隐式创建一个数据存储。
### Blobs
每个被扫描的输入称为一个 _blob_。每个 blob 都有一个唯一的 blob ID,这是一个按照 `git` 方式计算的 SHA-1 摘要。
### 来源 (Provenance)
每个 blob 都有一个或多个与其关联的 _来源_ 条目。
来源条目是描述如何发现输入的元数据,例如文件系统上的文件或 Git 仓库历史记录中的文件。
### 规则 (Rules)
Nosey Parker 是一个使用正则表达式的基于规则的系统。
每个 _规则_ 都有一个模式,其中包含至少一个捕获组,用于将匹配内容与周围环境隔离。
你可以使用 `noseyparker rules list` 列出可用的规则。
### 规则集 (Rulesets)
规则的集合被组织成一个 _规则集_。
Nosey Parker 的默认规则集包含用于检测看似秘密内容的规则。
还有其他可用的规则集;你可以使用 `noseyparker rules list.` 列出它们。
### 匹配 (Matches)
当规则的模式匹配到输入时,会产生一个 _匹配_。
一个匹配由规则、blob ID、起始字节偏移量和结束字节偏移量唯一定义;这些字段用于计算唯一的匹配标识符。
### 发现 (Findings)
共享相同规则和捕获组的匹配项会被合并为一个 _发现_。
换句话说,一个 _发现_ 是一组匹配。
这是 Nosey Parker 的顶级报告单位。
## 使用示例
### 注意:当使用 Docker 时...
当使用 Docker 镜像时,在以下命令中将 `noseyparker` 替换为使用挂载卷的 Docker 调用:
```
docker run -v "$PWD":/scan ghcr.io/praetorian-inc/noseyparker:latest 标签:AMSI绕过, Docker, GitHub安全, Git历史扫描, LLM应用, offensive security, Praetorian, Rust, StruQ, Titus, 云安全监控, 可视化界面, 威胁检测, 安全防御评估, 密钥发现, 文档结构分析, 秘密检测, 网络安全, 网络流量审计, 通知系统, 通知系统, 防御性安全, 隐私保护, 静态分析