Bhuvangs04/DNS-Threat-Intelligence-Monitor
GitHub: Bhuvangs04/DNS-Threat-Intelligence-Monitor
一个实时分布式 DNS 威胁情报监控平台,通过多源情报与行为算法检测并可视化 DNS 异常。
Stars: 0 | Forks: 0
# 实时分布式 DNS 威胁情报监控
一个全栈网络安全仪表板,实时监控 DNS 流量,将查询与多个威胁情报源交叉比对,使用行为算法检测异常,并通过实时 SOC 风格深色仪表板呈现所有内容。

## 🏗️ 架构
```
┌─────────────────────────────────────────────────────────────┐
│ INGESTION LAYER │
│ Mock DNS Generator ─── Threat Feed Sync (OTX, URLhaus) │
└──────────────────────────┬──────────────────────────────────┘
│
┌──────────────────────────▼──────────────────────────────────┐
│ PROCESSING LAYER │
│ Normalizer ─── GeoIP Enricher ─── Threat Scorer │
└──────────────────────────┬──────────────────────────────────┘
│
┌──────────────────────────▼──────────────────────────────────┐
│ INTELLIGENCE LAYER │
│ DGA Detector ─── DNS Tunneling ─── Fast-Flux Detection │
└──────────────────────────┬──────────────────────────────────┘
│
┌──────────────────────────▼──────────────────────────────────┐
│ DASHBOARD LAYER │
│ REST API ─── Socket.IO (Real-time) ─── Web Dashboard │
└─────────────────────────────────────────────────────────────┘
```
## 🔧 技术栈
| 层 | 技术 |
|----|------|
| 后端 | Node.js, Express |
| 实时 | Socket.IO |
| 数据库 | MongoDB + Mongoose |
| 前端 | 纯 HTML/CSS/JS |
| 图表 | Chart.js |
| 地图 | Leaflet.js (CartoDB 深色底图瓦片) |
| 地理 IP | geoip-lite |
| 威胁情报源 | URLhaus、AlienVault OTX、AbuseIPDB |
## 🚀 快速开始
### 先决条件
- [Node.js](https://nodejs.org/) (v18+)
- [MongoDB](https://www.mongodb.com/)(本地或 [Atlas](https://www.mongodb.com/atlas) 免费层)
### 安装
```
# 克隆仓库
git clone
cd NS_Project
# 安装依赖
npm install
# 配置环境
cp .env.example .env
# 使用您的 MongoDB URI 和可选的 API 密钥编辑 .env
# 启动服务器
npm run dev
# 打开仪表板
# 导航至 http://localhost:3000
```
### 环境变量
| 变量 | 是否必需 | 默认值 | 描述 |
|------|----------|--------|------|
| `MONGODB_URI` | 是 | `mongodb://localhost:27017/dns-threat-intel` | MongoDB 连接字符串 |
| `PORT` | 否 | `3000` | 服务器端口 |
| `ABUSEIPDB_API_KEY` | 否 | — | AbuseIPDB API 密钥(免费层) |
| `OTX_API_KEY` | 否 | — | AlienVault OTX API 密钥(免费) |
| `MOCK_DNS_ENABLED` | 否 | `true` | 启用模拟 DNS 流量生成 |
| `MOCK_DNS_INTERVAL_MS` | 否 | `1500` | 模拟查询间隔(毫秒) |
| `MOCK_MALICIOUS_RATIO` | 否 | `0.15` | 恶意流量占比(0-1) |
## 🛡️ 检测方法
### 1. DGA 检测(域名生成算法)
使用 **香农熵分析** 与 **字符频率分析** 识别算法生成的域名。合法域名(如 `google.com`)的熵较低(约 2.5),而 DGA 域名(如 `xk7qm3nz.xyz`)的熵较高(约 3.8+)。
### 2. DNS 隧道检测
通过以下方式监控数据外泄:
- 异常长的子域名标签(>20 字符)
- 对同一基础域名的高频查询
- 十六进制编码的子域名模式
- TXT 查询类型滥用
### 3. 快速流检测
通过跟踪单个域名的 IP 轮换识别快速流式托管网络。合法域名通常解析到 1-3 个 IP;快速流域名会在数分钟内轮换 5-10+ 个 IP。
### 4. 威胁情报匹配
将每个 DNS 查询与缓存的指标交叉比对,来源包括:
- **URLhaus(abuse.ch)** — 恶意分发 URL
- **AlienVault OTX** — 社区威胁情报脉冲
- **AbuseIPDB** — IP 信誉数据
- **种子黑名单** — 内置已知恶意域名列表
## 📊 仪表板功能
- **实时统计栏** — 总查询数、威胁数、活动告警数、威胁率、每分钟查询数
- **查询时间线** — 实时双轴折线图(查询 vs 威胁)
- **查询类型分布** — 动画甜甜圈图(A、AAAA、MX、TXT、CNAME、NS)
- **严重性分级** — 按严重程度的水平进度条
- **威胁世界地图** — 带脉冲严重性标记的地理热力图
- **实时威胁订阅源** — 可按严重性筛选的滚动订阅
- **顶级恶意域名** — 按命中次数和分数排名的表格
- **域名详情弹窗** — 点击查看完整威胁情报
- **CSV 导出** — 下载威胁数据用于报告
- **浏览器通知** — 关键威胁推送告警
## 📁 项目结构
```
NS_Project/
├── server/
│ ├── index.js # Express + Socket.IO server
│ ├── config/db.js # MongoDB connection
│ ├── models/
│ │ ├── DnsQuery.js # DNS query schema
│ │ ├── ThreatIndicator.js # Cached threat indicators
│ │ └── Alert.js # Generated alerts
│ ├── services/
│ │ ├── mockDnsGenerator.js # Simulated DNS traffic
│ │ ├── threatFeedSync.js # Threat feed polling + seed list
│ │ ├── enrichmentService.js # GeoIP enrichment
│ │ └── detectionEngine.js # DGA, tunneling, fast-flux
│ ├── routes/
│ │ ├── queries.js # /api/queries
│ │ ├── threats.js # /api/threats
│ │ ├── alerts.js # /api/alerts
│ │ └── stats.js # /api/stats
│ └── utils/
│ ├── threatScorer.js # Composite scoring
│ └── geoip.js # IP geolocation
├── public/
│ ├── index.html # Dashboard SPA
│ ├── css/styles.css # Dark SOC theme
│ └── js/
│ ├── app.js # Main initialization
│ ├── socket.js # Socket.IO client
│ ├── charts.js # Chart.js setup
│ ├── map.js # Leaflet map
│ ├── threatFeed.js # Live feed cards
│ └── domainDetail.js # Detail modal
├── .env.example
├── package.json
└── README.md
```
## 🔬 技术说明
### 实时 DNS 捕获(高级)
在 Linux/Unix 系统上进行生产部署时,系统可通过以下方式扩展以在 53 端口捕获真实 DNS 数据包:
- 通过 `pcap` 或 `cap` npm 包使用 **原始套接字捕获**
- 使用 **eBPF** 实现内核级 DNS 钩子,实现零拷贝捕获
- 拦截 **DNS over HTTPS (DoH)** 与 **DNS over TLS (DoT)**
这需要 root/管理员权限,且不包含在演示配置中。
### 分布式架构(可扩展性)
面向企业级部署,系统设计支持:
- 使用 **Apache Kafka** 或 **Redis Streams** 进行分布式消息代理
- 检测引擎工作节点的水平扩展
- 使用 **STIX/TAXII** 标准格式进行机器间情报共享
- 集成 **响应策略区域 (RPZ)** 实现自动 DNS 阻断
## 👥 团队
| 成员 | 角色 |
|------|------|
| 成员 1 | 后端与基础设施 |
| 成员 2 | 情报引擎 |
| 成员 3 | 前端仪表板 |
## 📄 许可证
MIT 许可证 — 仅供教育用途。
标签:CMS安全, DGA检测, DNS隧道, GeoIP, JavaScript, MITM代理, OTX, Python, SOC仪表盘, T1043, T1573, URLhaus, WebSocket, 依赖分析, 分布式系统, 响应大小分析, 域名监控, 威胁情报, 威胁评分, 安全可视化, 实时DNS监控, 实时分析, 开发者工具, 异常检测, 快速流检测, 数据归一化, 无后门, 时间线生成, 暗色主题, 网络威胁检测, 网络安全, 自定义脚本, 行为算法, 隐私保护