sagarkishore-7/EduThreat-CTI

GitHub: sagarkishore-7/EduThreat-CTI

面向全球教育领域的开源威胁情报管道,整合多源 OSINT 数据并利用 LLM 进行深度增强,为教育行业提供标准化的网络威胁分析能力。

Stars: 1 | Forks: 0

# EduThreat-CTI [![Version](https://img.shields.io/badge/version-1.6.0-blue.svg)](CHANGELOG.md) [![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE) [![Python](https://img.shields.io/badge/python-3.9+-blue.svg)](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/_base.csv`,并合并到统一 CSV 快照和 SQLite 入库管道中。 ## 🔄 去重机制 管道在多个层级自动对事件进行去重: ### 源内去重 - 防止从同一来源重复采集同一事件 - 通过 `source_events` 表跟踪 - 支持高效的增量更新 ### 跨源去重 - 在入库过程中合并来自不同来源的具有相同 URL 的事件 - **URL 规范化**:对 URL 进行规范化处理(移除尾部斜杠、www. 前缀、片段标识符)以确保准确匹配 - **智能合并**:当同一事件出现在多个来源时: - 保留具有最高 `source_confidence` 的事件 - 将所有来源的 URL 合并到 `all_urls` - 合并元数据,优先采用非空值 - 在 `incident_sources` 表中跟踪所有来源(多对多关系) - **数据库结构**:数据库仅存储去重后的事件,来源归属单独跟踪 **优势:** - ✅ 数据库清洁,为阶段 2(LLM 增强)做好准备 - ✅ 阶段 3(CTI 网站)查询简单 - ✅ 贡献者添加新来源时自动去重 ## ⚙️ 运行管道 ### 主管道脚本(推荐) **`python -m src.edu_cti.pipeline.phase1.orchestrator`** - 运行完整的阶段 1 管道: - 初始化数据库 - 导入所有来源的事件(带源内去重) - **从数据库**构建统一基础数据集 CSV(生产高效,无需重新抓取) - 构建 CSV 时应用跨源去重 - 确保 `primary_url=None` 且所有 URL 在 `all_urls` 中 **生产模式(默认)**: - 数据库防止重复插入(源内去重) - CSV 从数据库构建(快速,无需重新抓取) - 数据库和 CSV 自动保持同步 - 重复运行仅处理新事件 **示例:** ``` # 每日增量运行(默认 - 仅新事件) python -m src.edu_cti.pipeline.phase1 # 首次完整历史抓取(所有页面) python -m src.edu_cti.pipeline.phase1 --full-historical # 仅运行 Curated 源(增量) python -m src.edu_cti.pipeline.phase1 --groups curated # 仅运行 News 源(增量) python -m src.edu_cti.pipeline.phase1 --groups news # 运行特定源 python -m src.edu_cti.pipeline.phase1 --groups curated --sources databreach konbriefing # 强制特定源完整刷新 python -m src.edu_cti.pipeline.phase1 --groups curated --sources databreach --full-historical # 带页面限制运行(用于测试) python -m src.edu_cti.pipeline.phase1 --max-pages 10 # 完整 Orchestrator(摄入 + CSV 构建) python -m src.edu_cti.pipeline.phase1.orchestrator # 跳过摄入(仅构建数据集) python -m src.edu_cti.pipeline.phase1.orchestrator --skip-ingestion # 跳过数据集构建(仅运行摄入) python -m src.edu_cti.pipeline.phase1.orchestrator --skip-dataset # 重新抓取源以生成 CSV(不使用数据库 - 用于测试) python -m src.edu_cti.pipeline.phase1.orchestrator --fresh-collection ``` ### 阶段 2:LLM 增强管道 **`python -m src.edu_cti.pipeline.phase2`** - 运行阶段 2 LLM 增强: 阶段 1 采集事件后,阶段 2 通过 LLM 分析对其进行增强: 1. **文章获取**:多回退策略:`newspaper3k → Selenium → archive.org` 2. **教育相关性检查**:使用 LLM 验证事件是否与教育相关 3. **URL 置信度评分**:对 `all_urls` 中的 URL 进行评分并选择最佳的主 URL 4. **全面增强**:提取 192+ 个结构化 CTI 字段: - 包含日期和 IOC 的事件时间线 - MITRE ATT&CK 技术和战术 - 攻击动态(勒索软件家族、加密、渗出) - 数据影响(受影响记录数、类型、PII 泄露) - 用户影响(受影响的学生、教职工、员工、校友) - 运营影响(教学、科研、招生中断) - 财务影响(赎金金额、恢复成本、保险) - 监管影响(GDPR, HIPAA, FERPA, 罚款、诉讼) - 恢复指标(时间线、阶段、安全改进) - 透明度评分(披露时机、更新) **要求:** - 必须设置 `OLLAMA_API_KEY` 环境变量 - Ollama Cloud API 访问权限 **示例:** ``` # 设置 API Key export OLLAMA_API_KEY=your_api_key_here # 对所有未丰富的事件运行 Enrichment python -m src.edu_cti.pipeline.phase2 # 仅处理前 10 个事件(用于测试) python -m src.edu_cti.pipeline.phase2 --limit 10 # 使用自定义批次大小和 Rate Limiting 处理 python -m src.edu_cti.pipeline.phase2 --batch-size 5 --rate-limit-delay 3.0 # 导出已丰富数据到 CSV python -m src.edu_cti.pipeline.phase2 --limit 20 --export-csv # 即使与教育无关也处理事件(不推荐) python -m src.edu_cti.pipeline.phase2 --keep-non-education ``` **功能:** - ✅ **增量处理**:仅处理未增强的事件 - ✅ **多回退文章获取**:newspaper3k → Selenium → archive.org - ✅ **智能错误恢复**:失败的增强任务在下次运行时重试 - ✅ **双表存储**:JSON 存储 + 扁平化表,便于快速 CSV 导出 - ✅ **192+ CTI 字段**:涵盖事件各方面的全面 Schema - ✅ **标准化数值**:数字规范化(例如 "$4.75M" → `4750000`) - ✅ **教育相关性过滤**:跳过非教育事件并给出理由 **模型选择:** 阶段 2 默认使用 `deepseek-v3.1:671b-cloud`(可通过 `OLLAMA_MODEL` 环境变量配置)。选择该模型是因为其在 CTI 分析所需的复杂结构化提取任务上表现卓越。 **生产效率**: - ✅ **默认行为**:CSV 从数据库构建(无需重新抓取) - ✅ **增量更新**:仅处理新事件 - ✅ **DB 和 CSV 同步**:CSV 始终反映当前数据库状态 - ✅ **跨源去重**:从数据库构建 CSV 时应用 - ✅ **快速重运行**:数据库查询比重新抓取快得多 ### 单独的管道脚本 - `python -m src.edu_cti.pipeline.phase1.build_dataset --groups curated news`\ 为请求的源组构建快照并输出 `data/processed/base_dataset.csv`。省略 `--groups` 以运行所有组。 - `python -m src.edu_cti.pipeline.phase1 --groups news`\ 将选定组的事件导入 `data/eduthreat.db`,并进行源内去重。安排 `--groups news` 进行频繁的实时运行,安排 `--groups curated` 进行定期刷新。 **替代方案:** 安装后,可以使用 CLI 命令: - `eduthreat-phase1` - 阶段 1 入库管道 - `eduthreat-phase2` - 阶段 2 增强管道 - `eduthreat-orchestrator` - 阶段 1 完整编排器(入库 + 数据集构建) - `eduthreat-build` - 仅构建数据集 - `eduthreat-api` - 启动 REST API 服务器 ### 阶段 3:API 服务器与仪表板 **`python -m src.edu_cti.api`** - 启动 REST API 服务器: API 服务器为仪表板和外部消费者提供增强后的 CTI 数据。 **示例:** ``` # 启动 API Server(默认:http://localhost:8000) python -m src.edu_cti.api # 使用自定义端口 python -m src.edu_cti.api --port 9000 # 带自动重载的开发模式 python -m src.edu_cti.api --reload # API 文档位于 http://localhost:8000/docs ``` **API 端点:** | 端点 | 描述 | |----------|-------------| | `GET /api/dashboard` | 完整仪表板数据 | | `GET /api/stats` | 摘要统计信息 | | `GET /api/incidents` | 带过滤器的分页事件列表 | | `GET /api/incidents/{id}` | 完整事件详情 | | `GET /api/incidents/{id}/report` | 下载 CTI 报告 | | `GET /api/filters` | 可用的过滤选项 | | `GET /api/analytics/*` | 各种分析端点 | | `POST /api/admin/*` | 管理端点(需要认证) | | `POST /api/admin/export/*` | 数据库和 CSV 导出 | | `POST /api/admin/scheduler/trigger/*` | 触发入库/增强任务 | | `POST /api/admin/normalize-countries` | 规范化国家数据 | **仪表板网站:** 单独的 [EduThreat-CTI-Dashboard](https://github.com/sagarkishore-7/EduThreat-CTI-Dashboard) 项目提供了一个连接到此 API 的现代化 Next.js 仪表板。 # 🧭 路线图 ## 阶段 1 —— 采集与基线 ✅ 已完成 - ✅ **精选来源**(专门的教育行业板块): - KonBriefing(大学网络攻击数据库) - Ransomware.live(教育行业过滤器) - DataBreaches.net(教育行业档案) - ✅ **新闻来源**(基于关键词的搜索): - Krebs on Security, The Hacker News, The Record, SecurityWeek, Dark Reading - ✅ **入库时跨源去重** ## 阶段 2 —— LLM 增强 ✅ 生产就绪 (v1.2.0) - ✅ **文章获取**,带多回退机制(newspaper3k → Selenium → archive.org) - ✅ **教育相关性检查**,附带 LLM 推理 - ✅ **全面 CTI 提取**(192+ 字段): - 包含 IOC 的时间线构建 - MITRE ATT&CK 映射 - 攻击动态(勒索软件家族、加密、渗出) - 数据/用户/系统/运营/财务/监管影响 - 恢复指标和透明度评分 - ✅ **双表存储**(JSON + 扁平化用于分析) - ✅ **CSV 导出**,含标准化数值 - ✅ **智能错误恢复**(下次运行时重试) ## 阶段 3 —— CTI 仪表板与 API ✅ 已完成 (v1.6.0) - ✅ **REST API** (FastAPI) 用于提供 CTI 数据 - ✅ **交互式仪表板** (Next.js),包含: - 实时统计和图表 - 带过滤和搜索功能的事件列表 - 包含完整增强数据的详细事件视图 - 时间线和 MITRE ATT&CK 可视化 - 勒索软件和威胁行为者追踪 - 包含国家规范化的地理分析 - 供研究人员下载的 CTI 报告 - ✅ **管理面板**,包含: - 数据库导出(完整 DB 和 CSV) - 调度控制(RSS、每周、增强任务) - 国家规范化工具 - 事件日期修正工具 - ✅ **生产就绪** 的 Railway Docker 部署 - ✅ **国家规范化**:完整的国家名称及 ISO 代码和旗帜表情符号 - ✅ **CTI 报告生成**:遵循安全框架的全面 Markdown 报告 - ✅ **REST API** (FastAPI) 用于提供 CTI 数据 - ✅ **交互式仪表板** (Next.js),包含: - 实时统计和图表 - 带过滤和搜索功能的事件列表 - 包含完整增强数据的详细事件视图 - 时间线和 MITRE ATT&CK 可视化 - 勒索软件和威胁行为者追踪 - 地理分析 - ✅ **生产就绪** 的 Docker 部署 - 🔄 STIX 2.1 / TAXII 源(计划中) # 🧪 技术原则 - 模块化\ - 可复现性\ - 透明度\ - 仅限合乎道德的 OSINT # 📊 BaseIncident Schema(阶段 1) **核心字段:** - `incident_id` - 唯一标识符(确定性哈希) - `source` - 主要来源名称(用于显示;来源归属在 `incident_sources` 表中跟踪) - `source_event_id` - 来源原生事件 ID(来自主要来源) - `university_name` - 规范化的机构名称 - `victim_raw_name` - 来源原始名称 - `institution_type` - "University" | "School" | "Research Institute" | "Unknown" - `country` - ISO-2 国家代码 - `region`, `city` - 地理详情 - `incident_date` - YYYY-MM-DD 格式 - `date_precision` - "day" | "month" | "year" | "unknown" - `title`, `subtitle` - 文章/事件文本 - `primary_url` - **阶段 1 中为 None**(由阶段 2 LLM 增强设置) - `all_urls` - **链接到该事件的所有 URL 列表**(阶段 1 收集所有) - `attack_type_hint` - 基本分类(例如 "ransomware") - `status` - "suspected" | "confirmed" - `source_confidence` - "low" | "medium" | "high" - `notes` - 附加元数据 **阶段 1 URL 处理:** - 所有 URL 均收集在 `all_urls` 字段中 - `primary_url` 在阶段 1 中设为 `None` - 阶段 2(LLM 增强)从 `all_urls` 中选择最佳 URL 并设为 `primary_url` **阶段 2 LLM 增强输出:** 阶段 2 使用存储在数据库中的结构化 CTI 数据丰富事件: - **`llm_enriched`**:表示增强状态的布尔标志 - **`llm_enriched_at`**:增强时间戳 - **`primary_url`**:由 LLM 置信度评分选出的最佳 URL - **`llm_summary`**:全面的事件摘要 - **`llm_timeline`**:包含日期、IOC 和攻击者归属的事件 JSON 时间线 - **`llm_mitre_attack`**:识别出的 MITRE ATT&CK 技术 JSON 数组 - **`llm_attack_dynamics`**:JSON 攻击动态(载体、链条、影响、勒索软件家族等) 完整的增强数据存储在 `incident_enrichments` 表中,包含完整的结构化输出。 # ⚠️ 道德与法律 仅使用**公开的 OSINT**。\ 不涉及暗网、扫描或利用。 # 📜 许可证 MIT License # 🤝 贡献 欢迎贡献!可以通过改进采集功能、添加 OSINT 来源或优化 Schema 来提供帮助。 ## 添加新来源 1. 在 `src/edu_cti/sources//.py` 中创建构建器函数 2. 在 `src/edu_cti/core/sources.py` 中注册 3. **测试你的来源**:`pytest tests/phase1/test_source_contribution.py -v --source-name ` 4. 管道将自动识别它 有关包含示例的详细指南,请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。 有关潜在的额外来源,请参阅 [docs/SOURCES.md](docs/SOURCES.md)。 ## 开发环境设置 ``` # 克隆与设置 git clone https://github.com/sagarkishore-7/EduThreat-CTI.git cd EduThreat-CTI # 创建 virtual environment python -m venv .venv source .venv/bin/activate # 安装依赖 pip install -r requirements.txt pip install -e ".[dev]" # 运行设置脚本以验证配置 python scripts/setup.py --check # 初始化数据库 python scripts/setup.py --init-db # 生成 .env.example 文件 python scripts/setup.py --env # 运行测试 pytest tests/ -v # 格式化并 Lint 代码 black src/ flake8 src/ ``` ### 设置脚本 `scripts/setup.py` 脚本有助于验证和初始化您的配置: ``` # 检查所有依赖和配置 python scripts/setup.py --check # 仅初始化数据库 python scripts/setup.py --init-db # 生成 .env.example 文件 python scripts/setup.py --env ``` 这将: - ✓ 验证所有依赖项已安装 - ✓ 检查目录结构 - ✓ 验证环境变量 - ✓ 验证数据库状态和来源跟踪 ## 测试新来源 ``` # 测试您的源实现 pytest tests/phase1/test_source_contribution.py -v --source-name your_source # 验证 Phase 2 兼容性 pytest tests/phase1/test_source_contribution.py -v -k "test_phase2_readiness" --source-name your_source # 运行完整回归测试 pytest tests/ -v ``` # 🌐 为什么这很重要 教育行业现已成为网络攻击的首要目标,然而公众视野却支离破碎。EduThreat-CTI 旨在构建**首个致力于学术界的开放、实时 CTI 管道**。
标签:CISA项目, Cloudflare, ESC4, MITRE ATT&CK, OSINT, Python, STIX, 勒索软件, 域名收集, 威胁情报, 安全可视化, 安全运营, 实时处理, 密码管理, 开发者工具, 情报收集, 扫描框架, 教育行业, 数据清洗, 数据管道, 无后门, 漏洞研究, 网络安全, 网络测绘, 网络调试, 自动化, 软件工程, 逆向工具, 隐私保护, 高校安全