SaniaSaeed2/threat-intel-platform

GitHub: SaniaSaeed2/threat-intel-platform

基于Spring Cloud微服务和Kafka的分布式威胁情报处理平台,自动化完成从多源威胁数据采集、IOC提取验证、VirusTotal评分到持久化存储的完整流水线。

Stars: 0 | Forks: 0

# 威胁情报处理平台 一个基于分布式微服务的网络安全平台,从 AbuseIPDB 和 AlienVault OTX 获取威胁数据,提取并验证入侵指标 (IOC),使用 VirusTotal 对其进行评分,并将丰富后的结果存储在 MySQL 中——所有这一切均通过 Apache Kafka 进行连接。 ## 目录 - [概述](#overview) - [架构](#architecture) - [技术栈](#tech-stack) - [微服务](#microservices) - [Kafka 主题](#kafka-topics) - [入门指南](#getting-started) - [API 接口](#api-endpoints) - [API 密钥](#api-keys) - [故障排除](#troubleshooting) - ## 概述 手动威胁分析无法跟上现代攻击量的步伐。该平台自动化了整个 pipeline——从威胁信息源中提取原始数据,一直到存储经过清理和严重性评分、可供查询的 IOC。 **功能特性:** - 从 AbuseIPDB 和 AlienVault OTX 获取 IP 和域名威胁数据 - 使用基于正则表达式的解析提取并验证 IOC - 对私有或不可路由的指标进行去重和过滤 - 使用 VirusTotal(基于规则 + API 评分)对每个 IOC 进行评分 - 将带有完整审计字段的丰富记录存储在 MySQL 中 - 暴露用于查询、排序和分析的 REST 端点 ## 架构 ``` External APIs Kafka Pipeline Storage & Analytics ───────────── ────────────── ─────────────────── AbuseIPDB ──┐ ┌── MySQL DB ├──► Ingestion ──► [raw-threats] ──► Processing ──► [processed-iocs] ──► Database Service AlienVault ──┘ Service (Kafka) Service │ │ │ └──► [iocs-to-rank] ──► Ranking ───────┘ Service (Severity Scores) │ [ranked-iocs] │ Database Service │ Analytics Service │ API Gateway (:8080) ◄──────────────── Frontend Dashboard ◄──────────────────────────┘ Eureka Service Registry (:8761) ``` ## 技术栈 | 组件 | 技术 | |---|---| | 语言 | Java 17 + Spring Boot | | 服务发现 | Spring Cloud Eureka | | API 网关 | Spring Cloud Gateway | | 消息传递 | Apache Kafka 3.x + Zookeeper | | 数据库 | MySQL 8.0 | | ORM | Spring Data JPA (Hibernate) | | HTTP 客户端 | Spring WebFlux (WebClient) | | 容器化 | Docker + Docker Compose | | 构建工具 | Apache Maven 3.8+ | | 前端 | HTML + CSS + Vanilla JS | | 威胁源 1 | AbuseIPDB REST API | | 威胁源 2 | AlienVault OTX REST API | | 评分 API | VirusTotal API v3 | ## 微服务 | 服务 | 端口 | 职责 | |---|---|---| | `eureka-server` | 8761 | 服务发现与注册中心 | | `api-gateway` | 8080 | 统一入口点、路由、CORS | | `ingestion-service` | 8081 | 从 AbuseIPDB 和 AlienVault 拉取数据 | | `extraction-service` | 8082 | 解析 JSON,提取 IP 和域名 | | `processing-service` | 8083 | 验证、去重并重新发布 IOC | | `database-service` | 8084 | 将 IOC 存储在 MySQL 中,暴露 REST API | | `ranking-service` | 8085 | 通过基于规则 + VirusTotal 计算严重性评分 | | `analytics-service` | 8086 | 聚合视图与统计 | | `kafka-producer-service` | 8087 | 手动和编程式 Kafka 发布 | ## Kafka 主题 | 主题 | 生产者 | 消费者 | |---|---|---| | `raw-threats` | Ingestion Service | Processing Service | | `processed-iocs` | Processing Service | Database Service | | `iocs-to-rank` | Processing Service | Ranking Service | | `ranked-iocs` | Ranking Service | Database Service | ## 入门指南 ### 前置条件 | 工具 | 版本 | 下载 | |---|---|---| | Java JDK | 17+ | https://adoptium.net | | Maven | 3.8+ | https://maven.apache.org | | MySQL | 8.0 | https://dev.mysql.com/downloads | | Apache Kafka | 3.x | https://kafka.apache.org/downloads | | Docker | Latest | https://www.docker.com | ### 选项 A —— Docker Compose(推荐) ``` # 克隆仓库 git clone https://github.com/your-username/threat-intel-platform.git cd threat-intel-platform # (可选)设置真实 API keys export ABUSEIPDB_API_KEY=your_key_here export ALIENVAULT_API_KEY=your_key_here export VIRUSTOTAL_API_KEY=your_key_here # 启动所有内容 docker-compose up --build ``` 运行后,请打开: - 前端仪表板:http://localhost:3000 - Eureka 仪表板:http://localhost:8761 - Kafka UI:http://localhost:9090 ### 选项 B —— 手动运行 #### 步骤 1:设置 MySQL ``` mysql -u root -p < schema.sql ``` 在 `database-service/src/main/resources/application.yml` 中更新凭据: ``` spring: datasource: username: root password: your_password ``` #### 步骤 2:启动 Zookeeper 和 Kafka ``` # 终端 1 — Zookeeper $KAFKA_HOME/bin/zookeeper-server-start.sh $KAFKA_HOME/config/zookeeper.properties # 终端 2 — Kafka broker $KAFKA_HOME/bin/kafka-server-start.sh $KAFKA_HOME/config/server.properties # 终端 3 — 创建 topics(Kafka 启动后等待 10 秒) chmod +x create-kafka-topics.sh ./create-kafka-topics.sh ``` #### 步骤 3:构建所有服务 ``` mvn clean package -DskipTests ``` #### 步骤 4:按顺序启动服务 ``` # 终端 1 — Eureka(启动其他服务前等待 10 秒) java -jar eureka-server/target/eureka-server-1.0.0.jar # 终端 2 — API Gateway java -jar api-gateway/target/api-gateway-1.0.0.jar # 终端 3 — Ingestion Service java -jar ingestion-service/target/ingestion-service-1.0.0.jar # 终端 4 — Extraction Service java -jar extraction-service/target/extraction-service-1.0.0.jar # 终端 5 — Processing Service java -jar processing-service/target/processing-service-1.0.0.jar # 终端 6 — Database Service java -jar database-service/target/database-service-1.0.0.jar # 终端 7 — Ranking Service java -jar ranking-service/target/ranking-service-1.0.0.jar # 终端 8 — Analytics Service java -jar analytics-service/target/analytics-service-1.0.0.jar # 终端 9 — Kafka Producer Service java -jar kafka-producer-service/target/kafka-producer-service-1.0.0.jar ``` 或使用启动脚本: ``` chmod +x start-all.sh && ./start-all.sh ``` #### 步骤 5:打开前端 ``` threat-intel-platform/frontend/src/index.html ``` 或使用 live-server: ``` cd frontend/src npx live-server --port=3000 ``` ## API 接口 所有请求均通过位于 `http://localhost:8080` 的 API Gateway 进行。 ### 获取 ``` # 从所有来源触发 ingestion curl -X POST "http://localhost:8081/api/ingest/trigger?source=all" ``` ### IOC ``` # 获取所有 IOC(分页) curl "http://localhost:8084/api/ioc?page=0&size=10" # 获取统计信息 curl "http://localhost:8084/api/ioc/stats" # 获取高严重性 IOC curl "http://localhost:8084/api/ioc/high-severity?minScore=7.0" ``` ### 评分 ``` # 对特定 IOC 进行排名 curl "http://localhost:8085/api/rank/ioc?value=185.220.101.5&type=IP_ADDRESS" ``` ### Kafka 生产者 ``` # 手动将 IOC 发布到 Kafka curl -X POST "http://localhost:8087/api/kafka/publish-ioc?iocValue=1.2.3.4&iocType=IP_ADDRESS" ``` ### 通过 API Gateway ``` curl "http://localhost:8080/api/ioc/stats" curl "http://localhost:8080/api/analytics/summary" ``` ## API 密钥 该系统在没有 API 密钥的情况下以演示模式运行——将自动加载模拟数据。 要使用真实的威胁情报,请注册并设置以下内容: | 提供商 | 注册地址 | 环境变量 | |---|---|---| | AbuseIPDB | https://www.abuseipdb.com | `ABUSEIPDB_API_KEY` | | AlienVault OTX | https://otx.alienvault.com | `ALIENVAULT_API_KEY` | | VirusTotal | https://www.virustotal.com | `VIRUSTOTAL_API_KEY` | ## 故障排除 | 问题 | 解决方案 | |---|---| | 服务未在 Eureka 中显示 | 启动后等待 30–60 秒——Eureka 存在心跳延迟 | | MySQL 连接被拒绝 | 确保 MySQL 在端口 3306 上运行且凭据正确 | | Kafka 连接被拒绝 | 确保在 Kafka 之前启动 Zookeeper | | `ClassNotFoundException` | 使用 `mvn clean package -DskipTests` 重新构建 | | 端口已被占用 | 运行 `lsof -ti:8081 \| xargs kill -9`(根据需要替换端口) | | 数据库中没有 IOC | 通过前端或 curl 触发手动获取 | ## 项目结构 ``` threat-intel-platform/ ├── analytics-service/ ├── api-gateway/ ├── database-service/ ├── eureka-server/ ├── extraction-service/ ├── frontend/ ├── ingestion-service/ ├── kafka-producer-service/ ├── processing-service/ ├── ranking-service/ ├── docker-compose.yml ├── pom.xml ├── schema.sql └── README.md ``` **课程:** COMP-370 – 软构建与开发 **机构:** PAF-IAST,计算科学学院,Mang,Haripur **讲师:** Dr. Malik Nabeel Ahmed Awan
标签:AbuseIPDB, Apache Kafka, Ask搜索, IOC提取, IP威胁分析, Java/Python/Go, Kafka消息队列, RESTful API, VirusTotal, 代码示例, 分布式系统, 后端开发, 响应大小分析, 域名安全, 多模态安全, 威胁情报, 威胁评分, 安全数据管道, 实时处理, 开发者工具, 微服务架构, 情报收集, 提示词优化, 攻击指标, 数据分析, 数据可视化, 数据清洗, 漏洞指标, 漏洞研究, 版权保护, 网络安全, 请求拦截, 软件成分分析, 隐私保护