praneethkoti/dark-web-threat-intel-toolkit
GitHub: praneethkoti/dark-web-threat-intel-toolkit
面向蓝队和安全分析师的全流程威胁情报工具包,覆盖OSINT数据采集、IOC提取、多层威胁分类、MITRE ATT&CK映射、趋势分析与AI摘要,并可通过STIX和MISP格式对接下游情报平台。
Stars: 0 | Forks: 0
# 🛡️ 暗网威胁情报工具包
用于从公共 OSINT 来源和模拟暗网数据中收集、处理、分类和分析威胁情报的 Python 工具包。涵盖了从原始抓取到 AI 驱动摘要的完整流程,并配备 Streamlit 仪表盘和 CLI 将所有功能串联起来。
## 架构
```
┌──────────────────────────────────────────────────────────────────────┐
│ CLI (cli.py) │
│ scrape │ process │ classify │ analyze │ export │ summarize │ dash │
└────┬────┴────┬────┴────┬─────┴────┬────┴───┬────┴─────┬─────┴───┬───┘
│ │ │ │ │ │ │
▼ ▼ ▼ ▼ ▼ ▼ ▼
┌─────────┐ ┌──────────┐ ┌───────────┐ ┌────────┐ ┌────────┐ ┌──────────┐
│ Scraper │ │ Pipeline │ │Classifier │ │Analysis│ │ Export │ │ AI │
│ Engine │ │ Engine │ │ Engine │ │& Report│ │ Engine │ │Summarizer│
│ │ │ │ │ │ │ │ │ │ │ │
│• Paste │ │• Cleaner │ │• Keyword │ │• Trends│ │• STIX │ │• OpenAI │
│• Feeds │ │• Entity │ │• ML (3) │ │• Anomal│ │• CSV │ │• Claude │
│• Market │ │ Extract │ │• Zero-shot│ │• Charts│ │• MISP │ │• Local │
│• Forum │ │• Enrich │ │• MITRE │ │• Report│ │ │ │ (HF) │
└────┬────┘ │• DB Load │ │ ATT&CK │ └───┬────┘ └───┬────┘ └────┬─────┘
│ └────┬─────┘ └─────┬─────┘ │ │ │
│ │ │ │ │ │
▼ ▼ ▼ ▼ ▼ ▼
┌──────────────────────────────────────────────────────────────────────┐
│ SQLite Database (WAL mode) │
│ sources │ raw_posts │ entities │ cve_enrichment │ classifications │
└──────────────────────────────────────────────────────────────────────┘
│ │
▼ ▼
┌──────────────┐ ┌───────────────────┐
│ Scheduler │ │ Streamlit │
│ (APScheduler)│ │ Dashboard │
│ 5 auto jobs │ │ 6 pages (live) │
└──────────────┘ └───────────────────┘
```
### Mermaid 图表
```
flowchart TD
CLI["CLI (cli.py)\n18 commands"]
subgraph Scrapers["Module 1 — Scraper Engine"]
PS[PasteScraper]
FS[FeedScraper\nOTX · NVD · Abuse.ch]
SM[SimulatedMarketScraper]
SE[SeleniumScraper\nHeadless Chrome]
end
subgraph Pipeline["Module 2 — Processing Pipeline"]
CL[Cleaner\nHTML · Unicode · Dedup]
EE[EntityExtractor\n13 IOC types · spaCy NER]
EN[Enricher\nNVD CVE lookups]
DB[(SQLite\nWAL mode\n7 tables)]
end
subgraph Classifier["Module 3 — Classifier Engine"]
KW[KeywordClassifier\nYAML · 120+ keywords]
ML[MLClassifier\nTF-IDF · LR · RF · SVM]
TR[TransformerClassifier\nZero-shot BART]
DB2[DistilBertClassifier\nFine-tuned]
MM[MitreMapper\n25+ ATT&CK techniques]
end
subgraph Analysis["Module 4 — Analysis & Reporting"]
TA[TrendAnalyzer]
AD[AnomalyDetector\nZ-score · Rolling avg]
RG[ReportGenerator\nMarkdown · HTML]
end
subgraph Export["Module 5 — IOC Export"]
STX[STIX 2.1]
CSV[CSV]
MISP[MISP JSON]
end
AI["Module 6 — AI Summarizer\nOpenAI · Anthropic · Local HF"]
DASH["Module 7 — Dashboard\nStreamlit · 6 pages"]
SCHED["Module 8 — Scheduler\nAPScheduler · 5 jobs"]
CLI --> Scrapers
CLI --> Pipeline
CLI --> Classifier
CLI --> Analysis
CLI --> Export
CLI --> AI
CLI --> DASH
CLI --> SCHED
Scrapers --> Pipeline
CL --> EE --> EN --> DB
DB --> Classifier
DB --> Analysis
DB --> Export
DB --> AI
DB --> DASH
SCHED --> Scrapers
SCHED --> Pipeline
SCHED --> Classifier
```
## 项目结构
```
dark-web-threat-intel-toolkit/
├── scraper/ # Module 1 — Data Scraping Engine
│ ├── base_scraper.py # Abstract base: retries, rate limit, UA rotation, proxy
│ ├── paste_scraper.py # Paste sites (fixtures + live dpaste.org)
│ ├── feed_scraper.py # OTX, Abuse.ch URLhaus/Bazaar, NIST NVD
│ ├── simulated_market_scraper.py # Marketplace listings + forum threads
│ └── fixtures/ # Realistic HTML fixtures (15 posts, IOC-rich)
│ ├── marketplace_listing.html
│ ├── forum_thread.html
│ └── paste_dump.html
├── pipeline/ # Module 2 — Data Processing Pipeline
│ ├── cleaner.py # HTML strip, Unicode norm, dedup, noise removal
│ ├── entity_extractor.py # 12 IOC regex patterns + spaCy NER
│ ├── enricher.py # NVD CVE lookup (CVSS, severity, CPE)
│ └── db_loader.py # SQLite CRUD, idempotent ingestion, query helpers
├── classifier/ # Module 3 — Threat Classification Engine
│ ├── keyword_classifier.py # Layer 1: weighted keyword scoring from YAML
│ ├── ml_classifier.py # Layer 2: TF-IDF → LR/RF/SVM + GridSearchCV
│ ├── bert_classifier.py # Layer 3: zero-shot (BART-MNLI)
│ ├── mitre_mapper.py # Layer 4: ATT&CK technique enrichment
│ ├── synthetic_data_generator.py # 2,500+ realistic training posts with Faker
│ └── keyword_configs/
│ └── threat_keywords.yaml # 120+ weighted keywords across 6 categories
├── analysis/ # Module 4 — Trend Analysis & Reporting
│ ├── trend_analyzer.py # Keywords, CVEs, categories, actors, products
│ ├── anomaly_detector.py # Z-score + rolling average spike detection
│ ├── visualizer.py # 6 Plotly chart types + word clouds
│ └── report_generator.py # Markdown + styled HTML reports
├── export/ # Module 5 — IOC Export
│ ├── stix_exporter.py # STIX 2.1 bundles (indicators, vulns, malware)
│ ├── csv_exporter.py # Filtered CSV (by type, confidence)
│ └── misp_exporter.py # MISP-compatible JSON events
├── ai_summarizer/ # Module 6 — GenAI Threat Summarizer
│ ├── summarizer.py # Abstracted interface + prompt template loader
│ ├── openai_backend.py # GPT-4o / GPT-4o-mini
│ ├── anthropic_backend.py # Claude (claude-sonnet-4-20250514)
│ ├── local_backend.py # HuggingFace BART (no API key needed)
│ └── prompt_templates/ # 3 versioned YAML templates
│ ├── executive_summary.yaml
│ ├── technical_brief.yaml
│ └── ioc_bulletin.yaml
├── dashboard/ # Module 7 — Streamlit Dashboard
│ ├── app.py # Entry point + sidebar nav
│ └── pages/
│ ├── overview.py # Metrics, category charts, CVE table
│ ├── threat_feed.py # Filterable classified posts + detail view
│ ├── ioc_explorer.py # Search/filter IOCs, CSV download, post context
│ ├── trends.py # Timeline, anomalies, keywords, actor patterns
│ ├── report_page.py # Generate + preview + download reports
│ └── summarizer_page.py # On-demand AI summarization
├── scheduler/ # Module 8 — Scheduler & Automation
│ └── scheduler.py # 5 APScheduler jobs, CLI, run history logging
├── config/
│ ├── __init__.py # Centralized settings loader (YAML + .env merge)
│ ├── settings.yaml # All configurable parameters
│ └── mitre_attack_mapping.yaml # 6 categories → 25+ ATT&CK techniques
├── database/
│ └── schema.sql # 7 normalized tables + indexes
├── tests/ # 207 passing tests
│ ├── test_scraper.py
│ ├── test_pipeline.py
│ ├── test_classifier.py
│ ├── test_export.py
│ ├── test_analysis.py
│ ├── test_summarizer.py
│ └── test_scheduler.py
├── cli.py # Unified Click CLI (18 commands)
├── requirements.txt
├── .env.example
├── .gitignore
├── LICENSE
└── README.md
```
**统计信息:** 52 个 Python 文件 · 11,000+ 行代码 · 207 个测试(其中 8 个受可选依赖项限制)
## 设置
### 前置条件
- Python 3.10+
- pip
### 安装
```
# 克隆仓库
git clone https://github.com/praneethkoti/dark-web-threat-intel-toolkit.git
cd dark-web-threat-intel-toolkit
# 创建虚拟环境
python -m venv venv
source venv/bin/activate # macOS/Linux
# venv\Scripts\activate # Windows
# 安装依赖
pip install -r requirements.txt
# 安装 spaCy 模型(用于 NER 实体提取)
python -m spacy download en_core_web_sm
# 复制环境配置
cp .env.example .env
# 编辑 .env 添加 API 密钥(可选 — 无需密钥 Toolkit 亦可运行)
```
### 可选 API 密钥
| 密钥 | 用途 | 是否必需? |
|-----|---------|-----------|
| `NVD_API_KEY` | 更快的 NVD 速率限制(从 5 提升至 50 请求/30秒) | 否 |
| `OTX_API_KEY` | AlienVault OTX Pulse 访问权限 | 否 |
| `OPENAI_API_KEY` | GPT-4o 摘要生成 | 仅用于 AI 摘要器 |
| `ANTHROPIC_API_KEY` | Claude 摘要生成 | 仅用于 AI 摘要器 |
### 验证安装
```
python -m pytest tests/ -v
# 预期:207 passed, 8 skipped
```
## 仪表盘截图
| 概览 | 威胁信息流 |
|---|---|
|  |  |
| IOC 浏览器 | 趋势 |
|---|---|
|  |  |
| 报告生成器 | AI 摘要器 |
|---|---|
|  |  |
## 快速开始
使用一个命令运行整个流程:
```
python cli.py full-pipeline --source fixtures --skip-enrichment
```
这将抓取固件数据 → 处理并提取 IOC → 对威胁进行分类 → 生成图表和报告 → 并显示摘要。然后启动仪表盘:
```
python cli.py dashboard
# 打开 http://localhost:8501
```
## CLI 使用说明
每个模块都可以通过统一的 CLI 访问。全局标志:`--verbose`(调试日志记录),`--dry-run`(预览而不执行)。
### 数据抓取
```
# 抓取本地 fixture 文件(安全、离线、即时)
python cli.py scrape --source fixtures
# 抓取实时 paste 站点
python cli.py scrape --source pastes --limit 50
# 抓取所有威胁情报源 (OTX, URLhaus, MalwareBazaar, NVD)
python cli.py scrape --source feeds --limit 25
# 从 NVD 获取特定 CVE
python cli.py scrape --source nvd --cve-id CVE-2024-21887
# 抓取 NVD 一年的 CVE
python cli.py scrape --source nvd --cve-year 2024 --limit 100
# 抓取所有内容
python cli.py scrape --source all --limit 100
```
### 处理流程
```
# 处理所有原始 JSON 文件,执行 clean → extract → enrich → store 流程
python cli.py process --input data/raw
# 跳过 NVD 富化(速度更快,无 API 调用)
python cli.py process --input data/raw --skip-enrichment
# 跳过 spaCy NER(仅使用 regex 提取)
python cli.py process --input data/raw --skip-ner
```
### 分类
```
# 使用关键词规则 + MITRE 映射对未分类帖子进行分类
python cli.py classify --model keyword --export-mitre
# 在合成数据上训练 ML 模型,然后进行分类
python cli.py classify --model ml --train-ml --export-mitre
# 使用 BART-MNLI 进行 Zero-shot 分类(需要 transformers + torch)
python cli.py classify --model bert
# 运行所有分类器进行比较
python cli.py classify --model all --export-mitre --train-ml
```
### 分析与报告
```
# 分析过去 30 天,生成图表 + 报告
python cli.py analyze --period 30d --output both
# 仅生成 Markdown 报告
python cli.py analyze --period 7d --output report --format markdown
# 仅生成图表
python cli.py analyze --period 90d --output charts
```
### IOC 导出
```
# 导出所有格式(STIX 2.1 + CSV + MISP)
python cli.py export --format all
# 仅生成 STIX 2.1 bundle
python cli.py export --format stix
# 仅筛选出 IP 地址的 CSV
python cli.py export --format csv --ioc-type ipv4
```
### AI 摘要
```
# 通过 OpenAI 生成执行摘要
python cli.py summarize --mode executive --period 24h --backend openai
# 通过 Claude 生成技术简报
python cli.py summarize --mode technical --period 7d --backend anthropic
# 通过本地模型生成 IOC 公报(无需 API 密钥)
python cli.py summarize --mode ioc_bulletin --backend local
# 总结特定帖子
python cli.py summarize --mode technical --post-ids 1,2,3
```
### 仪表盘
```
# 启动 Streamlit 仪表板
python cli.py dashboard
# 自定义端口
python cli.py dashboard --port 8080
```
### 调度器
```
# 启动自动化调度守护进程
python cli.py scheduler start
# 查看定时任务
python cli.py scheduler status
# 手动触发任务
python cli.py scheduler run-now --task scrape_pastes
python cli.py scheduler run-now --task classify_new
python cli.py scheduler run-now --task daily_report
# 查看运行历史
python cli.py scheduler history
```
### 实用工具
```
# 显示数据库统计信息
python cli.py db-info
# 生成合成训练数据
python cli.py generate-data --count 2500 --balanced
# Dry run 任何命令
python cli.py --dry-run full-pipeline --source fixtures
```
## 威胁分类
工具包将帖子分为六个类别,每个类别均映射到 MITRE ATT&CK 技术:
| 类别 | ATT&CK 技术 | 示例信号 |
|----------|-------------------|-----------------|
| **数据泄露** | T1078, T1110, T1552, T1530, T1567 | "credential dump", "database leak", "combo list", email:pass 模式 |
| **漏洞利用** | T1190, T1203, T1068 | CVE 引用, "remote code execution", "proof of concept", "buffer overflow" |
| **勒索软件/恶意软件** | T1486, T1059, T1547, T1027, T1071 | "ransomware", "RAT", "keylogger", "C2", 恶意软件哈希值 |
| **银行卡/金融欺诈** | T1056, T1185, T1557, T1566 | "fullz", "CVV", "skimmer", "bank logs", "cashout" |
| **威胁 actor 通信** | T1583, T1585, T1588, T1586 | "hiring", "affiliate program", "opsec", Jabber/Tox 联系人 |
| **零日漏洞** | T1190, T1189, T1195 | "0day", "unpatched", "private exploit", "no CVE assigned" |
## IOC 提取
实体提取器使用带有防重叠机制的 regex 模式识别 12 种 IOC 类型:
| IOC 类型 | 模式 | 示例 |
|----------|---------|---------|
| IPv4 | 点分十进制验证 | `185.220.101.34` |
| IPv6 | 完整与压缩形式 | `2001:db8::1` |
| 电子邮件 | 标准 + 消除脱敏 `[at]` | `admin@evil-corp.com` |
| URL | http/https/hxxp + 消除脱敏 | `hxxps://malware[.]com/payload` |
| CVE ID | CVE-YYYY-NNNNN+ | `CVE-2024-21887` |
| 比特币 | P2PKH, P2SH, bech32 | `bc1qar0srrr7xfkvy5l643...` |
| 门罗币 | 95 字符 base58 | `44AFFq5kSiGBoZ...` |
| MD5 | 32 位十六进制字符 | `a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6` |
| SHA-1 | 40 位十六进制字符 | (与 SHA-256 无重叠) |
| SHA-256 | 64 位十六进制字符 | (优先匹配以防止 MD5/SHA-1 误报) |
| 凭据 | email:pass 和 user:pass | `admin@corp.com:Password123!` |
| PGP 指纹 | 带可选空格的 40 位十六进制 | `4A2F 8120 D089 3E1A...` |
spaCy NER 增加了对威胁上下文中提到的**组织名称**、**人名**和**地理位置**的上下文提取。
## 导出格式
| 格式 | 库 | 使用场景 |
|--------|---------|----------|
| **STIX 2.1** | `stix2` | 接入 TIP 平台(MISP, OpenCTI, ThreatConnect)。包含 Indicators, Vulnerabilities, Malware 对象以及 Relationships。 |
| **CSV** | stdlib | 供分析师使用的电子表格。可按 IOC 类型和置信度进行过滤。自动生成按类型分类的 CSV 文件。 |
| **MISP** | 原生 JSON | 通过 REST API 直接导入 MISP。具备适当的属性类型映射、TLP 标签以及基于置信度的 IDS 标志。 |
## 数据库模式
使用 WAL 模式的 SQLite 以支持并发的仪表盘读取操作。包含 7 个规范化表:
- **`sources`** - 抓取器来源注册表,包含上次抓取时间戳
- **`raw_posts`** - 已摄取的内容,通过 SHA-256 进行去重(幂等)
- **`entities`** - 通过外键与帖子关联的已提取 IOC
- **`cve_enrichment`** - NVD 数据(CVSS, 严重性, CPE),带有 upsert 功能
- **`classifications`** - 多模型结果(同一帖子,不同模型)
- **`summaries`** - AI 生成的摘要审计追踪
- **`scheduler_runs`** - 作业执行日志(状态、耗时、记录数量)
## 如何进行扩展
- **真实暗网来源** - 将固件 URL 替换为通过 Tor 代理的 .onion 端点(已支持 SOCKS5 代理配置)
- **YARA 规则生成** - 根据提取的文件哈希和字符串模式自动生成 YARA 规则
- **Slack/Teams 警报** - 添加 webhook 通知,用于异常峰值或关键 CVE 的提及
- **多租户** - 将 SQLite 替换为 PostgreSQL 以实现团队规模部署
- **图分析** - 使用 NetworkX 构建威胁 actor、IOC 和 CVE 之间的关系图
- **微调分类器** - 在合成数据上训练 DistilBERT,而不是使用零样本学习,以获得更好的准确性
- **自动化 SIEM 接入** - 通过 API 将 STIX 数据包直接推送到 Splunk/Elastic
- **历史比较** - 按周进行趋势差异比对,以检测威胁态势的转变
## 设计说明
**为什么使用基础 scraper 类?** 每个特定来源的 scraper 只需实现 `scrape()` 和 `parse()`。速率限制、重试、UA 轮换和代理路由都位于 `BaseScraper` 中。添加新来源只需一个约 50 行的子类,而不是复制粘贴一堆代码。
**幂等 pipeline。** 原始帖子通过 SHA-256 内容哈希在两个阶段进行去重:清理时的内存中去重,以及 DB 层的 `INSERT OR IGNORE`。调度器可以每小时运行一次而不会创建重复记录。
**多层分类的权衡。** 关键词分类速度快且透明,但较为脆弱。TF-IDF + ML 泛化能力更好,但需要训练数据(因此提供了合成生成器)。Zero-shot transformer 不需要任何数据但速度较慢——适用于对低置信度结果的分诊,而不适合批量处理。在实际应用中,我会将它们级联使用:首先使用关键词分类,然后使用 ML 处理大部分内容,仅当两者结果不一致时才使用 zero-shot。
**为什么使用 MITRE ATT&CK?** 像“勒索软件”这样的原始标签对 SOC 团队来说缺乏可操作性。映射到技术 ID(T1486, T1059)可以直接关联到检测规则和事件响应(IR)预案。这是让威胁情报在下游真正可被消费的方式。
**合成数据的真实性。** 生成器包含了 l33tspeak(黑客语)替换、拼写错误和多语言片段(俄语、中文、阿拉伯语),因为真实的暗网帖子并不是干净的英文。基于经过净化的文本训练的分类器在真实数据上表现糟糕。均衡/非均衡切换对于测试模型如何处理倾斜的类别分布非常重要。
**导出格式的选择。** STIX 2.1 用于 TIP 到 TIP 的共享,CSV 用于电子表格分析师,MISP JSON 用于直接的平台导入。每种格式都服务于情报共享工作流中不同的消费者。
**配置驱动的架构。** 所有可调参数——抓取延迟、模型名称、关键词权重、cron 表达式、NVD 速率限制——都位于 `settings.yaml` 或 `.env` 中。没有任何硬编码。部署到新环境只需更改配置,而不是修改代码。
**异常检测的局限性。** Z-score 简单且易于解释,但在具有每周周期性变化的数据上会产生误报。在实际的生产规模下,我会使用 Prophet 或孤立森林。其阈值(2.5σ)是可配置的,这是有原因的。
**LLM 后端抽象。** `LLMBackend` Protocol 意味着任何具有 `generate(system_prompt, user_prompt) → str` 方法的类都可以工作。替换后端只需更改一行配置。Prompt 模板是版本化的 YAML 文件,因此您可以在不触碰代码的情况下进行 A/B 测试。
**在规模化时我会做的改变。** SQLite → 带连接池的 PostgreSQL。APScheduler → Celery + Redis 用于分布式作业。添加 Playwright 用于处理重度 JS 的页面。在威胁情报语料库上微调 NER 模型,而不是使用通用的 spaCy。将仪表盘迁移到带有 REST API 层的正规 React 前端。添加 RBAC 和审计日志。
## 许可证
MIT — 详情请见 [许可证](LICENSE)。
标签:Apex, Claude, CVE检测, Cybersecurity, DLL 劫持, ESC4, HTTP/HTTPS抓包, Kubernetes, LLM, OpenAI, OSINT, Petitpotam, Python, STIX, Streamlit, TI, Unmanaged PE, 人工智能, 代码示例, 内存规避, 大语言模型, 威胁分析, 威胁情报, 实时处理, 开发者工具, 态势感知, 情报导出, 情报收集, 数据分析, 数据分类, 数据泄露, 数据清洗, 无后门, 暗网, 机器学习, 漏洞研究, 用户模式Hook绕过, 系统调用监控, 网络安全, 网络安全工具包, 自动化侦查工具, 访问控制, 逆向工具, 隐私保护, 零样本分类