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, 一次性邮箱检测, 品牌保护, 域名安全, 威胁情报, 威胁追踪, 开发者工具, 恶意基础设施, 滥用域名, 网络欺诈检测, 逆向工具, 配置审计, 黑名单