elchacal801/domain_intel
GitHub: elchacal801/domain_intel
自动化威胁情报流水线,通过基础设施透视和AI分析追踪一次性邮箱、误植域名及恶意基础设施。
Stars: 0 | Forks: 0
# 一次性及滥用域名情报
本仓库包含用于分析一次性邮箱地址 (DEA) 提供商和高滥用域名基础设施的研究与工具。
其目标是超越简单的静态黑名单,提供**基础设施层面的情报**(MX 记录、ASN 和托管模式),以帮助安全团队、研究人员和欺诈分析师检测那些频繁轮换域名的滥用家族。
## 实时仪表板
查看实时威胁情报可视化,其中包含 **AI 生成的每日简报**和**活动追踪器**:
## 如何使用此情报
本仓库为不同的安全角色提供不同层级的数据:
### 适用于 SOC 和欺诈分析师
* **拦截一次性邮箱**:使用 `data/dea_domains.csv` 拦截来自临时邮箱服务的注册。
* **检测恶意广告**:获取 `data/discovered_ads.csv` 以拦截正在滥用搜索广告的域名。
* **品牌保护**:监控 `data/potential_typosquats.csv`,查找冒充您品牌的新注册域名。
### 适用于威胁研究人员
* **基础设施透视**:使用 `data/dea_domains_probed.csv` 寻找模式。
* *示例*:“查找所有托管在 AS12345 上且页面标题包含 'Login' 的域名。”
* **托管诈骗**:检查 `data/risk_asn_list.csv` 以识别无视滥用报告的托管提供商(Bulletproof hosting)。
* **活动追踪**:查看 `data/campaign_hunt_history.csv`,了解通过自动化 Shodan 搜索发现的新基础设施。
### 适用于工程/DevOps
* **STIX 集成**:使用 `data/domain_intel_bundle.json` 将此情报直接导入 OpenCTI 或 MISP 等平台。
* **影子 AI 检测**:使用 `data/openclaw_stix.json` 将受损 AI 代理 的指标导入您的 SIEM。
* **仪表板摘要**:使用 `data/dashboard_summary.json` 获取预计算的 KPI,无需解析大型 CSV。
## 项目结构
* **`frontend/`**:React 19 + Vite 7 + Tailwind CSS 4 调查仪表板(源码)。
* 通过 `npm run build` 构建并输出到 `docs/` 以进行 GitHub Pages 部署。
* 页面:Briefing(简报)、Investigate(域名搜索 + 详情)、Cluster View(聚类视图,图 + 表)、Fingerprint Matches(指纹匹配)、Domain Compare(域名对比)。
* **`scripts/`**:Python 流水线。
* **共享工具** (`scripts/shared/`):
* `retry.py`:支持同步/异步的指数退避装饰器。
* `cymru_resolver.py`:集中式 Team Cymru DNS 扩展,用于获取 ASN/IP 数据。
* `llm_client.py`:统一 LLM 封装 (LiteLLM),支持模型回退链和 JSON 解析。
* **核心流水线**:
* `merge_lists_v3b.py`:聚合并清洗公共来源。
* `split_data.py`:拆分大型数据集以进行并行处理。
* `enrich_infrastructure.py`:执行批量 DNS/ASN 解析(MX, NS, 域名 A 记录,以及 MX 和 Web 托管 IP 的 ASN)。
* `enrich_reputation.py`:检查 RBL 并查询 RDAP。
* `probe_web.py`:执行主动 HTTP/S 指纹识别。
* `merge_results.py`:将处理后的分片合并回单个数据集。
* `match_fingerprints.py`:YAML 驱动的指标匹配,带有置信度评分(使用 `config/fingerprints/`)。
* `build_frontend_data.py`:构建前端 JSON 数据 —— 域名分片、基础设施聚类(包含共享基础设施检测和置信度评分)、指纹匹配、解析链和统计信息。
* `generate_pivots.py`:生成情报透视数据集和统计信息。
* `build_dashboard_data.py`:生成预计算的仪表板摘要 JSON。
* `export_stix.py`:将情报导出为 STIX 2.1 JSON。
* `hunt_campaign.py`:使用 Shodan 主动搜寻特定活动基础设施。
* **影子 AI 扫描器**:
* `openclaw_scan.py`:扫描端口 18789 上暴露的 OpenClaw/Moltbot/Gateway AI 代理。
* `openclaw_stix.py`:将 OpenClaw 发现结果转换为 STIX 2.1 包。
* `shodan_utils.py`:安全 Shodan 扫描的共享工具(信用预算 + 缓存 + 线程安全)。
* **基础设施情报**:
* `asn_intel.py`:并发获取并扩展可疑 ASN。
* `vpn_intel.py`:聚合 VPN/VPS 提供商 ASN。
* `tor_intel.py`:追踪 Tor 出口节点 和 Tor ASN。
* `clean_data.py`:自动化 CSV 卫生和模式纠正。
* `enrich_asns.py`:从 RIPE Stat API 获取缺失的 ASN 名称。
* **速率限制**:
* `enrich_shodan.py`:严格执行 **1 次请求/秒 (RPS)** 以符合 API 限制。使用 `CreditBudget` 单例和线程安全的 `RateLimiter`。
* `enrich_technical.py`:使用 50 个并发工作线程进行 DNS/SSL 查询,但限制每次运行的处理量(默认 5k)以防止超时。
* `ai_*.py`:限制并发(3 个工作线程)和批次大小(2k 项/运行)以适应 40 分钟的超时限制。
* **AI 模块**:
* `ai_typosquat.py`:使用 LLM 检测语义误植。
* `ai_classify_web.py`:使用 LLM 并发分类网页意图。
* `ai_briefing.py`:生成每日仪表板简报(包含 FLAME 证据候选)。
* **FLAME 集成**:
* `generate_evidence.py`:从调查聚类生成 [FLAME](https://github.com/elchacal801/flame-fraud) 格式的证据包。支持试运行、重复检查和可配置阈值。
* **分析与 Whois**:
* `track_history.py`:域名增长和存活状态的每日追踪器(统计)。
* `drip_whois.py`:缓慢、速率受限的注册商枚举(端口 43)。
* **`config/`**:流水线和检测配置。
* `shared_infrastructure.yaml`:共享提供商定义(电子邮件、DNS、Web 托管),带有用于聚类置信度评分的模式/ASN 匹配。
* `defaults.yaml`:默认阈值和设置。
* `fingerprints/*.yaml`:YAML 驱动的指标匹配规则(7 个指纹),带有置信度评分。
* **`data/`**:域名列表和衍生情报的权威来源。
* **`docs/`**:GitHub Pages 部署目录(由 `frontend/` 构建)。
* **`tests/`**:共享工具和扩展逻辑的单元测试。
## 开始使用
### 前置条件
* Python 3.10+
* Node.js 20+(用于仪表板构建)
* `dnspython`, `tqdm`, `requests`, `stix2`
* `litellm`, `python-dotenv`(用于 AI 功能)
安装依赖:
```
pip install -r requirements.txt
cd frontend && npm install
```
### 设置 AI 功能
要运行 AI 模块(`scripts/ai_*.py`),您需要 API 密钥。
1. 在根目录创建一个 `.env` 文件:
OPENAI_API_KEY=sk-...
GEMINI_API_KEY=AIza...
ANTHROPIC_API_KEY=sk-ant-...
2. 对于 GitHub Actions,请将这些添加为 **Repository Secrets**。
模型优先级链在 `scripts/shared/llm_client.py` 中集中配置:
* 主要:`claude-sonnet-4-5-20250929`
* 次要:`gemini-3-pro-preview`
* 回退:`gpt-4o`
### 主动发现
* **广告情报**:`run_seads.py` 扫描搜索引擎,查找针对特定关键字的恶意广告(配置:`config/seads_keywords.txt`)。
* **误植域名生成**:`generate_permutations.py`(通过 `dnstwist`)为高价值目标生成数千个潜在的相似域名。
* **视觉指纹识别**:`visual_fingerprint.py` 使用无头浏览器通过视觉相似性 对域名进行分组,追踪钓鱼工具包。
### 复现情报
1. **分片与扩展**:
对于大型数据集(>10k 域名),我们使用分片策略来避免网络超时。
# 1. 拆分数据
python scripts/split_data.py --input data/dea_domains.csv --chunks 10
# 2. 处理分片(以分片 0 为例)
python scripts/enrich_infrastructure.py --input data/dea_part_0.csv --output temp_0.csv
python scripts/enrich_reputation.py --input temp_0.csv --output temp_rep_0.csv
python scripts/probe_web.py --input temp_rep_0.csv --output data/result_part_0.csv
# 3. 合并结果
python scripts/merge_results.py --pattern "data/result_part_*.csv" --output data/dea_domains_probed.csv
2. **基础设施与卫生**:获取外部情报并清洗数据。
python scripts/asn_intel.py
python scripts/clean_data.py
python scripts/enrich_asns.py
3. **AI 分析**:运行 AI 标记和简报生成。
python scripts/ai_typosquat.py --limit 50000 --batch-size 100
python scripts/ai_classify_web.py --limit 50000 --batch-size 50
python scripts/ai_briefing.py
4. **FLAME 证据**:为 FLAME 框架生成证据包。
python scripts/generate_evidence.py --dry-run # 预览
python scripts/generate_evidence.py # 生成包
5. **指纹识别与聚类**:运行指纹匹配并构建前端数据。
python scripts/match_fingerprints.py
python scripts/build_frontend_data.py
6. **仪表板构建**:构建前端并生成摘要清单。
python scripts/build_dashboard_data.py
cd frontend && npm run build
## 方法论与架构
### 数据流水线
```
graph TD
subgraph Discovery
A[Keywords] -->|SEADS| B(Discovered Ads)
C[Targets] -->|DNSTwist| D(Typosquats)
C -->|Shodan Search| OC[OpenClaw Scanner]
E[Open Sources] -->|Merge| F(Raw Lists)
Z[Cert Logs] -->|Stream| F
HUNT_CFG[Hunt Config] -->|Daily| HUNT(Proactive Campaign Hunt)
end
subgraph "Triage & Filtering"
F & B & D --> T{Heuristic Funnel}
K2[Suspicious Keywords] --> T
T -->|Low Priority| G{Sharding}
T -->|High Priority| AI[AI Analysis Queue]
end
subgraph Enrichment
G --> H[Async DNS Resolution]
H -->|MX, NS, A-Record| I[Concurrent ASN Enrichment]
H -->|Nameservers| J[Registrar Risk Analysis]
I --> K["Reputation (OTX/SafeBrowsing)"]
K --> L[Web Probing]
end
subgraph "Advanced Intelligence"
L --> S["Shodan Enrichment (Concurrent + Rate Limit)"]
L --> W["Whois (Port 43)"]
L --> AI_CHECK{AI Validation}
AI --> AI_CHECK
AI_CHECK -->|Claude/Gemini/GPT| CLASS(Concurrent Batch Classification)
AI_CHECK -->|Claude/Gemini/GPT| TYPO(Typosquat Detect)
end
subgraph "Shared Utilities"
RETRY["retry.py (Backoff)"]
CYMRU["cymru_resolver.py (ASN)"]
LLM["llm_client.py (Model Chain)"]
BUDGET["shodan_utils.py (Rate Limit)"]
end
subgraph "Detection & Scoring"
L --> FP["Fingerprint Matching (YAML)"]
FP --> CLUSTER["Infrastructure Clustering"]
CLUSTER --> SHARED{"Shared Infra Detection"}
SHARED -->|"Confidence Scoring"| CONF["Cluster Confidence"]
SHARED_CFG["shared_infrastructure.yaml"] --> SHARED
end
subgraph Output
CLASS & TYPO & S --> M{Aggregation}
L --> N[Visual Forensics]
N -.->|Hashes| SP("Shodan Pivoting (Cached)")
M & SP & CONF --> O[Risk & Threat Tagging]
O --> P(Daily Briefing LLM)
O --> DASH_BUILD["Frontend Build (React)"]
O --> R[STIX 2.1 Bundle]
OC -->|Shadow AI STIX| OC_STIX[OpenClaw STIX]
OC -->|Exposure Stats| DASH_BUILD
HUNT -->|New Hits| HUNT_LOG[Campaign History CSV]
HUNT --o|Auto-Pivot| PIVOT_OTX
HUNT -.->|Alerts| DASH_BUILD
WM[Selectors: SOA/SSL] --> PIVOT[Whoxy Reverse Whois]
WM --> PIVOT_OTX[AlienVault OTX Passive DNS]
PIVOT & PIVOT_OTX --> DISCOVERY((New Domain Discovery))
DISCOVERY -.->|Feed Back| F
DASH_BUILD --> Q[GitHub Pages Dashboard]
end
style J fill:#bbf,stroke:#333,stroke-width:2px,color:black
style AI fill:#f96,stroke:#333,stroke-width:2px,color:black
style CLASS fill:#f96,stroke:#333,stroke-width:2px,color:black
style P fill:#bfb,stroke:#333,stroke-width:2px,color:black
style OC fill:#da3633,stroke:#333,stroke-width:2px,color:white
style HUNT fill:#da3633,stroke:#333,stroke-width:2px,color:white
style CLUSTER fill:#a855f7,stroke:#333,stroke-width:2px,color:white
style SHARED fill:#a855f7,stroke:#333,stroke-width:2px,color:white
style FP fill:#a855f7,stroke:#333,stroke-width:2px,color:white
style DASH_BUILD fill:#58a6ff,stroke:#333,stroke-width:2px,color:black
style RETRY fill:#2d333b,stroke:#555,stroke-width:1px,color:#8b97a8
style CYMRU fill:#2d333b,stroke:#555,stroke-width:1px,color:#8b97a8
style LLM fill:#2d333b,stroke:#555,stroke-width:1px,color:#8b97a8
```
### 检测逻辑与分拣漏斗
### 1. 发现与分拣(漏斗)
为了在数百万域名的海洋中高效寻找威胁而不消耗数百万的 API 额度,我们使用了一个**分层漏斗**:
1. **原始摄取**:我们每天从开源来源(`merge_lists_v3b.py`)和主动发现(`dnstwist`, `seads`)摄取约 20 万+ 个域名。
2. **启发式分拣 (`triage_domains.py`)**:一个快速的本地 Python 脚本根据以下条件过滤这些域名:
* **高价值目标**:是否与 "Google"、"Amazon"、"Citibank" 模糊匹配?
* **高信号关键字**:是否包含 "login"、"update"、"verify"、"secure"、"wallet"?
* **结果**:这将把“大海捞针”(23 万个域名)缩减为“针堆”(约 1 万个候选者)。
### 2. 扩展
剩余的域名将填充深入的基础设施数据:
* **基础设施**:谁处理电子邮件 (MX)?谁托管 Web 服务器(A 记录 IP/ASN)?使用了什么名称服务器?
* **聚类**:域名按共享基础设施(MX 主机、MX IP、Web 托管 IP、注册商+NS)进行分组。已知的共享提供商通过 ASN 和模式匹配被检测出来,聚类置信度使用反向语义进行评分 —— 位于未知 IP 上的大型聚类被标记为高置信度的活动基础设施。
* **Shodan**:是否存在开放端口(RDP、C2 面板)或漏洞?
* **视觉取证**:无头浏览器捕获屏幕截图并生成感知哈希 以查找相同的钓鱼工具包。
### 3. AI 分析(激光)
我们仅将昂贵的 LLM 分析应用于**分拣后的候选者**和**在线站点**:
* **误植域名**:"`rnicrosoft.com` 是恶意的吗?"(Claude 4.6 Sonnet,带回退到 Gemini/GPT)。
* **Web 意图**:“阅读 `secure-login-update.com` 的标题和头部信息。它是银行吗?”(通过 `shared/llm_client.py` 的模型链)。
* **每日简报**:自动化分析师将当天的威胁总结为执行报告。
有关欺诈模式的详细信息,请参阅 [docs/detection_logic.md](docs/detection_logic.md)。
### 4. 基础设施透视
我们使用**反向 Whois** 将一个坏域名转变为行动者整个网络的地图:
* **提取**:我们从分拣后的域名中提取独特的“选择器”(SOA 电子邮件、SSL 组织)。
* **透视**:我们查询 **Whoxy API** 以查找由相同电子邮件注册的*其他*活动域名。
* **发现**:这可以在新基础设施甚至用于活动之前主动发现它们。
## 负责任的使用
本项目执行主动侦察(HTTP 探测)并聚合可能敏感的数据。
* **速率限制**:Web 探测脚本(`probe_web.py`)受速率限制,并使用清晰可识别的 User(`DomainIntelResearch/1.0`)。请尊重目标基础设施。
* **意图**:此数据用于防御性研究、欺诈预防和检测工程。请勿将其用于进攻性目标定位。
* **选择退出**:如果您拥有此处列出的域名或 ASN,并认为是误报(或希望阻止我们的探测),请提交 GitHub Issue。
## 许可证
MIT 许可证。可自由用于研究或防御性设置。有关详细信息,请参阅 [LICENSE](LICENSE)。
标签:Dashboard, ESC4, IP 地址批量处理, MITM代理, OpenCTI, OSINT, React, SOC分析, STIX, Syscalls, Threat Intelligence, Typosquatting, Vite, 一次性邮箱检测, 品牌保护, 域名安全, 威胁情报, 威胁追踪, 开发者工具, 恶意基础设施, 滥用域名, 网络欺诈检测, 逆向工具, 配置审计, 黑名单