新型惡意軟件iLOBleed Rootkit首次針對惠普iLO固件發起攻擊(上)
近日研究人員首次發現 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 控制訪問。