建構工業控制系統(ICS)安全實驗室,整合虛擬化平台與實體設備是核心挑戰。本文深入探討此整合過程的技術細節,從 ESXi 虛擬網路層面著手,說明如何配置虛擬交換器以橋接實體網路,確保虛擬監控主機能與實體可程式化邏輯控制器(PLC)建立穩定通訊。此網路連通性是後續 SCADA 系統操作與安全分析的基礎。文章進一步延伸至 PLC 程式設計實務,介紹 IEC 61131-3 標準,並以梯形圖為例示範專案建立流程。透過此連貫操作,我們將網路拓撲理論轉化為具體實驗能力,為深入研究 ICS 運作與防禦機制鋪路。

ESXi虛擬交換器與實體PLC連接:ICS實驗室網路拓撲的完善

ESXi虛擬交換器與實體網路的連接

玄貓提醒,在Koyo Click PLC的IP位址已經更新,但Windows 7虛擬機器因IP位址不匹配而無法連接時,我們需要回顧ESXi的網路拓撲。目前,我們虛擬網路中的Level 1(虛擬PLC所在的網路區段)尚未與任何實體網路介面卡連接,這導致虛擬環境無法與實體PLC通訊。

檢視vSwitch拓撲:

  • 在ESXi介面中,檢視vSwitch1(承載Level 1網路區段的虛擬交換器)的拓撲。您會發現它目前沒有任何實體上行鏈路(Uplink)連接。

測試連線:

  • 從Windows 7虛擬機器嘗試ping實體PLC(192.168.1.20)。結果將顯示「主機無法到達(Host unreachable)」,這驗證了虛擬網路與實體網路之間缺乏連通性。

添加上行鏈路到vSwitch1:

  1. 選擇vSwitch1:在ESXi網路設定中,選擇vSwitch1
  2. 添加上行鏈路:點擊「添加上行鏈路(Add uplink)」按鈕。
  3. 選擇實體網路介面卡:在下拉選單中,選擇一個未被使用的實體網路介面卡作為vSwitch1的上行鏈路。玄貓建議使用vmnic1,以保持與vmnic0(用於管理網路)的區分。

驗證vSwitch拓撲:

  • 再次檢視vSwitch1的拓撲。您現在應該會看到一個實體網路介面卡(例如vmnic1)與vSwitch1連接,這意味著Level 1網路區段現在已透過實體網路介面卡與外部實體網路建立連接。

重新測試連線:

  • 從Windows 7虛擬機器(其IP位址已調整為192.168.1.x子網路)再次嘗試ping實體PLC(192.168.1.20)。您現在應該會收到回應,這表示虛擬環境與實體PLC之間的通訊已成功建立。

此圖示:ESXi vSwitch與實體PLC連接拓撲

@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 {
cloud "實體網路" as physical_net {
component "vmnic0 (管理)" as vmnic0
component "vmnic1 (PLC 連接)" as vmnic1
}

rectangle "vSwitch0 (管理網路)" as vswitch0 {
port "管理網路 Port Group" as mgmt_pg
}
rectangle "vSwitch1 (ICS 網路)" as vswitch1 {
port "Level 1 Port Group" as L1_pg
port "Level 2 Port Group" as L2_pg
port "Level 3 Port Group" as L3_pg
port "Level 5 Port Group" as L5_pg
}

node "Windows 7 VM" as win7_vm
node "Koyo Click PLC (實體)" as physical_plc
}

vmnic0 -- vswitch0 : 上行鏈路
vmnic1 -- vswitch1 : 上行鏈路

vswitch0 -- mgmt_pg
vswitch1 -- L1_pg
vswitch1 -- L2_pg
vswitch1 -- L3_pg
vswitch1 -- L5_pg

win7_vm -- L3_pg : 連接 (初始)
win7_vm -- L1_pg : 連接 (臨時配置 PLC)

L1_pg -- physical_plc : 透過 vmnic1 連接

note left of vmnic1
將 vmnic1 作為 vSwitch1 的上行鏈路
實現虛擬網路與實體 PLC 的通訊
end note

@enduml

看圖說話:

此圖示展示了ESXi虛擬交換器與實體PLC的連接拓撲。在ESXi Hypervisor內部,我們有兩個虛擬交換器:vSwitch0用於管理網路,連接到實體網路介面卡vmnic0vSwitch1用於ICS網路,承載了Level 1Level 2Level 3Level 5等連接埠群組。關鍵步驟是將實體網路介面卡vmnic1作為vSwitch1上行鏈路,這使得vSwitch1能夠將其連接埠群組中的流量導向實體網路。透過Level 1 Port GroupWindows 7虛擬機器(在配置PLC時臨時連接到此群組)現在可以透過vmnic1實體Koyo Click PLC進行通訊。這個配置完善了我們的ICS實驗室網路拓撲,實現了虛擬與實體環境的無縫連接。

