返回文章列表

Purdue模型於ICS實驗室的網路區段化實踐

本文闡述如何運用 Purdue 模型建構一個虛擬化的工業控制系統(ICS)安全實驗室。文章核心在於透過 ESXi 虛擬化平台,實踐網路區段化原則。內容詳述如何建立獨立的虛擬交換器與連接埠群組,以對應 Purdue 模型的不同層級,並將 PLC、SCADA、工程工作站及攻擊主機等虛擬機器精確映射至各層。最後,提出具體的 IP 位址規劃策略,完成一個分層隔離、結構清晰的模擬環境,為後續的 ICS 安全攻防演練與漏洞分析奠定基礎。

網路安全 工業控制系統

在工業控制系統(ICS)與營運技術(OT)的資安防護領域,網路區段化是實現縱深防禦的基石。傳統上,IT 與 OT 網路的融合帶來了效率,卻也擴大了攻擊面,使得來自企業網路的威脅能輕易橫向移動至生產控制層。Purdue 模型為此提供了一個標準化的分層框架,旨在透過嚴格的網路隔離與存取控制,限縮威脅擴散的路徑。本篇文章將此理論模型應用於虛擬化環境,展示如何在 ESXi 平台上模擬一個符合 Purdue 架構的 ICS 網路。此舉不僅能重現真實工業場域的網路拓撲,更能建立一個可控且安全的沙箱環境,用以研究、測試和驗證針對不同層級的攻擊手法與防禦策略,從而深化對 ICS 資安實務的理解。

軟體套件更新與安裝:Kali Linux的準備

與Ubuntu虛擬機器類似,部署完成的Kali Linux也需要進行系統更新和安裝必要的套件。

Kali Linux軟體套件安裝

  1. 系統更新與升級: 登入Kali Linux後,執行以下命令:
sudo apt update
sudo apt upgrade

這將確保您的Kali Linux系統擁有最新的安全補丁和軟體版本。

  1. 安裝類似的工業協議相關套件: 雖然Kali Linux已預裝了大量工具,但為了與我們的ICS實驗室更好地整合,並確保所有必要的工業協議相關工具都已到位,玄貓建議安裝與Ubuntu偽PLC/SCADA類似的Python套件:
sudo apt install git
sudo apt install vsftpd
sudo apt install telnetd
sudo apt install openssh-server
sudo apt install php7.4-cli # 如果需要模擬Web介面
sudo apt install python3-pip
pip3 install twisted
pip3 install testresources
pip3 install pytest
pip3 install cpppo
pip3 install pymodbus

同樣,您也可以克隆並編譯mbtget工具。

透過這些步驟,我們已經成功部署了所有核心虛擬機器,並為其安裝了初步的軟體環境。接下來的重點將是網路區段的精細配置,以實現不同虛擬機器之間的隔離和通訊控制,從而完整模擬Purdue模型下的工業控制網路架構。這將是我們ICS安全實驗室的最終成型階段。

ICS網路區段化:Purdue模型實踐與IP位址規劃

Purdue模型與網路分層:

Purdue模型提供了一個標準化的框架,用於將工業控制網路劃分為不同的安全層級。玄貓將其應用於我們的實驗室環境:

  • 第5層:企業層(Enterprise):通常是企業IT網路,與網際網路連接。在我們的實驗室中,Kali Linux攻擊主機將模擬此層級,作為外部攻擊者或安全分析師的起點。
  • 第4層:站點業務系統層(Site Business Systems):包含生產管理、排程等系統。此層級在本次實驗室中暫不直接模擬,但可視為與企業層緊密相連。
  • 第3層:操作與控制層(Operations and Control):包含HMI、工程工作站、資料歷史庫等。Windows 7工程工作站將模擬此層級,用於組態和監控下層設備。
  • 第2層:本地化控制層(Localized Control):包含SCADA伺服器、區域控制器等。SCADA虛擬機器將模擬此層級,負責監控和控制第1層的設備。
  • 第1層:過程控制層(Process Control):包含PLC、RTU等現場控制器。PLC虛擬機器將模擬此層級,直接與工業過程互動。
  • 第0層:I/O層(I/O):感測器和執行器。此層級在虛擬環境中通常不直接模擬,而是由PLC虛擬機器負責其邏輯。

此圖示:ICS實驗室的Purdue模型映射

@startuml
!define DISABLE_LINK
!define PLANTUML_FORMAT svg
!theme _none_

skinparam dpi auto
skinparam shadowing false
skinparam linetype ortho
skinparam roundcorner 5
skinparam defaultFontName "Microsoft JhengHei UI"
skinparam defaultFontSize 16
skinparam minClassWidth 100

