羅克韋爾自動化 PLC 上的隱藏代碼
執行摘要
? Team82 和羅克韋爾自動化今天披露了有關羅克韋爾可編程邏輯控制器和工程工作站軟件中兩個漏洞的一些細節。
? CVE-2022-1161 影響 Rockwell 的 Logix 控制器的多個版本,其 CVSS 得分為 10,這是最高的關鍵性。
? CVE-2022-1159 影響其 Studio 5000 Logix Designer 應用程序的多個版本,CVSS 評分為 7.7,嚴重性高。
? 修改后的代碼可以下載到 PLC,而他們工作站的工程師會看到該過程按預期運行,讓人想起 Stuxnet 和 Rogue7 攻擊。
? 羅克韋爾為用戶提供了檢測此類隱藏代碼的工具。
? 敦促用戶升級受影響的產品以利用這些檢測功能。
? CISA 已發布警告用戶有關這些問題嚴重性的建議。
? 羅克韋爾自動化也在此處和此處發布了公告。
介紹
可編程邏輯控制器 (PLC) 的成功隱身攻擊是最罕見、最耗時且投資大的攻擊之一。Stuxnet 的作者通過弄清楚如何隱藏在 PLC 上運行的惡意字節碼來建立破解 PLC 的劇本,而對控制器進行編程的工程師只能看到他們的工程工作站上的正常情況。如果沒有高級取證實用程序,就無法發現此類惡意代碼的執行。
從概念上講,利用與之前的研究相同:將字節碼和文本代碼解耦,修改一個,而不是另一個。例如,在對西門子 SIMATIC S7 PLC 的Rogue7攻擊中,研究人員能夠在將惡意字節碼傳輸到 PLC 的同時修改文本代碼。
Team82 決定在羅克韋爾自動化 PLC 平臺上測試這些 Stuxnet 類型的攻擊。我們的研究發現了兩個漏洞,這些漏洞將公司的 Logix 控制器和用于工程工作站的 Logix Designer 應用程序暴露給攻擊者,這些攻擊者可以偷偷修改自動化流程。
可編程邏輯和預定義變量驅動這些過程,對其中任何一個的更改都會改變 PLC 的正常運行及其管理的過程。具有修改 PLC 邏輯能力的攻擊者可能會對工廠造成物理損壞,從而影響制造裝配線的安全性、機器人設備的可靠性,或者在更戲劇性的例子中,正如我們在 Stuxnet 中看到的那樣,攻擊者可能會損壞離心機核設施中的鈾濃縮核心。
羅克韋爾自動化今天披露了這些漏洞,并開發了一種檢測二進制和文本代碼差異的工具。通過使用此工具,可以檢測隱藏代碼。
修改 PLC 邏輯的兩個新漏洞
工程工作站的核心是一個完全工作的集成開發環境 (IDE) 和 PLC 程序的編譯器。從高層的角度來看,在 PLC 上執行邏輯的過程包括四個主要步驟,如下所示:
1. 開發:工程師將使用工程工作站的 IDE 功能以一種主要的自動化編程語言開發新的 PLC 程序,例如梯形圖 (LD)、結構化文本 (ST)、功能塊圖 (FBD) 和其他。此代碼稱為文本代碼。
2. 編譯:一旦開發完成,工程師將希望將新邏輯傳輸到控制器。為此,工程工作站將根據目標 PLC 的固件和架構將程序編譯為與 PLC 兼容的字節碼。該代碼稱為二進制代碼。
3. 傳輸:接下來,工程工作站將通過其專有協議與 PLC 通信并傳輸編譯的字節碼。此過程通常稱為下載過程、下載邏輯或下載配置。下載術語是指PLC在這個過程中的觀點(PLC下載代碼)。
4. 執行:一旦字節碼成功傳送到 PLC,邏輯將被執行。
在我們對羅克韋爾自動化的工程工作站 Studio 5000 Logix Designer 及其下載邏輯過程機制的研究中,我們發現了兩個漏洞,這些漏洞使我們能夠將文本代碼與二進制代碼解耦并將其傳輸到 PLC,同時修改一個而不是修改其他。
第一個漏洞CVE-2022-1161(CVSS v3.1 基本分數:10.0/CRITICAL)被發現在 ControlLogix、CompactLogix 和 GuardLogix 控制系統上運行的受影響的 PLC 固件中。它允許攻擊者將用戶可讀的程序代碼寫入與執行的編譯代碼不同的內存位置,從而允許攻擊者修改一個而不是另一個。為此,攻擊者可以使用Team82 先前披露的 Logix 控制器中的硬編碼密鑰漏洞與羅克韋爾自動化 PLC 通信并修改用戶程序,而無需使用 Studio 5000 Logix Designer 軟件。

攻擊者可能會在 PLC 中隱藏代碼,這些代碼將在不被發現的情況下運行。
第二個漏洞CVE-2022-1159在 Studio 5000 Logix Designer 應用程序中發現,該應用程序在工作站上編譯用戶程序。此編譯過程準備 Logix Designer 應用程序用戶程序以下載到 Logix 控制器。要成功利用此漏洞,攻擊者必須首先獲得對運行 Studio 5000 Logix Designer 的工作站的管理員訪問權限。然后攻擊者可以攔截編譯過程并將代碼注入用戶程序。用戶可能不知道已經發生了這種修改。

劫持修改后的二進制代碼與工程師認為在 PLC 上執行的原始代碼的示例。
利用這兩個漏洞的最終結果是相同的:工程師認為在 PLC 上運行的是良性代碼;與此同時,PLC 上正在執行完全不同的潛在惡意代碼。
對邏輯流程或預定義局部變量的更改將改變 PLC 的正常操作,并可能導致新命令被發送到物理設備,例如由 PLC 控制的皮帶和閥門。
可編程邏輯驅動自動化過程,并且該邏輯對來自物理連接的變量輸入和特定于過程的預定義局部變量執行操作。邏輯和變量在不同的 PLC 之間有所不同,并且每個 PLC 在流程中都有特定的作用。
例如,在我們的概念驗證中,我們修改了二進制代碼以悄悄地將某些自動化流程變量(也稱為標簽)修改為不同的值。在現實生活中,這些更改的值可能會對自動化過程造成巨大損害(例如,控制引擎速度的標簽)。

我們的 PoC 表明,雖然工程工作站顯示良性代碼,但在 PLC 上運行的實際代碼是不同的,并且會悄悄地改變一些標簽的值。
檢測和緩解
Team82 與羅克韋爾自動化工程師密切合作,了解這些攻擊的根本原因。因此,羅克韋爾工程師提出了復雜的解決方案,通過分析和比較 PLC 上運行的文本代碼和二進制代碼來檢測其 PLC 上運行的隱藏代碼。如果檢測到不匹配,該工具將提醒兩者之間的差異,表明隱藏代碼正在 PLC 上運行,如下圖所示。

為了利用這些檢測功能,資產所有者被指示升級到:
? Studio 5000 V34 或更高版本
? Logix 5580、5380、5480、GuardLogix 5580 和 Compact GuardLogix 5380 控制器固件的對應版本
參考鏈接:https://claroty.com/2022/03/31/blog-research-hiding-code-on-rockwell-automation-plcs/