Zeroska/Ordo

GitHub: Zeroska/Ordo

Ordo 是一个基于 Claude Code 的 OSINT 情报分析工具包,通过提取和关联网站及应用的基础设施标识符,将分散线索聚类归因为同一运营集群并生成调查报告。

Stars: 1 | Forks: 0

# Ordo **专为 Claude Code 设计的 OSINT 调查工具包。** 从一个网站——或者其推广的应用——入手,追踪诈骗团伙,直抵**整个集群背后的操盘手**。 `WebPivot` · `BinaryPivot` · `IntelAnalysis` · `IntelGraph` · `IntelReport` · `IntelHarness` Claude Code 技能 · Python 3.8+ · 共享、可移植、无案例数据
repo: intelligence_assist
## 一分钟心智模型 你很少会只关注单个域名——你真正关心的是**谁在运营这个网络**,以及那些能暴露他们身份的标识符。本工具包能将一个种子线索转化为最终答案: 1. **收集** — 提取页面(或下载的应用)难以轻易更换的标识符:favicon hash、分析 ID、TLS 证书、后端主机、钱包、WHOIS、签名证书。 2. **摄取** — 每个标识符都会成为共享知识库中的一个**节点**;提供该标识符的主机会与之建立链接。 3. **关联** — 共享节点的域名属于**同一个集群**;分析师层会对归属进行判定并评估置信度。 4. **交付** — 生成网络图和可直接用于报告的 PDF/DOCX。 让这一切顺畅运作的秘诀在于:**网站及其推广的应用会发射出*相同*的 JSON 结构**,因此一条流水线就能自动将它们聚类在一起。 ``` flowchart LR S(["Seed
domain · URL · IP · binary"]) subgraph COLLECT direction TB WP["WebPivot
web page → pivot-JSON"] BP["BinaryPivot
APK / installer → pivot-JSON"] end KB[("Shared KB
graph of shared artifacts")] IA["IntelAnalysis
correlate · attribute · confidence"] OUT{{"Cluster
+ operator"}} IG["IntelGraph
network graph"] IR["IntelReport
PDF · DOCX"] S --> WP & BP WP --> KB BP --> KB KB --> IA --> OUT IA --> IG IA --> IR IA -. "next pivot" .-> COLLECT classDef seed fill:#1d857e22,stroke:#1d857e,color:#0b3b38; classDef store fill:#b07d1e22,stroke:#b07d1e,color:#4a3408; class S seed class KB store ``` ## 工具箱内容 包含六个技能——三个用于**收集**,一个用于**思考**,两个用于**发布**——它们共同构建于同一个共享知识库之上。 | 技能 | 角色 | 功能描述 | |---|---|---| | **WebPivot** | 🔎 Web 收集器 | 从页面中提取溯源特征——favicon hash、追踪/分析 ID、无密钥 RDAP WHOIS、加密钱包、TLS 证书 **+ JARM TLS 堆栈指纹**、CORS 信任的后端源、SaaS/无代码运营者 token、Telegram、页脚地址——并生成可直接运行的溯源查询(Shodan、PublicWWW、crt.sh、urlscan 等)。在每个种子上运行完整的 **Pivot Matrix**,标记应用下载漏斗,并搜寻拼写错误/高度相似的域名。 | | **BinaryPivot** | 📦 文件收集器 | 从诈骗网站提供的二进制文件(APK / `.exe` / `.dmg` / `.msi`)中静态提取 IOC:文件 hash、APK 签名证书、包名、嵌入式后端/C2 主机、Firebase 租户、钱包。生成 **WebPivot 格式的 JSON**,以便将应用与 Web 基础设施聚类在一起。 | | **IntelAnalysis** | 🧠 分析师 | 执行关联、归属判定(同工具包 / 同运营者 / 同黑客组织)、校准置信度,并决定下一步溯源方向。基于知识库进行推理——它**不负责**收集。 | | **IntelGraph** | 📈 可视化工具 | 根据案例数据生成图表、时间轴以及聚类的交互式网络图。 | | **IntelReport** | 📄 发布器 | 将完成的评估报告渲染成精美的 PDF + 可编辑的 DOCX(符合编辑排版规范,支持越南语的字体排印)。 | | **IntelHarness** | 🎛️ 案例驱动器 | 在你的 Claude 订阅中,以对话方式针对一个或多个种子驱动整个 收集 → 关联 → 评估 流水线。 | ### 单一契约实现链式协同 WebPivot **和** BinaryPivot 都会生成相同的 pivot-JSON:一个 `meta` 块、一个 `artifacts` 块(包含找到的每个标识符),以及一个排序过的 `pivots` 数组(可直接复制粘贴的查询语句)。由于下载的 APK 的后端主机与网站的后端主机被存入*同一个*字段中,**只需一个摄取器、一次关联扫描和一份集群报告,就能将网站及其应用整体覆盖。** 无论由哪个收集器发现,共享的 favicon hash、GA4 ID、钱包或签名证书都会成为**同一个知识库节点**——因此应用和网站最终会自然聚拢在一起。 ## 快速开始 ### 1. 安装
前置条件与注册技能(点击展开) **前置条件:** [Claude Code](https://claude.com/claude-code) (`claude --version`) 和 Python 3.8+。WebPivot 的核心功能仅需 Python 标准库即可运行。 Claude Code 会从 `~/.claude/skills/` 发现技能。将每个文件夹进行符号链接(一处编辑,处处生效): ``` # 从 repo root 开始 for s in WebPivot BinaryPivot IntelAnalysis IntelGraph IntelReport IntelHarness; do ln -s "$PWD/$s" ~/.claude/skills/$s done ``` 重启 Claude Code,然后通过以下命令验证:`/WebPivot`、`/BinaryPivot`、`/IntelAnalysis`、`/IntelGraph`、`/IntelReport`、`/IntelHarness`。使用 `/mcp`(server `intel`)确认共享工具接口。
可选依赖项 — 仅安装你用到的部分 ``` # WebPivot — 更快的 fetch + post-JS DOM 渲染(hosted-builder funnels / --render 所需) pip install requests playwright && playwright install chromium # BinaryPivot — 零必需 deps (stdlib)。如果存在,可选的 accelerators: # keytool (任意 JDK) → APK signing-cert SHA-256(最强的 same-operator pivot) # openssl → cert fallback · file/strings → typing + 更快的 sweep · requests → 更好的 download # IntelGraph — 图表 + 实体图 pip install matplotlib graphviz # graphviz also needs `dot`: brew install graphviz npm i -g @mermaid-js/mermaid-cli # only for Mermaid flows # render_network.py (交互式图表) 是零 dependency 的 — JS libs 已被 vendored。 # IntelReport — pandoc + 一个 LaTeX engine (xelatex) 用于 PDF;仅用 pandoc 用于 DOCX。 ```
### 2. 运行案例 — 三种方式,结果相同 根据你希望的驱动方式进行选择。这三种方式均使用相同的工具和案例文件。 **(a) 单条命令** — 具备确定性,无需 LLM,完全可复现: ``` CASE=cases/mycase; mkdir -p "$CASE" printf 'suspicious-site.example\nother-domain.example\n' > "$CASE/domains.txt" python3 tools/intel.py open mycase "$CASE/domains.txt" # extract → ingest → cluster python3 tools/intel.py open mycase "$CASE/domains.txt" --render --operator "name" # + network graph python3 tools/intel.py status mycase # audit what persisted # 或者将其作为一个可恢复的 convergence loop 来驱动 — collect → assess → chase the free frontier → repeat: python3 tools/intel.py loop mycase "$CASE/domains.txt" # first run (free-only pivots → zero credits) python3 tools/intel.py loop mycase # resume exactly where it paused (state.json) ``` **(b) 在 Claude Code 中通过对话运行** — 最适合进行人工判断并让 agent 自主选择下一个溯源方向: `IntelHarness` 会执行 收集 → 关联 → 评估,归档证据,绝不会让一个冷种子悄无声息地结束,并编写一份**带版本号和引证的评估报告**。有效的后续指令包括:*"converge the case"*(收敛案例)、*"cluster these 40 domains"*(聚类这 40 个域名)、*"render the network graph"*(渲染网络图)、*"make it a PDF"*(生成 PDF)。 **(c) 无人值守 / 批处理** — 无头 Agent-SDK 驱动器(需要 `ANTHROPIC_API_KEY`,按 token 计费): ``` source harness/.venv/bin/activate export ANTHROPIC_API_KEY=... python3 harness/orchestrator.py CASE-0001 --parallel --continue --depth 4 seed1.example seed2.example … ``` ## 揭秘底层逻辑
为什么每个特征物都能用于溯源 提取的每一个特征物都是经过精心挑选的,因为它们能**抵御网站的改头换面**——操盘手可以在几分钟内更改域名的名称和 Logo,但底层的基础设施和账户级标识符却很难轻易更换: - **Favicon hash** — 不同域名使用相同的图标 = 共享工具包/运营者。根据不同搜索引擎使用正确的算法生成(Shodan/FOFA = mmh3,Censys = md5,Netlas = sha256)。 - **分析 / 运营者 token** — GA4 `G-`、`GTM-`、AdSense `pub-`,以及 SaaS/无代码账户 ID。一个账户 ID 能将操盘手绑定过的所有资产串联起来,甚至是那些已被清洗过痕迹的资产。 - **实时 TLS 证书** — 如果 SANs 出现在*不同*的可注册域名上,这就是一条跨品牌的操盘手关联线索;通过指纹可以找到所有提供该确切证书的主机。 - **JARM TLS 堆栈指纹** — 这是服务器 TLS 堆栈(加密套件/扩展顺序)的*主动* hash,而**不是**叶子证书。它能在域名**和**证书完全轮换后依然存活,因此当操盘手重新签发所有内容后,你依然可以通过 Shodan 的 `ssl.jarm:` 重新锁定其源站。在 `--proxy` 下会被抑制——因为它属于原始套接字探测。 - **CORS 策略** — 主动探测会发送一个外部的 `Origin` 并读取 `Access-Control-Allow-Origin`。一个字面上的允许源会指明一个**受应用信任、但从未出现在页面 HTML 中的后端主机**。 - **重定向链、钱包(包括隐藏在 QR 码中的)、Telegram、WHOIS 注册人** — 每一个都是能追溯至操盘手的独立线索。 WebPivot 会在每个种子上提取**所有**这些信息(即 **Pivot Matrix**,`PivotMatrix.md`),而不是机会主义地随机选取——因为归因结论的可靠性取决于你*最有力*的共享特征物,如果在依赖 WHOIS 进行归因时,却让同样存在于该 DOM 中未被读取的 JARM 或账户 token 关联线索白白浪费,这是报告中典型的薄弱环节。它还可以对种子进行逆向操作:`--hunt-impersonation` 会扫描拼写错误域名、TLD 排列组合以及 crt.sh 的关键词命中,以便在这些仿冒域名**被举报之前**将其挖掘出来。 每次溯源都带有一个**置信度**(高/中/低),反映了其作为识别操盘手依据的唯一性程度。
主动与被动模式,以及 OPSEC 意识的数据收集 WebPivot 默认进行实时抓取,但**始终**也会抓取 Wayback CDX 时间轴——因为今天的一个停放页在去年可能就是一个活跃的诈骗漏斗。面对具有敌意或受 Cloudflare 验证保护的目标,它会逐步升级策略(UA 轮换 → `--proxy` 住宅 IP 出口 → `--render` 真实浏览器 → FlareSolverr),如果仍然失败,则退回被动数据源(Wayback 快照、urlscan 存储的 DOM),从而确保冷种子不会在死胡同里悄无声息地结束。当设置了代理时,原始套接字探测(TLS)会被抑制,以防泄露你的真实 IP。
成本核算 — 两个独立的计费表 - **Anthropic 模型成本**(用于 agent 的推理)— 由 SDK 运行框架针对每次运行捕获到 `cases//run_cost.jsonl` 中。在交互式的 Claude Code 中,可运行 `/cost` 查看。 - **第三方 API 额度**(FOFA / WhoisXML / urlscan / IPinfo / Shodan)— **不包含**在模型成本内。会记录到 `MEMORY/api_usage.jsonl` 中并在每次运行后进行汇总。当你在报告中体现案例开销时,请说明具体拆分情况。
### 文件存放位置 ``` cases// domains.txt seed list raw/.json one pivot-JSON per host/binary shared.txt cluster seeds (fast path) dom/.html collected DOM SUMMARY.md current assessment assessments/_* immutable snapshots (audit) state.json resumable-loop cursor assessment.json gaps / next_pivots / metered_leads run_cost.jsonl per-run Anthropic model cost evidence/manifest.jsonl + master_pivots.csv knowledge/ the attributed KB (facts, entities, edges, reports/) MEMORY/api_usage.jsonl third-party API credit ledger ``` `cases/` 和 `knowledge/` 下的所有内容均已被 git 忽略。 ## 路线图 — 对接 working-base *(计划中)* 目前,Ordo 是**完全独立**的:输入种子线索,输出评估报告,并且知识库存放在本地的 `knowledge/` 文件夹中。下一步计划是将其与 **working-base**——0xdefh 的检测平台(由 certstream / crt.sh / FOFA 收集器输入到标准化的异常发现存储和检测规则引擎中)——进行对接,从而使两者形成一个闭环。 其核心理念是:**技能是通用商品;知识库才是护城河。** 这里的技能在设计上就是可移植且无案例数据的——任何人都可以复制它们。真正*积累下来的调查经验*(操盘手集群、监视列表 hash、归属关系图)才是无法被轻易复制的。因此,该设计将这种经验作为**增值资产**保留在 working-base 中,而将此 agent 视为可挂载在其上的**可替换大脑**。 ``` flowchart LR subgraph WB["working-base — eyes + asset"] DET["detections
certstream · crtsh · fofa"] KB2[("canonical KB
sightings · clusters")] end subgraph IA["Ordo — brain"] HARNESS["IntelHarness
collect · correlate · assess"] end DET -. "① lead-out (planned)" .-> HARNESS HARNESS == "② write-back (endpoint exists)" ==> KB2 classDef planned stroke-dasharray:5 5; ``` 两条轨道将它们连接起来: | 轨道 | 方向 | 状态 | |---|---|---| | **① 输出线** | working-base 的检测异常 → 本 agent 消耗的种子队列 | 🟡 计划中 | | **② 回写线** | 发现的结果 + 学习到的归属判定 → 回写到 working-base | 🟢 端点已存在 (`webpivot_ingest`) | ## OPSEC — 这是一个共享工具 **仅使用通用占位符:** `site-a.example`、`target.example`、`com.example.app`、`1.1.1.1`、`G-XXXXXXXXXX`、`CASE-0001`。`.example` TLD 是保留域名,永远不会被解析。 你的私人数据会被 git 忽略(`cases/`、`knowledge/`、`knowledge_scratch/`、`MEMORY/`、`.env`)——千万不要 `git add -f` 它们。在推送之前: ``` git ls-files cases/ knowledge/ knowledge_scratch/ # must print NOTHING git diff --cached # eyeball staged docs for real IOCs git grep -nE '\b([0-9]{1,3}\.){3}[0-9]{1,3}\b|\b(bc1|0x[0-9a-f]{40})\b' -- WebPivot BinaryPivot IntelGraph IntelAnalysis IntelHarness ``` ## 添加新工具或技能 — 只需注册一次 根据代码库的 `CLAUDE.md`(规则 2):在 `harness/tools.py` 中使用 `@tool(...)` 包装新的 CLI 工具。只需这一处修改,就能将其暴露给 SDK `orchestrator.py`、stdio `mcp_server.py`(自动发现),**以及**交互式的 Claude Code(通过 `.mcp.json` → server `intel`)。现有工具的新*模式*无需添加新的 `@tool`——只需扩展该工具的描述即可。进行冒烟测试: ``` WebPivot/.venv/bin/python3 harness/mcp_server.py # send a tools/list JSON-RPC; the tool must appear ``` ## 深入探索| 文档 | 涵盖内容 | |---|---| | **`PIPELINE.md`** | 收集 → 关联 → 可视化的分步操作手册、参数备忘单以及实践案例。 | | **`harness/README.md`** | 深入解析 Agent-SDK 驱动器——模型级联、成本控制杠杆、收敛逻辑、并行集群判定、出站流量防护机制。 | | **`WebPivot/INSTALL.md`** | 更深度的 WebPivot 设置——API 密钥管理(密钥串、Linux/Windows)、渲染、代理。 | | **`WebPivot/SKILL.md`** + `references/` | 完整的溯源特征物目录(包括 TLS、JARM、CORS/HTTP)以及各引擎的查询语法。 | | **`WebPivot/references/PivotMatrix.md`** | “在每个种子上运行所有维度扫描”的准则——用于归因排序的特征物强度层级(决定性 → 佐证性)。 | | **`IntelHarness/SKILL.md`** | Claude 内部的案例驱动手册——阶段划分、何时应拒绝执行、何时应停止。 | | 每个 **`SKILL.md`** + `Workflows/` | 针对各技能的专有技术以及操作流程示例。 |
标签:AI 助手, ESC4, OSINT, Python, 反欺诈, 威胁情报, 实时处理, 开发者工具, 情报分析, 无后门, 特征检测, 网络诊断