引言
关注安全咨询的朋友们可能都注意到,当某个设备出现漏洞后,经常会看到"某设备遭黑客入侵"、"某漏洞影响大量设备"之类的报道。
然而,我们知道漏洞的影响范围实际上是与设备版本密切相关的。那么,这些报道是如何快速判断漏洞的影响范围呢?特别是对那些没有明确显示版本信息的设备,如何快速确定其版本成为了一个关键问题。
基于此背景,本文将深入探讨版本识别这一关键技术问题。通过借鉴和总结业内专家的实践经验,我们将重点研究包括Citrix、Cisco RV和飞塔在内的多款主流设备的版本识别技术。本文着重分析那些没有显式版本信息展示的关键设备,探讨如何通过间接方法准确判断其运行版本,从而为漏洞影响范围的评估提供重要参考依据。
技术实践分析
本文在设备版本识别中,主要采用以下三种技术方法:
-
基于HTTP响应头分析:分析设备返回的Last-Modified等头信息,与已知版本的发布时间对比来判断版本 -
配置文件解析:访问并分析设备的关键配置文件以直接获取版本信息 -
静态资源特征:收集和比对设备的静态资源哈希值、路径特征等信息来确定版本
这些方法各有优劣:基于时间戳的方法可能因文件修改而产生偏差,配置文件解析虽然准确性高,但需要较高的访问权限。因此,实际应用中通常需要结合多种方法来提高版本识别的准确性。
设备实例研究
Citrix设备版本识别
Citrix ADC和Citrix Gateway是Citrix公司的重要网络产品,广泛应用于组织的内部和外部应用访问。在当前的互联网环境中,外部攻击者通过利用目标系统和产品漏洞进行入侵,已成为一项普遍的安全威胁。
由于Citrix ADC和Citrix Gateway产品对外并未显示明确的版本标识,这为测试人员进行版本指纹识别带来了挑战。然而,我们可以通过以下技术手段获取这两个产品的版本信息:
首先,可以利用系统文件属性中的最后修改时间戳进行版本判断。由于Citrix产品的不同版本发布时间存在间隔,文件修改时间能够反映出产品的大致版本范围。
其次,可以通过收集各已知版本Citrix产品的静态文件哈希值来建立版本特征库。测试时只需获取目标系统的文件哈希值并与特征库比对,即可推断出具体版本号。
最后,在Citrix Gateway产品中,某些配置文件会将自身的版本信息写入其中,我们可以通过解析某些关键配置文件来确定版本信息。例如,通过访问特定的配置页面或API接口,可以从响应中提取出版本标识。这种方法虽然需要较高的权限,但能够获得最准确的版本信息。
我们首先在本地搭建Citrix环境,进入系统后执行命令grep -R "13.0.47.24" /var/netscaler/ -name "*.xml"。通过这个命令,我们在/vpn/pluginlist.xml文件中发现了当前产品的版本信息。
/vpn/pluginlist.xml是Citrix Gateway产品中的一个XML格式配置文件,其中包含了Gateway启用的插件列表信息。
当Citrix Gateway作为VPN网关部署时,它需要加载各种插件模块来处理VPN连接、身份验证和策略控制等功能。这些插件的启用状态和加载路径等配置信息都保存在pluginlist.xml文件中,因此我们可以通过访问该文件来获取版本信息。
为了探索这一版本哈希值的意义,我们收集和提取了大量 Citrix 产品的扫描数据报告,发现存在近百个唯一的版本哈希值。为了验证这些哈希值是否能映射到具体的产品版本,我们自行搭建了 Citrix ADC 的测试环境。经过对页面响应的模拟访问和分析,我们发现该版本哈希是随机生成的标识,而非预置的静态标记。
基于此,我们可以从特定接口提取版本哈希信息,通过解析各个历史版本的 hash 值来准确定位产品的具体版本。
Citrix在发布ADC和Gateway等产品时,会在文件属性中记录该文件的上次修改时间。系统组件的可执行文件、配置文件、静态资源等都会包含Last Modified时间戳。当用户通过HTTP/HTTPS请求访问这些系统文件时,服务器会在响应头中返回Last-Modified字段,该字段值即为文件属性中的上次修改时间。
例如,访问Citrix ADC的管理界面/logon/LogonPoint/pluginFiles.json页面,响应头信息中会包含: Last-Modified: Tue, 05 Apr 2022 10:11:21 GMT 这个时间戳反映了pluginFiles.json文件的最后修改时间。同样,我们也可以通过请求其他系统文件来获取它们的修改时间。
通过编写脚本批量获取系统关键文件的Last-Modified时间,我们可以得到一组时间数据集。将这些数据与Citrix各历史版本的发布时间进行对比,就能匹配出最接近的版本号。
这种方法虽然存在局限性——文件多次修改可能导致时间信息产生偏差,但作为一种被动的指纹信息收集方式,它仍然为Citrix产品版本识别提供了重要的参考依据。
Cisco RV设备版本识别
思科 RV34X 系列路由器是专为小型企业设计的高性能、安全的网络设备。为了进行版本识别,我们首先检查了设备的 Web 界面代码,但未能找到明显的版本标识。
CISCO_RV34X_VERSION_MAP = {
"2022-10-17": "1.0.03.29",
"2022-06-14": "1.0.03.28",
"2022-03-08": "1.0.03.27",
"2022-01-06": "1.0.03.26",
// 省略
}
飞塔设备版本识别
飞塔(Fortinet)防火墙是Fortinet公司推出的一款高性能、多功能的网络安全产品,采用专用的安全处理芯片加速的统一威胁管理(UTM)解决方案。
我们尽可能地收集了飞塔的全部固件,以构建完整的版本库。
总结
本文探讨了三种主流设备(Citrix、Cisco RV和飞塔)的版本识别技术实践。通过分析HTTP响应头、静态资源特征、页面hash值等多个维度的信息,我们成功构建了一套可靠的版本识别方法。这些方法不仅为漏洞影响范围评估提供了重要支持,同时也为设备安全研究领域提供了宝贵的技术参考。
原文始发于微信公众号(源影安全团队):网络资产精细化识别系列(一)-关键设备中的版本识别技术实践
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论