AI 黑客 - 黑客如何在網路攻擊中使用人工智慧

立即閱讀
我們利用人工智慧進行網站翻譯,雖然我們力求準確性,但它們可能並不總是 100% 精確。感謝您的理解。

保護 OT 系統免受遠端攻擊:如何MetaDefender OT Security™ 保護 Micrologix™ 1400 控制器免受 CVE-2021-22659 的影響

by OPSWAT 發布
分享此文章
OPSWAT 研究員計畫參與者

保護工業控制系統和 OT 環境免受遠端攻擊比以往更加重要,尤其是CVE-2017-14469和現在的 CVE-2021-22659 等漏洞都是針對 Rockwell Automation 廣泛使用的 Micrologix 1400 控制器。來自OPSWAT 研究員計畫的學生在受控環境中測試此漏洞,突顯安全的必要性。 

在本文章中,我們探討了學生如何展示攻擊者如何利用該漏洞導致系統崩潰,以及如何利用缺乏適當的輸入驗證來破壞 PLC 操作。 

什麼是 PLC?羅克韋爾自動化 Micrologix 1400 解說

PLC (可程式邏輯控制器) 是一種工業電腦,設計用來控制機械和其他工業作業,使流程自動化。它可在惡劣的環境下工作,並根據感測器輸入進行編程,以執行特定的任務。Rockwell Automation 的 MicroLogix 1400 控制器是一種精巧的模組化 PLC,常用於中小型應用。它以成本效益和彈性著稱,支援各種通訊協定,並提供數位和類比 I/O 選項,以便與設備連接。

用於工業控制系統監控的OPSWAT 裝置的圖像

編程通常是使用 Rockwell Automation 的軟體透過階梯邏輯來完成,讓使用者可以建立控制序列。MicroLogix 1400 用途廣泛,適用於機器控制和製程自動化等任務。其模組化功能可讓使用者根據特定的應用需求來擴充和自訂系統。

CVE-2021-22659 簡介

2021 年 1 月,羅克韋爾自動化收到來自印度 Veermata Jijabai 技術學院 (VJTI) COE-CNDS 的 Parul Sindhwad 和 Faruk Kazi 博士有關 MicroLogix™ 1400 控制器漏洞的報告。他們在版本 21.6 及更早的版本中發現安全漏洞,遠端未認證的攻擊者可以傳送特製的 Modbus 封包,讓攻擊者擷取或修改暫存器中的隨機值。如果成功利用,可能會導致緩衝記憶體滿溢,造成阻斷服務的情況。FAULT LED 會閃紅燈,通訊可能會中斷。若要從拒絕服務狀態復原,必須由使用者清除故障。 

NVD 評估此安全漏洞為高度嚴重。 

CVSS 3.x 指標顯示 NIST NVD 的嚴重性高達 8.6 分

攻擊階段

說明 PLC MicroLogix 網路攻擊各階段的圖表

未經驗證的遠端攻擊者,若能透過網路存取有漏洞的 MicroLogix 1400 PLC,就能傳送特製的封包來修改暫存器中的值。這可能會造成裝置阻斷服務,導致系統損毀及停機。此類事件可能會嚴重擾亂組織的製造作業及其他業務活動。

Modbus 通訊協定

Modbus 通訊協定於 1979 年由 Modicon 開發,是專為建立智慧型設備之間的客戶端伺服器通訊而設計的訊息結構。它最初是為 Modicon 的 PLC 所設計,後來成為工業電子設備間通訊的標準通訊協定。 

有適用於乙太網路 (Modbus TCP) 和序列線 (Modbus RTU 和 Modbus ASCII) 的 Modbus 通訊協定。Modbus RTU(Remote Terminal Unit) 直接透過序列通訊以二進位形式傳輸資料,而Modbus TCP(Transmission Control Protocol) 則將 Modbus 通訊協定資料嵌入 TCP 封包,透過 TCP/IP 網路傳輸。 

Modbus 堆疊與通訊協定 OSI 層的比較表

Modbus 訊息結構

Modbus 是一種請求-回應通訊協定,其中用戶端傳送請求至 Modbus 裝置,而裝置隨後會提供回應。

顯示用戶端與伺服器之間 Modbus 交易通訊的圖表

從主站傳送至副站的 Modbus 訊息包含副站的位址、「指令」(例如「讀取暫存器」或「寫入暫存器」)、資料和檢查總和(LRC 或 CRC)。

包含標頭和功能代碼的 Modbus RTU 訊息結構

讀取或修改資料時,資料位址會用在 Modbus 查詢訊息中。Modbus 定義了四種資料類型:線圈、輸入狀態、輸入暫存器和保持暫存器。其中兩個儲存開關 (1 位元) 值,稱為線圈和離散輸入;另兩個儲存數值為 16 位元字元,稱為暫存器。每一個都是唯讀或讀/寫。

