Learning Objectives
- 說明工控系統(OT)的資安和一般 IT 有什麼不同
- 說明 Modbus 為什麼「連得到就寫得進去」,以及這對網路設計的影響
- 用 IEC 62443 的「區域與管道」概念替工廠網路分區,找出不安全的連線
- 寫一個預設拒絕的白名單,只放行必要的請求
控制系統的資安,先顧好「不要停、不要傷人」
辦公室的資安最在意資料不要外洩;工廠的控制系統(OT,operational technology)最在意的是機器照預期運作、不傷人、不停線。 這帶來幾個不同:
| 一般 IT | 工控 OT | |
|---|---|---|
| 最重要的是 | 資料的機密性 | 可用性與人身安全 |
| 設備壽命 | 幾年換一次 | 十幾、二十年 |
| 更新修補 | 定期、自動 | 要停機才能更新,常常一拖再拖 |
| 通訊協定 | 多半有認證、加密 | Modbus 等老協定沒有認證 |
| 出事的後果 | 資料外洩、服務中斷 | 設備損壞、環境汙染、人員受傷 |
所以工控資安不能只靠「裝防毒、常更新」,而要從網路架構著手:讓不該連到控制器的電腦,根本連不到。
這一課要回答:
- Modbus 沒有認證,實際上代表什麼?
- 「區域與管道」怎麼把網路切開?
- 白名單要怎麼寫?
這一課只談防禦。練習都在本課程的模擬環境裡;對任何真實系統做測試,都必須事先取得系統擁有者的書面授權。
逐步看:Modbus 不問你是誰
這台 PLC 用 SET/RST 控制攪拌馬達。一台不是 HMI 的電腦連上同一個網路,送出一個寫入線圈的請求。 看通訊紀錄與 PLC 畫面:PLC 照做了,馬達開始轉。這不是 PLC 壞掉,而是 Modbus 協定本來就沒有「確認對方身分」這一步。
區域與管道:IEC 62443 的分區想法
IEC 62443 是工業自動化與控制系統的資安標準系列,對象包括設備製造商、系統整合商與工廠營運者。 其中最常被引用的想法是區域與管道(zones and conduits):
- 區域(zone):安全需求相近的一群設備,例如「所有 PLC 與變頻器」是一區、「SCADA 與 HMI」是另一區。
- 管道(conduit):區域之間的通訊路徑,連同路徑上的防護(防火牆、閘道器、單向傳輸設備)。 區域之間只能經過管道溝通,管道上只放行必要的流量。
每個區域依風險評估訂定目標安全等級(SL 1~4,等級越高,要防的對手能力越強),標準再依七個基本要求 (識別與認證、使用控制、系統完整性、資料機密性、限制資料流、即時回應事件、資源可用性)列出要做到哪些措施。
常見的分區由外到內:
網際網路
└─ 企業網路(IT):辦公室、郵件、ERP
└─ 工業 DMZ:歷史資料鏡像、遠端維護跳板機 ← IT 與產線都只連到這裡
└─ 監控區:SCADA、HMI、工程師站
└─ 控制區:PLC、變頻器、現場設備
原則是:不跨層直連、外部人員不直接進產線、每條管道只開必要的連線。下面的練習用一個示意的工廠網路試試看。
逐步看:預設拒絕的白名單
管道上的防火牆或閘道器,常用白名單(允許清單):只寫「誰可以做什麼」,其他一律拒絕。 這個範例檢查四個請求:來源 IP、功能碼、位址都要符合某一條規則才放行。
其他防禦做法
分區與白名單是基礎,再往上疊幾層,叫縱深防禦(defense in depth):一層失守還有下一層。
- 用有安全機制的協定:Modbus Organization 發布了 Modbus/TCP Security,用 TLS 包住 Modbus,以憑證認證雙方,使用埠 802; 第 15 課的 OPC UA 有 Sign、SignAndEncrypt 安全模式。新系統優先選用,舊設備放在受保護的區域裡。
- 遠端維護:不要讓廠商從網際網路直接連 HMI。改走 DMZ 的跳板機,需要時才開放、多因素認證、全程記錄、用完關閉。
- 帳號與權限:HMI 的操作員、工程師、管理者權限分開;不共用帳號、改掉預設密碼。
- 可攜式媒體:USB 隨身碟是常見的入侵途徑,進產線前先掃描,或用專用的檔案交換站。
- 備份與還原:定期備份 PLC 程式與設定,並且真的演練還原。
- 監控與事件應變:記錄誰在什麼時候寫了什麼;事先寫好「出事時誰負責、先做什麼」。
資安措施也要配合安全(safety):急停按鈕、機器防護、上鎖掛牌(lockout/tagout)這些保護人的機制, 不能因為任何網路設定而失效;安全相關的功能最好不依賴網路。
小測驗:OT 資安的觀念
和一般辦公室 IT 相比,工控系統最優先考慮的通常是什麼?
一台 PLC 用 Modbus TCP,接在辦公室的同一個網段。最主要的風險是?
在 IEC 62443 的概念裡,「管道」(conduit)指的是?
小測驗:白名單
下面的白名單會印出什麼?
RULES = [("10.0.1.50", 3), ("10.0.1.50", 6), ("10.0.1.20", 5)]
for req in [("10.0.1.50", 5), ("10.0.1.20", 5), ("10.0.1.99", 3)]:
print("放行" if req in RULES else "拒絕", end=" ")
設備廠商需要遠端檢查 HMI。下面哪一種做法比較好?
重點整理
- OT 資安以可用性與人身安全為優先;設備壽命長、難以停機更新,所以要靠網路架構保護。
- Modbus 沒有認證與加密:連得到就讀得到、寫得進去。保護它的責任在網路設計。
- IEC 62443 的區域與管道:安全需求相近的設備放同一區,區域之間只經過管道溝通,管道只放行必要的流量。
- 典型分區:IT → 工業 DMZ → 監控區 → 控制區;不跨層直連,外部維護走跳板機。
- 白名單:寫清楚「誰、用哪些功能碼、存取哪些位址」,其他預設拒絕。
- 縱深防禦:安全的協定(Modbus/TCP Security、OPC UA 的安全模式)、權限、可攜式媒體管理、備份還原、監控與事件應變;保護人的安全功能不依賴網路。
最後一課把整個軌道串起來:輸送帶分揀站的 PLC 程式加上 Python 監控。