sagarkishore-7/EduThreat-CTI
GitHub: sagarkishore-7/EduThreat-CTI
面向全球教育领域的开源威胁情报管道,整合多源 OSINT 数据并利用 LLM 进行深度增强,为教育行业提供标准化的网络威胁分析能力。
Stars: 1 | Forks: 0
# EduThreat-CTI
[](CHANGELOG.md)
[](LICENSE)
[](https://python.org)
**面向全球教育领域的实时网络威胁情报管道**
EduThreat-CTI 是一个开源网络威胁情报 (CTI) 框架,专注于**影响全球高校、中小学校及研究机构的网络安全事件**。其使命是通过整合多种 OSINT 来源构建统一数据集,使教育领域的威胁态势变得**透明、可分析且便于研究**。
本项目受大规模网络事件测量研究(例如 USENIX Security 研究)的启发,并将该方法**垂直**延伸至教育领域。
# 🎯 项目目标
EduThreat-CTI 旨在:
### ✔ 收集 (Collect)
从精选的开源渠道持续采集网络事件信号:
- KonBriefing(针对大学的网络攻击)
- 勒索软件泄露站点镜像(RansomWatch, RansomFeed)
- 网络安全新闻源(BleepingComputer, The Record)
- 大学 IT 状态页面及官方披露
- CERT 咨询公告(CISA, NCSC, CERT-EU)
- 其他高信噪比 OSINT 渠道
### ✔ 标准化 (Normalize)
将原始事件转换为**统一的基础 Schema**:
- incident_id
- source
- university_name
- country
- incident_date
- reference_urls
- title / subtitle
- attack_type_hint
### ✔ 准备增强 (Prepare for Enrichment)
提供清洁的数据集,以便用于:
- 基于 LLM 的提取\
- MITRE ATT&CK 映射\
- 时间线重建\
- 勒索软件家族分类\
- 教学/研究/运营影响分析\
- 透明度与治理评分\
- STIX 2.1 / TAXII 源
# 🏗 项目结构
```
EduThreat-CTI/
├─ README.md
├─ LICENSE
├─ requirements.txt
├─ pyproject.toml
├─ src/
│ └─ edu_cti/
│ ├─ __init__.py
│ ├─ core/ # Shared core functionality
│ │ ├─ __init__.py
│ │ ├─ models.py # Data models (BaseIncident)
│ │ ├─ config.py # Configuration (with env var support)
│ │ ├─ db.py # Database operations
│ │ ├─ deduplication.py # Cross-source deduplication logic
│ │ ├─ http.py # HTTP client with bot detection bypass
│ │ ├─ utils.py # Utility functions
│ │ ├─ logging_utils.py # Logging configuration
│ │ ├─ pagination.py # Pagination utilities
│ │ └─ sources.py # Source registry (for easy source addition)
│ ├─ sources/ # Source implementations
│ │ ├─ __init__.py
│ │ ├─ curated/ # Sources with dedicated education sections
│ │ │ ├─ __init__.py
│ │ │ ├─ common.py
│ │ │ ├─ konbriefing.py
│ │ │ ├─ ransomware_live.py
│ │ │ └─ databreach.py
│ │ ├─ news/ # Keyword-based search sources
│ │ │ ├─ __init__.py
│ │ │ ├─ common.py
│ │ │ ├─ krebsonsecurity.py
│ │ │ ├─ thehackernews.py
│ │ │ ├─ therecord.py
│ │ │ ├─ securityweek.py
│ │ │ └─ darkreading.py
│ │ └─ rss/ # RSS feed sources
│ │ ├─ __init__.py
│ │ ├─ common.py
│ │ ├─ databreaches_rss.py
│ │ └─ bleepingcomputer_rss.py # Security + education keyword filtering
│ └─ pipeline/ # Phase-based pipelines
│ ├─ __init__.py
│ ├─ phase1/ # Phase 1: Ingestion
│ │ ├─ __init__.py
│ │ ├─ __main__.py # Main CLI entry point
│ │ ├─ orchestrator.py # Full pipeline orchestrator
│ │ ├─ build_dataset.py # Dataset building
│ │ ├─ base_io.py # I/O utilities
│ │ ├─ curated.py # Curated source orchestrator
│ │ ├─ news.py # News source orchestrator
│ │ ├─ rss.py # RSS source orchestrator
│ │ └─ incremental_save.py # Incremental saving logic
│ └─ phase2/ # Phase 2: Enrichment
│ ├─ __init__.py
│ ├─ __main__.py # Main CLI entry point
│ ├─ enrichment.py # Main enrichment orchestrator
│ ├─ llm_client.py # Ollama LLM client
│ ├─ article_fetcher.py # Article fetching
│ ├─ metadata_extractor.py # Schema coverage analysis
│ ├─ schemas.py # Pydantic schemas
│ ├─ schemas_extended.py # Extended schemas for analytics
│ ├─ db.py # Enrichment database operations
│ └─ deduplication.py # Post-enrichment deduplication
├─ data/ # Data directory (git-ignored)
│ ├─ eduthreat.db # SQLite database (git-ignored)
│ ├─ raw/ # Raw collected data (git-ignored)
│ └─ processed/ # Processed datasets (git-ignored)
├─ tests/ # Test suite
│ ├─ phase1/ # Phase 1 tests
│ └─ phase2/ # Phase 2 tests
├─ docs/ # Documentation
│ ├─ ARCHITECTURE.md # System architecture
│ ├─ DATABASE.md # Database schema
│ ├─ DEDUPLICATION.md # Deduplication logic
│ ├─ SOURCES.md # Source documentation
│ ├─ ADDING_SOURCES.md # Guide for adding sources
│ ├─ RAW_DIRECTORY.md # Raw data structure
│ └─ URL_SCHEMA.md # URL handling schema
├─ logs/ # Log files (git-ignored)
├─ .gitignore # Git ignore rules
├─ .env.example # Environment variable template
├─ LICENSE # MIT License
├─ CONTRIBUTING.md # Contribution guidelines
├─ CHANGELOG.md # Version history
├─ setup.py # Package setup
├─ pyproject.toml # Modern Python project config
└─ requirements.txt # Python dependencies
```
# 🚀 快速开始
```
git clone https://github.com/sagarkishore-7/EduThreat-CTI.git
cd EduThreat-CTI
pip install -r requirements.txt
# 首次设置:完整历史抓取(490+ 页面大约需要 2-3 小时)
python -m src.edu_cti.pipeline.phase1 --full-historical
# 每日更新:增量模式(默认,耗时数秒)
python -m src.edu_cti.pipeline.phase1
```
这将:
1. 初始化 SQLite 数据库 (`data/eduthreat.db`)
2. 将所有来源的事件导入数据库(进行跨源去重)
3. 跟踪每个来源的 `last_pubdate` 以实现高效的增量更新
## 🔄 增量采集 (v1.4.0)
EduThreat-CTI 现支持**增量采集** —— 仅获取自上次运行以来的新事件:
| 模式 | 命令 | 获取页数 | 耗时 |
|------|---------|--------------|------|
| **首次运行** | `--full-historical` | 全部 490+ 页 | 约 2-3 小时 |
| **每日运行**(默认) | (无标志) | 1-5 页 | 约 30 秒 |
| **每周运行** | (无标志) | 5-20 页 | 约 2 分钟 |
```
# 首次历史抓取(获取所有页面)
python -m src.edu_cti.pipeline.phase1 --full-historical
# 定期增量更新(默认行为)
python -m src.edu_cti.pipeline.phase1
# 检查源状态(最后摄入日期)
sqlite3 data/eduthreat.db "SELECT * FROM source_state"
```
**工作原理:**
- 每个来源在 `source_state` 表中跟踪其 `last_pubdate`
- 在增量模式下,来源在到达已采集日期时停止
- 通过 `source_events` 表进行去重,防止重复采集相同事件
**输出文件:**
- `data/eduthreat.db` - 包含去重事件的 **SQLite 数据库**(跨源去重在入库时应用)
- `data/raw/curated/konbriefing_base.csv` - KonBriefing 事件快照
- `data/raw/curated/ransomwarelive_base.csv` - Ransomware.live 事件快照
- `data/raw/curated/databreach_base.csv` - DataBreaches.net 教育行业事件快照
- `data/raw/news/*_base.csv` - 各新闻源事件快照
- `data/processed/base_dataset.csv` - **统一基础数据集(阶段 1 输出)** - 去重后的 CSV 导出
**数据库架构:**
- **去重存储**:数据库仅存储去重后的事件(入库时进行跨源去重)
- **来源归属**:`incident_sources` 表跟踪每个事件的贡献来源
- **增量更新**:高效的重运行机制,仅处理新事件
- **为阶段 2 做好准备**:清洁的数据库结构,便于 LLM 增强
**注意:** 在阶段 1 中,所有 URL 均收集在 `all_urls` 字段中,`primary_url=None`。阶段 2(LLM 增强)将从 `all_urls` 中选择最佳 URL 并将其设为 `primary_url`。
# 🔍 当前功能(阶段 1)
✔ **精选来源**(专门的教育行业板块):
- KonBriefing(大学网络攻击数据库)
- Ransomware.live(教育行业过滤器)
- DataBreaches.net(教育行业档案)
✔ **新闻来源**(基于关键词的搜索):
- Krebs on Security, The Hacker News, The Record, SecurityWeek, Dark Reading
✔ **RSS 源**(带关键词过滤的实时更新):
- BleepingComputer(安全类别 + 70+ 个教育关键词)
- DataBreaches.net RSS(教育行业类别)
✔ 统一 Schema\
✔ 基础数据集构建器\
✔ **跨源基于 URL 的去重**(在数据库入库层面)\
✔ **生产级结构**(测试、配置管理、打包)\
✔ **数据库驱动架构**(去重存储、来源归属跟踪)
## 📰 新闻与搜索爬虫
- 专用于 DataBreaches.net 教育档案(截至 2025 年 11 月共 496+ 页)及各来源关键词搜索的采集器。
- 每个爬虫遍历原生分页控件(例如 DataBreaches.net 上的 `
- `,SecurityWeek/The Record 上的 Algolia 分页),动态发现最新页面。
- 请求会轮换 User-Agent,注入随机延迟,并跟随页面内的“Next”链接,以更好地模拟人类浏览行为。
- 标准化的 `BaseIncident` 行(具有确定性 ID)被写入 `data/raw/news/
标签:CISA项目, Cloudflare, ESC4, MITRE ATT&CK, OSINT, Python, STIX, 勒索软件, 域名收集, 威胁情报, 安全可视化, 安全运营, 实时处理, 密码管理, 开发者工具, 情报收集, 扫描框架, 教育行业, 数据清洗, 数据管道, 无后门, 漏洞研究, 网络安全, 网络测绘, 网络调试, 自动化, 软件工程, 逆向工具, 隐私保护, 高校安全