导语:最近我们审查了各种Supermicro系统并发现了严重的固件漏洞,这些漏洞会影响许多使用Supermicro系统的设备。

img_20180607_1408403.jpg

我们已经看到过许多针对系统固件攻击,例如针对SMM rootkit,设备固件更换,甚至篡改基于固件的恶意软件功能的PoC和野外演示。最近我们审查了各种Supermicro系统并发现了严重的固件漏洞。这些漏洞会影响许多使用Supermicro系统的设备,因为Supermicro是一家大名鼎鼎的服务器厂商,主要致力于为全球的企业IT、数据中心、云计算、高性能计算与嵌入式系统提供端到端绿色计算解决方案。这样,许多系统会通常将其用作数据中心服务器。不过,目前大多数检测和响应机制都无法发现Supermicro系统中固件的漏洞,更别说固件和硬件级别的恶意活动了,这使得许多关键系统暴露于针对Supermicro系统固件的攻击中。

漏洞危害评估

这些漏洞很容易被利用,所带来的攻击危害和对存储在安全数据中心的系统的物理访问的危害是一样的。如果一个攻击者能够对存储在安全数据中心的系统进行物理访问,那他就可以简单地附加一个硬件编程器来绕过保护措施。在我们发现的攻击样本,黑客就可以通过恶意软件而不是物理访问来更有效地扩展强大的恶意软件功能。

目前该漏洞的CVSS评分为8.2(高):CVSS:3.0/AV:L/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H

利用这些漏洞的恶意软件可以安装持久和隐藏的固件后门来窃取敏感数据或操纵系统的运行方式。这种攻击已经被研究人员多次证明,我们在HackingTeam的UEFI rootkit针对网络设备的固件攻击中看到过真实的案例。

此外,恶意软件可能会破坏关键硬件并完全阻止系统启动。我们在现实世界中也看到过类似的袭击,特别是在对沙特阿拉伯乌克兰的电力系统的袭击。这个攻击过程也很容易通过简单的破坏部分更新来得到证明,因为被损坏的固件会导致系统在启动过程中失败。对于工业受害者来说,这样的攻击所带来的代价非常昂贵。不过即使是最安全的网络环境,也不会备份固件映像或保留用于恢复系统的程序以避免此类攻击。

漏洞的发现过程

缺少固件存储访问控件

为了使基于Intel的系统能正确使用固件存储,固件中都包含一个描述符区域。该区域会为其自身和其他区域定义位置和访问控件,这些位置和访问控件又会被各种组件用于存储固件和持久配置。此时,漏洞就出现了。虽然,最安全做法是将所需的权限设置为最小。然而,在某些情况下,描述符本身可以通过在主处理器上执行的软件编写的。在这种情况下,该机制根本不能保护任何东西!恶意软件可以简单的修改权限并绕过任何保护,从而可能会暴露固件。

一般来说,一旦系统构建完成并进入到实际的生产阶段,Flash描述符区域就不可变了。这有助于用存储在SPI flash中的固件,来建立作为系统信任的root。诸如NIST SP 800-147 BIOS 保护准则就取决于此属性。通过不安全地配置描述符,在主机操作系统中具有管理权限的恶意软件就可以拥有修改主机处理器的权限,而不需要直接读写的固件代码和数据内容。

Eclypsium的研究人员通过对各种服务器固件型号的运行检查,发现了易受攻击的描述符访问控制。另外,这次检查还发现了多个服务器型号,这些型号允许从主机软件来写入flash描述符。Eclypsium的研究人员审查的一些产品可追溯到2008年,根据Supermicro的说法,最新的EOL则没有这个漏洞。

null.png

不安全的UEFI固件更新

为了完成更新,软件必须能够以某种方式写入或更新固件存储介质。通常情况下,这是受保护的,这样恶意软件或者有漏洞的软件就不能覆盖固件并阻止系统启动了。多年来,不同的制造商都已经开发出自己的格式来进行更新并用固件来处理。但是,UEFI目前已对启动过程中固件更新所使用的存储和处理机制的标准化进行了更新。

