
远程软件攻击的效力在很大程度上取决于对目标软件版本的精确识别。传统攻击往往因缺乏版本信息而不得不采用资源消耗大且易于被察觉的暴力破解方式。对于安全研究人员而言,获取版本信息同样是评估漏洞威胁、及时预警的关键。现有的版本识别工具通常依赖于预定义的字符串或静态资产特征作为指纹,然而,当软件部署时采取了混淆版本信息或启用认证等防御措施后,此类方法的有效性便会显著降低。 为此,这项研究提出了一种基于功能性变更的隐蔽式软件版本识别方法。其核心思想在于利用软件版本更新所引入的、难以被管理员轻易修改的功能性差异来设计探测请求。这些功能性变化是版本更新的内在驱动力,通常会引发不同的服务器响应,从而成为可靠的识别指纹。为了在保证识别准确率的同时最大限度地降低探测行为对目标服务器的影响,该方案从官方文档和变更日志中提炼领域知识以生成精准探测,并采用动态决策树来规划高效的探测序列,以应对现实世界中非标准部署带来的挑战。 研究团队在Elasticsearch、Redis、Dubbo、Joomla和phpMyAdmin等五种广泛使用的软件上对该方法进行了实现与评估。实验结果表明,相较于现有技术,这一方法将版本识别率提升了2.8倍,同时发送的数据包数量减少了65.37%。此外,通过大规模真实网络扫描,该工作成功为240,020个软件实例识别出版本信息,并揭示出超过72.25%的用户仍在部署至少一年前发布的旧版本,面临着严重的安全威胁。
现有远程软件版本识别技术面临根本性局限。传统方法依赖预定义的版本字符串、哈希值或文件结构等静态特征作为识别指纹。然而,这类方法存在两个关键缺陷:首先,部分软件(如Dubbo)根本不提供可识别版本信息的预定义字符串;其次,管理员可通过混淆工具轻易修改或隐藏这些特征,导致现有识别工具失效。 下图揭示了关键突破口:当使用"logstash_system"用户登录两个启用认证的Elasticsearch版本时,v5.1.2返回"unable to authenticate user..."错误,而v5.2.0则返回"failed to authenticate user..."。这种本质差异源于v5.2.0引入了新的内置用户功能,它表明软件版本更新带来的功能性变化会不可避免地导致响应差异,且这些由核心功能变更引入的特征难以被管理员修改或隐藏。 这一发现启发了本研究的核心动机:探索利用版本更新引入的功能性变化作为新型“指纹”,以突破现有识别技术的局限。特别是功能增加、调整和移除这三类变化,它们直接关联软件核心功能,必然在响应中留下可观测的痕迹。通过系统挖掘和利用这些功能性特征,旨在实现一种更隐蔽、更准确的版本识别方法,从而在目标软件启用认证或混淆版本信息等防御措施下,仍能保持有效的识别能力。

本文提出了一个名为VersionSeek的新型版本识别框架,该框架由三个核心模块组成:功能探针生成模块、响应处理模块和版本识别模块。 首先,功能探针生成模块从软件发布说明中提取功能性变更特征,并自动生成触发这些功能的探针。由于发布说明中的功能描述通常较为简略,该模块通过结合拉取请求(PR)中的详细说明和用户指南中的使用示例,为每个功能特征收集充分的上下文信息。基于这些增强信息,模块采用检索增强生成(RAG)方法,利用大语言模型自动生成能够准确触发功能性特征的探测请求。

其次,响应处理模块负责标准化不同版本的软件响应并进行分类,以确定每个功能探针对应的version分类。该模块通过自动化部署方案收集各版本软件对探针的响应,并采用差分测试方法识别和标准化由网络环境、操作系统等外部因素引起的响应噪声。处理后的响应被自动分类,形成每个探针的分类函数,记录不同响应类型对应的版本集合。 最后,版本识别模块通过动态决策树算法优化探针使用顺序,实现以最少的探针达到最高的识别准确率。该模块将探针调度问题形式化为:在给定待区分版本集合、可用探针集合和分类函数的情况下,寻找能够最大程度区分版本的最小探针序列。算法通过递归缩减方法找到局部最优解,并构建决策树来指导探针调度过程。

