omk44/Automated-CVE-based-Host-Vulnerability-Scanner
GitHub: omk44/Automated-CVE-based-Host-Vulnerability-Scanner
一个集成了CVE自动匹配与机器学习异常检测功能的企业级网络漏洞评估平台。
Stars: 0 | Forks: 0
# 🔒 具备 ML 驱动异常检测功能的自动化 CVE 扫描器
这是一个企业级网络漏洞评估平台,集成了自动设备发现、端口扫描、CVE 匹配以及基于机器学习的异常检测功能。专为安全专业人员设计,用于识别漏洞并实时检测异常网络行为。
## 🌐 快速链接
| 🔗 资源 | 描述 |
|------------|-------------|
| 🌐 **[在线演示](https://your-app.up.railway.app)** | 在线查看仪表板 *(包含示例数据的只读演示)* |
| 📖 **[文档](#-core-features)** | 完整功能列表和架构 |
| 🚀 **[安装指南](#-installation)** | 在本地设置以进行实际扫描 |
| 🔒 **[安全指南](./SECURITY.md)** | 部署最佳实践 |
| 🔒 **[扫描器系统设计](./SYSTEM_DESIGN.md)**|
## 📋 问题陈述
现代网络面临三个关键挑战:
1. **漏洞盲点** - 未知设备和过时软件制造了攻击向量
2. **设备可见性缺口** - IoT、移动和临时设备缺乏可靠的主机名识别(30% 显示为 "Unknown")
3. **异常检测局限** - 传统扫描器无法区分正常操作和可疑的行为变化
**我们的解决方案:** 结合 NVD 漏洞数据库、增强型多协议主机名解析 (NetBIOS/LLMNR/mDNS/SNMP/SMB) 和 Isolation Forest ML 算法的智能扫描器,可自动检测端口异常、新设备和可疑的网络模式。
## 🎯 核心功能
### 🔍 网络智能
- **自动设备发现** - 通过 ARP/ICMP/UDP 探测发现网络子网上的所有设备
- **全面端口扫描** - 对所有 65,535 个端口进行 TCP SYN 隐蔽扫描 + top 100 UDP 服务
- **增强型主机名解析** - 7 协议回退链 (NetBIOS/LLMNR/mDNS/SMB/SNMP/HTTP/reverse DNS)
- **Redis 主机名缓存** - 1 小时 TTL 缓存减少冗余网络查询
- **并行解析** - ThreadPoolExecutor 并发解析多个 IP
### 🛡️ 漏洞评估
- **服务版本检测** - nmap -sV,强度为 7(平衡速度/准确性)
- **CPE 提取** - 通用平台枚举匹配
- **NVD CVE 数据库** - 来自 NIST 国家漏洞数据库的 200,000+ 个漏洞
- **自动 CVE 匹配** - 将检测到的软件版本链接到已知漏洞利用
- **严重性分类** - 关键/高/中/低风险评级及 CVSS 评分
### 🤖 机器学习引擎
- **Isolation Forest 算法** - 无监督异常检测(100 个估计器,0.1 污染率)
- **设备基线跟踪** - 从前 5 次扫描中学习正常端口行为
- **异常检测** - 识别新端口、关闭的端口和可疑变化
- **自适应阈值** - 自动调整异常分数(当前:0.25 阈值)
- **误报学习** - 审查结果可提高模型准确性
### 🎨 用户界面
- **Django Web 仪表板** - 具有漏洞计数的实时设备清单
- **设备详情视图** - 每个设备的端口/服务/CVE 细分
- **PDF 报告生成** - 使用 ReportLab 生成专业审计报告
- **ML 异常仪表板** - 可视化检测到的异常及严重性热图
- **扫描历史跟踪** - 基于会话的扫描管理
### ⚙️ 技术架构
- **异步任务队列** - Celery + Redis 用于并行扫描(可配置 2-8 个 worker)
- **后台处理** - 通过 `.delay()` 任务委托进行非阻塞扫描
- **计划自动化** - Celery Beat 用于定期 NVD 更新和网络重新扫描
- **防火墙绕过** - `-Pn` 标志,SYN 隐蔽扫描,针对 Windows 防火墙兼容性的优化时序
- **多用户支持** - Django 身份验证及每用户设备隔离
## 🏗️ 系统架构
```
┌─────────────────────────────────────────────────────────────────┐
│ Web Browser (User) │
└──────────────────────────────┬──────────────────────────────────┘
│ HTTP (Port 8000)
▼
┌─────────────────────────────────────────────────────────────────┐
│ Django Web Application │
│ ┌──────────────┐ ┌──────────────┐ ┌─────────────────────┐ │
│ │ views.py │ │ models.py │ │ templates (HTML) │ │
│ │ (UI Logic) │ │ (Database) │ │ (Dashboard/Reports)│ │
│ └──────┬───────┘ └──────┬───────┘ └─────────────────────┘ │
│ │ │ │
│ └──────────────────┴─────────┐ │
│ ▼ │
│ ┌───────────────┐ │
│ │ tasks.py │ │
│ │ (Scan Logic) │ │
│ └───────┬───────┘ │
│ │ .delay() │
└──────────────────────────────────────┼──────────────────────────┘
│
▼
┌──────────────────┐
│ Redis (Port 6379)│
│ Message Broker │
└────────┬──────────┘
│ Task Queue
┌────────────────┼────────────────┐
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Celery Worker│ │ Celery Worker│ │ Celery Worker│
│ (Process 1) │ │ (Process 2) │ │ (Process N) │
└──────┬───────┘ └──────┬───────┘ └──────┬───────┘
│ nmap scan │ nmap scan │ nmap scan
▼ ▼ ▼
┌─────────────────────────────────────────────────┐
│ Target Network Devices │
│ [PC] [Server] [Router] [IoT] [Mobile] │
└─────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────┐
│ SQLite Database │
│ ┌──────────┐ ┌─────────────┐ ┌────────────┐ │
│ │ Device │ │ ScanResult │ │ Anomaly │ │
│ │ Finding │ │ Baseline │ │ Detection │ │
│ └──────────┘ └─────────────┘ └────────────┘ │
└─────────────────────────────────────────────────┘
```
**关键组件:**
- **Django**: Web UI + ORM + 身份验证
- **Celery Workers**: 后台扫描执行(2-8 个并行)
- **Redis**: 任务队列代理
- **nmap**: 端口/服务/版本检测引擎
- **SQLite**: 持久化数据存储
- **ML Engine**: Isolation Forest 异常检测器
## 🔬 机器学习流水线
```
┌─────────────────────────────────────────────────────────────────┐
│ Scan Execution Flow │
└──────────────────────────┬──────────────────────────────────────┘
│
▼
┌─────────────────────────┐
│ run_nmap_scan() │
│ • Port scanning │
│ • Service detection │
│ • Hostname resolution │
└────────────┬────────────┘
│
▼
┌─────────────────────────┐
│ ScanResult Created │
│ • open_ports_count │
│ • scan_duration │
│ • json_data │
└────────────┬────────────┘
│
▼
┌─────────────────────────┐
│ DeviceBaseline.update()│
│ • Store first 5 scans │
│ • Calculate avg/std │
│ • Build feature vector │
└────────────┬────────────┘
│
▼
┌──────────────────┴──────────────────┐
│ Is baseline established? │
│ (total_scans >= 5) │
└──────┬──────────────────┬───────────┘
│ NO │ YES
▼ ▼
┌─────────────┐ ┌──────────────────────────┐
│ Continue │ │ ML Anomaly Detection │
│ Learning │ │ run_ml_analysis() │
└─────────────┘ └──────────┬───────────────┘
│
▼
┌───────────────────────────┐
│ Feature Extraction │
│ • Port count delta │
│ • Port change rate │
│ • Time since last scan │
│ • New/closed port lists │
└──────────┬────────────────┘
│
▼
┌───────────────────────────┐
│ Isolation Forest Model │
│ • 100 estimators │
│ • contamination=0.1 │
│ • decision_function() │
└──────────┬────────────────┘
│
▼
┌───────────────────────────┐
│ Anomaly Score > 0.25? │
└──────┬────────────────┬───┘
│ NO │ YES
▼ ▼
┌───────────┐ ┌─────────────────────┐
│ Normal │ │ AnomalyDetection │
│ Behavior │ │ • Type: new_port │
└───────────┘ │ • Severity: MEDIUM │
│ • Score: 0.481 │
│ • Details: JSON │
└─────────────────────┘
```
**ML 算法:Isolation Forest**
- **类型**:无监督异常检测
- **训练**:每个设备的前 5 次扫描建立基线
- **特征**:port_count, port_change_rate, time_delta, new_ports, closed_ports
- **检测**:分数 > 阈值 (0.25) 被标记为异常
- **严重性映射**:0.70+=严重, 0.50+=高, 0.40+=中, 0.30+=低
## 🚀 安装与设置
### 前置条件
- **操作系统**: Linux (推荐 Ubuntu 20.04+/Debian 11+)
- **Python**: 3.10 或更高版本
- **系统工具**: nmap (需要 root), Redis server
- **硬件**: 2+ CPU 核心, 4GB+ RAM
## 🐳 Docker 部署(推荐)
### Docker 前置条件
- **Docker**: 版本 20.10+ ([安装 Docker](https://docs.docker.com/engine/install/))
- **Docker Compose**: 版本 2.0+(通常包含在 Docker Desktop 中)
- **Docker Desktop**: 在你的 Linux 机器上运行
- **硬件**: 2+ CPU 核心, 4GB+ RAM
### Docker 快速开始
```
# 1. Clone repository
git clone https://github.com/omk44/Automated-CVE-based-Host-Vulnerability-Scanner.git
cd Automated_CVE_Scanner
# 2. 构建并启动所有服务(使用 docker/ 子目录)
docker compose -f docker/docker-compose.yml up -d
# 3. 等待服务启动(30-60 秒)
docker compose -f docker/docker-compose.yml logs -f web
# 4. 填充 CVE 数据库(必需 - 仅首次)
docker compose -f docker/docker-compose.yml exec web python manage.py fetch_nvd
# 5. 访问应用
# Web Interface: http://localhost:8000
# 默认登录:admin / admin123
```
# http://localhost:8000
### Docker 服务
`docker-compose up -d` 命令启动 **4 个容器**:
1. **web** - Django Web 应用程序 (端口 8000)
2. **redis** - Redis 消息代理 (端口 6379)
3. **celery_worker** - 后台任务执行器(扫描、CVE 匹配)
4. **celery_beat** - 自动调度(每小时扫描,每日 NVD 更新)
### Docker 管理命令
```
# 查看运行中的容器
docker compose -f docker/docker-compose.yml ps
# 查看日志
docker compose -f docker/docker-compose.yml logs -f # All services
docker compose -f docker/docker-compose.yml logs -f web # Django only
docker compose -f docker/docker-compose.yml logs -f celery_worker # Scans only
# 停止所有服务
docker compose -f docker/docker-compose.yml down
# 停止并删除所有数据(⚠️ 危险操作)
docker compose -f docker/docker-compose.yml down -v
# 重启特定服务
docker compose -f docker/docker-compose.yml restart web
docker compose -f docker/docker-compose.yml restart celery_worker
# 在容器内执行命令
docker compose -f docker/docker-compose.yml exec web python manage.py createsuperuser
docker compose -f docker/docker-compose.yml exec web python manage.py migrate
# 代码更改后重新构建
docker compose -f docker/docker-compose.yml up -d --build
```
### 调整扫描并发
编辑 `docker-compose.yml` 并更改 `--concurrency` 值:
```
celery_worker:
command: celery -A core_scanner worker --concurrency=8 --loglevel=info
# Change ^^^^^^^^^ from 4 to 8 for more parallel scans
```
**推荐:** 基于 CPU 核心数设置 2-8
然后重启:`docker-compose restart celery_worker`
### Docker 部署故障排除
**问题**:容器无法扫描网络设备
**修复**:Celery worker 使用 `network_mode: host` 和 `privileged: true` 进行网络访问
**问题**:nmap 权限被拒绝
**修复**:已配置 `cap_add: NET_ADMIN, NET_RAW`
**问题**:重启之间数据库未持久化
**修复**:检查 `docker-compose.yml` 中的卷是否正确挂载
**问题**:Redis 连接失败
**修复**:确保 redis 容器正在运行:`docker-compose ps redis`
## 💻 手动安装(替代方案)
### 安装步骤
```
# 1. Clone repository
git clone
cd Automated_CVE_Scanner
# 2. 创建虚拟环境
python3 -m venv venv
source venv/bin/activate
# 3. 安装 Python 依赖
pip install -r requirements.txt
# 4. 安装系统依赖
sudo apt update
sudo apt install nmap redis-server -y
# 5. 启动 Redis 服务器
sudo systemctl start redis-server
sudo systemctl enable redis-server
# 6. 初始化数据库
python3 manage.py migrate
# 7. 创建管理员用户
python3 manage.py createsuperuser
# 出现提示时输入用户名、邮箱、密码
# 8. 填充 CVE 数据库(必需 - 耗时 5-10 分钟)
python3 manage.py fetch_nvd
```
**⚠️ 关键:** 你 **必须** 在第一次扫描前运行 `fetch_nvd`。这将从 NIST NVD 数据库下载 200,000+ 个 CVE。没有它,将不会进行漏洞匹配。
## 🎮 运行扫描器
### 启动所有服务(需要 3 个终端)
**终端 1:Django Web 服务器**
```
cd Automated_CVE_Scanner
source venv/bin/activate
python3 manage.py runserver 0.0.0.0:8000
```
**终端 2:Celery Worker(扫描执行器)**
```
cd Automated_CVE_Scanner
source venv/bin/activate
sudo $(which celery) -A core_scanner worker --concurrency=4 --loglevel=info
```
**或者**如果上述命令不起作用,请使用:
```
sudo env "PATH=$PATH" celery -A core_scanner worker --loglevel=info
```
**⚠️ 重要:** Celery worker **必须**使用 `sudo` 运行,因为 nmap 需要 root 权限!
**终端 3:Celery Beat(调度器 - 用于自动操作)**
```
cd Automated_CVE_Scanner
source venv/bin/activate
celery -A core_scanner beat --loglevel=info
```
**⚠️ 自动操作所需。启用:**
- **自动网络扫描** - 每 1 小时(自动扫描整个网络)
- **NVD 数据库更新** - 每 24 小时(保持 CVE 数据库最新)
- **ML 模型重训练** - 每周日凌晨 2:00
- **自定义计划扫描** - 用户定义的扫描间隔
### 访问 Web 界面
```
Local: http://localhost:8000
Network: http://:8000
```
## ⏰ 自动操作 (Celery Beat)
当 Celery Beat 运行时,这些任务会自动执行:
### 1. 自动网络扫描
**计划**:每天凌晨 3:00
**扫描模式**:快速(快速发现)
**操作**:
- 发现网络上的所有设备
- 扫描新设备/已更改设备
- 更新设备清单
- 运行 ML 异常检测
- **使用 Redis 锁定机制防止重叠扫描**
**配置**(在 [core_scanner/celery.py](core_scanner/celery.py) 中):
```
'scan-network-daily': {
'task': 'vuln_scanner.tasks.scan_network_discovery',
'schedule': crontab(hour=3, minute=0), # Daily at 3:00 AM
}
```
**更改计划:**
```
'schedule': crontab(hour=2, minute=30), # Daily at 2:30 AM
'schedule': crontab(hour=0, minute=0), # Daily at midnight
'schedule': crontab(day_of_week=1, hour=3, minute=0), # Every Monday at 3 AM
```
**为什么是每天而不是每小时?**
- 防止重叠扫描(大型网络需要 1 小时以上)
- 减少数据库锁定冲突
- 较低的系统资源使用率
- 更可预测的扫描计划
### 2. NVD 漏洞数据库更新
**计划**:每天凌晨 2:00(在网络扫描之前)
**操作**:从 NIST 国家漏洞数据库下载最新 CVE
**数据**:更新 200,000+ 条漏洞记录
**配置**:
```
'update-nvd-daily': {
'task': 'vuln_scanner.tasks.update_vulnerability_db',
'schedule': crontab(hour=2, minute=0), # Daily at 2:00 AM
}
```
### 3. ML 模型重训练
**计划**:每周(周日凌晨 1:00)
**操作**:使用累积的扫描数据重训练 Isolation Forest 模型
**配置**:
```
'retrain-ml-model-weekly': {
'task': 'vuln_scanner.tasks.retrain_ml_model_periodic',
'schedule': crontab(day_of_week=0, hour=1, minute=0), # Sunday 1:00 AM
}
```
### 4. ML 误报学习
**计划**:每周(周一凌晨 1:00)
**操作**:使用已审查的异常反馈更新模型
**手动触发**(随时运行):
```
# 手动触发网络扫描
python3 manage.py shell -c "from vuln_scanner.tasks import scan_network_discovery; scan_network_discovery.delay(None, 1)"
# 手动更新 NVD 数据库
python3 manage.py fetch_nvd
# 检查 Celery Beat 调度
celery -A core_scanner inspect scheduled
```
## 🔥 防火墙处理
### 内置防火墙绕过
所有扫描自动包括:
- **`-Pn` 标志** - 跳过 ping 探测(防火墙阻止 ICMP)
- **SYN 隐蔽扫描** - 比完整 TCP 握手更难检测
- **优化时序** - `-T4` 用于通过防火墙的更快扫描
- **主机超时** - 每台设备 10-15 分钟,防止无限期挂起
### 如果目标设备阻止扫描
**选项 A:允许扫描器 IP(推荐)**
在**目标设备**上运行此命令以允许传入连接:
```
# Linux (iptables)
sudo iptables -A INPUT -s -j ACCEPT
# Linux (ufw)
sudo ufw allow from
```
```
# Windows (以管理员身份运行)
netsh advfirewall firewall add rule name="Allow CVE Scanner" dir=in action=allow remoteip=
```
**选项 B:临时禁用防火墙(仅限测试)**
```
# Linux
sudo ufw disable
# Windows (以管理员身份运行)
netsh advfirewall set allprofiles state off
```
**⚠️ 安全警告:** 测试后重新启用防火墙!
```
sudo ufw enable # Linux
netsh advfirewall set allprofiles state on # Windows
```
## 📊 扫描模式
### 1. 快速扫描(快速发现)
- **端口**:所有 65,535 个 TCP 端口
- **版本检测**:低强度(快速探测)
- **时序**:`-T4`(激进)
- **持续时间**:每台设备约 30 秒
- **用例**:快速网络发现,持续监控
**技术细节:**
```
nmap -Pn -p- -sV --version-intensity 7 -sC -R -O -T4 \
--host-timeout 10m --max-rtt-timeout 500ms --max-retries 2
```
### 2. 深度扫描(全面审计)
- **端口**:所有 65,535 个 TCP + Top 100 UDP 端口
- **版本检测**:高强度(彻底探测)
- **时序**:`-T4` 并延长超时
- **持续时间**:每台设备约 2-5 分钟
- **用例**:安全审计,合规报告,漏洞评估
**技术细节:**
```
nmap -Pn -p- -sS -sU --top-ports 100 -sV --version-intensity 7 -sC -R -O -T4 \
--host-timeout 15m --max-rtt-timeout 700ms --max-retries 2 \
--script nbstat.nse,smb-os-discovery.nse,dns-service-discovery.nse
```
**扫描模式选择指南:**
| 场景 | 推荐模式 | 原因 |
|----------|-----------------|--------|
| 初始网络发现 | **快速** | 快速设备枚举 |
| 每日监控 | **快速** | 平衡速度/覆盖率 |
| 安全审计 | **深度** | 最大漏洞检测 |
| 合规扫描 | **深度** | 完整端口/服务清单 |
| 连接性调试 | **快速** | 更快的迭代 |
## 📖 使用指南
### 1. 网络发现
```
1. Login to web interface (http://localhost:8000)
2. Click "Network Discovery" or "New Scan"
3. Scanner auto-detects your subnet (e.g., 192.168.1.0/24)
4. Select scan mode: "Quick" or "Deep"
5. Click "Start Scan"
6. Monitor progress on dashboard
7. Wait for completion (shown via status indicator)
```
**发生什么:**
- 阶段 1:通过 ARP/UDP 探测发现所有活动设备
- 阶段 1.5:并行解析主机名 (NetBIOS/LLMNR/mDNS/SNMP)
- 阶段 2:启动并行 nmap 扫描 (并发数=4)
- 阶段 3:提取 CPE,匹配 CVE,运行 ML 异常检测
- 阶段 4:使用结果更新仪表板
### 2. 查看漏洞
```
Dashboard → Click Device → See:
• Open Ports & Services
• Detected CVE IDs
• Severity Ratings (CRITICAL/HIGH/MEDIUM/LOW)
• CVSS Scores
• NVD References
```
###3. ML 异常仪表板
```
Navigation → "ML Anomalies" → View:
• Detected anomalies with severity heatmap
• Anomaly types (new_port, closed_port, new_device)
• Anomaly scores (0.0-1.0)
• Review/dismiss false positives
```
**审查异常:**
- ✅ **标记为误报** - ML 从反馈中学习
- ❌ **标记为威胁** - 标记以供调查
- 📊 **查看详情** - 查看端口变化,基线比较
### 4. 生成 PDF 报告
```
Reports → Generate Report → Select:
• Date range (or "All Time")
• Include: Devices, Vulnerabilities, Anomalies
• Click "Generate"
• Download professional audit report
```
### 5. 更新 CVE 数据库
```
# 每周运行以保持最新漏洞信息
python3 manage.py fetch_nvd
```
## 🛠️ 常见问题与解决方案
### 问题:"Host seems down" / 未发现设备
**原因**:防火墙阻止探测,或网络范围错误
**解决方案**:
1. 验证扫描器与目标在同一子网
2. 在目标设备上添加防火墙例外(请参阅防火墙处理部分)
3. 检查 Redis 是否正在运行:`sudo systemctl status redis-server`
### 问题:Celery worker 权限错误
**错误**:`[Errno 1] Operation not permitted`
**原因**:nmap 需要 root 才能进行 SYN 扫描
**解决方案**:始终使用 sudo 启动 worker:
```
sudo $(which celery) -A core_scanner worker --concurrency=4 --loglevel=info
```
### 问题:扫描缓慢(每台设备 10 分钟以上)
**原因**:防火墙速率限制,网络拥塞
**解决方案**:
1. 使用“快速”扫描代替“深度”扫描
2. 降低并发性:`--concurrency=2`
3. 在目标上添加防火墙例外
### 问题:许多设备显示 "Unknown" 主机名
**预期**:5-10% 的设备(IoT、移动设备、配置错误)
**解决方案**:增强型主机名解析现在尝试 7 种协议。如果仍然显示 "Unknown":
- 设备不响应任何主机名查询协议
- 检查设备是否具有网络连接
- 某些 IoT 设备故意隐藏主机名
### 问题:Redis 连接被拒绝
**错误**:`redis.exceptions.ConnectionError`
**解决方案**:
```
sudo systemctl start redis-server
sudo systemctl status redis-server # Verify running
```
### 问题:无法从其他设备访问 Django 服务器
**原因**:仅绑定到 localhost
**解决方案**:使用 `0.0.0.0` 绑定启动:
```
python3 manage.py runserver 0.0.0.0:8000
```
### 问题:未检测到异常
**预期**:每个设备的前 5 次扫描是基线(学习阶段)
**解决方案**:等到 `total_scans >= 5`,然后在随后的扫描中将检测到异常
## 📦 依赖
### Python 包
```
Django>=5.0.1
celery>=5.3.4
redis>=5.0.1
django-celery-beat>=2.5.0
django-celery-results>=2.5.1
python-nmap>=0.7.1
requests>=2.31.0
django-plotly-dash>=2.7.0
plotly>=5.18.0
python-dateutil>=2.8.2
scikit-learn>=1.4.0
numpy>=1.26.0
pandas>=2.1.0
joblib>=1.3.0
reportlab>=4.0.0
```
### 系统包
```
nmap # Port scanner (requires root/sudo)
redis-server # Message broker for Celery task queue
```
## 📁 项目结构
```
Automated_CVE_Scanner/
├── manage.py # Django CLI entry point
├── core_scanner/ # Project configuration
│ ├── settings.py # Django settings (DB, Celery, security)
│ ├── urls.py # Root URL routing
│ ├── celery.py # Celery app config + beat schedule
│ └── wsgi.py # WSGI server entry
├── vuln_scanner/ # Main application
│ ├── models.py # ORM models (Device, ScanResult, etc.)
│ ├── views.py # HTTP request handlers
│ ├── tasks.py # ⭐ Celery tasks (scan logic, ML)
│ ├── logic.py # CVE matching algorithm
│ ├── urls.py # App URL patterns
│ ├── admin.py # Django admin customization
│ ├── ml_engine/ # Machine learning module
│ │ ├── anomaly_detector.py # Isolation Forest implementation
│ │ ├── feature_extractor.py # ML feature engineering
│ │ └── model_manager.py # Model persistence
│ ├── templates/ # HTML templates
│ │ └── vuln_scanner/
│ │ ├── dashboard.html # Main device dashboard
│ │ ├── device_detail.html # Per-device vulnerability view
│ │ ├── anomaly_dashboard.html # ML anomaly visualization
│ │ └── pdf_report.html # PDF report template
│ ├── management/commands/ # Custom Django commands
│ │ └── fetch_nvd.py # NVD CVE database downloader
│ └── migrations/ # Database schema versions
├── requirements.txt # Python dependency manifest
├── db.sqlite3 # SQLite database (auto-created)
└── celerybeat-schedule # Celery Beat scheduler state
```
## 🔐 安全注意事项
### 扫描器权限
- **需要 Root**:nmap 需要 sudo 才能进行 SYN 扫描 (`-sS`)、操作系统检测 (`-O`)、原始数据包操作
- **最佳实践**:将 Celery worker 作为专用服务帐户运行,并仅对 nmap 拥有 sudo 权限
### 道德使用政策
⚠️ **法律警告**:仅扫描你拥有或拥有明确书面测试许可的网络。未经授权的端口扫描在大多数司法管辖区(美国计算机欺诈和滥用法、欧盟网络犯罪公约)都是非法的。
**授权用例:**
- 内部企业网络审计
- 教育实验室环境
- 签订合同的渗透测试
- 个人家庭网络
### 生产加固
对于开发环境之外的部署:
1. 更改 settings.py 中的 `SECRET_KEY`
2. 设置 `DEBUG = False`
3. 将 `ALLOWED_HOSTS` 配置为特定的 IP/域名
4. 从 SQLite 迁移到 PostgreSQL
5. 使用有效的 SSL 证书启用 HTTPS
6. 在 API 端点上实施速率限制
7. 定期 CVE 数据库更新(每周 cron)
## 🎓 技术背景
### CVE 匹配如何工作
```
1. nmap scans device → Detects: Apache/2.4.41 on Port 80
2. Scanner extracts CPE: cpe:/a:apache:http_server:2.4.41
3. Database query: SELECT * FROM Vulnerability WHERE cpe LIKE '%apache:http_server:2.4.41%'
4. Returns: CVE-2021-44790 (CRITICAL), CVE-2021-44224 (MEDIUM)
5. Links vulnerabilities to device in database
6. Dashboard displays: "2 vulnerabilities found"
```
### ML 异常检测如何工作
**训练阶段(前 5 次扫描):**
```
DeviceBaseline.update_from_scan(scan_result)
# 存储:avg_ports=3.2, std_ports=0.8, port_history=[3,3,4,3,3]
```
**检测阶段(第 6 次及以上扫描):**
```
features = extract_features(current_scan, baseline)
# 特征:port_count_delta=+23, port_change_rate=688%, time_delta=3600s
anomaly_score = isolation_forest.decision_function(features)
# 得分:0.481 (阈值:0.25)
if anomaly_score > 0.25:
create_anomaly(device, score=0.481, severity="MEDIUM", type="new_port")
```
**为什么选择 Isolation Forest?**
- 无监督学习(无需标记的训练数据)
- 处理多维特征空间
- 对噪声和异常值具有鲁棒性
- 快速预测(O(log n) 复杂度)
### 主机名解析回退链
```
1. Redis Cache (instant) → Check cache first
2. nmap DNS (-R flag) → Reverse DNS lookup
3. NetBIOS (UDP 137) → Windows/Android devices
4. LLMNR (UDP 5355) → Modern Windows (Vista+)
5. mDNS (UDP 5353) → Apple/Linux/IoT (Bonjour/Avahi)
6. SMB2 (TCP 445) → Windows shares (NTLMSSP)
7. SNMP (UDP 161) → Routers/switches/printers
8. HTTP Server Header (TCP 80/443/8080) → Web devices
9. Vendor OUI Lookup → MAC address fallback
Result: ~95% hostname resolution rate (vs 70% with DNS-only)
```
## 📚 其他资源
- **NIST NVD API**: https://nvd.nist.gov/developers
- **nmap 文档**: https://nmap.org/book/man.html
- **CPE 规范**: https://nvd.nist.gov/products/cpe
- **CVSS 计算器**: https://nvd.nist.gov/vuln-metrics/cvss/v3-calculator
- **Isolation Forest 论文**: Liu et al. (2008) - "Isolation Forest"
## 🤝 贡献
这是一个学术项目。如需改进:
1. 负责任地记录安全发现
2. 在隔离的实验室环境中测试更改
3. 遵循 Django/Celery 最佳实践
4. 更新新功能的文档
**为网络安全评估而构建** | **ML 驱动的异常检测** | **企业级架构**
标签:AMSI绕过, Apex, ATT&CK映射, CTI, CVE扫描器, Isolation Forest, NetBIOS, NVD数据库, Redis, 主机名解析, 企业安全, 威胁检测, 密码管理, 异常检测, 插件系统, 搜索引擎查询, 数据统计, 机器学习, 物联网安全, 端口扫描, 网络安全, 网络漏洞评估, 网络空间测绘, 网络资产管理, 自动化资产发现, 请求拦截, 资产识别, 逆向工具, 速率限制处理, 防御性安全, 防御绕过, 隐私保护, 风险可视化