mguruprasath416/Threat-Intelligence
GitHub: mguruprasath416/Threat-Intelligence
面向安全运营团队的威胁情报仪表板,支持多源 IOC 自动丰富、威胁评分和 MITRE ATT&CK 映射。
Stars: 1 | Forks: 0
# 🛡️ IOC Sentinel — 威胁情报仪表板
**一个专为 SOC 分析师和 CTI 团队设计的全栈网络威胁情报平台。**
自动丰富 IOC,映射 MITRE ATT&CK 技术,并实时可视化威胁。
[功能](#-features) • [技术栈](#️-tech-stack) • [安装说明](#-setup) • [API](#-api-endpoints) • [项目结构](#-project-structure) • [工作原理](#-how-it-works)
## 📌 什么是 IOC Sentinel?
IOC Sentinel 是一个**威胁情报 IOC 仪表板**,可帮助 SOC 分析师和 CTI 团队:
- **搜索并丰富**入侵指标(IP、域名、URL、文件哈希)
- 在一处**关联**来自多个来源的威胁数据
- **自动映射**威胁到 MITRE ATT&CK 技术
- 从 OpenPhish 等来源**监控实时威胁源**
- 为事件记录**生成报告**
作为一个**作品集项目**构建,展示了真实的网络威胁情报工作流程。
## ✨ 功能
### 🔍 IOC 搜索与丰富
- 支持 **IP 地址、域名、URL、文件哈希 (MD5/SHA1/SHA256)**
- 自动检测 IOC 类型 —— 只需粘贴并搜索
- 同时从 **3 个威胁情报 API** 获取数据进行丰富
- 结果缓存 24 小时以保留 API 配额
### 📊 威胁情报来源
| 来源 | 提供的数据 |
|--------|--------------|
| **VirusTotal** | 90+ 引擎检测、信誉评分、地理数据 |
| **AbuseIPDB** | 滥用置信度评分、报告数量、ISP、Tor 检测 |
| **AlienVault OTX** | 威胁 pulse、攻击活动关联、被动 DNS |
| **OpenPhish** | 实时钓鱼 URL 源(每 6 小时自动刷新) |
### 🎯 威胁评分引擎
- 加权评分算法:**VT (40%) + AbuseIPDB (40%) + OTX (20%)**
- 标准化 0–100 分数 → 严重性分类:
- 🟢 **低危** (0–25)
- 🟡 **中危** (26–50)
- 🟠 **高危** (51–75)
- 🔴 **严重** (76–100)
### 🗺️ MITRE ATT&CK 自动映射
自动将 IOC 特征映射到 MITRE 技术:
- `T1566` — 钓鱼 (初始访问)
- `T1110` — 暴力破解 (凭证访问)
- `T1071` — C2 通信
- `T1486` — 数据加密以造成影响 (勒索软件)
- `T1555` — 来自密码存储的凭证
### 📈 实时仪表板
- KPI 卡片:IOC 总数、严重、高危、中危计数
- 严重性分布甜甜圈图
- IOC 类型细分饼图
- 30 天 IOC 趋势折线图
- 头部威胁国家柱状图
- 来自威胁情报的标签云
### 📡 实时威胁源
- 每 30 秒自动刷新
- 实时滚动跑马灯显示严重/高危威胁
- 按来源过滤 (OpenPhish、手动、API 丰富)
- 新 IOC 计数器(过去 1 小时、过去 24 小时)
### 📋 分析师报告
- 创建捆绑多个 IOC 的调查报告
- 草稿 → 发布的工作流程
- 自动计算的汇总统计
- 分析师的发现与建议
### 🔐 认证与访问控制
- 基于 JWT 的认证
- 基于角色的访问:**Admin** 和 **Analyst** 角色
- 第一个注册的用户自动获得 Admin 角色
- 速率限制:常规 100 请求/15分钟,认证 10 请求/15分钟,IOC 搜索 30 请求/10分钟
## 🛠️ 技术栈
### 前端
| 技术 | 用途 |
|-----------|---------|
| React 18 | UI 框架 |
| React Router v6 | 客户端路由 |
| Recharts | 数据可视化 (图表) |
| Axios | 带拦截器的 HTTP 客户端 |
| Vite | 构建工具和开发服务器 |
| CSS 变量 | 暗色网络行动主题 |
### 后端
| 技术 | 用途 |
|-----------|---------|
| Node.js + Express | REST API 服务器 |
| MongoDB + Mongoose | 数据库和 ODM |
| JWT + bcryptjs | 认证和密码哈希 |
| Winston | 结构化日志记录 |
| node-cron | 定时源获取 |
| Helmet + CORS | 安全中间件 |
| express-rate-limit | API 速率限制 |
### 外部 API
| API | 免费额度 |
|----|----------|
| VirusTotal | 4 请求/分钟, 500/天 |
| AbuseIPDB | 1,000 请求/天 |
| AlienVault OTX | 宽裕的免费额度 |
| OpenPhish | 公共源,无需密钥 |
## 🚀 安装说明
### 前置条件
- Node.js 18+
- MongoDB (本地或 Atlas)
- npm 或 yarn
### 1. 克隆代码库
```
git clone https://github.com/yourusername/ioc-sentinel.git
cd ioc-sentinel
```
### 2. 后端配置
```
cd server
npm install
```
创建 `server/.env`:
```
PORT=5000
NODE_ENV=development
MONGO_URI=mongodb://localhost:27017/ioc_dashboard
JWT_SECRET=your_super_secret_jwt_key_here
JWT_EXPIRE=7d
VT_API_KEY=your_virustotal_api_key
ABUSEIPDB_API_KEY=your_abuseipdb_api_key
OTX_API_KEY=your_otx_api_key
CLIENT_URL=http://localhost:5173
LOG_LEVEL=info
IOC_STALE_DAYS=90
```
启动后端:
```
npm run dev
```
### 3. 前端配置
```
cd client
npm install
npm run dev
```
### 4. 在浏览器中打开
```
http://localhost:5173
```
注册账号并开始分析威胁。
## 🔑 获取免费 API 密钥
| 服务 | 注册链接 | 免费限制 |
|---------|------------------|-----------|
| VirusTotal | https://www.virustotal.com/gui/join-us | 500/天 |
| AbuseIPDB | https://www.abuseipdb.com/register | 1,000/天 |
| AlienVault OTX | https://otx.alienvault.com | 无限 |
## 📡 API Endpoint
### 认证
```
POST /api/auth/register Create new account
POST /api/auth/login Login and receive JWT
GET /api/auth/me Get current user profile
POST /api/auth/logout Logout
PUT /api/auth/password Change password
```
### IOC 操作
```
POST /api/ioc/search Search and enrich an IOC
GET /api/ioc/stats Dashboard aggregated statistics
GET /api/ioc List IOCs (paginated, filterable)
GET /api/ioc/:id Get single IOC details
DELETE /api/ioc/:id Archive IOC (admin only)
PATCH /api/ioc/:id/flag Toggle false positive flag
```
### 报告
```
POST /api/reports Create new report
GET /api/reports List all reports
GET /api/reports/:id Get single report with IOC details
PUT /api/reports/:id Update report
POST /api/reports/:id/publish Publish a draft report
DELETE /api/reports/:id Delete report (admin only)
```
### 健康检查
```
GET /health Server health check
```
## 📁 项目结构
```
ioc-sentinel/
│
├── client/ # React Frontend
│ ├── src/
│ │ ├── api/
│ │ │ └── axios.js # Pre-configured axios with JWT
│ │ ├── components/
│ │ │ ├── Navbar/ # Top navigation bar
│ │ │ ├── Sidebar/ # Left navigation sidebar
│ │ │ ├── IOCSearch/ # Search bar with auto type detection
│ │ │ ├── ThreatCard/ # Enrichment result display card
│ │ │ ├── ThreatTable/ # Sortable paginated IOC table
│ │ │ ├── Charts/ # Recharts visualizations
│ │ │ ├── Loader/ # Loading spinner
│ │ │ └── Alerts/ # Toast notifications
│ │ ├── context/
│ │ │ ├── AuthContext.jsx # JWT and user session state
│ │ │ └── IOCContext.jsx # IOC search and list state
│ │ ├── pages/
│ │ │ ├── Dashboard.jsx # Main dashboard with charts
│ │ │ ├── IOCSearch.jsx # Search + results + IOC table
│ │ │ ├── IOCDetails.jsx # Single IOC full detail view
│ │ │ ├── ThreatFeed.jsx # Live auto-refreshing threat feed
│ │ │ ├── Reports.jsx # Analyst report management
│ │ │ └── Login.jsx # Authentication page
│ │ ├── routes/
│ │ │ └── AppRoutes.jsx # Protected route definitions
│ │ ├── utils/
│ │ │ └── formatDate.js # Date, severity, validation helpers
│ │ └── styles/
│ │ └── globals.css # Dark cyber-ops design system
│ └── package.json
│
└── server/ # Node.js Backend
├── config/
│ ├── db.js # MongoDB connection
│ └── apiKeys.js # API key configuration
├── controllers/
│ ├── iocController.js # IOC search, list, stats logic
│ ├── authController.js # Login, register, JWT handling
│ └── reportController.js # Report CRUD operations
├── middleware/
│ ├── authMiddleware.js # JWT verification + RBAC
│ ├── errorMiddleware.js # Global error handler
│ └── rateLimitMiddleware.js # Rate limiting per endpoint
├── models/
│ ├── IOC.js # IOC MongoDB schema
│ ├── User.js # User schema with bcrypt hooks
│ └── Report.js # Analyst report schema
├── routes/
│ ├── iocRoutes.js # IOC endpoint routing
│ ├── authRoutes.js # Auth endpoint routing
│ └── reportRoutes.js # Report endpoint routing
├── services/
│ ├── virustotalService.js # VirusTotal API integration
│ ├── abuseipdbService.js # AbuseIPDB API integration
│ ├── otxService.js # AlienVault OTX integration
│ ├── openphishService.js # OpenPhish feed with cache
│ └── enrichmentService.js # Orchestrates all API calls
├── utils/
│ ├── threatScore.js # Weighted scoring algorithm
│ ├── mitreMapper.js # MITRE ATT&CK auto-mapping
│ ├── iocValidator.js # IOC type detection and validation
│ └── logger.js # Winston structured logging
├── jobs/
│ └── fetchThreatFeeds.js # Cron: OpenPhish every 6 hours
├── app.js # Express app configuration
└── server.js # Entry point
```
## 🔄 工作原理
```
User types: 185.220.101.45
↓
Frontend auto-detects type → IP Address
↓
POST /api/ioc/search
↓
authMiddleware verifies JWT token
↓
iocController checks MongoDB cache (less than 24h old)
↓ (cache miss — fresh enrichment needed)
enrichmentService calls APIs in parallel:
├── VirusTotal → 45 out of 92 engines flagged
├── AbuseIPDB → 87% abuse confidence score
└── OTX → 12 threat pulses found
↓
threatScore.js calculates weighted score → 70 → HIGH severity
↓
mitreMapper.js assigns → T1110 Brute Force, T1071 C2 Communication
↓
Result saved to MongoDB for caching
↓
ThreatCard.jsx displays full enrichment result
```
## 🧠 展示的核心概念
| 概念 | 实现 |
|---------|---------------|
| 威胁情报流水线 | 收集 → 丰富 → 评分 → 可视化 |
| IOC 丰富 | 多源 API 关联 |
| MITRE ATT&CK 映射 | 从 IOC 数据自动识别 TTP |
| 严重性分类 | 加权评分算法 (0–100) |
| 缓存策略 | 24小时 MongoDB 缓存以保留 API 配额 |
| JWT 认证 | 无状态的基于 token 的会话管理 |
| 基于角色的访问控制 | Admin 与 Analyst 权限 |
| 速率限制 | 保护外部 API 配额免受滥用 |
| 后台任务 | 通过 cron 自动获取 OpenPhish 源 |
| REST API 设计 | 具有正确 HTTP 方法的 RESTful endpoint |
## 🛡️ 安全特性
- 使用 bcrypt 进行密码哈希 (12 轮盐)
- 带有可配置过期的 JWT token
- 通过 Helmet.js 实现 HTTP 安全头
- 仅为特定来源配置 CORS
- 所有 API endpoint 均启用速率限制
- 对所有 IOC 提交进行输入验证
- 软删除 —— IOC 被归档而不是永久删除
- 环境变量 —— 无硬编码的机密信息
## 🗺️ 映射的 MITRE ATT&CK 技术
| 技术 ID | 名称 | 战术 |
|-------------|------|--------|
| T1566 | 钓鱼 | 初始访问 |
| T1566.001 | 鱼叉式钓鱼附件 | 初始访问 |
| T1566.002 | 鱼叉式钓鱼链接 | 初始访问 |
| T1071 | 应用层协议 | 命令与控制 |
| T1110 | 暴力破解 | 凭证访问 |
| T1555 | 来自密码存储的凭证 | 凭证访问 |
| T1486 | 数据加密以造成影响 | 影响 |
| T1041 | 通过 C2 通道外发 | 外发 |
| T1046 | 网络服务扫描 | 发现 |
| T1204.002 | 恶意文件 | 执行 |
| T1078 | 有效账户 | 防御规避 |
| T1589 | 收集受害者身份信息 | 侦察 |
## 🚧 路线图
- [ ] 针对严重 IOC 的实时 WebSocket 警报
- [ ] Telegram 频道监控集成
- [ ] SIEM 集成 (Splunk, Microsoft Sentinel)
- [ ] 用于基础设施分析的 Shodan API
- [ ] PDF 报告导出
- [ ] 针对新严重 IOC 的电子邮件警报
- [ ] 用于威胁分析的 AI 驱动的 RAG 聊天机器人
- [ ] 从 IOC 生成 Sigma 规则
- [ ] 暗网监控模块
- [ ] CSV 和 JSON IOC 导出
## 🤝 使用场景
| 角色 | 使用方式 |
|------|----------------|
| **SOC 分析师** | 在事件期间快速调查可疑的 IP 和域名 |
| **CTI 分析师** | 跟踪新出现的威胁并从多个来源丰富指标 |
| **安全工程师** | 监控威胁源并与现有 SIEM 集成 |
| **安全研究员** | 分析恶意软件基础设施和威胁行为者的 TTP |
## 📄 许可证
MIT 许可证 — 免费用于个人和教育项目。
## 👤 作者
**Guru Prasath**
网络安全 | 威胁情报 | SOC 运营
- LinkedIn: https://linkedin.com/in/yourprofile
- GitHub: https://github.com/yourusername
标签:MITM代理, 威胁情报, 安全运营, 开发者工具, 扫描框架, 自定义脚本