深色模式
漏洞扫描入门:用工具扫描主机与容器
摘要:扫描本身不难,难在"扫完之后怎么办"。本文给出 Lynis(主机基线)、Trivy(镜像与依赖)、GVM(网络漏洞)三款工具的最小上手流程,以及一套可执行的修复优先级判断方法。
适用环境
bash
cat /etc/os-release
command -v lynis && lynis --version
command -v trivy && trivy --version
command -v docker && docker --version
command -v gvm-start && echo "GVM 已安装"1
2
3
4
5
2
3
4
5
操作步骤
1. Lynis:主机基线与配置审计(零依赖,最快上手)
bash
# RHEL
dnf install -y lynis
# Debian/Ubuntu
apt-get install -y lynis
# 或用官方脚本/源码
git clone --depth 1 https://github.com/CISOfy/lynis && cd lynis && ./lynis --version1
2
3
4
5
6
2
3
4
5
6
bash
lynis audit system --quick # 快速模式
lynis audit system # 完整模式,交互式1
2
2
输出解读:
Suggestions:建议项,带编号(如SSH-7408),可据此查文档。Warnings:需要优先处理。- 底部
Hardening index:加固指数,作为趋势指标而非达标线。
bash
grep -E "Warning|Suggestion" /var/log/lynis-report.dat | head -301
2. Trivy:镜像、依赖与 IaC 扫描
bash
# 安装(以官方仓库为例,具体参考官方文档)
curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh \
| sh -s -- -b /usr/local/bin
trivy --version1
2
3
4
2
3
4
bash
trivy image nginx:1.25 # 扫镜像
trivy image --severity HIGH,CRITICAL nginx:1.25 # 只看高危
trivy fs --scanners vuln,secret,misconfig /opt/myapp
trivy config ./terraform/ # IaC 配置
trivy image --format json -o report.json nginx:1.251
2
3
4
5
2
3
4
5
更新漏洞库(离线环境需配镜像源):
bash
trivy image --download-db-only1
3. GVM/OpenVAS:网络与服务漏洞扫描
bash
# 容器方式最省事(具体镜像名参考 GVM 官方文档)
docker run -d --name gvm -p 9392:9392 greenbone/gvmd:latest 2>/dev/null || \
echo "请参考官方文档部署,组件较多不建议裸机手装"1
2
3
2
3
使用要点:
- 新建 Target(目标网段)→ 新建 Task(扫描策略)→ 启动 → 导出 PDF/CSV。
- 选择
Full and fast策略作为起步。 - 扫描会对目标产生流量压力,务必在变更窗口内做。
未经授权扫描他人网络属于违法行为
只扫描你拥有或已获书面授权的资产。扫描前走变更流程并通知业务方。
4. 定修复优先级:别被 CVSS 牵着走
判断顺序:
- 是否对外可达?(
ss -lntup+ 防火墙规则确认) - 是否有公开 EXP / 在野利用?
- 是否影响核心资产(数据库、堡垒机、CI)?
- 修复成本与业务风险?
bash
# 快速判断服务是否对外
nft list ruleset | grep -E 'dport' # 或 iptables -S
ss -lntup | awk '{print $5, $6, $7}'1
2
3
2
3
5. 把扫描接进流水线(安全左移)
yaml
# GitLab CI 示例片段
trivy_scan:
stage: test
script:
- trivy image --exit-code 1 --severity CRITICAL "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHA"
- trivy image --exit-code 0 --severity HIGH "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHA"
allow_failure: false1
2
3
4
5
6
7
2
3
4
5
6
7
策略建议:CRITICAL 阻断发布,HIGH 限期修复并挂单,MEDIUM 纳入周计划。
6. 排期与闭环
- 每周一次全量镜像扫描 + 每月一次主机扫描 + 每季度一次网络扫描。
- 每条漏洞有:负责人、期限、修复方式(升级/缓解/接受风险)。
- 无法升级的走例外审批 + 补偿控制(如 WAF 规则、网络隔离)。
验证
bash
# 制造一个已知高危包做验证(示例:扫描旧版镜像)
trivy image --severity CRITICAL alpine:3.7 | tail -20
lynis audit system --quick | grep -i "hardening index"
# 报告可归档、可对比
trivy image --format json -o /tmp/trivy-$(date +%F).json nginx:1.25
jq '[.Results[].Vulnerabilities[]? | select(.Severity=="CRITICAL")] | length' /tmp/trivy-$(date +%F).json1
2
3
4
5
6
2
3
4
5
6
判定标准:扫描任务定时执行;报告可长期归档对比;CRITICAL 数量呈下降趋势。
常见坑
扫描生产服务触发故障
部分扫描器会发送畸形报文,可能导致老服务崩溃。先在预发环境验证,生产扫描安排在变更窗口。
只看 CVSS 分数排优先级
10 分但若只在内网且无利用链,优先级可能低于 7 分但对外可达的漏洞。要结合暴露面判断。
漏洞库不更新,扫了个寂寞
Trivy/GVM 依赖漏洞库。离线环境要搭建内部更新源,并监控 db 更新时间。
忽略误报直接关掉规则
确认是误报后应记录理由并加白名单(带有效期),而不是整条规则禁用。
只扫镜像不扫运行时
镜像干净不代表运行中的容器干净(手工 exec 安装过包)。应同时做运行时扫描。