rajshevde-01/Threat-Feed-Aggregator

GitHub: rajshevde-01/Threat-Feed-Aggregator

一款轻量级威胁情报聚合与标准化平台,将多个公开威胁源统一采集、去重并提供 Web 仪表盘和 REST API 供检索分析。

Stars: 0 | Forks: 0

# 威胁源聚合器与标准化工具 集中管理来自 11 个以上公开源的威胁情报,将其标准化至统一的数据库中,并通过 Web 仪表盘和 REST API 进行搜索和分析。 ## *免责声明 ## iocs.json 未包含在内 `data/iocs.json` 文件已从本仓库中移除,因为它包含敏感信息和机密。**切勿将任何密钥或凭证提交到本仓库。** 若要使用本项目,您必须在 `data/` 目录中提供自己的 `iocs.json` 文件。在提交或推送到 GitHub 之前,请确保您的文件不包含任何敏感密钥或凭证。 **切勿将密钥、API 凭证或敏感数据分享或上传至公开仓库。** 如果您需要模板,请创建一个空的 `iocs.json` 或使用您自己的威胁源导出文件。 ## 项目结构 ``` ├── src/aggregator/ │ ├── app.py # Flask app with REST API │ ├── cli.py # CLI commands (fetch, schedule, search, dashboard) │ ├── fetcher.py # HTTP feed fetching with retries │ ├── parsers.py # TXT/CSV/JSON parsers │ ├── normalizer.py # Schema normalization + type detection │ ├── store.py # SQLite CRUD and advanced search │ └── utils.py # Config loading and logging ├── templates/ │ └── index.html # Dashboard UI (Jinja2) ├── static/ │ ├── styles.css # Dashboard styling (dark/light theme) │ ├── theme.js # Theme switcher (localStorage) │ └── styles.css # Signal-room aesthetic design ├── config/ │ └── feeds.json # 11 threat feeds (TXT, CSV, JSON) ├── scripts/windows/ # Windows Task Scheduler setup scripts ├── Dockerfile # Container image ├── docker-compose.yml # Multi-service orchestration └── run_cli.py # CLI entry point ``` ## 为什么选择这个项目? **问题所在:** - 安全团队需要监控多个来源(AbuseIPDB、URLhaus、OpenPhish 等)的威胁 - 每个源都有不同的格式(TXT、CSV、JSON)和结构 - 人工汇总既耗时又容易出错 - 缺乏统一的界面来对来源进行去重和搜索 - 将源集成到安全工具中需要编写自定义代码 **解决方案:** 此工具自动获取威胁源,将其标准化为统一的 SQLite 数据库,并提供: - **单一事实来源**:所有 IOC(入侵指标)在源之间进行去重 - **快速搜索**:在 <500ms 内通过简单匹配/正则/CIDR 查询 IP、域名、URL - **Web 仪表盘**:具有深色/浅色主题界面的 UI,供分析师搜索和筛选威胁 - **REST API**:程序化访问,以便与 SIEM、防火墙或自定义工具集成 - **定时更新**:通过 CLI 调度或 Docker 自动获取源 ## 功能特性 - 通过 HTTP 获取源 - 解析 TXT、CSV、JSON 格式 - 标准化结构:`type | value | source | severity | date_added` - 跨源去重 - IOC 类型标记(ip、domain、url) - 统一的 IOC 数据库(SQLite) - 具有深色/浅色主题切换功能的 Web 仪表盘 - 高级搜索:简单、正则、CIDR 范围 - 用于程序化访问的 REST API - 搜索/筛选工具(CLI) - 具有重试和日志记录功能的弹性获取 - 基于间隔的调度 ## 使用案例 **SOC 分析师**:在所有威胁源中搜索可疑的 IP/域名,无需切换标签页 ``` python run_cli.py search --query 192.168.1.1 --db data/iocs.db --search-mode simple ``` **安全工程师**:构建每日更新的防火墙阻止列表,包含所有高危威胁 ``` python run_cli.py fetch --feeds config/feeds.json --db data/iocs.db --export-json blocklist.json # 导出 JSON → firewall API 集成 ``` **威胁猎手**:通过 REST API 查询威胁,用于自定义分析/报告工具 ``` curl 'http://localhost:5000/api/iocs?query=phishing&type=url&search_mode=regex' ``` **DevOps/安全团队**:通过 Docker 运行自动化的每日源更新 ``` docker-compose up # Scheduled fetches + dashboard + API ``` ## 系统要求 - Python 3.10+ ## 快速开始 ``` # 1. 安装依赖 pip install -r requirements.txt # 2. 获取并规范化威胁源 python run_cli.py fetch --feeds config/feeds.json --db data/iocs.db # 3. 启动 Web Dashboard python run_cli.py dashboard --db data/iocs.db --host 127.0.0.1 --port 5000 # 打开 http://127.0.0.1:5000 → 搜索、过滤、切换 Dark Mode # 或使用 REST API curl 'http://127.0.0.1:5000/api/iocs?query=192.168&type=ip' ``` ## 设置 1. 创建并激活虚拟环境 2. 安装依赖: ``` pip install -r requirements.txt ``` ## 包含的威胁源 默认配置聚合了 **11 个公开威胁源**,涵盖恶意软件、网络钓鱼、僵尸网络和垃圾邮件: | 源 | 类型 | 来源 | |------|------|--------| | Feodo (AbuseIPDB) | 僵尸网络 C2 | abuse.ch | | OpenPhish | 钓鱼 URL | openphish.com | | URLhaus | 恶意软件 URL | urlhaus.abuse.ch | | PhishTank | 网络钓鱼 | phishtank.com | | Spamhaus DROP | 垃圾邮件/僵尸网络 | spamhaus.org | | Spamhaus eDROP | 垃圾邮件/僵尸网络 | spamhaus.org | | BlockList.de | 暴力破解 IP | blocklist.de | | Firehol | 多源 | firehol.org | | CINS Army | DDoS/垃圾邮件 | cinsscore.com | | AbuseIPDB SSL 黑名单 | 恶意 SSL 证书 | abuse.ch | **总计**:178,000+ 个唯一 IOC,全部经过去重并标准化为单一结构。 通过编辑 `config/feeds.json` 添加或自定义源。 ## 配置源 编辑示例配置: - `config/feeds.json` 每个源条目包括: - `name` - `url` - `format` (txt, csv, json) - `severity` (可选) - `enabled` (可选) ## 获取并标准化源 ``` python run_cli.py fetch --feeds config/feeds.json --db data/iocs.db --export-json data/iocs.json ``` 可选的限制和重试控制: ``` python run_cli.py fetch --feeds config/feeds.json --db data/iocs.db --max-total 200000 --max-per-feed 50000 ``` ## 定时获取 ``` python run_cli.py schedule --feeds config/feeds.json --db data/iocs.db --interval 3600 ``` ## 自动化 ### Docker (可选) 构建一次并运行一次性获取: ``` docker compose run --rm fetch ``` 在长期运行的容器中运行调度器: ``` docker compose up schedule ``` 在容器中运行仪表盘: ``` docker compose up dashboard ``` ### Windows 任务计划程序 创建或更新计划任务(从仓库根目录运行): ``` powershell -ExecutionPolicy Bypass -File scripts/windows/create_scheduled_task.ps1 -IntervalMinutes 60 ``` 移除任务: ``` powershell -ExecutionPolicy Bypass -File scripts/windows/remove_scheduled_task.ps1 ``` ## 搜索 IOC 数据库 ``` python run_cli.py search --db data/iocs.db --type ip --query 1.2. ``` ## 运行仪表盘 ``` python run_cli.py dashboard --db data/iocs.db --host 127.0.0.1 --port 5000 ``` 仪表盘默认监听 127.0.0.1:5000。 ### 高级搜索 仪表盘包含三种搜索模式: 1. **简单**(默认) - 子串匹配 - `192.168` 查找所有包含该子串的 IP 2. **正则** - 完整正则表达式支持 - `^192\.168` 查找以 192.168 开头的 IP - `malware.*c2` 查找匹配该模式的 URL 3. **CIDR** - 基于网络的查询(仅限 IP) - `192.168.0.0/16` 查找子网内的所有 IP - `10.0.0.0/8` 用于更广泛的范围 组合筛选器:搜索 + 类型 + 来源 + 严重程度 + 日期范围 ### REST API 用于程序化访问的完整 JSON API: ``` # 健康检查 curl http://127.0.0.1:5000/api/health # 获取统计信息 curl http://127.0.0.1:5000/api/stats # 分页搜索 curl 'http://127.0.0.1:5000/api/iocs?query=192.168&type=ip&page_size=50' # 正则搜索 curl 'http://127.0.0.1:5000/api/iocs?query=^10\.&search_mode=regex&type=ip' # CIDR 搜索 curl 'http://127.0.0.1:5000/api/iocs?query=192.168.0.0/16&search_mode=cidr&type=ip' # 获取可用过滤器 curl http://127.0.0.1:5000/api/filters ``` 完整端点文档请参阅 [API.md](API.md)。 ## 输出结构 导出时,每条 IOC 记录均以 JSON 格式存储: ``` { "type": "ip", "value": "1.2.3.4", "source": "example-feed", "severity": "medium", "date_added": "2026-02-13T00:00:00Z" } ``` ## 注意事项 - 部分源包含标头、注释或额外列;解析器会尝试处理常见情况。 - 标记为 `enabled: false` 的源将被跳过,直到您将其设置为 true。 - 日志默认写入 `logs/ingest.log`。 - ThreatFox 导出需要 auth-key;获取后请更新 URL 并启用该源。 - Spamhaus EDROP 列表已合并至 DROP 中。 - abuse.ch SSLBL IP 黑名单已被标记为弃用。 ## 免责声明 本工具聚合了来自开源源的**公开威胁情报**。按“原样”提供,用于安全研究和防御目的。 **请负责任地使用:** - ✅ 在防火墙和 WAF 中阻止恶意 IP/域名 - ✅ 增强您的检测和响应能力 - ✅ 支持合法的安全运营 - ❌ 切勿用于攻击性操作或未授权访问 - ❌ 切勿在无适当署名的情况下重新分发威胁数据 - ❌ 切勿用于非法活动 威胁源的准确性和完整性取决于其维护者。在采取行动之前,请务必与您自己的安全团队一起验证发现结果。 ## 作者 **Raj Shevde** - 🔗 **LinkedIn**: [linkedin.com/in/raj-shevde](https://www.linkedin.com/in/raj-shevde/) - 📧 联系方式:如有问题、反馈或合作,请通过 LinkedIn 联系 **贡献**:发现了 Bug 或有功能建议?提交 Issue 或发送 Pull Request!
标签:Docker, ESC4, ETL, Flask, IOC聚合, JavaCC, Jinja2, NIDS, OSINT, Python, REST API, SQLite, Web Dashboard, 失陷指标, 威胁情报, 威胁源聚合, 威胁猎杀, 安全运营, 安全防御评估, 容器化, 开发者工具, 恶意软件情报, 情报分析, 扫描框架, 数据清洗, 文档结构分析, 无后门, 网络安全, 网络测绘, 网络诊断, 自动化收集, 请求拦截, 逆向工具, 隐私保护, 黑白名单