前置知识: 网络安全

漏洞扫描

5 min中级

漏洞扫描工具与方法: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 TestsWeb 应用
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 对比

对比项NessusOpenVAS
授权商业开源
插件更新实时延迟
界面友好一般
准确度高中
社区商业支持社区

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 报告优先级

优先级条件
P0RCE、未授权访问
P1SQL 注入、认证绕过
P2XSS、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。