egemenguney/threat_hunter
GitHub: egemenguney/threat_hunter
防御性 CTI 平台,被动监控 OSINT、安全公告与供应链风险信号,并与组织观察列表进行关联以提供可操作的预警。
Stars: 1 | Forks: 0
# Threat Hunter — 外部威胁雷达与供应链风险监控器
## Threat Hunter 目前的定位
Threat Hunter 是一个**防御性网络威胁情报 (CTI) 平台**,它被动地监控合法的、开源的外部网络风险信号,并**将它们与组织观察列表进行关联**。
它同时是:
- 一个**外部威胁雷达** — 针对针对*您*的威胁提供预警;
- 一个**供应链风险监控器** — 监控包/依赖项和维护者风险;
- 一个**基于 OSINT 的预警系统** — 公开的、被动的情报;
- 一个**防御性 CTI 关联平台** — 将信号与您的资产进行匹配。
旧有的恶意软件/仓库扫描功能作为一项**高级收集能力**,依然存在于高级
引擎 (`threat_hunter_core/`) 中 — 它**不再是主要的产品标识**。
## 适用人群?
| 受众 | 获得的收益 |
|---|---|
| **SOC 团队** | 预警以及经过分拣的、与观察列表相关的外部信号。 |
| **MSSP** | 可跨多个客户扩展的、由观察列表驱动的监控。 |
| **企业安全团队** | 品牌/域名滥用、供应链及安全公告感知。 |
| **威胁情报团队** | 具有可导出指示器 (CSV/JSON/STIX) 的标准化信号。 |
| **CERT / CSIRT 团队** | 行业和区域级别的威胁趋势监控。 |
| **具有安全意识的软件公司** | 包生态系统和依赖项风险信号。 |
## 三种模式
| 模式 | 默认状态 | 数据 | 网络 | 用途 |
|---|---|---|---|---|
| **Demo 模式** | ✅ 开启 | 安全的虚假/匿名化样本数据 | 无 | 适合展示作品集的安全演示。 |
| **Proof 模式** | 可选命令 | 有限的、被动的**公开类**数据(目前为内置离线样本) | 此构建版本中无 | 在不进行实时收集的情况下,验证 pipeline 处理非 demo 输入。 |
| **Live 模式** | ❌ 关闭 | 操作员启用的真实收集 | 是 | 高级功能,仅限选择开启(需要两个显式 flag + 运行时守护)。 |
仪表板始终按来源标记每条记录:**DEMO DATA**、**PROOF DATA - PUBLIC SOURCE** 或 **LIVE DATA - OPERATOR ENABLED**。
## 快速开始(demo 模式,零成本,零依赖)
demo/产品层**仅使用 Python 标准库**。
```
# 显示当前模式 + Cost Guard 状态
python -m demo status
# 将静态的 External Threat Radar (HTML) 构建到 demo/output/ 中
python -m demo build
# 或者在本地提供只读的离线服务
python -m demo serve --port 8000 # then open http://127.0.0.1:8000/
# 安全的被动公共来源验证(Proof Mode),严格限制条目数量
python -m demo proof --limit 20
python -m demo build # dashboard now distinguishes DEMO vs PROOF data
# 导出威胁信号 + IOC 发现结果
python -m demo export --format csv
python -m demo export --format json --out signals.json
python -m demo export --format stix --out signals.stix.json
```
高级实时引擎仅通过模块形式调用(且默认保持关闭状态):
```
python -m threat_hunter_core.orchestration.cti_platform --help
python -m threat_hunter_core.orchestration.pipeline --help
```
## 概念:Signals 与 Findings
Threat Hunter 保留两种相关但**在概念上独立**的记录:
- **ThreatSignal** — 一种*组织上下文的外部风险*(仿冒域名、高风险
包、关键安全公告、IOC feed 匹配、行业趋势、供应链或
品牌冒充事件)。一个 signal 可能根本**没有 IOC** — 它可能仅与
CVE、包、域名或趋势相关。这是**主要的、以 signal 为中心**的视图。
- **Finding** — 一种*技术性的、面向 IOC 的检测*(哈希/域名/IP/URL artifact)。这些
作为**支持性技术细节**保留,在仪表板中层级较低。
### 组织观察列表
观察列表描述了您要保护的资产 (`demo/watchlist.json`):
```
{
"organization_name": "Acme Financial Group",
"domains": ["acme-finance.example", "acme-payments.example"],
"brand_names": ["AcmePay", "AcmeBank"],
"github_organizations": ["acme-example"],
"package_names": ["acmepay-sdk", "acme-auth-client"],
"technologies": ["FastAPI", "React", "PostgreSQL", "Supabase", "Expo"],
"sectors": ["finance", "fintech"],
"countries": ["Türkiye", "Germany"],
"vip_names": [] // optional, empty/disabled by default
}
```
## 为什么这不是攻击性安全
**Threat Hunter 不会:**
- 利用系统漏洞
- 探测或扫描第三方目标
- 暴力破解凭证
- 收集密码或窃取凭证
- 下载或存储被盗数据
- 默认存储真实的恶意软件样本
- 绕过身份验证
- 抓取非法的暗网内容
**Threat Hunter 会:**
- 监控防御性 OSINT 和公开的、合法的信号(被动)
- 将信号标准化为一致的模型
- 将信号与您的组织观察列表进行关联
- 确定风险的优先级,并用通俗易懂的语言进行解释
- 导出可操作的指示器 (CSV / JSON / STIX)
- 帮助安全团队决定**要审查什么**
所有 demo 和 proof 数据都是**虚假/匿名化/安全的**:使用保留的 `.example` / `.test` /
`.invalid` 域名,RFC 5737 文档 IP 范围 (`192.0.2.0/24`, `198.51.100.0/24`,
`203.0.113.0/24`)、占位符 CVE 和随机哈希。没有真实的受害者或被盗数据。
## 示例 signal(对管理者友好的语言)
不是显示:
平台会显示:
## 示例导出(合并的 CSV)
```
record_type,signal_id,signal_type,severity,confidence,source,first_seen,affected_watchlist_items,related_indicator_type,related_indicator_value,recommended_action,data_origin
threat_signal,SIG-0001,suspicious_domain,HIGH,82,Passive domain / certificate monitoring (demo),2026-06-05T07:20:00,acme-payments.example; AcmePay,ioc:domain,acme-payments-login.example,Review WHOIS/DNS and certificate transparency records for the lookalike domain.,DEMO
threat_signal,PROOF-0001,critical_vulnerability,HIGH,85,Bundled public-style sample (offline),2026-06-01T00:00:00,PostgreSQL; FastAPI,cve,CVE-DEMO-2026-1001,Inventory services using the affected technology and their versions.,PROOF
```
`record_type` 是 `threat_signal` 或 `ioc_finding` 中的一种。`python -m demo export --type all|signals|findings` 用于选择包含哪些记录(默认为 `all`)。
## 成本控制设计 (Cost Guard)
可通过环境变量进行配置(显示为安全的默认值),并在仪表板中展示:
| 设置 | 默认值 | 用途 |
|---|---|---|
| `DEMO_MODE` | `true` | 使用匿名化样本数据代替扫描 |
| `LIVE_SCAN_ENABLED` | `false` | 任何真实扫描的主开关 |
| `STORE_RAW_SAMPLES` | `false` | 从不持久化完整的恶意软件样本 |
| `AUTO_DELETE_OLD_DATA` | `true` | 清理超过保留窗口的数据 |
| `MAX_DAILY_SCANS` | `10` | 严格的每日扫描上限 |
| `MAX_ITEMS_PER_RUN` | `25` | 每次运行处理的项目数 |
| `MAX_STORAGE_DAYS` | `30` | 保留窗口 |
| `MAX_FINDINGS_STORED` | `500` | 存储的 finding 上限 |
| `PROOF_MAX_ITEMS` | `20` | 每次 Proof 模式运行的严格项目限制 |
## 仓库结构与打包
完整地图与职责表:[docs/REPOSITORY_LAYOUT.md](docs/REPOSITORY_LAYOUT.md)。
| 路径 | 类型 | 说明 |
|---|---|---|
| `demo/` | **源码** | 默认安全的外部威胁雷达产品/demo 层(离线,仅依赖标准库)。包含 `demo/proof/` (Proof 模式)。 |
| `threat_hunter_core/` | **源码** | 高级实时收集/分析引擎(收集器 / 分析器 / 集成 / 存储 / 通知器 / 导出器 / 编排)。规范入口:`threat_hunter_core.orchestration.cti_platform`。 |
| `threat_hunter_core/resources/yara_rules/` | **源码** | 为高级引擎内置的 YARA 检测资源。 |
| `tools/`, `scripts/` | **源码** | 维护/检查脚本 + 作品集打包器。 |
| `docs/` | **文档** | 笔记 + 精选的 `docs/samples/`。 |
| `demo/output/` | **生成物** | 由 `python -m demo build` 重新生成(已 gitignored)。 |
### 创建安全的作品集 zip 包
```
powershell -ExecutionPolicy Bypass -File scripts/package_portfolio.ps1
```
打包器是基于**白名单**的,并且如果检测到任何 secret、
会话或 virtualenv 标记,它将**拒绝**生成 zip 包。
## 安全与法律声明
- **仅用于防御。** 被动情报;无攻击性或破坏性行动;无漏洞利用。
- **不存储或分发恶意软件样本。** demo/proof 数据仅包含合成的、无实际功能的指示器。
- **Secrets:** `.env.local` 已被 gitignored。请使用 `.env.example` 作为模板;切勿提交真实的 token。
- 实时连接器受其各自的服务条款和速率限制与第三方服务通信 — 启用它们由您自己承担责任。
## 如何安全地启用实时扫描(高级,可选 — 默认关闭)
1. 将 `.env.example` 复制到 `.env.local`,并仅添加您需要的凭证。
2. **显式**设置选择开启的 flag:`DEMO_MODE=false` 和 `LIVE_SCAN_ENABLED=true`。
3. 保持 Cost Guard 的限制处于保守水平。
4. 首先运行单个有界限的模块,例如 `python -m threat_hunter_core.orchestration.cti_platform --osint`。
5. 监控 Supabase 使用情况;`STORE_RAW_SAMPLES` 必须保持为 `false`。
除非两个 flag 都被翻转,否则防护机制 `demo.config.assert_scan_allowed()` 将拒绝运行实时扫描。
## 许可证
专有许可证 — 保留所有权利。请参阅 [LICENSE](LICENSE)。
**作者:** Egemen Guney KOC · [egemenguney.net](https://www.egemenguney.net) · [LinkedIn](https://www.linkedin.com/in/egemenguneykoc)
标签:ESC4, OSINT, 威胁情报, 开发者工具, 文档安全, 网络信息收集, 网络安全, 逆向工具, 隐私保护