为解决用户自定义设置可能引起的版本冲突,系统采用多数投票算法进行冲突消解。当检测到冲突时,系统会回溯决策树,生成新的决策树进行重新识别,并通过比较路径长度选择获得最多探针支持的版本作为最终结果,从而在控制开销的同时保证识别准确性。
评估对象 。本研究选取了五类软件进行验证:Elasticsearch、Redis、Dubbo、Joomla和phpMyAdmin。基于这些软件过去十年(2014–2024)的发布版本,开发了原型框架VersionSeek。 研究问题 。评估实验围绕五个研究问题展开:RRQ1(RAG消融实验):探究上下文信息在探针生成模块中对实验结果的贡献程度;RQ2(探针有效性):评估VersionSeek生成探针的功能区分能力;RQ3(扫描效率):分析探针规划算法对系统运行时效率的提升效果;RQ4(版本识别性能):比较VersionSeek与现有先进工具在版本识别准确率方面的表现;RQ5(鲁棒性):测试VersionSeek在版本信息被故意隐藏或混淆等对抗环境下的稳定性。 数据集构建 。
基线工具 。与WhatWeb、BlindElephant、Nmap和Metasploit进行对比。所有对比工具均配置为最佳性能模式。
实验比较了四种主流大语言模型(GPT-3.5、Gemini1.5、Llama3.2、Qwen2.5)在有无RAG增强条件下的探针生成成功率。结果显示,引入上下文信息后,所有模型的生成率均获得提升,其中GPT-3.5提升最为显著(从0.45升至0.63)。Qwen2.5在RAG条件下达到最高生成率(0.67),因此被选为后续实验的默认模型。这表明领域知识和上下文信息能有效帮助LLM理解功能特性并生成更准确的探针。

通过对五个软件过去十年版本的全面分析,系统成功生成了1,258个有效探针。具体而言,利用684份Release-Notes、相关的7,963个Pull Requests以及对应的6,657个Document Retrieved,通过自动匹配标准化命令模板生成3,681个格式正确的探针(Probes)。经过伦理过滤和性能测试后,最终探针可用率达到34.17%。分析显示,88.01%的探针能够将响应和版本分类为2到5个类别,而针对高频变更功能的探针(如Elasticsearch的xpack功能)甚至能区分17个版本类别。值得注意的是,即使在没有授权凭证的情况下,不同版本的错误处理差异仍可使探针有效区分版本。

实验数据显示,探针生成阶段虽然耗时(平均每个功能特性约1分钟),但属于一次性过程。在实际识别过程中,探针调度仅需数秒即可完成,单个探针执行平均耗时约1.4秒。VersionSeek识别单个版本所需探针数量显著低于传统方法:Elasticsearch平均5.8个、Dubbo 4.867个、Redis 2.633个、Joomla 6.233个、phpMyAdmin 9.416个。与WhatWeb在激进模式下需要18个请求相比,VersionSeek减少了65.37%的数据包发送,平均扫描时间控制在7.4到14.611秒之间,证明其具备大规模版本识别的可行性。

与现有工具对比 :VersionSeek在所有五类软件上均表现出显著优势,特别是在phpMyAdmin上相比WhatWeb准确率提升284%。对于Dubbo这类不提供预定义版本字符串的软件,现有工具完全失效,而VersionSeek通过分析“invoke”和“help”等命令的功能变更,成功识别出100个Dubbo服务器的版本(46个精确到补丁版本)。

与现代方法对比 :与黑盒差分分析方法和机器学习方法相比,VersionSeek在phpMyAdmin上的识别性能分别提升31.50%和62.71%。传统方法依赖BlindElephant的公开探针的公开探针易被管理员阻断,而VersionSeek基于功能性特征设计的探针(如通过界面语言支持变化推断版本)更难被完全屏蔽。在探针使用效率上,VersionSeek平均仅需9.41个探针,而传统的机器学习方法固定需要15个探针;此外,VersionSeek通过功能性探针设计与动态调度策略,在真实复杂环境中实现了更优的识别效率与鲁棒性。
在模拟对抗环境中,VersionSeek在两种版本隐藏场景下均保持100%的识别率。在混淆场景中,VersionSeek系统通过分析版本字符串之外的功能差异(例如Redis 6.2.0新增的“server_time_usec”字段)实现版本识别;在阻断场景中,当探针失效时VersionSeek系统能自动生成后续决策树继续推理实现版本识别。相比之下,严重依赖显式版本字符串的Nmap和Metasploit在两种条件下对Redis和Elasticsearch的识别完全失败。虽然BlindElephant对Joomla和phpMyAdmin展现出一定鲁棒性,但因缺乏动态调度策略而始终发送固定15个探针。结果表明,VersionSeek通过功能性差异识别版本和动态决策树调度,在对抗环境下表现出更强的鲁棒性和效率。

基于实验室实验结果,本研究开发了版本扫描工具并对真实场景中的软件版本分布进行了大规模测量。通过整合Shodan和FOFA平台两个月内的实时扫描数据,共获取475,281条服务器记录。经扫描验证,在277,251个活跃服务器中成功识别出240,020个服务器的版本信息,识别率达86.57%。其中:


通过将识别出的版本与CVE漏洞数据库进行匹配,发现各软件均存在严重安全隐患: Elasticsearch :26.84%的服务器运行7.14.0-7.17.12版本,存在10个CVE漏洞,其中5个为高危漏洞。其中CVE-2023-31418权限提升漏洞仍然影响27,035个服务器。

Redis :28.29%的服务器运行7.4.0-7.4.1版本,但仅6.27%启用认证,剩下93.73%面临严重安全威胁。
![图片](https://mmbiz.qpic.cn/sz_mmbiz_png/6Dibw6L070WEuJrKM4k1ycSx7VgjK7dDzibuz0m