目前,对已验证的固件进行更新的思想已被广泛接受。是2011年发布的NIST SP 800-147“BIOS保护准则”的主题。里面明确地说明了,未能正确验证的更新,都可能会破坏操作系统或应用程序提供的完整安全功能。多年来,针对系统固件进行测试的研究人员已经多次证明,“BIOS保护准则”可以防止黑客绕过操作系统和管理程序的安全功能。

通过对各种系统的运行检查,我们发现了许多不安全的固件更新。Supermicro X9DRi-LN4F +,X10SLM-F和X11SSM-F系统都不能安全地对固件更新进行身份验证。我们还通过故意修改官方Supermicro固件映像中的二进制文件,观察到这些系统固件仍然会接受并安装修改后的软件包。不过,我们还是能够下载标准固件更新,更改其中一个代码模块,并使用标准更新工具成功地将其应用到系统中。

除了身份验证之外,当恶意软件可以通过自动运行更新过程,将已知的和已经修复的漏洞引入系统时,还存在潜在的漏洞。就是在正式更新过程会与已签名的固件映像一起使用,但是该映像恰好比当前安装的版本更早。有时,客户是需要这种撤销更新能力的。但是,如果引入了安全更新,则存在较旧且易受攻击的固件版本,并且它已正确签名。为了防止重新引入安全漏洞的更新,某些固件只有在更新未标记为安全更新时才允许版本降级。如果提供了正确签名的更新,但新版本包含安全修复程序,则旧版本会被拒绝。我们还通过故意更新到较旧的BIOS来测试Supermicro系统的版本降级更新保护(anti-rollback protection)措施。

今年1月,我们就联系了Supermicro,将这些漏洞报告给了他们,并建议他们实施行业标准的做法,对固件更新进行加密验证并实施版本降级更新保护措施。

缓解策略

最见效果的解决方案是让系统制造商验证对描述符区域的访问控制并发布固件更新。但是,终端用户的安全团队可以执行一些操作来缓解此漏洞。

漏洞的分析和检测方法

发现这样的漏洞是缓解的第一步,为了深入了解你的系统,你可以使用CHIPSEC框架来检查系统的描述符访问控制,如下所示。

chipsec_main -m common.spi_access

如果此检测方法失败,则代表当前描述符值没有提供保护,因为它们可以被篡改。

如果攻击者利用不安全的固件更新,以某种方式修改固件,那许多隐蔽和持久的恶意软件就可以绕过许多安全控制。然而,检测到这种恶意软件也是可能的(如果它没有采取明确的措施来逃避检测)。

为了防御这些攻击,安全管理员可以收集固件模块的哈希值。这些可以从供应商提供的固件中的白名单中进行验证。

如果一切检测办法都失败了,可以使用硬件编程器手动恢复关键系统。这些活动需要大量专业知识。但是,对于大多数关键系统,如果对系统上的工作映像过程,编写一个收集和归档的程序,则恢复过程要快得多。

Supermicro反应

Supermicro公司也接受了我们所发现的问题并致力于改进,对于最新的产品,Supermicro表示他们已经为几款产品实施了签名固件更新,并对所有未来的系统进行同样的处理。同样,对于那些需要自定义和锁定固件版本,以确保业务连续性的OEM客户来说,Supermicro表示他们正在X11版本中增加一个防止系统升级的选项。SPIflash描述符在大多数主板上都是只读的,我们正在帮助Supermicro识别可能发生错误设置的特定固件型号。

总结

我们已经确认在特定的Supermicro系统上缺少固件存储访问控件和不安全的固件更新,其他系统也可能具有类似的漏洞,只不过我们还没有验证而已,这使这些型号暴露于针对固件和硬件的攻击中。由于大多数组织都没有对这个安全层次进行监控,所以这些攻击可能会在很长一段时间内被忽视。通过本文的介绍,我们希望能够帮助你理解和防御此级别的攻击。

源链接

Hacking more

...