近日研究人员首次发现 rootkit 病毒(也称为 iLOBleed)正针对惠普企业服务器展开攻击,能够从远程感染设施并擦除数据。此次攻击由伊朗网络安全公司 Amnpardaz 发现,iLOBleed 是有史以来首次针对 iLO 固件的恶意软件。
专家解释说,针对 iLO 的恶意软件非常难以防控,因为它以高权限运行(高于操作系统中的任何访问级别),可以做到不被管理员和检测软件察觉。通过篡改此模块,允许恶意软件在重新安装操作系统后继续存在。
我们将在本文中分析 rootkit的攻击流程以及它是如何隐藏在 iLO 中,且无法通过固件升级删除,隐藏起来持续发起攻击。该恶意软件已被野外使用了一段时间,我们一直在监控其性能。
由于分析此恶意软件需要对 HP iLO 固件架构有清晰的了解,因此我们将首先介绍HP iLO 架构。然后,才会分析发现的恶意软件及其各种模块。最后,我们将讨论保护 iLO 的策略和解决方案。
HP iLO 架构
HP 服务器的 iLO 管理面板是恶意软件的避风港,感染后无法通过常规方法检测或擦除。
不仅可以通过 iLO 网络端口访问和感染 iLO,还可以通过系统管理员或对主操作系统的 root 访问权限来访问和感染 iLO。这意味着,如果攻击者可以访问在服务器上安装的主操作系统上具有管理员/root 权限的用户,它可以(无需任何进一步身份验证)直接与 iLO 通信,并在它易受攻击时感染它。
多年来的研究揭示了 HP iLO 中的多个漏洞,这些漏洞导致制造商对补丁和架构进行了更改。
在用于 G9 及以下服务器的 iLO4 及其早期版本中,硬件中没有带有嵌入式可信根密钥的安全启动机制。因此,这些版本的固件更容易被恶意软件修改和感染。
即使 iLO 已经更新到没有任何已知漏洞的最新版本,仍然可以将其降级到较低版本,这使得感染完全修补的固件成为可能。如果启用了非默认设置,你只能在 G10 系列中防止这种情况。而在较早的服务器上,则无法阻止降级机制。
鉴于上述情况,完全断开 iLO 网络电缆或将固件升级到最新版本等简单的解决方案不足以防止恶意软件感染。
2020年以来,Amnpardaz Software公司的恶意软件分析团队发现了一个rootkit,它在iLO固件中添加了一个名为Implant.ARM.iLOBleed.a的恶意模块,并修改了多个原有固件模块。 rootkit 会在虚假完成的同时默默地阻止固件更新。它还提供对服务器硬件的访问;其结果之一是完全擦除服务器磁盘。
用于验证 HP iLO 固件完整性的工具将很快向公众发布。
攻击指标(IOC)
虽然习惯上将哈希值作为 IOC 提供,但我们认为这对这种恶意软件无效。主要是因为如果手头没有 iLO 转储工具,将无法读取固件并检查其哈希值。而且,真正的 iLO 固件集非常少,因此采用白名单方法是可能的,并且更适合。即将固件的哈希值与已知良好的哈希值列表进行比较。
但是,如果你担心你的服务器是否感染了此恶意软件,你可以使用以下简单方法:
如前所述,为了保持持久性并防止被擦除,恶意软件会默默地阻止固件升级过程。该恶意软件努力模拟升级过程,并难以在 iLO 的 Web UI 和其他地方显示虚假的“升级”版本,但有一个问题:惠普对 iLO 的 UI 进行了相当大的更改。因此,你可以轻松检测恶意软件的存在。
在下图中,你可以看到 iLO-4 固件的两个屏幕截图,都声称是 2.55 版。但是正如你所看到的,其中一个使用了旧的 2.30 版 UI,它使用了一个完全不同的主题。
伪造(受感染)和真实 iLO 登录页面的比较
当然,与其他IOC一样,我们希望攻击者能找到绕过这种检测方法的技巧。但与此同时,你可以使用它轻松“发现”恶意软件。
HP iLO 技术
HP 为系统管理员提供 iLO 技术作为管理服务器的手段,该技术允许系统管理员使用特殊的网络接口远程访问其服务器的各种功能,包括:
打开和关闭服务器;
配置各种硬件和固件设置;
远程访问系统控制台;
远程安装 CD/DVD 映像;
远程监控和控制系统的多项软硬件指标;
多年来,HP 为其不同代的服务器推出了各种版本的 iLO 固件。表 1 显示了这些版本。
不同时期HP 服务器的 iLO 固件版本
由于该固件接口在所有服务器家族中的关键权限和性能,可以想象攻击该接口的各种场景。这些攻击包括获取管理接口的密码、利用安全漏洞以及在服务器上刷新受感染的固件而不是主固件。
近年来,研究人员已经进行了一系列研究来识别 HP iLO 固件管理界面中的安全漏洞。这些研究最终导致发现了许多具有严重到高度和中等风险的漏洞。不幸的是,近年来,这些漏洞和概念验证代码片段的广泛发布使得个人和黑客组织能够利用这些漏洞攻击在其企业网络中使用惠普服务器的组织的网络基础设施。
iLO 固件架构
从硬件的角度来看,iLO 与系统的主板集成在一起,包括以下内容:
采用 GLP/Sabine 架构的 ARM 处理器;
用于固件存储的闪存;
专用内存;
专用网络接口;
用于与其他控制单元通信的一组硬件端口;
iLO 固件方案
上图显示了 iLO 硬件的示意图,从图中可以看出,ARM 处理器通过 PCI-Express 接口连接到南桥,并通过它连接到服务器的主处理器。 iLO 还可以直接与 CMOS 通信。这种类型的连接用于设置变量,例如 iLO 管理界面将提供给用户的引导顺序。
iLO 处理器
iLO 硬件中使用的处理器来自第 7 代和第 8 代 ARM 处理器。这些处理器提供了良好的处理能力,同时被认为是非常低的消耗。这有助于在服务器处于待机(断电)模式时为网络管理员提供管理界面,而不会消耗太多电力和电流。
持久化存储
iLO 处理器可以与不同的内存芯片进行通信。本节将特别讨论其中两种芯片。第一个是存储 iLO 固件的系统主芯片,在 iLO 引导序列期间用于加载固件。
第二个是被称为 iLO NAND 闪存的芯片内存,iLO 固件可将其用作外部系统存储。加载后,iLO 固件使用此存储来保存系统事件日志和历史记录等文件。它也是由 iLO 操作系统运行的应用程序的存储空间。
与主服务器的连接
作为服务器管理和控制单元的 iLO 技术可以直接访问所有服务器硬件组件,例如内存、处理器、输入和输出端口以及硬盘。此外,服务器的主处理器将 iLO 检测为 PCI 模块并可以与其通信。
iLO 固件结构
iLO 固件作为二进制文件存储在 SPI 闪存驱动器中(通常大小为 16 MB)。如下图所示,该固件由 3 个主要部分组成,包括引导加载程序、操作系统内核和用户模式模块。在这 3 个部分中,只有 Boot Loader 部分没有加密,其他两个部分是压缩的(使用 LZMA 算法)并包含签名。所有 iLO 固件可执行内容都是使用 ARM 架构编译的 C 代码。
iLO 固件的内部结构
从软件的角度来看,iLO 为服务器管理员提供了 Web Server 和 SSH Server 等多种服务。事实上,iLO 是一个完整的操作系统,一旦系统插入电网,即使托管服务器关闭,它也会启动并提供其服务。
在 iLO 启动时,每个部分将在运行其任何部分之前检查下一部分的完整性。因此,Boot Loader 部分将负责验证签名、提取压缩和加载内核部分。内核部分还将负责验证签名、提取压缩和加载用户模式模块。
iLO 固件中使用的操作系统是由 Green Hills Software 开发的名为 Integrity 的实时操作系统,负责执行用户区中的任务。用户区实际上是HP开发打包的一个ARM架构的ELF二进制文件。这个文件有各种模块,每个模块都有一个特定的任务。每个任务都是一个进程,拥有专用的虚拟内存空间和一组运行在用户区的线程。在本文档的以下部分中,将介绍一些最重要的 iLO 模块。
iLO 模块
下图显示了 iLO 4 固件中的多个 UserLand 模块,一些最重要的模块将在接下来的部分中介绍。
iLO 4 固件中的多个 UserLand 模块
Web 服务器模块:iLO Web 管理界面
Web Server 模块负责以 Web 服务的形式提供 iLO 管理界面。该模块包含诸如 Web 界面、XML 编程界面、Redfish 编程界面和远程控制台等部分。
与 Web 服务器模块的连接可以是 HTTP 或 HTTPS。该模块有四个处理线程,每个线程负责管理和响应与模块建立的连接之一。每个连接请求都被逐行处理,分析其内容,如果认证和访问级别正确,则提供相应的响应。尽管访问几乎所有网页都需要用户身份验证,但某些数据以 XML 格式提供,无需经过身份验证过程。
CHIF 模块:与主机操作系统的连接
CHIF模块是iLO中的一个模块,它与CPU和服务器内存组件通信,并在iLO和主机操作系统之间传输消息。简单来说,该模块的任务可以列举如下:
等待接收来自服务器主操作系统的消息;
根据消息类型将接收到的消息发送给消息处理单元(Command Handler);
将特定消息重定向到相关模块进行处理;
默认情况下,发送到该模块的消息和命令不经过任何身份验证过程;
FUM 模块:固件更新
FUM 模块的主要任务是更新 iLO 固件。可以通过三种方式完成此任务:
通过 HP Intelligent Provisioning 管理界面;
使用服务器上安装的主机操作系统并访问PCI-E接口;
通过 iLO Web 界面管理界面远程;
FUM 模块分 5 个步骤执行固件更新操作:
通过主机服务器或 Web 服务器模块接收新固件文件;
新固件文件被发送到 FUM 模块;
FUM 模块检查并验证新固件文件的数字签名;
FUM模块还要求内核验证新固件文件的完整性;
最后,FUM 模块将新固件发送到 SPI 模块以在 SPI 闪存上对其进行编程。
FUM 模块的 iLO 固件更新过程
在此过程中,通过检查固件的数字签名来验证固件的完整性,因此不会在 HP 提供的原始固件的基础上添加或更改模块。重要的一点是,一般情况下,可以降级到较低版本的固件。
SPI 模块:访问闪存
该模块的主要功能是与包含 iLO 固件和服务器 BIOS 固件的 SPI 闪存进行通信。该模块为相关闪存芯片上的固件的读取、擦除和写入提供低级接口。如前所述,部分 iLO 固件更新操作是通过该模块执行的。
ConAppCli 模块:控制台(命令行)服务
该模块负责提供命令行用户界面服务,用于接收服务器管理员的命令。这些命令可以是用户管理、电源管理、查看系统事件等。
SSH 模块:远程命令行
除了 Web 界面之外,iLO 固件还使用 SSH 协议为用户提供加密的shell服务。通过该模块,用户可以通过端口22与固件进行通信并执行一组命令。
Health模块:监控系统组件
该模块的任务是定期检查系统状态,并记录服务器事件。系统状态包括工作温度、风扇转速、电源状态、系统内存状态、网络状态、处理器状态等。
黑匣子模块:黑匣子系统
该模块充当服务器“黑匣子”。 Health 模块每天记录的许多敏感和重要的系统信息和事件,都由该模块压缩和存储。
其他模块
除了前面部分提到的模块之外,iLO 固件还有各种其他模块,每个模块在 UserLand 部分都有一个特定的任务。 SNMP、SNTP 和 SVCSiLO 等模块负责系统和网络管理任务,USB、GPIO 和 I2C 等模块提供对服务器硬件组件的 iLO 控制访问。
本文翻译自:https://threats.amnpardaz.com/en/2021/12/28/implant-arm-ilobleed-a/如若转载,请注明原文地址