清理Windows 7虛擬機器網路配置:
  • 將Windows 7虛擬機器中用於連接Koyo Click PLC的臨時網路介面卡(如果之前添加了)移除,或將其IP位址恢復到Level 3的預設配置(例如192.168.3.10)。
  • 確保Windows 7虛擬機器現在透過vmnic1(作為vSwitch1的上行鏈路)仍然可以連接到實體PLC。這證明了即使Windows 7虛擬機器本身位於Level 3的子網路,它仍然可以透過路由與Level 1的實體PLC通訊。
下一章展望:

在下一章中,我們將會編寫我們的第一個PLC程式,並將其下載到Koyo Click PLC中。這將是我們從理論到實踐,進一步探索ICS系統運作和安全的重要一步。

SCADA系統在ICS安全中的核心地位

玄貓強調,SCADA(監督控制與資料採集)系統在工業控制系統中扮演著至關重要的角色。它不僅能夠發布指令和控制數據,更重要的是,它允許操作員從遠端監控和管理整個工業過程。

SCADA系統的重要性:

  • 遠端監控與管理:SCADA系統的核心價值在於其遠端操作能力。例如,在機場、購物中心或大型娛樂場所,SCADA系統可以統一控制所有的人員移動設備(如電梯、手扶梯)。
  • 靈活的控制能力:操作員可以透過SCADA系統啟動或停止單一流程,甚至控制整個生產線。
  • 安全防禦重點:由於SCADA系統掌握著對關鍵基礎設施的廣泛控制權,它自然成為攻擊者關注的焦點。因此,在建立安全防禦體系時,必須將SCADA系統作為優先防禦的目標。對SCADA系統的任何成功攻擊都可能導致大規模的營運中斷和嚴重後果。

第三章:安裝與實驗室設定的深化

玄貓指出,在第二章中,我們主要專注於網路連接的配置。現在,我們將進一步深化實驗室的設定,並開始實際操作。

第三章核心內容:

  • 編寫簡單程式:我們將編寫一個簡單的PLC程式。
  • 調整I/O硬體:使用Windows 7虛擬機器上的程式設計軟體,調整PLC的輸入/輸出(I/O)硬體。
  • 數據流路徑:這個過程中的數據流將從虛擬交換器,透過實體網路介面卡,再經由實體網路交換器,最終到達實體PLC。

這將是我們真正將虛擬環境與實體硬體結合,並開始進行實際ICS操作的章節,為後續的ICS安全測試和分析奠定基礎。

工業控制系統基礎程式設計與實體I/O互動

擴展實驗室:PLC、HMI與實體I/O的整合

玄貓認為,在ICS安全實驗室中,不僅要建立網路連接,更要深入理解PLC如何與實體世界互動。本章將引導您透過Koyo Click PLC和人機介面(HMI),連接實體I/O設備,實現對燈光的控制,從而掌握ICS系統最基礎的運作原理。

核心目標:

  • 編寫並下載第一個PLC程式:學習如何使用梯形圖邏輯(Ladder Logic)編寫簡單的控制程式。
  • I/O接線與覆寫:將實體I/O設備(如選擇開關和信號燈)正確連接到PLC,並理解I/O覆寫的概念。
  • 控制測試:透過HMI和程式,測試對實體設備的控制能力。

技術要求:

為了順利完成本章的實驗,您需要準備以下設備和工具:

  • Koyo Click程式設計軟體:已安裝在Windows 7虛擬機器上。
  • Koyo Click硬體:電源供應器和PLC主機。
  • 實體網路交換器:用於PLC與ESXi之間流量路由。
  • 選擇開關站盒(Selector Switch Station Box):用於手動切換I/O的開/關狀態。
  • 工業信號塔燈(Industrial Signal Tower Lamp):作為視覺回饋的輸出設備。
  • 電壓表(Voltmeter):用於測試電路導通性。
  • 14 AWG電線:用於連接選擇開關站盒、信號塔燈與PLC。
  • 剝線鉗與剪線鉗:用於處理電線。
  • 螺絲起子:用於連接端子。

編寫與下載第一個PLC程式:ICS的「Hello World」

玄貓認為,學習任何程式設計,都從「Hello World」開始。在自動化領域,這意味著編寫一個簡單的梯形圖邏輯程式,來控制一個輸出線圈的通電或斷電。這將幫助我們熟悉Koyo Click程式設計軟體,並理解PLC程式設計的基礎概念。

IEC 61131-3標準與PLC程式語言:

