1. 项目概述:为什么你的OpenVAS扫描又慢又吵?
如果你用过OpenVAS,大概率经历过这种场景:启动一个全端口扫描,然后泡杯咖啡,刷半小时手机,回来一看进度条才走了20%。或者更糟,扫描器像疯了一样,把目标服务器上的服务都“打”了个遍,触发了无数告警,结果报告里塞满了“SSL/TLS协议信息泄露漏洞(CVE-2016-2183)”这类低风险或误报,真正要命的高危漏洞反而被淹没在噪音里。这感觉就像用消防水龙头浇花,劲儿大,但效率极低,还弄得一地狼藉。
“OpenVAS扫描效率翻倍”这个标题,核心解决的正是这两个痛点:速度和精度。效率翻倍不只是让扫描跑得更快,更是让扫描变得更聪明,用更少的资源、更短的时间,命中更多真正有价值的漏洞。这背后依赖的,正是OpenVAS强大但常被忽视的“自定义配置”能力。很多人只是点开Greenbone Security Assistant(GSA)的Web界面,选择一个默认的“全扫”或“快速扫描”配置就开干,这相当于开着一辆F1赛车,却只用一档在市区里转悠。
自定义配置,就是让你成为这辆赛车的真正驾驶员。它能让你根据目标资产的具体情况(比如,这是一台暴露在公网的Web服务器,还是一个内部的管理后台?),精准调整扫描的“探头”和“力度”。通过精细化的配置,你可以过滤掉大量无关的检查项,聚焦于高风险端口和漏洞家族,从而成倍缩短扫描时间,并显著提升报告的信噪比。这不仅是技术操作,更是一种安全运营的思路转变:从“广撒网”式的被动监控,转向“精准狙击”式的主动威胁狩猎。接下来,我将拆解如何通过一系列自定义配置策略,让你的OpenVAS从“噪音制造机”变成“漏洞猎手”。
2. 扫描策略的深度定制:从“全面轰炸”到“外科手术”
默认的扫描配置之所以低效,是因为它们被设计为“通用”和“安全第一”,即宁可错杀一千,不可放过一个。但在实际生产或测试环境中,我们需要的是“适用”和“效率优先”。自定义扫描策略是提升效率的第一道,也是最重要的一道关卡。
2.1 理解扫描配置的四大核心组件
在GSA界面创建扫描任务时,关键的配置项集中在“扫描配置”(Scan Config)中。一个高效的配置需要你理解并联动调整以下部分:
- 扫描目标(Target):不仅仅是IP地址或域名列表。更关键的是端口列表。默认的“全端口扫描”(1-65535)是速度的最大杀手。对于大部分Web应用,你真正需要关注的端口可能不超过20个(如80, 443, 8080, 8443等)。对于数据库服务器,则是3306, 1433, 5432等。预先通过一次快速的端口探测(如用
nmap -sS -T4 --top-ports 100 <target>)确定开放端口,然后在OpenVAS的Target配置中只指定这些端口,能立即将扫描范围缩小几个数量级。 - 扫描策略(Scan Policy):这是自定义的精华。它由一系列“网络漏洞测试”(Network Vulnerability Tests, NVTs)家族组成。OpenVAS内置了数万个NVTs,分属于不同的家族,如“CISCO”、“DNS”、“FTP”、“General”、“HTTP”、“MySQL”、“PHP”等。全选所有家族进行扫描,是导致速度慢和噪音大的直接原因。
- 凭证(Credentials):如果扫描目标提供了合法的登录凭证(SSH、SMB、ESXi、数据库等),OpenVAS可以进行“认证扫描”。这能极大提升扫描深度和准确性,因为它可以登录系统,查看补丁情况、配置文件、用户列表等,发现未授权扫描无法触及的漏洞(如系统内部组件的漏洞、弱密码策略等)。虽然设置凭证会增加一些前置工作,但它带来的效率提升是质的飞跃——直接告诉你“漏洞是否存在”,而不是“可能存在”。
- 日程与警报(Schedule & Alerts):对于周期性扫描,合理的日程安排可以避开业务高峰。警报设置则关乎“结果推送效率”,确保重要漏洞能被及时通知。
2.2 创建你的第一个高效扫描策略
不要从零开始。我建议克隆一个接近你需求的默认策略(如“Full and fast”)进行修改。
- 进入配置:在GSA侧边栏,进入“Configuration” -> “Scan Configs”。点击“Full and fast”旁边的五角星图标,选择“Clone”。
- 重命名与描述:给新配置起个有意义的名字,如“Web-App-External-Focus”,并在描述中写明用途,例如“针对外部Web服务器的聚焦扫描,包含常见Web漏洞及中间件检查,排除Windows特有项目”。
- 关键操作:选择NVT家族:点击新配置的名称进入编辑页面,找到“NVT Selection”部分。这里你会看到按家族分类的所有NVTs。
- 减法操作(核心):
- 如果你的目标明确不是Windows服务器,果断取消勾选所有“Windows: Microsoft Bulletins”、“SMB”、“WMI”相关的家族。这能砍掉海量的无关检查。
- 如果目标没有数据库,取消“MySQL”、“PostgreSQL”、“MSSQL”、“Oracle”等家族。
- 如果目标仅为现代Web服务,可以酌情减少或调整“FTP”、“Telnet”、“SNMP”等传统服务家族的检查强度。
- 加法操作(精准):
- 对于Web应用,确保“HTTP”、“Web Application”、“PHP”、“Apache”、“Nginx”、“Tomcat”等家族被选中并处于合适状态。
- 可以点击具体家族旁边的“偏好设置”图标,进行更细粒度的调整。例如,在“HTTP”家族中,你可以设置是否进行侵入性测试、是否检查特定CMS(如WordPress, Joomla)的漏洞。
- 减法操作(核心):
- 调整扫描参数:在“Scan Config”的“Settings”中,有几个关键参数:
max_checks(最大并行主机检查数)和max_hosts(最大并行主机数):这两个参数共同决定了扫描的并发度。默认值通常比较保守。在扫描器和网络带宽性能允许的情况下,适当增加可以大幅提升速度。例如,将max_hosts从默认的10调整为20,max_checks从2调整为4。注意:调整过高可能导致扫描器负载过大或目标网络拥塞。plugins_timeout(插件超时时间):单个NVT检查的超时时间。对于网络状况不佳的目标,适当增加此值可以减少因超时导致的漏报,但会拉长整体扫描时间。需要权衡。port_range(端口范围):虽然我们在Target里定义了端口,但这里可以设置一个兜底范围。建议与Target保持一致,避免冲突。
实操心得:不要追求一次配置就完美。我的习惯是,针对一类资产(如外部Web服务器、内部数据库服务器、网络设备)分别创建不同的扫描策略模板。每次扫描前,根据资产信息微调模板,而不是每次都从头配置。这能形成可复用的知识库。
3. 目标与端口优化:缩小战场,精准打击
扫描策略定义了“用什么武器”,而目标和端口则定义了“战场在哪里”。优化这里,能带来最直接的提速效果。
3.1 智能目标分组与端口清单
不要把所有IP扔进一个目标列表。按资产类型、重要程度、网络区域进行分组。
- 创建目标组:在“Configuration” -> “Targets”中,为不同类型的资产创建目标。
- Web-Servers-External:包含所有对外提供Web服务的IP,端口列表为
80, 443, 8080, 8443, 8000, 8008, 8888等常见Web端口。 - DB-Servers-Internal:包含内部数据库服务器,端口列表为
1433, 3306, 5432, 1521, 27017, 6379。 - Network-Devices:包含路由器、交换机,端口列表为
22, 23, 161, 443。
- Web-Servers-External:包含所有对外提供Web服务的IP,端口列表为
- 活用“排除列表”:如果某个目标上有你明确知道无需扫描或会导致问题的服务(例如,一个已知的监控接口端口),可以在Target的高级设置中将其加入排除列表。
- 利用“主机列表”文件:对于大量目标,可以通过上传一个纯文本文件(每行一个主机名或IP)来创建目标,这比在Web界面手动添加高效得多。
3.2 端口扫描的取舍艺术
OpenVAS内置的端口扫描器能力不错,但对于大规模或复杂网络,将其与专业工具结合是更好的选择。
- 方案一:依赖OpenVAS自身发现。在扫描配置的“目标发现”部分,可以选择端口扫描方法(如TCP-SYN)。这种方法简单,但速度受OpenVAS扫描器并发设置影响较大,且对防火墙后的主机探测能力有限。
- 方案二(推荐):前置
nmap扫描。这是我个人最常用的高效流程。- 使用
nmap进行快速端口发现:nmap -sS -T4 --min-rate 1000 --top-ports 100 -oG openports.gnmap <target_range>。这个命令会以较高速度扫描最常见的前100个端口。 - 解析
nmap输出,生成一个仅包含开放端口的列表文件。 - 在OpenVAS中创建Target时,选择“Manual”端口列表,并将上一步得到的端口列表粘贴进去。同时,在扫描配置中,关闭或大幅降低OpenVAS自身的端口扫描强度(例如,在“Port scanners”家族中,仅保留轻量级的“ping host”类检查,或直接调整扫描配置的“端口扫描顺序”为“仅列出”)。 这样做的好处是,OpenVAS跳过了耗时的端口发现阶段,直接对已知的开放服务进行漏洞检测,扫描时间通常能减少30%-50%。
- 使用
注意事项:
nmap的扫描可能会触发IDS/IPS告警。在生产环境执行前,务必获得授权并选择合适的时间窗口。同时,nmap的-T4(激进时序模板)速度虽快,但可能不够稳定,对于关键资产,可考虑使用-T3(正常时序)。
4. 凭证与认证扫描:打开漏洞检测的“上帝视角”
未经认证的扫描(Unauthenticated Scan)就像在房子外面用手电筒照窗户,只能看到表面问题。认证扫描(Authenticated Scan)则是拿着房主钥匙进去仔细检查每一处角落。它能发现系统补丁缺失、弱密码策略、不安全配置、敏感文件权限等“内部”漏洞,报告质量有质的飞跃。
4.1 配置各类服务凭证
在“Configuration” -> “Credentials”中,你可以添加多种类型的凭证。
- SSH/SMB(Linux/Windows):这是最常见的。提供用户名和密码(或私钥)。对于Linux,确保扫描器主机上的
gvm用户有权限使用提供的密钥或密码连接到目标。 - ESXi/VMware:提供vCenter或ESXi主机的管理员凭证,可以扫描虚拟化平台的漏洞。
- 数据库凭证:为MySQL、PostgreSQL、MSSQL、Oracle等提供只读账户。OpenVAS能检查数据库安全配置、弱口令、过期用户等。
- HTTP认证:对于需要登录才能访问的Web应用管理后台或API,可以配置HTTP Basic、Digest或Cookie认证,让OpenVAS能够扫描认证后的页面,发现越权、注入等逻辑漏洞。
4.2 认证扫描的实操流程与避坑指南
- 创建凭证:在Credentials页面,选择对应类型,填写信息。对于SSH私钥,需要将私钥文件内容粘贴到对应字段。
- 关联凭证到目标:编辑或创建Target时,在“Credentials”部分,为你添加的各类服务选择对应的凭证。一个目标可以关联多组凭证。
- 创建扫描任务:在创建扫描任务时,选择你配置好的Target(已关联凭证)和优化过的Scan Config。
- 启动扫描:OpenVAS会尝试使用凭证登录目标。你可以在任务详情页的“Results”部分,筛选“Log”类型的消息,查看认证是否成功。
常见问题与排查技巧实录:
- 问题1:SSH认证失败,提示“Permission denied (publickey,password).”
- 排查:首先,在扫描器主机上,尝试用
gvm用户身份,使用你配置的密钥或密码,通过ssh命令手动连接目标,确认连通性。最常见的问题是私钥格式不对(需要PEM格式)、私钥有密码保护(OpenVAS不支持带密码的私钥)、或者目标服务器限制了登录用户/IP。 - 解决:生成一个无密码的SSH密钥对,将公钥部署到目标的
authorized_keys文件中,并在OpenVAS中使用对应的私钥。
- 排查:首先,在扫描器主机上,尝试用
- 问题2:SMB/WMI认证失败(针对Windows)
- 排查:Windows认证依赖SMB协议和WMI服务。确保目标防火墙放行了135、139、445等端口。确保提供的账户有足够的远程访问权限(通常需要加入Administrators组)。对于域环境,用户名可能需要是
DOMAIN\username格式。 - 解决:在目标Windows上,检查“本地安全策略” -> “本地策略” -> “用户权限分配”中的“从网络访问此计算机”和“作为服务登录”等策略是否包含该账户。
- 排查:Windows认证依赖SMB协议和WMI服务。确保目标防火墙放行了135、139、445等端口。确保提供的账户有足够的远程访问权限(通常需要加入Administrators组)。对于域环境,用户名可能需要是
- 问题3:认证扫描速度反而变慢?
- 原因:这是正常的。认证扫描会执行更多、更深入的检查,例如遍历文件系统、查询注册表、执行本地命令等。它用时间换取了深度和准确性。
- 权衡:对于核心业务服务器,深度比速度更重要。可以将其安排在业务低峰期(如深夜)进行。
5. 报告过滤与结果分析:从海量数据中提炼真金
即使经过优化,一次扫描仍可能产生成百上千条结果。高效的分析不是逐条阅读,而是通过过滤、排序和分类,快速定位关键风险。
5.1 利用GSA界面的过滤与仪表板
- 严重性过滤:这是第一道筛子。报告生成后,立即使用过滤器,只看“高危”(High)和“中危”(Medium)的结果。低危(Low)和日志(Log)信息通常用于后续细节排查,而非首次分析重点。
- 资产视图:在“Assets” -> “Hosts”视图中,你可以看到所有被扫描过的主机列表,并直观地看到每台主机上的漏洞数量分布(按严重性用不同颜色气泡表示)。点击气泡可以快速下钻到该主机的问题详情。
- 自定义仪表板:GSA支持创建仪表板。你可以创建一个“安全态势概览”仪表板,添加“Top 10 高危漏洞”、“最近扫描结果”、“漏洞严重性分布”等组件,一进入控制台就能掌握全局。
5.2 导出与外部工具联动分析
GSA的Web分析功能有时不够灵活。将报告导出进行二次处理是专业做法。
- 导出格式选择:
- PDF/HTML:用于交付和阅读,格式美观。
- CSV:用于数据筛选和统计。你可以用Excel或Pandas快速筛选出特定IP、特定端口(如所有443端口的漏洞)、特定漏洞类型(如所有XSS)的数据。
- XML:包含最完整的信息,适合导入到其他安全平台(如SIEM、漏洞管理平台)或用于自定义脚本分析。
- 建立漏洞处置工作流:扫描不是终点。你需要一个流程来处理漏洞。
- 分级分类:根据漏洞CVSS分数、资产重要性、利用难度、修补成本,对漏洞进行风险评级(如紧急、高、中、低)。
- 责任到人:将漏洞指派给具体的系统负责人或运维团队。
- 跟踪闭环:记录漏洞的修复状态(待处理、修复中、已修复、验证中、忽略/误报),并定期复查。
5.3 处理误报与调整配置
没有扫描器是100%准确的。OpenVAS的误报主要来源于:
- 版本检测偏差:扫描器通过Banner或有限信息判断的服务版本不准确,导致关联了错误的漏洞。
- 检查条件过于宽松:某些NVT仅凭一个模糊的特征就判定漏洞存在。
- 目标环境特殊:如WAF、负载均衡器干扰了探测结果。
应对策略:
- 手动验证:对于关键的高危漏洞,不要完全相信扫描结果。尝试使用专门的漏洞验证工具(如
sqlmap、nuclei)或手动构造请求进行验证。 - 标记“误报”:在GSA的结果页面,可以对确认为误报的条目添加“Override”(覆盖),将其严重性标记为“False Positive”(误报),并填写理由。下次扫描时,这个结果将不会以漏洞形式出现。
- 反馈调整扫描配置:如果某一类误报频繁出现(例如,某个特定的NVT总是误报),可以考虑回到扫描配置中,找到对应的NVT家族或单个NVT,将其禁用或调整其参数。这是一个持续优化的过程。
6. 高级调优与自动化集成
当你掌握了基础的自定义配置后,可以进一步探索高级功能,实现扫描流程的自动化和智能化。
6.1 利用GVMD(Greenbone漏洞管理器守护进程)的API
GSA的Web界面适合手动操作,但对于集成到CI/CD流水线或自动化运维平台,API是唯一选择。OpenVAS/GVM提供了丰富的REST API。
- 应用场景:
- 自动创建扫描任务:在代码部署后,自动触发对新服务器的扫描。
- 定时获取报告:每天凌晨自动拉取最新扫描报告,解析后发送摘要到钉钉/企业微信。
- 资产同步:从CMDB(配置管理数据库)自动同步资产列表到OpenVAS的Target中。
- 工具选择:你可以使用
gvm-tools(官方Python库)、gvm-scripts,或直接通过HTTP客户端调用API端点。社区也有像gvm-libs这样的库方便集成。 - 示例思路:一个简单的Python脚本,通过API创建目标、启动扫描、轮询状态、下载报告并解析高危漏洞数量,如果超过阈值则发送告警。
6.2 性能极限调优
对于超大规模网络(数千台主机),单节点OpenVAS可能力不从心。这时需要考虑分布式架构。
- 主从扫描器架构:部署一个GVM主控中心(包含GVMD和GSA),和多个独立的OpenVAS扫描器节点。在主控中心配置中,将扫描任务分发到不同的扫描器节点上并行执行。这能水平扩展扫描能力。
- 扫描器节点专用化:可以让不同的扫描器节点专注于不同类型的扫描。例如,节点A专门做Web应用深度扫描(速度慢但深入),节点B专门做网络设备快速扫描(速度快但面广)。
- 数据库优化:PostgreSQL数据库的性能直接影响GVM的响应速度。对于海量结果,需要定期清理旧数据,并对数据库表(如
results)建立合适的索引。
6.3 与威胁情报联动
孤立的漏洞扫描价值有限。如果能将扫描结果与外部威胁情报(如最新的漏洞利用代码公开情况、在野攻击活动趋势)结合,就能优先处理那些最可能被攻击者利用的漏洞。
- 手动联动:关注国家漏洞库、安全厂商公告、Exploit-DB等平台。当有新的高危漏洞爆发时,立即检查你的OpenVAS NVT是否已更新(Greenbone社区通常反应很快),并针对受影响的产品系列启动专项扫描。
- 自动联动雏形:编写脚本,监控CVE发布源(如NVD的RSS),当有与你资产相关的CVE发布时,自动在OpenVAS中创建一次针对性的扫描任务,检查该CVE。
我个人在实际操作中的体会是,OpenVAS的效率提升是一个“配置优化 -> 流程固化 -> 自动化集成”的递进过程。初期花几个小时研究并创建几个高质量的扫描配置模板,未来每次扫描都能节省数倍的时间。将扫描任务与资产管理系统、工单系统打通,能让安全漏洞的发现、分发、修复、验证形成一个高效闭环,这才是安全运营真正走向成熟的标准。最后再分享一个小技巧:定期(比如每季度)回顾你的扫描配置和结果,看看是否又积累了新的误报模式,或者是否有新的资产类型需要新的扫描模板,这个持续改进的习惯能让你的漏洞管理能力不断进化。