資料類型存取說明
線圈讀寫單位元輸出。
離散輸入唯讀單位元輸入。
輸入暫存器唯讀16 位元輸入暫存器。
暫存器讀寫16 位元輸出暫存器。

Modbus 功能代碼分為三類:

  • 公共功能代碼 - 從 1 到 127,使用者定義的代碼除外。 
  • 使用者定義功能代碼 - 分為 65 至 72 和 100 至 110 兩個範圍。 
  • 保留功能代碼 - 由某些公司用於傳統產品,不提供給公眾使用。
功能類型功能名稱功能代碼
資料存取位元存取物理離散輸入讀取離散輸入2
內部位元或物理線圈

讀取線圈

寫入單線圈

寫入多個線圈

1

5

15

16 位元存取物理輸入暫存器讀取輸入暫存器4
內部暫存器或實體輸出暫存器

讀取多個暫存器

寫入單個暫存器

寫入多個暫存器

讀/寫多個暫存器

遮罩寫入暫存器

讀取 FIFO 佇列

3

6

16

23

22

24

檔案記錄存取

讀取檔案記錄

寫入檔案記錄

20

21

診斷

讀取異常狀態

診斷

取得通訊事件計數器 

取得通訊事件日誌 

報告從屬 ID 

讀取裝置識別 

7

8

11

12

17

43

其他封裝介面傳輸43
功能類型:資料存取
子類型:位存取
類別:物理離散輸入
功能名稱:讀取離散輸入
功能代碼:2
功能類型:資料存取
子類型:位存取
類別:內部位元或物理線圈
功能名稱:讀取線圈
功能代碼:1
功能類型:資料存取
子類型:位存取
類別:內部位元或物理線圈
功能名稱:寫入單一線圈
功能代碼:5
功能類型:資料存取
子類型:位存取
類別:內部位元或物理線圈
功能名稱:寫入多個線圈
功能代碼:15
功能類型:資料存取
子類型:16 位元存取
類別:物理輸入暫存器
函式名稱:讀取輸入暫存器
函式代碼:4
功能類型:資料存取
子類型:16 位元存取
類別:內部暫存器或實體輸出暫存器
函式名稱:讀取多重暫存器
函式代碼3
功能類型:資料存取
子類型:16 位元存取
類別:內部暫存器或實體輸出暫存器
功能名稱:寫入單個保持暫存器
功能代碼:6
功能類型:資料存取
子類型:16 位元存取
類別:內部暫存器或實體輸出暫存器
功能名稱:寫入多重暫存器
功能代號:16
功能類型:資料存取
子類型:16 位元存取
類別:內部暫存器或實體輸出暫存器
功能名稱:讀/寫多重暫存器
函式代碼23
功能類型:資料存取
子類型:16 位元存取
類別:內部暫存器或實體輸出暫存器
功能名稱:遮罩寫入暫存器
功能代碼:22
功能類型:資料存取
子類型:16 位元存取
類別:內部暫存器或實體輸出暫存器
功能名稱:讀取 FIFO 佇列
函式代碼:24
功能類型:資料存取
子類型:檔案記錄存取
功能名稱:讀取檔案記錄
函式代碼:20
功能類型:資料存取
子類型:檔案記錄存取
功能名稱:寫入檔案記錄
功能代碼:21
功能類型:診斷
功能名稱:讀取異常狀態
函式代碼:7
功能類型:功能類型診斷
功能名稱:診斷
功能代碼:8
函式類型:
功能名稱:Get Com Event Counter
功能代碼:11
功能類型:
功能名稱:Get Com Event Log
功能代碼:12
功能類型:
功能名稱:Report Slave ID
功能代碼:17
功能類型:診斷
功能名稱:讀取裝置識別碼
功能代碼:43
函式類型:其他
功能名稱:封裝介面傳輸
功能代碼:43

開發

漏洞分析

透過分析,我們的OPSWAT 研究員發現,在 Modbus TCP 通訊期間,協定缺乏對傳輸封包的驗證和加密。此外,MicroLogix 1400 PLC 的輸入驗證並沒有正確執行。因此,遠端攻擊者可以透過封包嗅探分析 Modbus TCP 封包,並透過 Modbus TCP 通訊協定在未認證的情況下傳送任何要求至 PLC。由於 MicroLogix 1400 PLC 裝置缺乏輸入驗證,已驗證的遠端攻擊者可以傳送大量具有隨機值的封包,可能導致 PLC 當機。

暫存器覆寫

最初,我們嘗試擷取用於讀取或寫入 PLC 上暫存器的 Modbus TCP 封包。為了達成這個目標,我們檢查了一個名為 Modbus Poll 的應用程式所產生的封包,該應用程式有助於讀取和寫入 MicroLogix 1400 PLC 上的暫存器。

顯示用於寫入單一暫存器的 Modbus Poll 工具介面的螢幕截圖