ICS領域的PLC、SCADA和分散式控制系統(DCS)都遵循一套標準和規範。其中,IEC 61131-3是一個您必須了解的國際標準,它定義了五種主要的PLC程式語言:

  1. 梯形圖(Ladder Diagram, LD):圖形化語言,模擬繼電器控制電路。
  2. 功能區塊圖(Function Block Diagram, FBD):圖形化語言,使用功能區塊表示邏輯。
  3. 結構化文本(Structured Text, ST):文本化語言,類似於高階程式語言(如Pascal)。
  4. 指令列表(Instruction List, IL):文本化語言,類似於組合語言。
  5. 順序功能圖(Sequential Function Chart, SFC):圖形化語言,用於描述順序控制流程。

在這五種語言中,梯形圖是Koyo Click程式設計軟體的主要程式語言,也是過程自動化領域中最普遍使用的語言。它以電路圖的形式呈現,左側的輸入驅動右側的輸出,其運作方式與電氣電路相似。

啟動新專案:

  1. 啟動Koyo Click軟體:在Windows 7虛擬機器上啟動Koyo Click程式設計軟體。
  2. 建立新專案
  • 從選單列中選擇「檔案(File)」->「新專案…(New Project…)」。
  • 在彈出的對話框中,雙擊「開始一個新專案(Start a new project)」圖示。
  1. 選擇CPU模組
  • 軟體會引導您進入「選擇CPU模組(Select a CPU Module)」視窗。
  • 雖然在上一章中我們已經連接了PLC,軟體會自動檢測CPU。但為了展示不同的專案啟動方式,玄貓建議您手動選擇我們實驗室使用的CPU模組(例如C0-10ARE-D)。
  • 此介面會顯示CPU的詳細資訊,例如8個交流輸入和6個繼電器輸出,以及功耗資訊。
  • 點擊「確定(OK)」繼續。
  1. 進入主程式介面:完成CPU選擇後,您將會回到程式設計主介面,準備開始添加程式碼。

此圖示:Koyo Click軟體新專案建立流程

@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 "使用者 (User)" as user
participant "Windows 7 VM" as win7_vm
participant "Koyo Click 程式設計軟體" as click_software

user -> win7_vm : 啟動 Koyo Click 軟體
win7_vm -> click_software : 啟動軟體

user -> click_software : 點擊 "檔案" 選單 -> "新專案..."
click_software --> user : 顯示 "開始一個新專案" 對話框
user -> click_software : 雙擊 "開始一個新專案"

click_software --> user : 顯示 "選擇 CPU 模組" 視窗
user -> click_software : 選擇實驗室使用的 CPU 模組 (例如 C0-10ARE-D)
click_software --> user : 顯示 CPU 詳細資訊 (I/O 點數, 功耗等)
user -> click_software : 點擊 "確定"

click_software --> user : 進入主程式設計介面 (空白梯形圖)

note right of click_software
IEC 61131-3 定義五種程式語言
梯形圖為 Koyo Click 主要語言
end note

@enduml

看圖說話:

此圖示展示了在Koyo Click程式設計軟體中建立新專案的完整流程。使用者首先在Windows 7虛擬機器上啟動Koyo Click程式設計軟體。隨後,透過選單選擇「檔案」->「新專案…」,並在彈出的對話框中選擇「開始一個新專案」。軟體會引導使用者進入「選擇CPU模組」視窗,在此處使用者需要選擇實驗室所使用的Koyo Click PLC的CPU型號,並確認其詳細規格(如I/O點數)。完成CPU選擇後,軟體將會進入主程式設計介面,此時介面通常是空白的梯形圖,等待使用者開始編寫程式碼。這個流程是ICS程式設計的起點,也是理解PLC如何與實體I/O互動的基礎。

結論

縱觀現代管理者的多元挑戰,將抽象的網路拓撲理論轉化為可驗證的實體連接,正是從概念走向實踐的關鍵突破。本章節的核心價值,不僅在於成功配置ESXi虛擬交換器的上行鏈路,更在於它揭示了在複雜技術環境中,從IT基礎設施(虛擬化平台)到OT營運技術(實體PLC)的整合思維之重要性。最初「主機無法到達」的瓶頸,恰恰凸顯了多數專業人士在跨領域整合時最易忽視的斷點;而解決方案的本身,則是一次寶貴的系統性除錯實踐。

玄貓認為,此虛實整合的實驗環境,已超越單純的網路設定,初步構建了一個具備高擬真度的ICS攻防沙盒雛形。它將是未來驗證SCADA系統脆弱性、測試入侵偵測規則、乃至發展防禦策略的基石。接下來的挑戰,將是如何在此基礎上疊加更複雜的數據流與控制邏輯,模擬真實工業場景的動態威脅。

綜合評估後,這套從網路配置到基礎程式設計的建構路徑,代表了資安人員跨足工控領域的標準起手式。密切掌握此虛實整合的技術細節,將是從理論研究邁向實務操作,進而洞察ICS安全本質的關鍵分野,其長期效益遠超一次性的技術設定。