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 ``` ## 仪表盘截图 | 概览 | 威胁信息流 | |---|---| | ![概览](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/b1e65f4291202353.png) | ![威胁信息流](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/4d0d85d872202355.png) | | IOC 浏览器 | 趋势 | |---|---| | ![IOC 浏览器](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/188d80289f202357.png) | ![趋势](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/75f43ff6ec202358.png) | | 报告生成器 | AI 摘要器 | |---|---| | ![报告生成器](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/3deb981417202359.png) | ![AI 摘要器](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/3ff6c52114202400.png) | ## 快速开始 使用一个命令运行整个流程: ``` 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绕过, 系统调用监控, 网络安全, 网络安全工具包, 自动化侦查工具, 访问控制, 逆向工具, 隐私保护, 零样本分类