rectangle "Purdue 模型 (Purdue Model)" as purdue {
rectangle "Level 5: 企業層 (Enterprise)" as L5
rectangle "Level 4: 站點業務系統層 (Site Business Systems)" as L4
rectangle "Level 3: 操作與控制層 (Operations and Control)" as L3
rectangle "Level 2: 本地化控制層 (Localized Control)" as L2
rectangle "Level 1: 過程控制層 (Process Control)" as L1
rectangle "Level 0: I/O 層 (I/O)" as L0
}

rectangle "ICS 實驗室虛擬機器 (ICS Lab VMs)" as lab_vms {
component "Kali Linux 攻擊主機 (Kali Attacker)" as kali
component "Windows 7 工程工作站 (Windows EWS)" as win_ews
component "SCADA VM" as scada
component "PLC VM" as plc
}

L5 <--> kali : 模擬
L3 <--> win_ews : 模擬
L2 <--> scada : 模擬
L1 <--> plc : 模擬

L5 -[hidden]d-> L4
L4 -[hidden]d-> L3
L3 -[hidden]d-> L2
L2 -[hidden]d-> L1
L1 -[hidden]d-> L0

note right of L5
外部網路/攻擊者
end note
note right of L3
HMI/組態軟體
end note
note right of L2
監控伺服器
end note
note right of L1
現場控制器
end note

@enduml

看圖說話:

此圖示展示了ICS實驗室中各個虛擬機器如何映射到Purdue模型的不同層級。Kali Linux攻擊主機被安排在第5層企業層,模擬來自外部的攻擊者或進行高層次的網路分析。Windows 7工程工作站則代表第3層操作與控制層,用於運行HMI和組態軟體。SCADA虛擬機器位於第2層本地化控制層,負責集中監控和控制。而PLC虛擬機器則處於最底層的第1層過程控制層,直接模擬現場控制器。這種映射關係有助於我們在虛擬環境中,按照Purdue模型的安全原則,設計和實施網路區段化,從而更好地理解和測試ICS網路的安全防護。

ESXi網路配置:虛擬交換器與連接埠群組

為了實現Purdue模型的網路區段化,我們需要在ESXi中創建多個虛擬交換器(vSwitch)連接埠群組(Port Groups)

  1. 登入ESXi並導航至網路設定
  • 登入ESXi網頁管理介面。
  • 在左側導覽列中選擇「網路(Networking)」。
  1. 創建新的虛擬交換器
  • 切換到「虛擬交換器(Virtual switches)」選項卡。
  • 點擊「新增標準虛擬交換器(Add standard virtual switch)」。
  • 為每個Purdue層級創建一個獨立的虛擬交換器,例如vSwitch-Level1vSwitch-Level2等。
  • 暫時不需要將實體網路介面卡(vmnic)分配給這些新的虛擬交換器,因為我們希望這些層級在內部是隔離的。
  1. 配置連接埠群組
  • 切換到「連接埠群組(Port groups)」選項卡。
  • 點擊「新增連接埠群組(Add port group)」。
  • 為每個Purdue層級創建一個連接埠群組,並將其關聯到對應的虛擬交換器:
  • 名稱Level 1虛擬交換器vSwitch-Level1
  • 名稱Level 2虛擬交換器vSwitch-Level2
  • 名稱Level 3虛擬交換器vSwitch-Level3
  • 名稱Level 5虛擬交換器vSwitch-Level5
  • 對於連接埠安全性,玄貓建議暫時繼承虛擬交換器的預設設定。

此圖示:ESXi網路配置概覽

@startuml
!define DISABLE_LINK
!define PLANTUML_FORMAT svg
!theme _none_

skinparam dpi auto
skinparam shadowing false
skinparam linetype ortho
skinparam roundcorner 5
skinparam defaultFontName "Microsoft JhengHei UI"
skinparam defaultFontSize 16
skinparam minClassWidth 100

rectangle "ESXi 網路設定 (ESXi Networking Configuration)" as esxi_net {
rectangle "虛擬交換器 (Virtual Switches)" as vswitches {
component "vSwitch-Level1" as vsw1
component "vSwitch-Level2" as vsw2
component "vSwitch-Level3" as vsw3
component "vSwitch-Level5" as vsw5
}
rectangle "連接埠群組 (Port Groups)" as port_groups {
component "PortGroup-Level1" as pg1
component "PortGroup-Level2" as pg2
component "PortGroup-Level3" as pg3
component "PortGroup-Level5" as pg5
}
}

vsw1 -- pg1 : 關聯
vsw2 -- pg2 : 關聯
vsw3 -- pg3 : 關聯
vsw5 -- pg5 : 關聯

note right of vswitches
每個Purdue層級一個獨立vSwitch
end note
note right of port_groups
每個vSwitch一個Port Group
end note

@enduml

看圖說話:

