返回文章列表

PLC網路通訊配置:IP位址設定與專案寫入

本文闡述配置 Koyo Click PLC 網路通訊的完整流程,涵蓋 IP 位址的調整與專案寫入。內容首先說明如何暫時修改主機 IP 以連接 PLC 預設位址,接著詳細介紹如何依據 Purdue 模型網路架構,為 PLC 設定新的靜態 IP 位址。文章同時強調一個關鍵的資安警示:PLC 的讀寫權限若遭濫用,攻擊者僅需寫入空白專案即可癱瘓工業流程。最後,本文也涵蓋了處理空白專案寫入時可能發生的語法錯誤,提供完整的實務操作指引。

工業控制系統 網路安全

在工業控制系統(ICS)的網路架構中,將可程式化邏輯控制器(PLC)正確整合至指定網段,是確保營運技術(OT)環境穩定運作的基礎。本篇文章以 Koyo Click PLC 為例,探討其 IP 位址配置與專案寫入的技術細節。此過程不僅是單純的網路設定,更直接關聯到 Purdue 模型中各層級間的通訊完整性,特別是 Level 1 製程控制層。我們將逐步解析從初始連接、IP 位址變更,到最終程式寫入的流程。同時,本分析也揭示此基礎操作中所隱含的資安風險,說明為何對 PLC 的存取權限控管是 OT 安全防護的核心,任何配置失誤都可能成為系統性破壞的起點。

配置PLC通訊:IP位址調整與資安警示

玄貓強調,為了解決子網路不匹配問題,我們需要暫時調整Windows 7虛擬機器的IP位址,使其與PLC的預設IP位址位於同一子網路,以便能夠成功連接並配置PLC。

暫時調整Windows 7虛擬機器IP位址:

  1. 確定PLC預設IP位址:Koyo Click PLC通常有一個預設的IP位址(例如192.168.0.x)。
  2. 調整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專案:

  1. 重新啟動Koyo Click程式設計軟體:在調整IP位址後,重新啟動軟體。
  2. 連接PLC:再次選擇「連接到PLC(Connect to PLC)」。此時,如果IP位址配置正確,軟體應該能夠成功檢測並連接到PLC。
  3. 讀取現有專案:一旦成功連接,軟體會提示您可以讀取(Read)或跳過(Skip)PLC中現有的專案。

資安警示:PLC專案檔案的讀寫權限風險

玄貓必須在此提出一個極其重要的資安警示:始終建議從PLC讀取現有專案。這不僅是為了備份,更揭示了ICS系統中一個嚴重的安全漏洞。

攻擊者利用讀寫權限的風險

  • 如果攻擊者能夠在這一層級(即能夠連接PLC並讀寫專案檔案)獲得立足點,他們無需高超的「L337」駭客技術,就能造成巨大的破壞。
  • 簡單的破壞:攻擊者只需將一個空白專案檔案寫入PLC,就能立即停止整個工業過程。
  • 經濟損失:如果沒有本地的專案備份,企業可能因為停機而遭受數百萬美元的損失。

玄貓強調,這個案例凸顯了對工業控制設備進行物理和網路存取控制的重要性。任何能夠直接連接PLC並修改其程式的行為,都應受到嚴格的監控和保護。這也是我們在實驗室中模擬攻擊情境的意義所在,旨在提升對此類風險的認識和防範能力。

Koyo Click PLC通訊配置:IP位址設定與程式寫入

PLC專案讀取與IP位址配置

玄貓認為,從PLC讀取現有專案不僅是備份的重要步驟,更是理解其當前運作狀態的基礎。隨後,我們將根據實驗室的網路架構,為實體PLC配置正確的IP位址。

讀取PLC專案:

  1. 選擇「讀取PLC專案(Read the PLC’s Project)」:在Koyo Click程式設計軟體成功連接到PLC後,會彈出一個對話框,提供「讀取PLC專案」和「跳過」兩個選項。玄貓強烈建議選擇「讀取PLC專案」,以獲取PLC中當前的程式碼和配置。
  2. 空白專案:如果PLC是全新的或已被清除過,讀取後您可能會看到一個完全空白的專案。

配置PLC的IP位址:

為了將實體PLC整合到我們的Purdue模型網路架構中,我們需要將其IP位址設定到Level 1: Process層級的子網路。

  1. 進入COM埠設定:在程式設計軟體中,點擊「PLC」選單,然後選擇「COM埠設定(Com Port Setup)」。
  2. 選擇乙太網路埠:在COM埠設定介面中,選擇「埠1(Port 1)」,這通常是Koyo Click PLC的乙太網路埠。
  3. 手動設定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:

  1. 選擇「寫入專案到PLC…(Write Project into PLC…)」:在程式設計軟體中,點擊「PLC」選單,然後選擇此選項。
  2. 語法錯誤(Syntax Error):如果專案是完全空白的,程式設計軟體可能會提示「語法錯誤」,並在輸出視窗(Output Window)中顯示「主程式中沒有無條件的END指令(No unconditional END instruction in the Main Program)」。
  • 如果輸出視窗沒有顯示,可以透過「檢視(View)」->「視窗(Window)」->「輸出(Output)」來開啟。

處理語法錯誤:添加END指令

Koyo Click PLC的程式設計要求每個程式(或主程式)必須以一個「END」指令結尾。

  1. 尋找END指令:在指令列表中,找到「END」功能。
  2. 拖曳END指令:將「END」指令拖曳到程式的最後一個輸出點。它會取代任何現有的輸出指令,確保程式的正確終止。

重新寫入專案:

  1. 再次選擇「寫入專案到PLC…」:在添加了「END」指令後,再次嘗試將專案寫入PLC。
  2. 確認配置變更:此時,軟體應該會編譯成功,並彈出一個對話框,顯示您對「埠1(Port1)」配置所做的更改。點擊「使用此設定(Use This Setup)」按鈕。
  3. 通訊中斷警示:由於PLC的IP位址已經更改,程式設計軟體會提示「Windows 7 VM與CLICK之間的通訊已中斷(communication between the Windows 7 VM and the CLICK has been lost)」。這是預期的行為,因為Windows 7虛擬機器的IP位址仍然在舊的子網路中。點擊「確定(OK)」。
  4. 最終確認與傳輸:軟體會再次提示您最終確認要將更改推送到PLC。點擊「寫入(Write)」。
  5. 傳輸完成:如果一切順利,您將看到「傳輸完成(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變更後必然發生的通訊中斷,整個過程高度考驗著執行者的系統性思維與預判能力。

更重要的是,讀寫權限的資安警示點出了一個殘酷現實:在工業控制場域,最大的威脅往往源於最基礎的存取控制疏漏,而非高深的駭客技術。一個空白專案的寫入,其破壞力不亞於複雜的惡意軟體。這項洞察預示著,未來工業資安的防禦重心,將更趨向於強化流程邊界與物理存取管理,而非僅僅依賴網路層的防火牆。

玄貓認為,精通此類看似基礎的配置流程,正是區分普通技術員與資深專家的分水嶺。它不僅要求解決當下問題,更需具備預見下一步、管理預期失效、並將安全思維融入每個操作步驟的能力。對於追求卓越的工業自動化與資安專業人士而言,這種在限制中尋求突破的實踐智慧,才是確保系統穩定與生產韌性的真正核心競爭力。