导语:Gemalto产品中存在十多个安全漏洞,大量的工业和公司系统可能面临远程攻击。
背景
在过去的几年中,工业自动化系统的脆弱性问题变得越来越重要。工业控制系统与IT系统并行发展,相对独立,往往不考虑现代安全编码实践,可能是ICS安全问题的主要源头。由此,出现了许多定制解决方案,包括用于认证和加密的专有网络协议和算法。这些解决方案是ICS IT安全研究人员发现威胁的主要源头。同时,我们可以看到工业自动化系统从通用的技术(例如CodeSys Runtime,Microsoft Windows漏洞等)中附带来一些问题。
公司对这些问题和与之相关的风险给予不同的优先级。对于每个人而言,显而易见的是,漏洞信息在补丁发布之前永远不会被泄露。但是,许多公司认为,即使有补丁,也不应公布这些信息。对于软件开发人员来说,这是对他们声誉的一个打击。而使用存在漏洞系统的公司并不总是物理上能够安装补丁,或者这种安装可能涉及不菲的成本(更新系统引发的中断,与安装更新有关的成本等)。
我们根据安全系统开发人员和供应商的经验来评估风险。我们相信,向用户通报易受攻击的软件是否存在新的威胁以及是否需要尽快更新软件是绝对必要的。这当然不能保证所有易受攻击的系统用户都能及时更新,消除威胁。但是,根据我们的经验,如果没有这样做,即使补丁可用,用户也很少更新其系统。我们每天都面对成千上万的新威胁,而且我们可以看到,攻击者们不断寻找新的攻击机会。我们意识到,保持对问题的沉默就是给攻击者们机会。
这就是为什么我们决定共享我们发现的一个信息:根据我们的研究,将软件许可证管理令牌连接到计算机可能为攻击者打开隐藏的远程访问通道。
为什么我们决定分析SafeNet Sentinel
在进行各种渗透测试时,卡巴斯基实验室ICS CERT的专家们在使用不同的工业厂商软硬件解决方案的客户计算机上多次遇到了相同的服务。专家们并没有给予太多的重视,直到发现漏洞。该服务是hasplms.exe,它是GemaltoSafeNet Sentinel硬件解决方案的一部分。该解决方案为客户使用的软件提供许可证控制,并广泛用于ICS和IT系统。
该解决方案的软件部分由驱动程序、Web应用程序和一系列其他软件组件组成。硬件部分是USB Token。Token需要连接到安装了软件许可证的PC或服务器。下表列出了一些USB token模型。
这种类型的许可证控制解决方案基于以下操作原则:软件产品需要许可才能正常运行;当USB令牌插入计算机时,软件“看到”许可证并变得功能完备。每次启动软件时都必须插入令牌,并在使用时保持连接状态。Gemalto解决方案的软件部分只安装一次,无论需要令牌的软件生命周期如何,都能保持正常运行。
Gemalto的解决方案被其他软件供应商采用,其中包括ABB,通用电气,惠普,Cadac集团,Zemax以及其他许多公司,据估计,其数量可达4万。
根据Frost和Sullivan在2011年进行的独立研究的结果,目前由Gemalto拥有的SafeNet Sentinel在北美拥有40%的许可证控制解决方案市场份额,在欧洲超过60%。
使用Gemalto解决方案的最终用户数量不得而知。但是,如果每家公司有100个客户端,用户量就达数百万。不幸的是,很少有人意识到将令牌连接到计算机来控制许可证可能不是一件安全的事情。
漏洞和攻击向量
从研究人员的角度来看,hasplms.exe在系统中的行为很奇怪:它可以被远程访问,并使用开放端口194上进行通信。协议类型由网络包头定义 – 使用HTTP或专有的二进制协议。该服务还有一个基于HTTP协议的专属API。
二进制文件使用了VMProtect类型的保护器并从原始的Gemalto代码生成字节码,这使得分析该服务更加困难。因此,决定使用模糊测试作为分析漏洞服务行为的主要工具。
首先,我们来看本地功能 – 用户可以下载由两个文件组成的语言包,其中之一是localize.xml。第二个文件为HTML格式,有参数,其中一个容易受到缓冲区溢出漏洞的影响。如果不是一个奇怪的细节,那将会是一个简单的漏洞:虽然如上所述,使用了一个保护器,但由于某种原因,开发者没有使用任何针对这种二进制漏洞的经典保护机制(例如Stack Canary,Stack Cookie,ASLR等)。因此,一个简单的缓冲区溢出漏洞可能允许攻击者在远程系统上执行任意代码。
请注意,这种软件开发漏洞在现代解决方案中非常罕见。通常,在开发严谨的商业产品(如SDL–安全开发生命周期)时实施安全编码实践,这意味着在开发阶段就将安全性设计到应用程序中,而不是作为附加选项来实现。
此攻击向量可在没有LPE(本地特权升级)的情况下使用—存在漏洞的进程以SYSTEM权限运行,使恶意代码能够以最高权限运行。
加载语言包文件的示例脚本
缓冲区溢出导致RCER
该漏洞的编号为CVE-2017-11496。这只是我们发现的漏洞之一,而我们研究的总体结果令人不安。从2016年末至2017年初,共确认了11个漏洞:两个RCE漏洞,九个拒绝服务漏洞。到2017年6月,卡巴斯基实验室ICS CERT发现了三个漏洞:一个XML炸弹和两个拒绝服务漏洞,其中一个可能导致RCE。总共发现了14个安全漏洞,这些安全漏洞都相当危险的(例如,成功利用每个RCE漏洞即可获取SYSTEM权限(即Windows中最高权限级别))。
所有影响漏洞服务的攻击向量都是多阶段的。我们及时向Gemalto发送了所有发现的漏洞信息。这些各自漏洞分配了以下的CVE编号:
· CVE-2017-11496 – Remote Code Execution
· CVE-2017-11497 – Remote Code Execution
· CVE-2017-11498 – Denial of Service
· CVE-2017-12818 – Denial of Service
· CVE-2017-12819 – NTLM hash capturing
· CVE-2017-12820 – Denial of Service
· CVE-2017-12821 – Remote Code Execution
· CVE-2017- 12822 – Remote manipulations with configuration files
除了漏洞描述之外,我们还向Gemalto发送了关于特殊功能的描述。
特殊功能
卡巴斯基实验室ICS CERT专家发现,hasplms.exe有一些相当不寻常的功能:
· 当Gemalto USB令牌首次连接到计算机(即使活动会话被阻止)时,如果可访问Internet,则会在1947号端口上安装接受网络连接的驱动和服务。
· 如果从Gemalto网站手动下载驱动程序并安装,则会在1947号端口上安装接受网络连接的驱动程序和服务,并将1947号端口添加到Windows防火墙例外中
· 如果Gemalto软件作为第三方安装文件的一部分安装,则1947号端口也会添加到Windows防火墙例外中。
· 有一个API函数,用于启用或禁用Web界面中的管理面板,从而可以修改SafeNet Sentinel硬件解决方案程序部分的设置。该面板在本地主机IP地址-127.0.0.1上默认可用。
· 该API可用于更改语言包更新的内部代理设置。
· 更改代理服务器之后,可以使用服务的内部逻辑来获取运行hasplms.exe进程的用户帐户(即SYSTEM)的NTLM哈希值。
这似乎是一个无文档记载的功能,可用于隐身远程访问。这意味着远程攻击者可以使用这些功能访问Gemalto软件管理面板,在系统用户权限下执行攻击,并在完成攻击后隐匿其存在。
如上所述,Gemalto的代表被告知此攻击向量。
不透明的安全性
许多第三方供应商使用的解决方案、技术或个人软件模块都没有经过适当的安全测试。这可能会开启新的攻击向量。同时,关闭银行和工业控制系统等应用中经常使用的这类产品中的漏洞并不总是一个平稳的过程:出于某种原因,系统供应商并不急于通知用户在产品中发现的问题。
2017年初,我们向Gemalto发送了有关已确定的11个漏洞的信息。直到6月下旬,为响应我们一再的要求,供应商通知我们已发布了一个补丁、关闭了漏洞信息并在公司内部用户的门户上发布了一个新版的驱动。
6月26日,我们向 Gemalto通报了可疑功能和另外三个漏洞。这次,事情很快就解决了:7月21日,供应商推送了一个新驱动版本的私人通知—没有提到任何关闭的漏洞。
根据Gemalto的说法,公司已通知其所有客户需要通过帐户仪表板更新驱动程序。但是,这显然是不够的:在我们发布了确定的漏洞信息之后,我们接触了几个使用hasplms的软件开发人员。从与我们的沟通中可以看出,他们没有意识到问题,并继续使用具有多个漏洞的产品版本。
尽快将软件更新到当前版本(7.6)
我们敦促那些使用GemaltoSafeNet Sentinel的用户和公司尽快安装最新(安全)版本的驱动程序,或联系Gemalto获取更新驱动的说明。我们还建议关闭1947号端口,至少在外部防火墙(在网络周边)——在不影响业务的前提下,这有助于降低漏洞被利用的风险。
通过Microsoft Windows更新服务器安装驱动程序的情况下,我们建议检查hasplms.exe以确保它是最新版本。如果使用过时的版本,从供应商的网站安装最新(安全)版本的驱动或与Gemalto联系以获取有关更新驱动程序的说明至关重要。
一些使用第三方解决方案作为其产品一部分的软件供应商可能对自己的代码的安全性非常透彻,同时将第三方解决方案的安全性留给其他公司(这些解决方案的供应商)。我们非常希望大多数公司在其解决方案和产品中使用第三方解决方案时能够负责任地行事。