漏洞扫描
漏洞扫描工具与方法:Nessus、OpenVAS、Nuclei、Nikto 等扫描工具详解。
1. 漏洞扫描概述
1.1 扫描类型
| 类型 | 描述 | 工具 |
|---|---|---|
| 网络扫描 | 主机、端口、服务 | Nmap, Masscan |
| 漏洞扫描 | 已知漏洞检测 | Nessus, OpenVAS |
| Web 扫描 | Web 应用漏洞 | Nikto, Nuclei |
| 代码扫描 | 源代码漏洞 | SonarQube, SAST |
1.2 扫描策略
| 策略 | 描述 | 速度 | 准确度 |
|---|---|---|---|
| 快速扫描 | 常用端口+高危插件 | 快 | 中 |
| 标准扫描 | 全端口+标准插件 | 中 | 高 |
| 深度扫描 | 全端口+全部插件 | 慢 | 最高 |
2. Nessus
2.1 概述
Nessus 是最流行的商业漏洞扫描器,由 Tenable 开发。
| 版本 | 特点 |
|---|---|
| Nessus Essentials | 免费、16 IP 限制 |
| Nessus Professional | 商业、无限制 |
| Nessus Manager | 企业管理 |
2.2 扫描策略
| 策略 | 用途 |
|---|---|
| Basic Network Scan | 通用网络扫描 |
| Advanced Scan | 自定义扫描 |
| Web Application Tests | Web 应用 |
| Malware Scan | 恶意软件 |
| Compliance Audit | 合规审计 |
2.3 扫描流程
1. 创建扫描策略
2. 配置目标(IP/域名)
3. 设置凭据(可选,提高准确度)
4. 执行扫描
5. 分析结果
6. 导出报告
3. OpenVAS
3.1 概述
OpenVAS 是开源漏洞扫描器,是 Nessus 的分支。
3.2 安装与使用
# 安装(Kali Linux)
sudo apt install openvas
sudo gvm-setup
# 启动
sudo gvm-start
# 命令行扫描
gvm-cli socket --xml '<create_target><name>Test</name><hosts>192.168.1.0/24</hosts></create_target>'
3.3 与 Nessus 对比
| 对比项 | Nessus | OpenVAS |
|---|---|---|
| 授权 | 商业 | 开源 |
| 插件更新 | 实时 | 延迟 |
| 界面 | 友好 | 一般 |
| 准确度 | 高 | 中 |
| 社区 | 商业支持 | 社区 |
4. Nuclei
4.1 概述
Nuclei 是基于模板的快速漏洞扫描器,由 ProjectDiscovery 开发。
4.2 核心特性
- YAML 模板驱动
- 并发扫描
- 社区模板库(5000+)
- 多协议支持
4.3 使用示例
# 基础扫描
nuclei -u https://example.com
# 使用特定模板
nuclei -u https://example.com -t cves/2023/
# 批量扫描
nuclei -l urls.txt -o results.txt
# 自定义模板
nuclei -u https://example.com -t custom-template.yaml
4.4 自定义模板
id: custom-xss-check
info:
name: Custom XSS Check
author: security-team
severity: medium
http:
- method: GET
path:
- '{{BaseURL}}/search?q=<script>alert(1)</script>'
matchers:
- type: word
words:
- '<script>alert(1)</script>'
5. Nikto
5.1 概述
Nikto 是开源 Web 服务器扫描器,检测危险文件、过时组件、配置问题。
5.2 使用示例
# 基础扫描
nikto -h https://example.com
# 指定端口
nikto -h example.com -p 8080
# 使用代理
nikto -h example.com -useproxy http://proxy:8080
# 输出报告
nikto -h example.com -o report.html -Format htm
5.3 检测内容
| 类别 | 示例 |
|---|---|
| 危险文件 | .git、.env、backup.sql |
| 过时组件 | 旧版 PHP、Apache |
| 配置问题 | 目录列表、默认页面 |
| 服务器信息 | Server 头、版本 |
6. 扫描结果分析
6.1 误报处理
1. 确认漏洞是否真实存在
2. 手动验证扫描结果
3. 检查目标环境是否匹配
4. 排除已知误报模式
最大的误报来源是发行版回移(backport):RHEL/Ubuntu 等会把补丁移植回旧版本号 (如仍是 OpenSSL 1.1.1 但已含新 CVE 的修复),只比对版本号的扫描器会持续误报。 对策有二:改用凭据扫描(登录后读补丁号),或在扫描器中按资产登记例外并注明依据。 逐工具的部署细节与 CVSS 研判见 034-VulnerabilityScanTools。
6.2 认证扫描与非认证扫描
| 维度 | 非认证扫描 | 凭据(认证)扫描 |
|---|---|---|
| 视角 | 远程攻击者 | 系统内部盘点 |
| 准确度 | 依赖版本指纹,误报多 | 直接读补丁/配置,误报低 |
| 风险 | 低 | 凭据泄露面扩大,需最小权限轮换 |
| 适用 | 互联网暴露面巡检 | 内网资产月度全量核查 |
生产实践中两者并行:暴露面用非认证扫描模拟真实攻击者,内网用凭据扫描保证 补丁台账准确。
6.3 报告优先级
| 优先级 | 条件 |
|---|---|
| P0 | RCE、未授权访问 |
| P1 | SQL 注入、认证绕过 |
| P2 | XSS、CSRF |
| P3 | 信息泄露、配置问题 |
| P4 | 低危、信息级 |
优先级最终要叠加暴露面与资产价值修正:内网隔离主机的中危可能不如 公网 Critical 紧急(排序方法论见 034 第 5 节)。
7. 持续扫描与 CI 集成
CI/CD 集成 → 每次部署自动扫描
定期扫描 → 每周/每月全量扫描
合规扫描 → 每季度合规审计
应用层的扫描可以前移进流水线(与 018-SecureDevelopment 的安全左移衔接):
# 镜像层:构建后立即扫描,严重漏洞阻断合入
trivy image --exit-code 1 --severity CRITICAL,HIGH app:latest
# Web 层:部署到预发环境后跑 DAST 基线(先报告模式)
zap-baseline.py -t https://staging.example.com -r zap.html
# 模板层:nuclei 的 CVE 模板库每日更新,定时任务全量回扫
nuclei -l live.txt -t cves/ -severity critical,high -o daily.txt
注意扫描自身的美德:强度与时间窗写进授权范围;对老旧设备(打印机、工控主机) 先用低强度模板试点,避免「扫描即宕机」。
8. 常见陷阱
| 陷阱 | 事实 |
|---|---|
| 只看漏洞数量汇报 | 数量会被重复资产与误报撑大,按「已验证的可利用项」统计 |
| 扫描器插件/NVT 长期不更新 | 等于用旧地图找新漏洞,先升级再扫描 |
| 发现即修复,不复测 | 没有复测闭环就无法证明修复有效,复测记录也是合规证据 |
| 全端口高强度扫生产 | 高危老旧设备可能被打宕,先监控模式试点再放量 |
| 一次性扫描项目化 | 漏洞是持续产生的,扫描必须周期化并接入变更流程 |
小结
- 初学者要点:按目标选工具——Nessus/OpenVAS 管系统级 CVE、Nuclei 管模板化 Web 漏洞、Nikto 管服务器配置问题;读报告先处理误报(尤其发行版回移), 再按「严重度 + 暴露面」排优先级。
- 进阶注意:凭据扫描是准确度的分水岭;把镜像扫描/DAST 前移进 CI,让漏洞 在部署前暴露;扫描强度、范围、时间窗都要有授权边界;工具级命令与漏洞管理 闭环见 034-VulnerabilityScanTools 与 019-ComplianceAudit。