在工業控制系統(ICS)資安領域,建構一個高擬真度的實驗環境是理論研究與實務驗證的基石。本文所闡述的架構,其核心理論基礎在於應用普渡模型(Purdue Model)於虛擬化平台,實現標準化的網路區段化。這種分層設計不僅是業界公認的最佳防禦縱深策略,更能有效隔離關鍵控制流程與外部網路威脅。透過在ESXi環境中模擬各層級的運作,研究人員得以在可控且低成本的條件下,重現複雜的工業網路拓撲。然而,純虛擬環境無法完全反映實體設備的通訊特性與硬體漏洞,因此,整合如Koyo Click PLC等實體控制器,便成為提升實驗環境真實性的關鍵步驟。此虛實整合策略旨在彌合數位模擬與物理現實間的差距,為深入分析工業通訊協定與執行精準的滲透測試提供一個更全面的平台。
ICS網路區段化與通訊驗證:Purdue模型下的實踐
虛擬機器IP位址配置與網路連通性驗證
玄貓強調,在完成ESXi的虛擬交換器和連接埠群組配置後,為每個虛擬機器手動設定IP位址,並驗證其網路連通性,是確保ICS實驗室功能正常的關鍵步驟。
Linux虛擬機器IP位址配置:
對於PLC VM、SCADA VM和Kali Attacker這些基於Linux的虛擬機器,玄貓建議透過其圖形介面或命令列進行手動IP配置:
- 開啟網路設定:在Ubuntu桌面環境中,點擊右上角的網路圖示,選擇「有線設定(Wired Settings)」。
- 編輯網路介面卡:點擊您希望配置的網路介面卡旁邊的齒輪圖示。
- 手動配置IPv4:
- 切換到「IPv4」選項卡。
- 將方法從「自動(DHCP)」更改為「手動(Manual)」。
- 在「位址(Addresses)」部分,輸入以下資訊:
- 位址(Address):根據我們規劃的IP位址表填寫(例如
192.168.1.10給PLC VM)。 - 網路遮罩(Netmask):
255.255.255.0。 - 閘道(Gateway):根據網路區段填寫(例如
192.168.1.1給PLC VM)。 - 點擊「應用(Apply)」儲存設定。
Windows 7虛擬機器IP位址配置:
對於Windows EWS虛擬機器,配置IP位址的步驟如下:
- 開啟網路和共用中心:右鍵點擊任務欄上的網路圖示,選擇「開啟網路和共用中心」。
- 更改介面卡設定:點擊左側導覽欄中的「變更介面卡設定」。
- 編輯區域連線屬性:右鍵點擊「區域連線」,選擇「屬性」。
- 手動配置IPv4:
- 選擇「網際網路通訊協定第4版 (TCP/IPv4)」,點擊「內容」。
- 選擇「使用下列的IP位址」。
- 輸入IP位址:
192.168.3.10。 - 子網路遮罩:
255.255.255.0。 - 預設閘道:
192.168.3.1。 - 點擊「確定」儲存設定。
網路連通性驗證:
配置完所有虛擬機器的IP位址後,玄貓建議使用ping命令來驗證不同層級虛擬機器之間的網路連通性。
- 從
Windows EWS(192.168.3.10)嘗試pingSCADA VM(192.168.2.10)。 - 從
SCADA VM(192.168.2.10)嘗試pingPLC VM(192.168.1.10)。 - 從
Kali Attacker(172.16.0.10)嘗試pingWindows EWS(192.168.3.10)。
如果ping命令成功,則表示網路區段化已按照Purdue模型成功配置,並且各層級之間的通訊已建立。
此圖示:ICS實驗室網路連通性驗證
@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 Hypervisor" as esxi {
rectangle "Level 1 (192.168.1.0/24)" as L1_net {
node "PLC VM (192.168.1.10)" as plc_vm
}
rectangle "Level 2 (192.168.2.0/24)" as L2_net {
node "SCADA VM (192.168.2.10)" as scada_vm
}
rectangle "Level 3 (192.168.3.0/24)" as L3_net {
node "Windows EWS (192.168.3.10)" as win_ews
}
rectangle "Level 5 (172.16.0.0/24)" as L5_net {
node "Kali Attacker (172.16.0.10)" as kali_att
}
}
win_ews --> L3_net : 連接
scada_vm --> L2_net : 連接
plc_vm --> L1_net : 連接
kali_att --> L5_net : 連接
win_ews .right.> scada_vm : ping (驗證 L3-L2 通訊)
scada_vm .right.> plc_vm : ping (驗證 L2-L1 通訊)
kali_att .right.> win_ews : ping (驗證 L5-L3 通訊)
note right of esxi
所有虛擬機器的網路介面卡
已連接到對應的連接埠群組
end note
@enduml看圖說話:
此圖示展示了ICS實驗室中虛擬機器之間的網路連通性驗證過程。在ESXi Hypervisor上,我們為Purdue模型的每個層級創建了獨立的網路區段(Level 1到Level 5),並為每個虛擬機器(PLC VM、SCADA VM、Windows EWS、Kali Attacker)分配了對應IP位址。圖中以虛線箭頭表示了從高層級虛擬機器向低層級虛擬機器發送ping命令的驗證流程,例如從Windows EWS到SCADA VM,從SCADA VM到PLC VM,以及從Kali Attacker到Windows EWS。這些ping測試的成功,證明了我們所配置的網路區段化方案是有效的,並且不同層級之間的通訊路徑已按照預期建立。這為後續的ICS安全測試奠定了堅實的網路基礎。
實體硬體整合的考量:
- Koyo Click PLC:玄貓選擇Koyo Click系列PLC作為實體硬體整合的範例,原因在於其高性價比和免費的工程程式設計軟體。這與許多主流供應商(如Siemens、Rockwell、Schneider、Omron、Mitsubishi等)收取高額授權費形成對比。
- 通用原則:儘管我們以Koyo Click為例,但本章所涵蓋的原理和程序是通用的,可以應用於其他主流自動化公司的產品。讀者可以根據自身情況,選擇其他型號的PLC進行實踐,但需確保可獲取相應的供應商工程程式設計軟體。
- 學習目標:透過實體硬體的整合,我們將深入理解工業技術的程式設計方式、軟體運作細節、資源消耗以及通訊機制。這些知識對於提升滲透測試的成功率至關重要,有助於識別潛在的攻擊入口點。
下一章結構預覽:
- 安裝Click軟體:詳細介紹Koyo Click程式設計軟體的安裝步驟。
- 設定Koyo Click硬體:指導如何配置實體Koyo Click PLC。
- 配置通訊:建立虛擬機器與實體PLC之間的通訊連線。
透過這些步驟,我們將逐步完善ICS安全實驗室,使其不僅具備虛擬環境的靈活性,還能模擬真實世界中虛實整合的工業控制場景,為更深入的ICS安全研究和實踐提供全面的平台。
虛實整合:Koyo Click PLC軟體安裝與檔案傳輸策略
Koyo Click PLC程式設計軟體獲取與安裝準備
玄貓認為,將虛擬實驗室與實體硬體整合,是深入理解ICS安全不可或缺的一步。本節將引導您獲取並準備安裝Koyo Click PLC的程式設計軟體,這將是我們與實體PLC通訊的基礎。
獲取Koyo Click軟體:
- 訪問AutomationDirect網站:前往AutomationDirect的官方網站,找到Koyo Click系列PLC的程式設計軟體下載頁面。玄貓建議直接搜尋
itemcode=CLICK以快速定位。 - 下載軟體:在下載頁面,您會看到一個綠色的「下載(DOWNLOAD)」按鈕。點擊後,系統可能會要求您輸入電子郵件地址以完成驗證。完成驗證後,軟體將開始下載。
檔案傳輸策略:將軟體傳輸至Windows 7虛擬機器
由於Koyo Click程式設計軟體是在Windows環境下運行,我們需要將下載的軟體檔案傳輸到之前搭建的Windows 7工程工作站虛擬機器中。玄貓提供以下幾種檔案傳輸策略,並推薦一種在滲透測試中常用的技巧:
- 共享資料夾:在ESXi中配置虛擬機器的共享資料夾功能。
- 建立第二個網路介面:在Windows 7虛擬機器上添加第二個網路介面卡,並將其連接到一個與主機共用的網路區段,然後透過網路共享傳輸。
- Python 3簡易Web伺服器:玄貓特別推薦使用Python 3內建的簡易Web伺服器來傳輸檔案。這是一個在滲透測試中非常實用且快速的技巧,可以將主機上的檔案快速提供給目標機器下載。
操作步驟:
- 在您的主機(下載了Koyo Click軟體檔案的機器)上,開啟終端機或命令提示字元。
- 導航到軟體檔案所在的目錄。
- 執行以下命令啟動Python 3簡易Web伺服器:
python3 -m http.server 8000
這將在當前目錄啟動一個監聽8000埠的HTTP伺服器。
- 在Windows 7虛擬機器中,開啟瀏覽器。
- 在網址列輸入主機的IP位址和埠號,例如
http://<主機IP位址>:8000。 - 瀏覽器將顯示主機上Web伺服器目錄的列表。
- 點擊Koyo Click軟體檔案(通常是一個壓縮檔或ISO映像檔)進行下載。
- 當Windows 7虛擬機器成功連接並下載檔案時,您會在主機的終端機上看到HTTP 200 OK的成功狀態回應碼。
玄貓強調,熟練掌握這種快速檔案傳輸技巧,對於未來的滲透測試任務將大有裨益。
此圖示:透過Python簡易Web伺服器傳輸檔案
@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
actor "主機 (Host Machine)" as host
actor "Windows 7 VM" as win7_vm
box "主機環境"
participant "終端機/命令提示字元" as host_cli
participant "Python 3 Web 伺服器" as python_server
folder "Koyo Click 軟體目錄" as software_dir
end box
box "Windows 7 VM 環境"
participant "瀏覽器" as browser
folder "下載目錄" as download_dir
end box
host -> host_cli : 啟動 Python Web 伺服器
host_cli -> python_server : python3 -m http.server 8000
python_server --> software_dir : 服務軟體檔案
win7_vm -> browser : 開啟瀏覽器
browser -> python_server : 訪問 http://<主機IP>:8000
python_server --> browser : 返回目錄列表 (HTTP 200 OK)
browser -> software_dir : 選擇 Koyo Click 軟體檔案
software_dir --> download_dir : 下載軟體檔案
note right of python_server
在滲透測試中常用的快速檔案傳輸技巧
end note
@enduml看圖說話:
此圖示展示了如何利用Python 3簡易Web伺服器,將Koyo Click程式設計軟體從主機傳輸到Windows 7虛擬機器。主機上的使用者在終端機中啟動了一個Python 3 Web伺服器,使其能夠服務Koyo Click軟體目錄中的檔案。隨後,在Windows 7虛擬機器中,使用者透過瀏覽器訪問主機的IP位址和埠號,從而能夠瀏覽並下載Web伺服器提供的檔案。當檔案成功下載時,主機上的Python伺服器會顯示HTTP 200 OK的成功回應碼。這種方法不僅高效,而且在資安領域的滲透測試中,是一種常見且實用的檔案傳輸技巧,值得學習和掌握。
縱觀此ICS安全實驗室的建構流程,從嚴謹的Purdue模型虛擬化,到準備銜接實體硬體,其核心價值不僅在於技術步驟的實現。它真正挑戰的是資安專家的思維框架——從抽象的網路區段化理論,轉向具體、可觸及的硬體互動層面。傳統的虛擬環境連通性驗證(如ping測試)僅是基礎,而引入如Python簡易伺服器這類輕量、高效的滲透測試技巧,則標示著從「學術建構」邁向「實戰思維」的關鍵一步。這種IT攻防技術與OT場景的融合,正是提煉深度洞察的熔爐。
展望未來,這種虛實整合、軟硬兼備的混合式實驗環境,將不再是少數專家的選擇,而是成為評估ICS安全能力成熟度的標準配備。能夠在此類環境中流暢操作、快速部署工具的專家,將在漏洞挖掘與防禦策略驗證上佔據絕對優勢。
因此,玄貓認為,精通從理論模型建構到硬體層級互動的全鏈路實踐,不僅是完成一個實驗室,更是鍛造下一代頂尖ICS安全專家的必經之路。