刚把 OpenVAS 部署完成,多数人的第一步就是直接跑一遍默认策略,然后对着几百页的 PDF 报告发呆。结果要么是低危中危堆满屏幕,真正能打穿系统的高危漏洞一个没报,要么是扫描时间长得让人怀疑机器是不是死机。实际上 OpenVAS 本身的能力远比默认配置强得多,问题几乎都出在配置方式上——用默认参数跑生产环境,相当于拿着一把没开刃的刀去拆弹,既砍不破外皮,也碰不到核心。这篇内容围绕扫描效率翻倍和自定义配置展开,目标就是让你用更短的时间,把藏在端口深处、认证之后、慢速响应里的漏洞一个个拽出来,而不是等它慢慢磨到超时。
先说清楚适合谁。如果你只是偶尔扫一次内部测试机,默认配置够用;但如果你负责维护几十台甚至上百台业务服务器,需要定期扫描并给出优先级明确的报告,那本文的每个小节都值得反复看。我也会把踩过的坑、调过的参数、验证过的方法原原本本写出来,不绕弯子。
1. 为什么默认配置总是漏掉漏洞
1.1 默认策略的保守设计
OpenVAS 默认的扫描策略叫 "Full and fast",听起来很猛,实际上为了兼顾稳定性和兼容性,默认禁用了大量高风险的检测插件。这些插件中包含了不少对认证后漏洞、慢速协议、深度嵌套路径的探测逻辑。禁用它们的原因很简单——插件的误报率和资源消耗都比较高,官方希望在开箱即用的场景下减少“扫描把目标搞崩”的投诉。
正是因为这种保守取向,默认配置只能覆盖最常规的攻击面。比如一个只在特定端口上开放了某个老旧服务的应用,默认策略可能只做版本识别和基础漏洞匹配,根本不会尝试深入握手协议、测试多种编码绕过、或者验证不一致的响应逻辑。而隐藏漏洞往往就藏在这些“默认不碰”的角落里。
我实测过一个场景:一台内部服务器开了 8443 端口,默认扫描只报了一个低危版本信息,后来我手动启用了几组检测插件,立刻发现了中间件解析绕过的高危漏洞。这就是默认配置与自定义配置的差距。
1.2 资源限制造成的扫描盲区
另一个容易被忽视的问题是默认的资源限制参数。OpenVAS 默认的并发主机数和并发检查数都比较保守,尤其对带宽充足、目标主机性能较强的环境来说,这个限制会直接拖慢扫描节奏。更重要的是,默认的响应超时时间设置得偏短,对于响应慢的老旧设备、网络延迟较高的跨网段目标,很多检测请求还没等到响应就被标记为超时,对应的漏洞自然不会被发现。
这种扫描盲区本质上不是“漏洞不存在”,而是扫描器根本没完成探测。你可以把默认配置理解成一个人走马观花看展览,每个展品只瞄一眼就匆匆离开,细节全被漏掉了。自定义配置要解决的核心问题就是让扫描器“停下来、看仔细、再决定”。
1.3 隐藏漏洞的三种典型形态
结合我自己的踩坑经验,容易被默认配置漏掉的目标主要分三类:非标准端口上的服务、需要认证才能触发的漏洞、以及响应逻辑异常复杂或缓慢的 Web 应用。非标准端口的问题在于默认策略的端口范围往往集中在常见端口,比如 80、443、22,而实际生产环境里 8080、8443、9000、7001 这些非常容易藏着旧版本组件。认证后漏洞则需要扫描器带着真实凭据进入系统后才能触发检测。慢速应用更麻烦,超时设置不合理就会导致大量误报“端口关闭”或“服务不可用”。
所以,所谓“揪出隐藏漏洞”,一半靠扫描策略的取舍,另一半靠合理配置资源与凭据。接下来我就从效率翻倍的核心配置思路说起。
2. 扫描效率翻倍的核心配置思路
2.1 并发扫描与资源分配
效率翻倍最直接的切入点就是并发参数。在 OpenVAS 中,有两个关键参数:同时扫描的主机数量(max_hosts)和每台主机上并发执行的检查数量(max_checks)。默认值通常偏低,比如同时扫 5 台主机、每台 2 个检查,这在现代硬件上完全不够用。
我建议根据实际硬件资源来调整。比如一台 8 核 16G 的扫描服务器,网络环境是千兆内网,我一般会设置成同时扫 20 到 30 台主机,每台主机并发 8 到 12 个检查。这个数值不是越高越好,因为过高的并发会导致目标主机负载骤增,甚至触发防护设备告警,还可能让扫描器自身出现丢包、误判。
调并发时一定要看扫描器的 CPU、内存和网络吞吐。有个简单的参考方法:跑一轮扫描时,通过系统监控观察扫描器主机的负载。如果 CPU 长时间低于 50%,内存还有富余,那就说明并发可以继续加;如果 CPU 持续 90% 以上,或者网络发送队列堆积,那就需要降下来。注意,单个目标主机上的并发检查数也不要调太高,尤其是对 Windows 主机或老旧 Linux 设备,避免对方性能瓶颈导致误报。
2.2 扫描策略与插件组定制
OpenVAS 的插件库非常庞大,按功能划分成多个插件族,比如 Web 应用、SQL 注入、服务拒绝、网络设备等。默认策略会启用大部分插件,但启用和“有效执行”是两码事——很多插件在默认条件下因为目标端口、服务类型不匹配,根本不会真正跑起来。
提高效率的关键是放弃全量扫描的思维,改为针对性定制。比如你确定一台服务器只提供 Web 服务,那就只保留 Web 类相关插件,同时把端口范围缩窄到 80、443、8080、8443。这样做的好处是,扫描器不用浪费时间向 3306 发送数据库探测包、向 21 发送 FTP 检测流量,这些探测得到的几乎都是“服务未开放”,却占用了大量的时间。
我还建议按插件族选择“深度检测”选项。很多插件族内部还有一个强度开关,比如“只在目标服务符合特定版本时执行”“启用全部尝试包括可能使服务崩溃的操作”。对于非生产环境,你可以调高强度;对于生产环境,则需要谨慎选择。一般我维护的扫描配置会分为两套:一套用于非侵入性常规巡检,另一套用于渗透测试前的深度侦察。
2.3 扫描目标的分组策略
实际扫描过程中,不少人是把所有 IP 丢进一个任务里,然后让扫描器自己慢慢跑。这种做法对效率是很大的浪费。因为不同目标的服务特征差异很大,有的主机是 Windows Web 服务器,有的是 Linux 数据库服务器,把它们混在一个扫描任务里,同一个插件要在所有目标上反复尝试,但绝大多数尝试都是无效的,只是白白延长了扫描时间。
我推荐的策略是把目标按端口特点、服务类型、网络位置分组。比如数据库服务器组、Web 服务器组、核心网络设备组。每组使用各自定制的扫描策略和端口范围,既能提高效率,也能降低误报率。同时,分组扫描还能让报告更清晰,按业务组去定位漏洞比看一张混杂所有 IP 的报告容易得多。
另一个容易被忽略的细节是目标主机的可达性预检。在正式扫描之前,先做一次快速的端口探测或 Ping 探测,把在线主机筛选出来,把离线主机从任务里剔除,可以节省大量等待超时的时间。我习惯用一个简单的脚本做预检,生成活跃 IP 列表后再喂给 OpenVAS。
3. 自定义配置揪出隐藏漏洞的实操方法
3.1 基于 CVSS 评分过滤与端口范围精准控制
很多人不知道 OpenVAS 的扫描策略里可以针对 CVSS 评分设置阈值。默认策略一般会报告所有找到的问题,导致报告里充满低分项。你可以把单项检测的最低 CVSS 分提到比如 4.0 或 5.0,低于这个分数的漏洞不再作为独立条目输出。这样做有两个效果:一是报告总量大幅减少,二是扫描器在部分插件逻辑中可以提前终止低价值分支,节省时间去探测更严重的问题。
端口范围的控制更加直接。在配置扫描任务时,系统会问你“端口范围”怎么填,默认是 “Default”,也就是按照内置的常用端口列表扫描。如果你清楚目标只开放了特定端口,直接写 “80,443,8080” 或 “30000-40000” 这样的自定义范围。这比让扫描器遍历几千个端口快得多,而且能减少非目标端口上的误报。
我实际测试过,一台测试机开了 3306、6379、8080 三个端口,默认端口列表扫描耗时 40 分钟,自定义端口范围后不到 5 分钟,而且检测深度更高了,因为节省下来的时间被用在了更细致的服务指纹识别上。
3.2 自定义认证凭据与深度检测
隐藏漏洞中的一大类必须有认证才能发现。比如一台服务器上运行的 Web 应用存在后台任意文件上传漏洞,但没登录的情况下,扫描器只能看到登录页,几乎什么都测不了。OpenVAS 支持配置多种认证凭据,包括 SSH、HTTP 表单认证、SNMP 凭据等。
在配置 SSH 凭据时,你需要给扫描器提供一个可用的账号和密钥。扫描器会通过这个账号登录目标系统,然后执行本地安全检测,比如检查弱口令、错误权限配置、补丁缺失等。这种检测的深度远超远程扫描,能直接发现很多在远程根本看不到的问题。
HTTP 表单认证的配置需要稍微耐心一点。你需要在扫描配置里指定登录页面的 URL、表单中的用户名字段、密码字段,甚至要设置登录失败后的特征字符串。OpenVAS 会模拟浏览器登录,然后用携带认证态的会话去测试应用内部的 URL。建议先在浏览器里手动体验一次登录流程,再把参数填进去。如果登录过程涉及 JavaScript 渲染,OpenVAS 不一定支持,这时候我通常会在目标应用里创建一个不依赖复杂 JavaScript 的临时测试账号。
配置了认证凭据之后,扫描时长远比无认证扫描要长,因为每个 URL 都要带着登录态去检测,插件执行数量明显增加。所以,认证扫描最好独立成一个任务,不要和日常巡检混在一起。我一般会在夜间窗口期跑认证扫描,白天任务只做无认证的快速检查。
3.3 定时任务与增量扫描设计
效率提升不仅仅体现在单次扫描时间上,更体现在长期运行的扫描计划里。如果不做任何优化,每周全量扫一次几百台机器,既消耗资源,也容易产生大量重复报告。我的做法是设计基础扫描和增量扫描两套任务。
基础扫描可以设定较长的周期,比如每个月的第一个周五晚上跑一次全量深度扫描,记录整体基线。每周的例行扫描则使用增量模式,只扫描最近有变化的端口、服务或新增主机。OpenVAS 的增量扫描依赖于存储的扫描结果,它会把之前识别到的服务状态和当前状态做对比,只对差异部分执行插件检测。
这种“基线+增量”的组合能让日常扫描时间缩短一大半,同时不丢失对新增漏洞的关注。配置增量扫描的方式很简单,在新建任务时选择“增量扫描”模式,然后关联一个基础任务作为参照。需要留意的是,如果目标系统架构发生了大规模变化,增量扫描可能会漏掉新问题,所以每个月还是需要回归一次全量深度扫描。
定时任务调度也要讲技巧。不要把大量扫描任务集中在同一小时启动,那样会造成扫描器资源的争抢。我习惯把任务打散到不同的时间点,比如凌晨 1 点扫一组,凌晨 2 点扫另一组。这样即使某个目标拖慢节奏,也不会阻塞其他任务的执行。
4. 常见问题与排查技巧实录
4.1 误报率飙升怎么办
自定义配置尤其是提高插件强度后,最直接的副作用就是误报率上升。我遇到过扫描结果里有十几条“Apache 存在目录遍历漏洞”,结果人工复核后发现,那是扫描器把正常的 403 响应误判成了漏洞特征。
要降低误报,我的第一个建议是开启扫描配置中的“响应一致性检查”。这个选项会让扫描器对同一请求进行多次重复尝试,并根据响应差异判断是否存在真实漏洞。它能滤掉不少由于网络抖动、负载均衡切换导致的单次异常响应。
第二个建议是针对可疑结果做复扫验证。OpenVAS 支持对单条结果重新检测,不要直接拿报告的结论去修复,先复扫一次,人工访问相关 URL 或用手工工具验证。只有确认真实存在,再派单给相关研发或运维团队,否则很容易消耗团队的信任。
4.2 扫描中断和资源耗尽问题
扫描中断是另一个高频问题,尤其是目标数量多、任务时间长的情况。我遇到过几次扫描进程直接崩溃,或者目标任务显示失败但没有任何具体的错误信息。排查时通常要去看扫描器内部的日志。日志一般位于 /var/log 或安装目录的 var 目录下,重点搜 “ERROR” 和 “FATAL” 关键字。
资源问题更多出现在自己调整并发参数时。如果你发现扫描器所在服务器 OOM,或者内存使用持续上涨不释放,很可能是并发太大导致的。建议先把 max_hosts 和 max_checks 降到较低水平,等扫描稳定后再逐步增加。还有一个小技巧,OpenVAS 内部会为每个扫描任务分配临时存储空间,如果磁盘写满也会导致任务异常中断,所以定期检查扫描服务器的磁盘空间也很有必要。
4.3 扫描结果验证与修复优先级
最后说下扫描结果的优先级处理。经过自定义配置,你会得到一份精简得多的报告,但里面的漏洞还是要分优先级。我的参考标准是:可利用性、暴露面、数据敏感度三个维度。
可利用性高的漏洞,比如未认证的远程命令执行,即使 CVSS 分只有 7.0,也应该排在 9.0 的系统配置问题之前。暴露面大的问题,比如面向所有来源 IP 都能访问的高危端口,优先级也要上调。数据敏感度则取决于目标系统存储的数据类型。以这三个维度综合排序后,再将结果交给修复团队,效率和效果都比单纯看分数要好得多。
在实际操作中,我发现很多人会把扫描报告当成最终答案,这其实是个误解。扫描报告是侦察阶段的产物,它告诉你“可能有问题”,但真正是否可利用、影响面多大,还是需要人工验证。自定义配置大幅提升了发现问题的概率,但也把验证的责任留给了你。
最后再分享一个小技巧。我通常会为不同的扫描目标维护一份独立的配置模板,包括端口范围、插件选择、认证凭据和资源限制。因为生产环境经常会增加新主机,配置模板可以快速套用到新任务上,不用每次都从头调一遍参数。扫描效率的提升不是靠一次两次调优,而是靠一套适应自己环境的配置体系积累出来的。