grcengineering/nthpartyfinder

GitHub: grcengineering/nthpartyfinder

一款用 Rust 编写的跨平台 CLI 工具,通过公开信号递归发现域名的 Nth 方供应商关系并生成带证据的供应链图谱。

Stars: 1 | Forks: 0

# Nth Party Finder [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/grcengineering/nthpartyfinder/actions/workflows/build.yml) [![Security](https://static.pigsec.cn/wp-content/uploads/repos/cas/11/116530ae2b0dfb0390d7e5d43e4b803c1d427fbd70342e6f6fee028ad54a6dac.svg)](https://github.com/grcengineering/nthpartyfinder/actions/workflows/security.yml) [![OpenSSF Scorecard](https://static.pigsec.cn/wp-content/uploads/repos/cas/f3/f3a65d47b9bca0d58f5096d2122d67f03dcf1853eb5aeb80be08786490206dd6.svg)](https://github.com/grcengineering/nthpartyfinder/actions/workflows/scorecard.yml) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) **将你的供应商风险面映射至 N 度。** `nthpartyfinder` 是一款快速、跨平台的 CLI 工具,能够发现某个域名的第三方、第四方及更深层次的供应商关系——即大多数 TPRM 工具中通常在“4th party”处止步的固有供应链风险——它利用 DNS、证书透明度 (Certificate Transparency)、信任中心子处理者页面、运行时 Web 流量、SaaS 租户探测以及子域名枚举来实现。使用 Rust 构建;可通过内置的 NER 模型离线运行。 作为一款 [GRC Engineering](https://grc.engineering) 工具:它将手动、不完整的供应商映射工作转化为可重复、可生成证据的命令。 ## 为什么需要 安全 GRC 团队负责第三方网络风险,但其中大部分风险是*固有的*——你供应商的供应商,以及他们下游的供应商。手动构建这个关系图非常繁琐,而且通常只能深入一层。`nthpartyfinder` 仅通过公开信号递归遍历该图谱,让你在评估之前就能看清域名背后究竟存在哪些 Nth 方。 ## 发现内容 每一条关系都带有其推导依据的**证据**——原始的 DNS 记录、观察到的网络请求、信任中心 URL——因此发现结果是可审计的,而非简单的断言。 | 方法 | 信号 | 默认 | |--------|--------|---------| | **DNS** | SPF / DMARC / DKIM / MX / NS / CNAME / 验证 TXT 记录 | 始终开启 | | **Subprocessor** | 信任中心链接的供应商/子处理者列表 | 开启 | | **Web Traffic** | 页面源代码中的第三方 SDK + 运行时网络请求 (headless Chrome) | 配置/标志 | | **SaaS Tenant** | 租户子域名 (例如 `company.slack.com`) | 配置/标志 | | **Subfinder** | 通过 CNAME 发现进行子域名枚举 | 配置/标志 | | **CT Logs** | Certificate Transparency 日志——在多个提供商之间进行轮询 | 配置/标志 | 组织名称通过 WHOIS/RDAP、精心整理的已知供应商数据集以及可选的离线 GLiNER NER 模型进行解析——无需付费 API,且默认扫描无需任何配置。 ### Certificate Transparency 提供商 CT 日志发现在共享游标上**跨多个提供商进行轮询**(分散负载,防止任何单个聚合器过载——crt.sh 在广泛发散查询时会返回 HTTP 429),并在出现任何错误时**故障转移**到下一个提供商,因此限流或中断只会变成一次可恢复的查询,而不是默默丢失数据。 | 提供商 | 默认 | 凭证(可选) | |----------|---------|----------------------| | [crt.sh](https://crt.sh) | 始终开启(匿名) | — | | [SSLMate Cert Spotter](https://sslmate.com/ct_search_api/) | 始终开启(匿名) | `NTHPARTYFINDER_CERTSPOTTER_TOKEN` 可提高速率限制 | | [MerkleMap](https://www.merklemap.com) | 配置后加入 | `NTHPARTYFINDER_MERKLEMAP_TOKEN`(免费 API 密钥) | | [Censys](https://censys.com) | 配置后加入 | `NTHPARTYFINDER_CENSYS_PAT` + `NTHPARTYFINDER_CENSYS_ORG_ID` | crt.sh 和 Cert Spotter 是匿名的,并且始终在轮询队列中。MerkleMap 和 Censys——剩下的两个备受推崇的 CT 查询 API(每一个曾经匿名的替代品,包括 Google、Entrust 和 Meta 的产品,都已被停用)——没有匿名层级,因此只有当它们的 API 凭证在环境中配置后,它们才会加入轮询。你可以设置任意子集;轮询机制会自动适应已配置的提供商。 ## 安装 ### Docker ``` docker pull ghcr.io/grcengineering/nthpartyfinder:latest docker run -v "$(pwd)/output:/output" ghcr.io/grcengineering/nthpartyfinder:latest \ -d example.com -r 2 -f json -o /output/results ``` ### 预编译二进制文件 从 [Releases](https://github.com/grcengineering/nthpartyfinder/releases/latest) 下载适用于你平台的压缩包并解压: | 平台 | 文件 | |----------|-------| | macOS (Apple Silicon) | `nthpartyfinder-aarch64-apple-darwin.tgz` | | macOS (Intel) | `nthpartyfinder-x86_64-apple-darwin.tgz` | | Linux (x86-64) | `nthpartyfinder-x86_64-unknown-linux-gnu.tgz` | | Windows (x86-64) | `nthpartyfinder-x86_64-pc-windows-msvc.tgz` | 每个压缩包都附带一个 `.sha256` 校验和,且每个版本都会发布 [SLSA 构建来源](https://slsa.dev) (`multiple.intoto.jsonl`),以便你验证该二进制文件确实是由本仓库的发布工作流构建的。 ### 从源码构建 ``` git clone https://github.com/grcengineering/nthpartyfinder.git cd nthpartyfinder/nthpartyfinder # 默认 build 内嵌 NER 模型(约 175 MB binary): cargo build --release # 或者无 NER 的 slim build(约 15 MB): cargo build --release --no-default-features ``` **前置条件:** `PATH` 中需存在 `whois` 客户端 (`apt install whois` / `brew install whois`;Windows 可通过 WSL 或 SysInternals 获取)。 ## 用法 ``` # 默认 scan(CSV 到您的 Desktop) nthpartyfinder -d example.com # 限制 depth,输出 JSON,命名 file nthpartyfinder -d example.com --depth 2 -f json -o example_vendors.json # Deep scan:启用所有 discovery method,无 timeout,HTML report nthpartyfinder -d example.com --depth 3 -f html \ --enable-subdomain-discovery --enable-saas-tenant-discovery \ --enable-ct-discovery --enable-web-traffic-discovery --timeout 0 # 仅 DNS,快速且安静 nthpartyfinder -d example.com --dns-only ``` 运行 `nthpartyfinder --help` 获取完整的参数说明。以下是一些值得了解的参数: - `-r, --depth ` —— 递归深度。省略此项则会持续递归,直到找不到新供应商为止。 - `-f, --output-format` —— `csv`(默认)、`json`、`markdown` 或 `html`。 - `--timeout ` —— 默认 `600`,针对深度为 1 的扫描进行了调优。**深层扫描或冷缓存扫描通常需要超过 600 秒**(通常为 1500–3000 秒);请调高此值 (`--timeout 1800`) 或禁用超时 (`--timeout 0`)。发生超时时,扫描会写入检查点并以非零状态退出,而不会输出空报告。 - `--include-infra` —— 默认情况下 AWS/Google/Cloudflare 等会被作为干扰项过滤掉;此参数会保留它们。 - `--input-file ` + `--batch-parallel ` —— 从 CSV/JSON 列表批量扫描多个域名。 ### 负责任的扫描 ## 输出 **CSV**(默认)—— 每条关系一行:根客户域名/组织、Nth 方域名/组织、层级、引用它的客户、来源记录类型(`DNS::TXT::SPF`、`HTTP::SUBPROCESSOR`、`DISCOVERY::WEBPAGE_NETWORK`、`DISCOVERY::CT_LOG`……)以及原始证据。 **JSON** —— 包含相同的关系,外加一个摘要块: ``` { "summary": { "total_relationships": 12, "max_depth": 3, "unique_domains": 8, "unique_organizations": 6 }, "relationships": [ … ] } ``` **HTML** —— 交互式的分层供应商图谱报告。**Markdown** —— 适用于工单和文档的可读摘要。 ## 工作原理 1. **DNS 分析** —— 查询目标的 TXT/MX/NS/CNAME 记录。 2. **扩展发现** —— 可选地添加信任中心子处理者、CT 日志、Web 流量、SaaS 租户和子域名。 3. **组织解析** —— WHOIS/RDAP → 精心整理的数据集 → 离线 NER,并跟踪每次归因的来源。 4. **递归** —— 对每个发现的供应商重复此过程,直到达到配置的深度,并在遇到公共基础设施基础节点时停止,以防止图谱失控。 5. **导出** —— CSV / JSON / Markdown / HTML,每条关系都带有其证据。 ## 配置 CLI 参数可覆盖可选的 TOML 配置: ``` nthpartyfinder --init # writes ./config/nthpartyfinder.toml ``` 配置区块:`[http]`、`[dns]`、`[patterns]`、`[analysis]`、`[discovery]`、`[rate_limits]`。每个设置都有有效的默认值——配置文件完全是可选的。 ## 安全与供应链 本工具专用于合法的安全和 GRC 场景。它内置了安全策略 ([SECURITY.md](SECURITY.md))、SHA 固定的 GitHub Actions、CodeQL SAST、依赖/公告扫描 (`cargo audit` / `cargo deny`)、机密扫描、OpenSSF Scorecard,以及每个版本的签名 SLSA 来源证明。 ## 许可证 [MIT](LICENSE)。
标签:GitHub, GRC工程, Python安全, Rust, URL枚举, 企业合规, 供应链风险管理, 可视化界面, 实时处理, 第三方风险管理, 网络流量审计, 请求拦截, 通知系统