透過使用 Wireshark 擷取網路介面的所有封包,我們可以識別出寫入單一暫存器的 Modbus TCP 封包:

封包擷取顯示一個 Modbus 交易,包含寫入單一暫存器的功能代碼
Modbus TCP 負載的詳細明細,包括交易和通訊協定識別碼

根據擷取封包的結構,我們開發了一個簡單的 Python 腳本來傳送 TCP 封包,要求寫入目標 PLC 上的暫存器。在此情境中,PLC 的 IP 位址為192.168.93.89

啟動 Modbus TCP 連線並傳送有效負載的 Python 程式碼範例

PLC 的暫存器在收到我們的惡意未驗證封包後被變更。 

封包擷取顯示具有寫入多重暫存器功能碼的 Modbus/TCP 通訊協定
階梯邏輯圖的截圖,包含 ADD 功能塊,用於新增來源值

在 Micro Logix 1400 中,大部分數學指令使用三個參數:來源 A、來源 B 和目的地

來源 A 和來源 B 的值可以來自名為 N13:3 和 N13:4 的兩個 16 位元暫存器。此外,這些 16 位元暫存器(例如 N13:3 和 N13:4)中的值被限制在 -32,768 到 +32,767 的範圍內。如果 N13:3 和 N13:4 的值很大,匹配指令的結果可能會超過資料類型的最大範圍,可能會導致 PLC 當機。因此,要誘發 PLC 當機,就必須將大隨機值寫入所有暫存器,包括 N13:3 和 N13:4。為了達到這個目的,我們修改了 Python 腳本如下: 

Python 腳本顯示如何建立 Modbus TCP 有效負載以寫入多個暫存器

模擬攻擊

為了模擬真實世界中的攻擊,我們的OPSWAT 畢業研究員嘗試引發位於OPSWAT CIP 實驗室的 MicroLogix 1400 PLC 當機,假設攻擊者和 PLC 位於同一個網路,並且能夠彼此通訊。 

在OPSWAT 實驗室的 MicroLogix 1400 PLC 的正常操作狀態下,當 PLC 處於 REMOTE RUN 模式時,所有暫存器的值都是有效的,並落在其資料類型的指定範圍內,表示使用者程式運作正常。 

RSLogix 500 資料檔案的截圖,顯示十進位格式的 N13 資料值

執行我們的 Python 腳本後,會有許多 Modbus TCP 封包傳送至 PLC,要求在未認證的情況下,將大量隨機值寫入所有暫存器:

封包擷取顯示重複的 Modbus TCP 寫入多重暫存器請求

接收到這些惡意封包請求後,包括 N13:3 和 N13:4 在內的所有暫存器的值都會被設定為 16,990。N13:3 和 N13:4 暫存器的 ADD 操作結果超出 16 位元暫存器的有效範圍。此問題會造成整數溢出,導致故障並中斷 PLC 的運作,如 FAULTED 狀態所示。

RSLogix 500 顯示故障狀況和 N13 位址的資料值

我們的OPSWAT 研究員已成功利用 CVE-2021-22659 令 MicroLogix 1400 PLC 崩潰。

修復

PLC 漏洞儀表板截圖,顯示 CVE 詳情和 Rockwell Automation MicroLogix 的重要漏洞

面對 CVE-2021-22659 之類的漏洞,全面的修復對於保護 OT 和網路物理系統至關重要。以下是一些可以用來防止攻擊擴散的關鍵策略:

  1. 偵測已知的 CVE:定期掃描網路以偵測 CVE-2021-22659 等弱點。
  2. 監控異常行為:標記與 Micrologix 1400 PLC 通訊頻率的異常增加,這可能暗示未經授權資料傳輸的持續攻擊。
  3. 識別新的裝置連接:當有新的裝置連線到 PLC 時,系統應該偵測到。 
  4. 網路分割:隔離受影響的裝置有助於防止攻擊的橫向擴散,從而將影響降到最低。

OPSWAT的MetaDefender OT Security 可偵測 CVE、持續監控網路異常行為,並識別未經授權的連線,以滿足這些需求。它使用 AI 學習正常流量模式、建立基線行為,並實施政策以警告異常。這樣就能對潛在威脅立即做出明智的回應。 

若發生利用 CVE-2021-22659 的攻擊,MetaDefender OT Security 會與MetaDefender Industrial Firewall 整合,以根據設定的規則封鎖可疑的通訊。防火牆使用 AI 來學習規律的流量模式,並執行政策以防止未經授權的連線。 

透過結合這些偵測、警示和網路分割功能,MetaDefender OT Security 成為工業環境的理想防禦機制,大幅降低作業技術環境中網路威脅的風險和影響。

探索OPSWAT的深度防禦網路安全平台如何強化和成熟您的勢態。立即與專家聯絡,免費試用。

隨時瞭解OPSWAT 的最新資訊!

立即註冊,即可收到公司的最新消息、 故事、活動資訊等。