dgoni97/scout-osint

GitHub: dgoni97/scout-osint

Scout 是一个单人 OSINT 研究工具,从公开来源收集信息并将其关联为带置信度评分的实体图谱,辅以 LLM 生成结构化情报报告。

Stars: 1 | Forks: 0

# Scout — OSINT 与研究聚合代理 Scout 是一个**单人 OSINT / 研究工具**。给它一个目标——域名、 公司、用户名、电子邮件、电话号码、自由文本主题,或(可选模块)一个 EVM 加密货币地址 / ENS 名称——它就会从多个来源收集**公开**信息, 将标识符关联成一个带有置信度评分的**实体图**,使用 LLM 生成结构化的**情报报告**,将所有内容存储在 加密的本地数据库中,并通过一个小型 Web 仪表板提供服务。它可以按计划重新扫描 目标并标记出发生变化的内容。 其标志性能力是**实体解析 / 画像分析**:跨平台链接属于同一真实实体的账户和标识符——呈现形式为带有置信度评分的**证据,而非最终的定论**。 ![Scout 仪表板 — 域名目标的报告、实体图和发现](https://static.pigsec.cn/wp-content/uploads/repos/cas/77/77fe4257e3013358e1c0c20732346de26088cadbd3b46dc92c251aeb461c1e89.png) ## 伦理与范围(硬性约束) 这些是内置的,而非可选项: - **仅限公开数据** — 不进行登录/cookie 抓取,不绕过 auth/CAPTCHA,不使用 凭证,不伪造 User-Agent/浏览器/TLS 指纹。每个请求 都带有诚实的 User-Agent(标明 Scout 名称),并且严格遵守 `robots.txt` 和单主机速率 限制。 - **证据,而非定论** — Scout 绝不会断言“这是同一个人”或 “这是一个诈骗犯”。每个链接和发现都带有置信度;即使是 最强的置信度也只是“可能”,而非证明。 - **公司与个人不对称** — 对于公司/组织,Scout 可能会挖掘得更深(它们 是公开主体);对于个人,它仅聚合他们自己在公开场合发布的内容, 并且个人的已归档但随后被删除的内容会被标记出来,绝不会 显示为当前内容。 - **默认被动** — 唯一的主动探测(TCP 端口检查)**默认关闭** 且需在每次扫描时明确选择启用,并附带授权免责声明。 - **本地且加密** — 所有收集的数据都通过**静态加密**(SQLCipher)保存在您机器上的 SQLite DB 中。您可以随时删除目标及其所有数据。 只有发送到已配置 LLM/搜索提供商的内容才会离开机器; 变更通知是**无内容**的(仅包含目标名称 + “已更改”,绝不包含报告 内容)。 - **泄露数据** — 仅限存在性元数据(哪个泄露事件、何时、数量)。Scout 绝不会 获取、存储或显示泄露的凭证或内容。 ## 架构 ``` input → classify target → run collectors → normalize → correlate → LLM synthesis → store → serve ``` - **目标分类器** — 按优先级排序的检测(电子邮件 → 电话 → 钱包 → 域名 → 用户名 → 公司/主题),带有操作员覆盖选项。 - **收集器**(`scout/collectors/`) — 可插拔、故障隔离,在一个共享的 HTTP 层后并发运行 (速率限制、`robots.txt` 双通道策略、诚实的 UA、短暂的扫描范围缓存)。每个收集器返回统一形状的 `Finding` 记录。 - **关联引擎**(`scout/correlate/`) — 构建置信度加权的标识符 图。信号通过 noisy-OR 组合,在跨越枢纽节点时以乘法方式衰减, 并根据稀有度/熵进行加权。模糊匹配是 Jaro-Winkler + Soundex (标准库)。匹配强度(0–100 %)是一个与发现/边缘置信度 (0.0–1.0)截然不同的轴。 - **枢纽引擎**(`scout/pivot/`) — 从发现的标识符向外扩展,支持 `interactive`(操作员批准每次跳跃;针对个人的默认模式)或 `auto` 模式, 受 `max_depth` 和 `min_confidence_to_pivot` 限制。 - **LLM 合成**(`scout/synth/`) — 在一个有边界的 **不可信数据**块上生成散文式报告;可引用的来源列表和风险标志是 确定性地构建的,绝不来自模型(防御 prompt 注入,§6)。 - **存储**(`scout/store/`) — 加密的 SQLite;每次扫描对应一行,用于历史记录/diff。 - **仪表板**(`scout/web/`) — `ThreadingHTTPServer` 仅绑定到 `127.0.0.1`, 带有 Host 头部防护,并且每个改变状态的 POST 请求都有 CSRF token。 - **调度器**(`scout/rescan.py`,`deploy/`) — `scout rescan-all` 重新扫描跟踪的 目标,并在发生真正的(非易失性)变化时触发无内容通知。 完整的设计规范——威胁模型、每个收集器的契约、置信度和 匹配强度模型、伦理约束,以及刻意推迟的内容——位于 **[docs/SPEC.md](docs/SPEC.md)** 中。它是在编写代码之前写好的,也是代码构建所依据的基础; 此 README 中各处的章节引用(§6,§8,§14……)均指向该文档。 ## 设置 要求 **Python 3.11+**。 ``` python -m venv .venv # Windows: .venv\Scripts\activate Linux/macOS: source .venv/bin/activate pip install anthropic pillow sqlcipher3-wheels cp .env.example .env # then edit .env ``` 只有 `SCOUT_DB_PASSPHRASE` 是必需的(它用于加密存储)。其他所有内容都是 可选的——缺少 API key 会将该收集器降级为“源不可用”, 绝不会导致扫描崩溃。有关每个 key 的说明,请参见 `.env.example`(搜索/LLM/GitHub/泄露事件/ 链上/通知凭证)。 依赖项(保持在最低限度,§11):`anthropic`(LLM),`pillow`(头像图像 哈希),`sqlcipher3-wheels`(静态 DB 加密)。其他所有内容均为标准 库。 ## 用法 ``` scout run [--mode interactive|auto] [--max-depth N] [--min-confidence F] [--type TYPE] [--onchain] [--port-check] [--no-report] scout serve [--port 8770] [--onchain] # the dashboard, on http://127.0.0.1: scout rescan-all [--onchain] [--no-report] # re-scan tracked targets, notify on change scout delete # remove a target and all its data scout validate-config # validate the platform records against the schema ``` 示例: ``` scout run example.com # domain intel, mail config, website, security, reputation… scout run raven11 --type username # handle presence across ~30 platforms + correlation scout run 0xd8dA…6045 --onchain # EVM address: activity, sanctions/scam/mixer screen, labels scout serve # then open http://127.0.0.1:8770 ``` 仪表板允许您启动扫描,审查报告 + 实体图 + 原始 发现(每个事实都链接到其来源),批准/拒绝枢纽节点,粘贴 URL 进行 解析,解决风险标志,对比两次扫描,以及删除目标。 ## 收集器 (v1) Web/新闻搜索(Brave),域名情报(通过 DoH 的 DNS/DNSSEC,RDAP,IP→ASN,TLS, Certificate-Transparency 子域名),邮件配置(SPF/DKIM/DMARC/BIMI/提供商), 网站画像(标题/OG,联系方式,重定向链,sitemap,技术栈,favicon + analytics-ID 同一操作者信号),安全态势(headers,HSTS-preload,TLS, WAF,`security.txt`),声誉与归档(Tranco,Wayback,URLhaus),用户名 存在性(~30 个平台),GitHub,RSS/新闻源,邮件情报(Gravatar,PGP, 泄露**存在性**),电话情报(离线验证),制裁/观察名单名称 筛查(OpenSanctions),企业泄露(OCCRP Aleph,针对公司目标,可选), 头像感知哈希,一个可选的**链上**模块(活动,地址 标签,制裁/诈骗/混币器筛查,有边界的资金流向追踪),以及一个可选的, 默认关闭的**端口检查**。 ## 调度 `scout rescan-all` 与操作系统无关;可以使用您的调度器按间隔运行它。示例 配置(需调整路径)位于 `deploy/` 中: - **Windows** — `deploy/windows/`(任务计划程序 `.bat` + `register-task.ps1`) - **Linux** — `deploy/systemd/`(`.service` + `.timer`,首选)或 `deploy/cron/`(crontab 备选) 在检测到变化时,它会发送一个**无内容**通知(Telegram 或 SMTP), 仅包含目标名称 + “已更改”——请在 `.env` 中配置频道。 ## 测试 ``` python -m pytest # full suite (mocked network) ``` **733 个测试**,所有网络请求均被模拟,无实际调用。该套件涵盖了分类器、 收集器、存储、关联/信号评分(包括负面信号 + 稀有度 加权)、diff 逻辑、合成 prompt/隔离、仪表板安全门控, 以及调度器变更门控。 ## 数据来源、许可与归属 Scout 是一个**个人 / 研究工具**。它使用的某些数据集**仅限非商业用途**——请尊重每个来源的条款。 | 数据集 / 来源 | 用于 | 许可 / 条款 | |---|---|---| | **OpenSanctions** (`targets.simple.csv`) | 制裁/观察名单名称 + 钱包筛查 | **CC-BY-NC 4.0 — 仅限非商业用途**;需要归属 | | **GraphSense TagPacks** | 地址标签(已推迟;v1 中使用 etherscan-labels) | 根据不同包的来源,按政策不包含 PII | | **brianleect/etherscan-labels** | 链上地址标签 | Etherscan 公共标签云的重新发布转储——**请验证来源;再次分发可能触及 Etherscan ToS** | | **Chainalysis Sanctions Oracle** | 链上制裁交叉检查 (`eth_call`) | 免费的公共合约;需要您自己的 RPC endpoint | | **Chainabuse** | 诈骗/钓鱼报告筛查 | 通过官方报告 endpoint;适用其条款 | | **ICIJ Offshore Leaks / OCCRP Aleph** | 公司目标调查泄露(仅限公共集合) | 记者审查的公共利益数据;各自有其条款;适用个人隐私免责声明 | | **Tranco** | 域名排名 | 免费的研究列表 | | **Wayback / CDX**,**crt.sh**,**URLhaus**,**HIBP**,**keys.openpgp.org** | 归档,CT,威胁,泄露存在性,PGP | 各自适用其条款;HIBP 仅限泄露**存在性** | **方法论借鉴**(仅限方法论——注明之处未复制代码): - `lissy93/web-check` (MIT) — 几项域名/网站/安全检查。 - `soxoj/maigret`,`soxoj/socid-extractor`,`sherlock-project/sherlock` (MIT) — 用户名存在性网站格式,检测方法论,以及个人资料字段本体。 - `OffcierCia/On-Chain-Investigations-Tools-List` — 链上数据来源。 - **OpenSanctions** / `checkmarble/marble` — 名称匹配方法论(重新实现)。 - `minaminao/tornado-cats` — Tornado-Cash 参考(仅限方法论,未复制代码)。 在近乎逐字移植常量表或记录的地方(WAF 签名,DKIM 选择器,混币器池地址,平台记录),代码中均带有 `# Adapted from ` 注释。 ## 许可证 代码为 MIT 许可证(见 [LICENSE](LICENSE))。**数据来源则不然**——其中一些带有 各自的条款,且 OpenSanctions 为 CC-BY-NC 4.0,仅限非商业用途。在进行任何商业用途之前,请查阅上方的表格。 ## 刻意未构建的内容 (v1) 更深度的链上取证(比例污染分析,地址聚类,BTC/UTXO 启发式算法,跨链桥接追踪,混币器时间去匿名化,NFT 分析),更广泛的跨扫描实体图,Markdown/PDF 导出,以及持续的 用户名存在性校准循环均已**推迟**(规范 §14)。一些关联 信号在未来的收集器为其提供数据之前将保持**休眠**状态。目前仅实现了 Anthropic LLM 后端;OpenAI/Google/本地模型均已作为扩展点记录在文档中。
标签:DLL 劫持, ESC4, OSINT, 大语言模型, 实体关联, 情报收集, 本地加密, 漏洞研究, 逆向工具