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, 主机名解析, 企业安全, 威胁检测, 密码管理, 异常检测, 插件系统, 搜索引擎查询, 数据统计, 机器学习, 物联网安全, 端口扫描, 网络安全, 网络漏洞评估, 网络空间测绘, 网络资产管理, 自动化资产发现, 请求拦截, 资产识别, 逆向工具, 速率限制处理, 防御性安全, 防御绕过, 隐私保护, 风险可视化