在工業控制系統(ICS)的網路架構中,將可程式化邏輯控制器(PLC)正確整合至指定網段,是確保營運技術(OT)環境穩定運作的基礎。本篇文章以 Koyo Click PLC 為例,探討其 IP 位址配置與專案寫入的技術細節。此過程不僅是單純的網路設定,更直接關聯到 Purdue 模型中各層級間的通訊完整性,特別是 Level 1 製程控制層。我們將逐步解析從初始連接、IP 位址變更,到最終程式寫入的流程。同時,本分析也揭示此基礎操作中所隱含的資安風險,說明為何對 PLC 的存取權限控管是 OT 安全防護的核心,任何配置失誤都可能成為系統性破壞的起點。
配置PLC通訊:IP位址調整與資安警示
玄貓強調,為了解決子網路不匹配問題,我們需要暫時調整Windows 7虛擬機器的IP位址,使其與PLC的預設IP位址位於同一子網路,以便能夠成功連接並配置PLC。
暫時調整Windows 7虛擬機器IP位址:
- 確定PLC預設IP位址:Koyo Click PLC通常有一個預設的IP位址(例如
192.168.0.x)。 - 調整Windows 7 IP位址:
- 在Windows 7虛擬機器中,進入「網路和共用中心」->「變更介面卡設定」。
- 右鍵點擊與PLC連接的「區域連線」,選擇「內容」。
- 選擇「網際網路通訊協定第4版 (TCP/IPv4)」,點擊「內容」。
- 將IP位址設定為與PLC預設IP位址在同一子網路的位址,例如
192.168.0.20。 - 子網路遮罩設定為
255.255.255.0。 - 預設閘道可以暫時留空或設定為
192.168.0.1。 - 點擊「確定」儲存設定。
重新連接與讀取PLC專案:
- 重新啟動Koyo Click程式設計軟體:在調整IP位址後,重新啟動軟體。
- 連接PLC:再次選擇「連接到PLC(Connect to PLC)」。此時,如果IP位址配置正確,軟體應該能夠成功檢測並連接到PLC。
- 讀取現有專案:一旦成功連接,軟體會提示您可以讀取(Read)或跳過(Skip)PLC中現有的專案。
資安警示:PLC專案檔案的讀寫權限風險
玄貓必須在此提出一個極其重要的資安警示:始終建議從PLC讀取現有專案。這不僅是為了備份,更揭示了ICS系統中一個嚴重的安全漏洞。
攻擊者利用讀寫權限的風險:
- 如果攻擊者能夠在這一層級(即能夠連接PLC並讀寫專案檔案)獲得立足點,他們無需高超的「L337」駭客技術,就能造成巨大的破壞。
- 簡單的破壞:攻擊者只需將一個空白專案檔案寫入PLC,就能立即停止整個工業過程。
- 經濟損失:如果沒有本地的專案備份,企業可能因為停機而遭受數百萬美元的損失。
玄貓強調,這個案例凸顯了對工業控制設備進行物理和網路存取控制的重要性。任何能夠直接連接PLC並修改其程式的行為,都應受到嚴格的監控和保護。這也是我們在實驗室中模擬攻擊情境的意義所在,旨在提升對此類風險的認識和防範能力。
Koyo Click PLC通訊配置:IP位址設定與程式寫入
PLC專案讀取與IP位址配置
玄貓認為,從PLC讀取現有專案不僅是備份的重要步驟,更是理解其當前運作狀態的基礎。隨後,我們將根據實驗室的網路架構,為實體PLC配置正確的IP位址。
讀取PLC專案:
- 選擇「讀取PLC專案(Read the PLC’s Project)」:在Koyo Click程式設計軟體成功連接到PLC後,會彈出一個對話框,提供「讀取PLC專案」和「跳過」兩個選項。玄貓強烈建議選擇「讀取PLC專案」,以獲取PLC中當前的程式碼和配置。
- 空白專案:如果PLC是全新的或已被清除過,讀取後您可能會看到一個完全空白的專案。
配置PLC的IP位址:
為了將實體PLC整合到我們的Purdue模型網路架構中,我們需要將其IP位址設定到Level 1: Process層級的子網路。
- 進入COM埠設定:在程式設計軟體中,點擊「PLC」選單,然後選擇「COM埠設定(Com Port Setup)」。
- 選擇乙太網路埠:在COM埠設定介面中,選擇「埠1(Port 1)」,這通常是Koyo Click PLC的乙太網路埠。
- 手動設定IP位址:
- 選擇「手動設定(Set manually)」選項。
- 輸入以下IP位址資訊,使其符合
Level 1子網路的規劃: - IP位址(IP Address):
192.168.1.20(這是我們為實體PLC規劃的IP位址,與虛擬PLC的192.168.1.10在同一子網路但不同主機)。 - 子網路遮罩(Subnet Mask):
255.255.255.0。 - 預設閘道(Default Gateway):
192.168.1.1。
此圖示:Koyo Click PLC IP位址配置流程
@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 "Koyo Click 程式設計軟體" as click_software
participant "Koyo Click PLC" as plc
user -> click_software : 啟動軟體
click_software -> plc : 連接 PLC
user -> click_software : 選擇 "讀取 PLC 專案"
plc --> click_software : 傳送專案資料
user -> click_software : 點擊 "PLC" 選單 -> "COM 埠設定"
click_software --> user : 顯示 COM 埠設定介面
user -> click_software : 選擇 "埠 1 (乙太網路)"
user -> click_software : 選擇 "手動設定"
user -> click_software : 輸入 IP 位址 (192.168.1.20)
user -> click_software : 輸入 子網路遮罩 (255.255.255.0)
user -> click_software : 輸入 預設閘道 (192.168.1.1)
click_software --> user : 顯示配置完成
note right of plc
將實體 PLC 整合到 Level 1 網路
end note
@enduml
看圖說話:
此圖示展示了Koyo Click PLC的IP位址配置流程。使用者首先透過Koyo Click程式設計軟體連接到PLC,並選擇讀取PLC中現有的專案。隨後,使用者導航至「COM埠設定」介面,選擇乙太網路埠(埠1)。為了將實體PLC整合到我們實驗室的Level 1網路區段,使用者選擇「手動設定」IP位址,並輸入預定的IP位址(192.168.1.20)、子網路遮罩(255.255.255.0)和預設閘道(192.168.1.1)。這些步驟確保了實體PLC能夠在我們規劃的ICS網路架構中,與虛擬PLC和SCADA系統進行正確的通訊。
程式寫入PLC與錯誤處理
在配置完PLC的IP位址後,我們需要將這些修改寫入PLC。然而,Koyo Click程式設計軟體在寫入空白專案時,可能會提示語法錯誤,這需要我們進行額外的處理。
寫入專案到PLC:
- 選擇「寫入專案到PLC…(Write Project into PLC…)」:在程式設計軟體中,點擊「PLC」選單,然後選擇此選項。
- 語法錯誤(Syntax Error):如果專案是完全空白的,程式設計軟體可能會提示「語法錯誤」,並在輸出視窗(Output Window)中顯示「主程式中沒有無條件的END指令(No unconditional END instruction in the Main Program)」。
- 如果輸出視窗沒有顯示,可以透過「檢視(View)」->「視窗(Window)」->「輸出(Output)」來開啟。
處理語法錯誤:添加END指令
Koyo Click PLC的程式設計要求每個程式(或主程式)必須以一個「END」指令結尾。
- 尋找END指令:在指令列表中,找到「END」功能。
- 拖曳END指令:將「END」指令拖曳到程式的最後一個輸出點。它會取代任何現有的輸出指令,確保程式的正確終止。
重新寫入專案:
- 再次選擇「寫入專案到PLC…」:在添加了「END」指令後,再次嘗試將專案寫入PLC。
- 確認配置變更:此時,軟體應該會編譯成功,並彈出一個對話框,顯示您對「埠1(Port1)」配置所做的更改。點擊「使用此設定(Use This Setup)」按鈕。
- 通訊中斷警示:由於PLC的IP位址已經更改,程式設計軟體會提示「Windows 7 VM與CLICK之間的通訊已中斷(communication between the Windows 7 VM and the CLICK has been lost)」。這是預期的行為,因為Windows 7虛擬機器的IP位址仍然在舊的子網路中。點擊「確定(OK)」。
- 最終確認與傳輸:軟體會再次提示您最終確認要將更改推送到PLC。點擊「寫入(Write)」。
- 傳輸完成:如果一切順利,您將看到「傳輸完成(Transfer finished)」的對話框。
重新連接錯誤(Timeout Error):
由於PLC的IP位址已更改,當您再次嘗試連接PLC時,可能會收到一個「逾時錯誤(Timeout Error)」。這是因為Windows 7虛擬機器的IP位址仍停留在舊的子網路,無法找到新IP位址的PLC。
此圖示:Koyo Click 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
actor "使用者 (User)" as user
participant "Koyo Click 程式設計軟體" as click_software
participant "Koyo Click PLC" as plc
user -> click_software : 點擊 "PLC" 選單 -> "寫入專案到 PLC..."
click_software --> user : 顯示 "語法錯誤" / "無條件 END 指令缺失"
user -> click_software : 導航至 "檢視" -> "視窗" -> "輸出"
user -> click_software : 尋找並拖曳 "END" 指令到程式末端
user -> click_software : 再次點擊 "PLC" 選單 -> "寫入專案到 PLC..."
click_software --> user : 顯示 "確認配置變更" 對話框
user -> click_software : 點擊 "使用此設定"
click_software --> user : 顯示 "通訊中斷" 警示
user -> click_software : 點擊 "確定"
click_software --> user : 顯示 "最終確認寫入" 對話框
user -> click_software : 點擊 "寫入"
click_software --> user : 顯示 "傳輸完成"
user -> click_software : 嘗試重新連接 PLC
click_software --> user : 顯示 "逾時錯誤"
note right of plc
IP 位址已更新為 192.168.1.20
end note
note right of user
需要重新配置 Windows 7 VM 的 IP 位址
end note
@enduml
看圖說話:
此圖示描繪了將Koyo Click PLC程式寫入PLC的過程,以及可能遇到的錯誤和解決方法。使用者首先嘗試將配置好的專案寫入PLC,但由於空白專案缺少必要的END指令,程式設計軟體會提示語法錯誤。使用者透過在指令列表中添加END指令來解決此問題。再次嘗試寫入後,軟體會顯示IP位址變更的確認,並在寫入成功後提示通訊中斷,這是因為PLC的IP位址已更新,而Windows 7虛擬機器的IP位址尚未調整。最終,嘗試重新連接PLC會導致逾時錯誤,這表明我們需要根據PLC的新IP位址,重新配置Windows 7虛擬機器的網路設定,以恢復通訊。
結論
縱觀現代工業控制系統的建置挑戰,此PLC通訊配置流程不僅是單純的技術操作,更是一場微觀的系統工程演練。它深刻揭示了理論網路架構(如Purdue模型)與實體設備落地之間的關鍵鴻溝。從暫時調整IP位址以建立初始連結,到處理特定平台的語法限制(如END指令),再到預見IP變更後必然發生的通訊中斷,整個過程高度考驗著執行者的系統性思維與預判能力。
更重要的是,讀寫權限的資安警示點出了一個殘酷現實:在工業控制場域,最大的威脅往往源於最基礎的存取控制疏漏,而非高深的駭客技術。一個空白專案的寫入,其破壞力不亞於複雜的惡意軟體。這項洞察預示著,未來工業資安的防禦重心,將更趨向於強化流程邊界與物理存取管理,而非僅僅依賴網路層的防火牆。
玄貓認為,精通此類看似基礎的配置流程,正是區分普通技術員與資深專家的分水嶺。它不僅要求解決當下問題,更需具備預見下一步、管理預期失效、並將安全思維融入每個操作步驟的能力。對於追求卓越的工業自動化與資安專業人士而言,這種在限制中尋求突破的實踐智慧,才是確保系統穩定與生產韌性的真正核心競爭力。