1. 项目概述从“扫一扫”到“精准狩猎”在安全圈里待久了你肯定听过或者用过OpenVAS现在更常被称为GVM即Greenbone Vulnerability Management。很多人对它的印象还停留在“一个开源的漏洞扫描器”——下载镜像一键启动输入目标IP点击“开始扫描”然后等着一份长长的报告出来。这没错但这只是它能力的冰山一角。这种“全端口、全插件”的默认扫描就像用渔网在池塘里捞鱼总能捞到点东西但效率低下噪音巨大而且很容易惊动“大鱼”目标系统甚至可能因为过于粗暴的扫描行为导致服务中断。真正的价值往往隐藏在默认配置之下。这次我们不聊怎么安装GVM网上教程一抓一大把我们深入腹地聊聊如何像一名资深安全工程师那样使用自定义扫描配置进行“精准狩猎”。这不仅仅是调整几个参数而是基于对目标环境、漏洞原理和扫描器行为的深度理解设计出高效、隐蔽、针对性极强的扫描策略。目标是用最小的动静找到最关键的漏洞尤其是那些在常规“大扫荡”中容易漏网的、深藏的或需要特定条件才能触发的“隐藏漏洞”。举个例子默认扫描可能会对一台Web服务器运行所有超过5万个网络漏洞测试NVTs但其中可能只有不到10%的测试是针对HTTP/HTTPS服务的。大量的无关测试不仅浪费时间产生的网络流量和日志也会暴露你的行动。而自定义配置就是让你能够精确制导只发射对当前目标有效的“导弹”。2. 核心思路为什么自定义配置是“高级技巧”在深入实操前我们必须先统一思想自定义扫描配置的核心优势是什么理解了“为什么”后面的“怎么做”才会更有章法。2.1 提升效率与精准度默认的“Full and fast”扫描策略是一个很好的起点但它追求的是覆盖面。在渗透测试或内部安全评估中时间通常是有限的。对一个C段的资产进行默认扫描可能耗时数天且报告冗长分析成本极高。通过自定义配置我们可以按需加载插件只启用与目标服务相关的漏洞检查插件。例如针对一个只开放了80、443端口的Web服务器我们可以禁用所有SSH、SMB、数据库相关的插件扫描速度可能提升数倍。控制扫描深度对于Web应用可以控制爬虫的深度、最大页面数以及是否执行高危的入侵性测试如SQL注入、命令注入的深度检测避免对生产环境造成意外影响。针对性端口扫描不仅仅依赖于默认的端口列表。如果你通过前期信息收集已经知道目标运行着某个冷门服务在非标准端口例如Redis在6379 MongoDB在27017你可以将这些端口明确加入扫描列表同时忽略其他无关端口极大缩短扫描时间。2.2 增强隐蔽性安全评估尤其是红队行动隐蔽性至关重要。OpenVAS的默认扫描行为特征明显很容易被现代IPS/IDS设备识别并拦截。调整扫描时序通过自定义“扫描器偏好”可以大幅降低并行主机数、增加请求之间的延迟max_hosts,max_checks参数将猛烈的“风暴扫描”变为温和的“毛毛雨”混入正常业务流量中。使用特定的扫描技术例如选择TCP SYN扫描还是全连接扫描不同的技术各有优劣全连接扫描更准确但更易被记录SYN扫描更隐蔽但可能被过滤。在GVM中这通过选择不同的“端口扫描器”来实现。伪装User-Agent在Web应用扫描中使用默认的OpenVAS User-Agent无异于自报家门。我们可以将其修改为常见浏览器如Chrome, Firefox的标识符。2.3 触发深层次漏洞很多漏洞的检测需要满足特定条件。默认扫描为了通用性和安全性可能不会执行某些具有潜在破坏性的测试或者不会尝试多种变体的攻击载荷。自定义漏洞检查参数一些NVTs插件允许传入参数。例如检测某个特定CMS的漏洞时可能需要指定其安装路径。通过自定义配置我们可以为这些插件提供精准的参数。组合式扫描先进行一轮快速的端口和服务发现扫描基于结果动态生成第二轮的深度漏洞扫描配置。这需要结合GVM的“任务”功能和“目标”管理来实现是一种更高级的自动化策略。3. 实战演练构建你的第一个“狩猎”配置理论说再多不如动手一试。我们假设一个实战场景需要对一个已知IP地址192.168.1.100的对外Web服务进行一次快速、隐蔽且深入的漏洞扫描重点寻找OWASP Top 10相关的漏洞同时避免对服务造成压力。3.1 前期准备与信息收集在GVM的Web界面Greenbone Security Assistant中胡乱点击是低效的。专业的做法是从信息收集开始。手动快速侦察在GVM之外先用nmap进行一个最基础的侦察。nmap -sS -T3 -p- 192.168.1.100这条命令使用SYN扫描-sS节奏为“ Polite ”-T3扫描所有端口-p-。目的是确认目标开放的端口特别是那些非80、443的Web端口如8080, 8443。分析结果假设我们发现目标开放了80/tcp (http),443/tcp (https), 和8080/tcp (http-proxy)。这就明确了我们的扫描范围。3.2 创建自定义扫描配置现在进入GVM的“Configuration” - “Scan Configs”部分点击“New Scan Config”按钮。基础信息Name:Web-App-Hunt-QuickBase: 这里不要选“Full and fast”。为了更精细的控制我们选择“Empty, static and fast”。这是一个空模板让我们从头构建。核心选择网络漏洞测试NVT家族这是自定义配置的灵魂。GVM将数万个漏洞检查插件NVT按类别组织成“家族”。我们的目标是Web应用所以需要精挑细选。全选然后反选先点击“Families”旁边的“全选”图标然后取消勾选所有。这一步很重要确保我们从一个干净的状态开始。勾选相关家族根据我们的目标OWASP Top 10 Web漏洞勾选以下家族Apache 如果目标使用Apache。Brute force attacks谨慎选择。暴力破解测试会产生大量登录请求可能触发账户锁定。在非授权测试中绝对不要用。在我们的“隐蔽扫描”场景下不勾选。CGI abuses 针对传统CGI程序的漏洞。Citrix 如果目标有Citrix服务。Databases不勾选除非前期侦察明确有数据库服务暴露。Default Accounts 检查默认账号密码可以勾选通常比较安全。Denial of Service绝对不要勾选DoS测试家族包含可能使服务崩溃的检查在任何合规的安全评估中都应禁用。FTP不勾选。General 勾选。包含一些通用的HTTP头安全检测等。HTTP核心家族必须勾选。包含大量的Web服务器、缓存服务器、代理服务器漏洞检查。HTTPS核心家族必须勾选。包含SSL/TLS配置缺陷、证书问题等。Magento 如果目标疑似使用Magento。Mobile Devices不勾选。Oracle不勾选。PHP 如果目标使用PHP。Product detection 勾选。用于更准确地识别Web服务器、框架、CMS类型为后续扫描提供上下文。RPC不勾选。SCADA不勾选。SMTP不勾选。SNMP不勾选。SQL injection核心家族必须勾选。这是OWASP Top 10的常客。SSL and TLS 勾选与HTTPS家族有重叠但更偏重加密协议本身。Web Servers核心家族必须勾选。涵盖IIS, Nginx, Apache等服务器的特定漏洞。WordPress 如果目标疑似使用WordPress。XSS核心家族必须勾选。跨站脚本攻击。注意这个列表是基于通用Web服务器的选择。在实际操作中你应该根据第一步nmap识别的服务类型如识别出nginx以及后续“产品检测”的结果动态调整扫描配置。这就是“迭代扫描”的思路。调整扫描器偏好点击“Scanner Preferences”选项卡。这里有很多“隐藏关卡”。降低并发增加延迟为了隐蔽max_hosts: 从默认的30改为1。一次只扫描一台主机。max_checks: 从默认的10改为2。同一时间对一台主机只进行2项漏洞检查。这些设置会显著降低扫描速度但流量特征会变得非常平缓。优化Web爬虫crawler max depth: 设置为3。避免爬虫陷入无穷的链接中。crawler max pages: 设置为50。限制爬虫总共访问的页面数。crawler max size: 设置为10240001MB。忽略过大的文件如视频。test_alive_hosts_only: 保持yes。修改HTTP User-Agent找到http_user_agent这一项。将其值从默认的Mozilla/5.0 [en] (X11, U; OpenVAS-VT...)修改为Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36。这样看起来更像一个普通的Chrome浏览器访问。保存配置点击“Create”按钮保存。现在你就拥有了一个专为Web应用设计的、偏向隐蔽扫描的自定义配置。3.3 创建目标并关联配置创建目标进入“Assets” - “Targets”。Name:Target-WebServer-192.168.1.100Manual输入192.168.1.100。Port List 不要用默认的“All IANA assigned TCP”。点击那个小文件夹图标选择“OpenVAS默认”。但更好的方法是根据我们的nmap结果创建一个自定义端口列表。进入“Configuration” - “Port Lists”。“New Port List”命名为Web-Server-Ports。在编辑框输入80, 443, 8080。保存。回到创建目标的页面在“Port List”里选择我们刚创建的Web-Server-Ports。创建任务进入“Scan Management” - “Tasks”。Scan Targets: 选择上面创建的Target-WebServer-192.168.1.100。Scan Config: 选择我们精心制作的Web-App-Hunt-Quick。Scanner: 选择你的主扫描器通常是“OpenVAS Default”。Schedule: 选择“Once”。其他保持默认点击“Start Scan”。现在一个高度定制化的“狩猎”扫描就开始了。它的流量更小行为更像正常用户并且将所有火力都集中在了Web漏洞上。4. 高级技巧与场景化配置掌握了基础的自定义配置后我们可以玩得更深入一些。下面介绍几种常见的高级场景配置。4.1 场景一针对内部系统的合规性扫描需求每季度对内部服务器Windows Server, Linux进行漏洞扫描检查是否符合内部安全基线如是否存在未修复的微软月度补丁、SSH弱密码、不符合的SSL协议等。要求扫描全面但对性能影响可控。配置思路基于“Full and fast”克隆新建配置时Base选择“Full and fast”然后在其基础上修改。这样能保留大部分通用的系统漏洞检查。精细化家族选择必选Windows: Microsoft Bulletins,Linux,SSH,SSL and TLS,Firewalls,Service detection。慎选/不选Denial of Service,Buffer overflow部分测试可能具有风险Brute force attacks除非策略允许。补充DNS,NTP,SMTP如果服务器运行这些服务。调整偏好safe_checks: 设置为yes。这是合规扫描的黄金法则确保所有测试都是“安全”的不会导致系统崩溃或数据损坏。auto_enable_dependencies: 保持yes确保依赖的插件被自动启用。可以适当提高max_hosts和max_checks例如分别设为5和15在可控范围内提升扫描效率因为内网环境对隐蔽性要求较低。4.2 场景二红队行动中的隐蔽侦查扫描需求在获取外围据点后需要对目标网络进行初步的、静默的资产发现和脆弱性探测绝对不能触发警报。配置思路基于“Empty, static and fast”新建。极简家族选择只勾选最核心、最静默的家族Port scanners 这是必须的但GVM本身不执行端口扫描它依赖像nmap这样的工具。我们需要配置端口扫描器偏好。Service detection 用于识别开放端口上的服务。Product detection 用于识别服务的具体版本。General 一些基本的指纹识别。禁用所有具体的漏洞检查家族如HTTP,SQL injection等。这个阶段的目标是“看见”而不是“攻击”。关键偏好设置端口扫描器在“Scanner Preferences”中找到“端口扫描器”相关的NVT例如Nmap (Nmap Scanner)或OpenVAS TCP Scanner。你需要编辑这些NVT本身的参数。这通常需要在“Advanced Task Wizard”或通过修改NVT首选项实现较为复杂。一个更简单的方法是在创建“目标”时选择“Alive Test”为“Scan Config Default”并确保你的扫描配置中包含了端口扫描插件。然后在扫描器全局偏好中调整。全局隐蔽设置max_hosts: 1max_checks: 1增加timeout相关值给慢速目标更多响应时间。将所有扫描的time_between_request调高例如5000毫秒。使用SYN扫描如果GVM集成的扫描器支持将端口扫描方法设置为synscan.nseNmap的SYN扫描脚本而非全连接扫描。实操心得纯粹的隐蔽侦查有时用专门的工具如nmap配合-T2 -sS -Pn等参数手动进行可能比在GVM框架内配置更灵活、更安静。GVM的优势在于将发现结果结构化存储并与后续的漏洞扫描阶段无缝衔接。因此这个“隐蔽侦查配置”更适合用于GVM体系内的、需要记录结果的初步信息收集。4.3 场景三迭代式深度扫描这是最体现工程师水平的用法。它不是一个静态配置而是一个流程。第一轮快速资产发现使用一个类似场景二的极简配置对一个大范围IP段进行扫描。目标快速找出所有存活主机及其开放的主要端口如22, 80, 443, 3306, 3389等。分析结果创建分组目标在GVM的“Assets” - “Hosts”中查看发现结果。利用“Dynamic Targets”功能或手动方式创建分组目标。例如Target-Group-WebServers: 包含所有开放80/443端口的主机。Target-Group-Databases: 包含所有开放3306MySQL、5432PostgreSQL、1433MSSQL端口的主机。Target-Group-Windows: 包含所有开放3389RDP或445SMB端口的主机。第二轮针对性深度扫描对Target-Group-WebServers使用我们之前创建的Web-App-Hunt-Quick配置。对Target-Group-Databases创建一个新的配置只启用Databases,Brute force attacks慎用,Default Accounts,General等家族。对Target-Group-Windows使用“合规性扫描”配置。这种方法将扫描总时间化整为零且每一轮扫描都更加精准资源利用率更高报告也更有条理。5. 常见问题、排查与报告精炼即使配置得当扫描过程中和扫描后也会遇到各种问题。5.1 扫描速度异常缓慢可能原因1max_hosts和max_checks设置过低。这是为了隐蔽性付出的代价。如果是在内网或授权测试中可以适当调高。可能原因2目标网络延迟高或存在防火墙/速率限制。检查GVM扫描器与目标之间的网络连通性。可以尝试在“扫描器偏好”中增加timeout和time_between_request的值。可能原因3选择了过多不相关的NVT家族。插件总数过多即使并发数不高队列也会很长。回顾你的家族选择确保其精炼。排查命令在GVM服务器上可以使用top或htop命令查看ospd-openvas或gvmd进程的CPU和内存占用。也可以查看扫描日志通常在/var/log/gvm/目录下。5.2 扫描结果漏报该发现的漏洞没发现可能原因1NVT家族未启用。这是最常见的原因。比如目标有WordPress但你的配置里没有启用WordPress家族。务必根据“产品检测”的结果来调整和启动第二轮扫描。可能原因2端口列表不正确。服务运行在非标准端口而你的目标配置中未包含该端口。始终用nmap等工具进行辅助验证。可能原因3凭证未提供。对于需要登录后才能检测的漏洞如后台管理漏洞、某些配置缺陷GVM需要你提供登录凭证在“Target”配置的“Credentials”部分添加。没有凭证这部分检测就无法进行。可能原因4扫描被WAF/IPS拦截。过于频繁或特征明显的请求被安全设备阻断。此时需要进一步降低扫描强度或尝试在“扫描器偏好”中修改HTTP头模拟更真实的浏览器行为。5.3 扫描导致服务异常误报或真实影响可能原因1启用了“Denial of Service”家族。在任何情况下都不要在未经特别授权的生产环境扫描中启用此家族。可能原因2某些Web应用测试插件存在缺陷。即使safe_checks设置为yes也不能100%保证兼容性。对于极其关键的业务系统应在测试环境验证扫描配置后再上生产。应急处理立即停止GVM扫描任务。检查应用日志定位触发异常的请求特征。在后续配置中可以通过“NVT选择器”排除掉特定的、有问题的漏洞测试插件。5.4 报告分析与精炼一份好的自定义扫描报告本身就应该比默认扫描报告更清晰。但仍有优化空间利用过滤器GVM报告界面提供了强大的过滤器。可以按漏洞严重程度High, Medium, Low、漏洞家族、主机、端口等进行筛选。第一时间关注“High”和“Medium”级别的漏洞。关联资产标签在“Assets”中为不同业务系统的主机打上标签如“OA系统”、“官网”、“数据库集群”。这样在报告中可以按业务系统来查看漏洞便于分派修复任务。导出与集成将报告导出为PDF或XML格式。XML格式可以导入到Jira、Confluence等平台或使用自定义脚本进行二次分析生成更符合内部流程的工单。标记误报对于确认为误报的漏洞项可以在GVM中将其标记为“False Positive”。这有助于在历史报告中清理噪音聚焦真实问题。但标记前务必确认无误。自定义扫描配置不是一劳永逸的它是一个需要根据目标环境、评估目标和威胁模型不断调整和优化的过程。它把OpenVAS/GVM从一个自动化的“漏洞扫描工具”变成了一个由你指挥的“漏洞狩猎平台”。真正的技巧不在于记住了某个配置参数而在于你对于“在什么场景下为什么要这样配置”的深刻理解。每一次扫描前的思考与设计才是区分普通使用者和资深实践者的关键。