OpenVAS/GVM漏洞扫描入门:服务器安全自查与CVE漏洞评估实战
如果你已经用Nmap把自己负责的服务器摸了一遍底知道哪个IP开了哪个端口接下来就该解决另一个问题这些端口上跑的老版本软件到底有多少已经公开的漏洞还没补上。这个问题靠人工一条条查CVE会查到怀疑人生所以《从入门到跑路》第三篇我选了openVAS来说。它是目前开源社区里最接近商业扫描器体验的一套漏洞扫描框架能自动收集开放端口、识别服务版本、匹配漏洞库、按CVSS打分最后给你输出一份可以直接拿去汇报的报告。适合刚接触安全、手上预算有限、又需要定期给服务器做安全自查的运维和准安全工程师。前两篇把网络基础和主动扫描讲了今天这篇只聚焦一件事怎么用openVAS把漏洞扫描这件事跑通、看懂、用起来。1. 服务器漏洞自查为什么我选了openVAS而不是再开一个Nmap1.1 从OpenVAS到GVM一套组件是怎么分工的先说一个很容易踩的坑很多老教程还在讲“安装OpenVAS”但如果你现在去Debian系发行版搜包会发现核心包已经叫gvm了。这不是项目改名这么简单而是原来那个单体的openVAS扫描器已经演变成一个叫Greenbone Vulnerability Management的完整框架。包括我在内不少人第一次部署时对着屏幕上一堆gvmd、gsad、ospd-openvas的进程名发懵它们其实是一套流水线上的不同角色。这套框架的核心组件可以理解成gvmd管理服务负责调度任务、存配置、生成报告是整套系统的大脑openvas-scanner真正干活的手加载NVT漏洞测试插件对目标发起检测ospd-openvas一座桥让gvmd能通过标准协议指挥扫描器gsaWeb控制台也就是你敲IP加端口打开的图形界面PostgreSQL报告、任务、目标的数据库Redis缓存NVT插件数据加速扫描过程中的临时查询。我打过一个比方gvmd像是餐厅经理openvas-scanner是后厨师傅ospd-openvas是传菜口GSA是你吃饭的大堂PostgreSQL是记账本Redis是手边常备的调料架。这样拆开看排查问题的时候就不会觉得无从下手谁挂了看谁的日志。1.2 和Nmap、商业扫描器对比它的生态位在哪有不少人会问“我Nmap加脚本也能检测漏洞为什么还要折腾openVAS”问这个问题的多半还没扫过成规模的服务器。Nmap强在端口发现和服务识别但它的漏洞检测更像是“打到哪算哪”缺乏体系化的漏洞库管理和结果归一化。而openVAS天然长在漏洞评估这个场景上它会把扫描流程拆成主机发现、端口扫描、服务识别、漏洞匹配、结果分级几个阶段最后汇总成一份带着CVE编号、CVSS评分、修复建议的报告。我做过一个对比表方便大家按场景选工具定位优势劣势适合场景Nmap端口服务探测轻量、灵活、速度快漏洞库零散报告需要二次整理资产盘点、端口排查OpenVAS/GVM漏洞评估开源免费、插件库持续更新、报告专业部署较重、扫描慢、误报需要甄别服务器安全自查、定期巡检Nessus Professional商业漏洞扫描插件质量高、误报率低、支持好付费价格不低有预算的企业合规检测云厂商Inspector类云原生扫描一键接入云资产只能在自家云上扫纯云环境从成本角度讲openVAS几乎是零门槛不用买授权插件库由社区持续维护既有远程扫描也有认证扫描对外输出的PDF报告足够应对常规安全汇报。缺点也确实存在部署的时候要吃不少资源扫描速度远不如Nmap误报率需要人工经验去二次判断。这也是为什么我说它是“最接近商业扫描器体验的开源方案”但你别指望它开箱即用到完美。2. 部署GVM环境的正确姿势和硬件底线2.1 三种安装方式怎么选别照着老教程硬抄我见过三种常见的部署方式按省心程度和可控程度各有取舍。第一种是在Debian系发行版包括Ubuntu、Kali上直接用apt装gvm。这是目前最主流的方式Kali自带的工具菜单里其实就包含了GVM只不过默认不一定完整安装。命令很直白sudo apt update sudo apt install -y gvm sudo gvm-setupgvm-setup这一步会把PostgreSQL、Redis、GSA、NVT漏洞库全部初始化过程可能要等比较久因为要同步漏洞数据。装完之后建议跑一遍体检命令sudo gvm-check-setup它会逐项检查组件状态、数据库连接、Redis缓存、NVT加载数量最后给个总结性的诊断。这一步千万别跳过后面遇到诡异问题全靠它定位。第二种是Docker方式。优点是隔离干净、不用污染宿主机适合先在测试环境快速体验流程。但市面上很多openVAS镜像停留在老版本界面和命令对不上踩坑概率不低。如果你想让团队快速看到效果可以选官方维护的GVM容器镜像如果是正经生产环境做持续扫描我更推荐裸机部署方便后续排查资源瓶颈。第三种是源码编译除非你想研究内部实现否则我不建议普通运维碰。依赖关系复杂编译一次大半天GVM又不是那种需要从源码魔改才能用的软件没必要自我折磨。2.2 初始化完成后先学会看gvm-check-setup输出GVM这套东西部署完之后最怕的是系统提示成功实际某个组件是坏的。前几年我装完gvm打开浏览器IP:9392页面一直白屏排查了半天才发现是gsad服务没有自动起来。后来学乖了初始化完一定先看gvm-check-setup输出它对每个模块都会打上OK或FAIL一眼就能定位短板。几个常见异常输出你先留个印象PostgreSQL没起来或者版本不对检查数据库服务和gvmd日志Redis进程异常GVM扫描阶段会突然变卡甚至崩掉NVT数量加载为0说明漏洞库没同步成功需要重新跑feed更新管理员账号admin不存在或者密码不是你记的那个后续用gvmd命令重置。另外提醒一下GVM默认监听9392端口第一次浏览器访问会有自签名证书警告正常现象放行即可。如果你是在云服务器上部署记得安全组只对可信管理IP开放这个端口而不是直接暴露公网。2.3 硬件与网络规划跑一个大网段前先算算账GVM是出了名的“看着轻巧跑起来吃机器”。很多人拿一台2C4G的云主机折腾扫个小网段还行一旦目标数量往上加内存就蹭蹭涨gvmd进程甚至可能被系统杀掉。我的经验是最小凑合配置2C4G只适合扫个位数的IP想扫一个C段甚至B段至少准备4C8G存储也不要用太小的盘NVT插件和报告数据会持续增长。再说网络规划。扫描器到目标之间别隔着太复杂的转发尤其不要跨公网去扫一个延迟很高的机房一个full and fast扫描的耗时会因为网络往返成倍增长。内网部署、靠近目标网段扫描质量和速度都会好很多。还有扫描时段GVM支持调度任务我一般建议像补丁巡检一样定在业务低峰期因为认证扫描和并发探测确实会对目标机器产生一定压力。3. 建目标和建任务手动完成一次完整扫描3.1 登录GSA后第一步把Target配置弄明白浏览器打开https://你的扫描器IP:9392用admin账号登录。左侧菜单找到Configurations下的Targets点进来先新建一个Target。Target里几个字段要认真填Name命名要能区分环境比如“测试机-192.168.31.15”别全叫“New Target”Hosts支持单个IP、IP范围、CIDR比如192.168.31.15、192.168.31.1-192.168.31.254、192.168.31.0/24Port List默认是All ports扫全端口最全面但耗时明显增加如果你已经用Nmap摸过底可以新建一个只包含开放端口的端口列表效率高很多Alive Test控制怎么判断目标存活。默认常用ICMP但有些机器禁ping这时候要么加TCP-ACK方式要么直接调整检测逻辑否则目标会被误判为离线Credentials认证扫描用的凭据先不填也行后面单独说。我第一次用的时候没太在意Alive Test结果扫一个禁ping的主机任务很快结束报告里一个结果都没有。后来把Alive Test改成带TCP探测的方式才正常发现主机。这个字段的意义比看起来大得多。3.2 扫描配置那么多新手怎么选GVM自带了好几套扫描配置英文名字乍一看都差不多。我挑常用的几套说Discovery只做主机发现和端口识别不做漏洞测试适合资产摸底Base基础漏洞检测覆盖的NVT较少扫描速度快Full and Fast默认推荐兼顾速度和检测量日常自检够用Full and Fast Ultimate最大检出率会把插件全量跑一遍慢到你怀疑人生适合对重点机器做深度体检。新建Task的时候在Scan Config里选一套再把刚才建的Target绑定上去。Task创建完成之后不用急着点播放按钮先确认一下配置里的细节扫描目标对不对、并发数是否合适、是否需要定时调度。第一次实操可以用单个IP试水不要上来就扫整个网段万一扫描配置太激进把目标机器拖出问题场面不好收拾。跑起来之后可以在Tasks列表看到状态变化Requested、Queued、Running、Finished、Failed。点进任务详情还能看到当前阶段是主机发现、端口扫描、服务识别还是漏洞测试。这里说个经验full and fast扫一台常见服务比较多的Linux机器通常要十几分钟到半小时别盯着进度条焦虑去看看别的活。3.3 认证扫描到底值不值得配上面提到Credentials这里展开讲。GVM支持SSH认证扫描也就是给扫描器一把目标机器的钥匙让它在登录状态下采集系统补丁、已装软件版本、配置文件等信息。不带认证的远程扫描只能靠探测服务和读banner猜版本准确率有限而认证扫描得到的信息要精确得多很多补丁类漏洞能检测得比较准。配置方法不复杂在Configurations的Credentials里新建一个SSH凭据填用户名、密码或者私钥。然后在Target里把这个凭据关联上去。注意给扫描器开放的账号最好遵循最小权限原则别用root部分操作需要提权就单独配置sudo权限。权限太大带来的风险往往比漏洞本身还让人头疼。我自己的习惯是对重点生产服务器认证扫描作为季度巡检必选项对大批量的边缘设备先远程扫描筛一遍高危对象再上认证扫描复核。这样既控制时间成本也兼顾检出质量。4. 报告怎么看从海量结果里揪出真正该管的高危漏洞4.1 CVSS分数和严重程度先搞懂规则再下结论扫描完成后点进任务的Report你会看到一个按严重程度分类的结果列表。GVM遵循CVSS评分体系严重程度大致分几档Log只是记录级信息Low是低危Medium是中危High是高危Critical是严重。报告列表里每个条目会显示NVT名称、OID编号、出现次数、CVSS分数点进去还能看到详细描述、CVE关联、解决方案。这里要提醒一句CVSS分数也有版本差异界面上可能混着CVSS v2和v3的数值看的时候先扫一眼版本标识。v3的评分普遍比v2严一些同一漏洞在两个版本里的分数可能不是同一个档位。别看到10分就慌也别看到4分就略过先确认它针对的是攻击复杂度高不高的场景再结合自身环境判断。我看报告的习惯是先用“严重程度High以上”过滤把Key点级别的漏洞拎出来再按主机分组查看。如果一台机器同时中了多个同类型问题优先处理。某些合规报告需要统计漏洞总数那就不要过滤直接导出全量数据按主机和端口去重统计台账。4.2 别让误报带偏节奏三步法定位核心风险GVM的误报问题是绕不开的尤其是版本探测类检测。举个例子目标机器上跑着Apache 2.4.41但厂商把安全补丁打在了同一个二进制版本号上GVM可能仍然按版本号匹配NVT给出一个高危结论。这种时候就看三样东西漏洞描述、Solution字段、以及是否属于可实际利用的类型。我的三步法是这样按主机过滤找出High和Critical最多的Top 3机器先处理它们点开具体漏洞看NVT检测依据是版本号还是配置项如果是版本号去目标机器上核实真实版本和补丁状态看Solution字段能直接“升级到某个版本”的记入整改计划只有临时缓解方案的做好记录和跟踪避免遗漏。实际扫一台对外Web服务器报告里几十上百条结果很正常但真正需要立即处理的高危可能就两三条。把精力花在核心上剩下的低危和Log信息归档备用才是运维该有的节奏。4.3 把扫描结果导出并推进修复闭环GSA允许把报告导出成PDF、CSV、XML等格式。PDF适合直接发给管理层或客户看CSV适合自己二次分析。我常用的套路是导出CSV用Excel做一个简单的数据透视按漏洞名称计数、按主机分组、按CVSS降序很快就能产出修复优先级清单。修复不是扫描的终点。打补丁、调整配置之后应该针对同一目标再跑一次扫描确认对应漏洞从报告里消失。比较严格的项目里我会保留每轮扫描报告做一个周期对比。哪台机器的SSH版本升级了哪台机器把SMBv1关掉了在对比里一清二楚。扫描器给你的不是一份静态报告而是一个持续改进的过程。5. 那些让人想跑路的坑安装、扫描、更新全流程排雷5.1 环境起不来的典型表现和处置GVM部署过程中的坑有些属于“换台机器就失效”的类型。我把常见现象和排查思路整理在下面遇到类似问题可以直接对号入座现象可能原因排查动作9392页面打不开gsad或gvmd进程没起来systemctl status gsad gvmd看进程和日志gvm-setup中途卡住Redis异常或网络无法同步feed检查redis-server状态重启初始化流程提示数据库版本不对PostgreSQL版本与gvmd不匹配查看gvmd日志按提示迁移或重建NVT数量加载为0feed同步失败重新执行NVT同步命令确认网络可达admin密码遗忘初始化输出没保存用gvmd重置密码这几个问题里最让人头大的其实是feed同步。GVM的漏洞库需要定期更新如果目标机器没办法访问更新源漏洞库一直停留在初始版本扫描结论自然不准。处理办法是先确认机器时间是否正确时区不对会导致同步校验失败再把更新源整通最后单独执行同步命令验证。5.2 扫不到、扫不动、扫不准的排查思路“扫不到”通常是Target配置或网络策略问题。目标禁ping只是表象更常见的是防火墙把探测流量拦了。这类问题从三层往下查先确认扫描器和目标二层三层通不通再看目标主机防火墙有没有放行常用服务端口最后检查Target里的Alive Test方式是不是太保守。“扫不动”基本是性能问题。扫描任务还在Running但进度几乎不动多半是并发数配高了GVM自己的机器先撑不住。把最大并发主机数调低给GVM服务器加点内存或者把大网段拆成几个小C段分开扫比干等有效得多。“扫不准”的典型就是误报。遇到疑似误报不要直接在界面上标记成False Positive了事而是把NVT名称和检测依据记下来去目标机器验一遍。我遇到过SSH banner老版本但实际打了补丁的情况也遇到过服务端口识别错导致加载了错误NVT的情况。经验积累起来之后你对报告的判断力会明显提升。5.3 顺手能做的自动化定时任务和告警GVM的Schedule和Alert功能值得一用。在Tasks里给定期巡检任务绑定一个Schedule比如每月1号凌晨跑一次全量扫描再配置Alert扫描完成后把结果摘要发送到指定邮箱。这样不需要每次都手动创建任务报告会自动沉淀在系统里。我建议至少对两类任务做定时一是核心业务服务器的认证扫描二是整个内网的快速扫描。前者频率可以高一些后者低频运行避免打搅网络。自动化配置好后真正花时间的反而是报告解读和修复跟踪这需要人的参与工具替代不了。再聊一个实操习惯我从来不在GSA界面里盯着报告看半天而是把CSV导出后用电子表格按主机分组合并把每次扫描的整改状态做成一张追踪表。哪台机器反复出同一个高危一眼就能看到。扫描器给的是证据和线索真正让环境变安全的是你拿到报告后做的那一轮轮修复和复扫。别让报告躺在服务器里吃灰数据只有流转起来才有意义。