此圖示展示了ESXi網路配置中虛擬交換器與連接埠群組的關係。為了實現Purdue模型的網路區段化,我們創建了多個虛擬交換器,每個交換器對應一個Purdue層級(例如vSwitch-Level1vSwitch-Level5)。然後,為每個虛擬交換器創建一個連接埠群組(例如PortGroup-Level1PortGroup-Level5),並將其與對應的虛擬交換器關聯起來。這樣,每個連接埠群組就代表了一個獨立的網路區段,虛擬機器可以被分配到這些區段中,實現網路隔離。這種分層設計是構建安全ICS實驗室的基礎,它允許我們精確控制不同層級之間的通訊,並模擬真實世界中的網路安全挑戰。

虛擬機器網路介面卡配置與IP位址規劃

在創建了虛擬交換器和連接埠群組後,我們需要將虛擬機器的網路介面卡(NIC)連接到對應的連接埠群組,並手動配置IP位址。

虛擬機器網路介面卡配置:

  1. 編輯虛擬機器設定
  • 在ESXi左側導覽列中選擇「虛擬機器(Virtual Machines)」。
  • 選擇PLC VM,點擊「編輯(Edit)」按鈕。
  • 在硬體設定中,找到「網路介面卡(Network Adapter)」。
  • 將其從預設的VM Network更改為Level 1連接埠群組。
  • 對其他虛擬機器執行類似操作:
  • SCADA VM連接到Level 2連接埠群組。
  • Windows EWS連接到Level 3連接埠群組。
  • Kali Attacker連接到Level 5連接埠群組。
  • 點擊「儲存(Save)」應用更改。

IP位址規劃策略:

玄貓建議為每個網路區段分配一個專用的IP位址範圍,以確保網路隔離和易於管理。

網路區段虛擬機器IP位址範圍虛擬機器IP位址
Level 1PLC VM192.168.1.0/24192.168.1.10
Level 2SCADA VM192.168.2.0/24192.168.2.10
Level 3Windows EWS192.168.3.0/24192.168.3.10
Level 5Kali Attacker172.16.0.0/24172.16.0.10

手動配置虛擬機器IP位址:

PLC VM為例,手動配置IP位址:

  1. 開啟虛擬機器控制台:在ESXi管理介面中,選擇PLC VM,點擊「控制台(Console)」按鈕。
  2. 登入Ubuntu:使用您在安裝時設定的使用者帳戶登入。
  3. 編輯網路設定
  • 對於Ubuntu Desktop版本,可以透過圖形介面進行配置:點擊右上角的網路圖示,選擇「有線設定(Wired Settings)」。
  • 點擊連接埠旁邊的齒輪圖示,進入詳細設定。
  • 切換到「IPv4」選項卡,選擇「手動(Manual)」。
  • 輸入IP位址:192.168.1.10
  • 網路遮罩:255.255.255.0
  • 閘道:192.168.1.1 (這將是該網路區段的虛擬路由器或防火牆的IP,我們稍後會配置)
  • 點擊「應用(Apply)」儲存設定。
  1. 驗證IP位址:在終端機中執行ip addr命令,確認IP位址已正確配置。

重複上述步驟,為SCADA VMWindows EWSKali Attacker配置其各自的IP位址。

透過這些精細的網路配置,我們已經在ESXi Hypervisor上成功構建了一個基於Purdue模型的ICS安全實驗室。每個虛擬機器都位於其專屬的網路區段中,並被分配了唯一的IP位址。這為我們接下來進行的各種ICS安全測試、漏洞分析和攻擊模擬提供了真實且受控的環境。

結論

檢視此ICS安全實驗室從概念到實踐的完整建構過程,其核心成就並非僅止於虛擬機器的部署與軟體安裝,而是將抽象的Purdue模型成功轉化為具體的、可操作的虛擬網路架構。這項工作的精髓,在於透過ESXi的虛擬交換器與連接埠群組,將理論上的安全層級(Levels 1-5)精準對應到隔離的網路區段,從而奠定了高擬真度攻防演練的基礎。

深入分析此過程可以發現,真正的挑戰與價值並非技術操作的複製,而在於安全架構思維的內化。許多團隊在建構類似環境時,常陷入「為隔離而隔離」的誤區,卻忽略了每個區段的IP規劃、預設通訊規則,以及未來模擬跨區攻擊路徑的策略性佈局。因此,能否將此實驗室視為一個動態的、可演進的「安全沙盤」,而非靜態的網路拓撲,是衡量其建構成效的關鍵指標。

展望未來,這個精心區段化的實驗室不僅是一個測試平台,它更是一個組織OT資安能力的「孵化器」。它將成為攻擊路徑模擬、防禦策略驗證、事件應變程序演練,乃至於培育新一代ICS資安人才的核心基石。對於追求卓越的資安專家與管理者而言,其最終價值不在於這個實驗環境資產本身,而在於建構過程中所淬鍊出的系統化思維與安全設計能力,這才是應對未來工業物聯網複雜威脅的關鍵競爭力。