工業控制系統(ICS)的安全性不僅依賴於硬體與網路層的防護,更取決於對其運作邏輯與潛在攻擊向量的深刻理解。本文從一個具體的技術實踐出發,透過 mbtget 工具對 PLC 進行遠端操作,直觀地呈現了 ModbusTCP 協議在未經適當防護下的風險。然而,單純的技術操作並不足以構成完整的資安評估。一個成功的滲透測試專案,其根基在於前期全面而深入的情報蒐集。因此,本文將探討的重心從硬體互動轉向開源情報蒐集(OSINT),分析如何利用公開資訊來源,如 Google 高級搜尋與專業社交平台,來建構目標的數位輪廓。此過程不僅是為了發掘技術漏洞,更是為了理解其組織結構與供應鏈生態,從而制定更具戰略性的測試計畫。
遠端控制PLC:mbtget工具與資安啟示
透過mbtget工具遠端控制PLC
玄貓認為,了解如何從遠端與PLC通訊並控制其I/O,對於理解工業控制系統(ICS)的運作和潛在資安風險至關重要。mbtget工具提供了一個簡潔的介面,讓我們能夠透過ModbusTCP協議讀寫PLC的記憶體地址。
讀取線圈狀態:
- 命令格式:使用
mbtget -r1 -a 0 192.168.1.20命令。
-r1:表示讀取功能碼1(Read Coils),用於讀取位元(bit)狀態。-a 0:表示從地址0開始讀取。192.168.1.20:PLC的IP地址。
- 預期輸出:如果PLC程式設計軟體中的所有覆寫都已清除,您應該會看到地址0的值為0(OFF),表示線圈未被激勵。
寫入線圈狀態:
- 命令格式:使用
mbtget -w5 1 -a 0 192.168.1.20命令。
-w5 1:表示寫入功能碼5(Write Single Coil),將值1(ON)寫入線圈。-a 0:表示寫入地址0。192.168.1.20:PLC的IP地址。
- 預期結果:如果一切順利,您應該能夠點亮信號塔燈的第一個燈(對應
Y001),並在終端機中看到寫入成功的訊息。
再次確認讀取結果:
- 命令格式:再次執行讀取命令
mbtget -r1 -a 0 192.168.1.20。 - 預期輸出:此時,您應該會看到地址0的值變為1,表示線圈已成功被激勵,且燈已點亮。
玄貓建議您繼續測試信號塔燈中其餘的燈,透過修改地址(例如X002到X004對應Y002到Y004),重複讀取和寫入操作,以確保所有燈都能被遠端控制。
此圖示:mbtget遠端控制PLC流程
看圖說話:
此圖示展示了透過SCADA虛擬機器上的終端機,使用mbtget工具遠端控制Koyo Click PLC的流程。使用者首先輸入mbtget命令來讀取PLC中Y001線圈的初始狀態。接著,輸入另一個mbtget命令來寫入值1(ON)到Y001線圈,這會透過ModbusTCP協議傳送給PLC,並點亮工業信號塔燈中對應的燈。最後,使用者再次執行讀取命令,確認Y001的狀態已變為1,從而驗證了遠端控制的有效性。這個流程突顯了ModbusTCP協議在ICS系統中實現遠端監控和控制的能力。
資安啟示:ICS環境的脆弱性與防護
玄貓認為,在實驗中,我們可能注意到使用一個簡單的命令列工具就能隨意設定位元,這不禁讓人質疑工業控制系統的資安防護何在。
ICS環境的資安現況:
- 歷史脆弱性:工業環境過去確實存在資安漏洞,但近年來,資安意識已大幅提升。
- 供應商的努力:許多ICS設備供應商已開始在其系統中整合資安層。
- 遺留系統問題:然而,許多客戶尚未將其舊有系統升級到最新技術,這些遺留系統往往缺乏現代資安防護。
覆寫功能的雙面性:
- 在我們的實驗中,
mbtget之所以能夠成功控制PLC,是因為我們在程式設計軟體中啟用了覆寫功能。這使得PLC會響應來自記憶體層面的指令,即使實體輸入並未改變。 - 移除覆寫後的行為:如果您嘗試移除程式設計軟體中的覆寫功能,然後再次使用
mbtget工具強制設定線圈,您會發現PLC不會有任何響應。這是因為PLC已被設定為只響應本地化的實體輸入。
資安教訓:
- 錯誤配置的風險:啟用覆寫功能在測試和開發階段非常有用,但在生產環境中,如果未經授權的遠端存取者利用此功能,將會造成嚴重的資安風險。
- 邏輯漏洞的影響:如同佛羅里達市水廠事件,攻擊者透過調整操作員螢幕上的濃度設定,利用配方邏輯區塊中的漏洞,使得閥門開啟時間延長,從而改變了化學物質的濃度。這說明即使是看似微小的邏輯變更,也可能在現實世界中產生巨大的後果。
暫停ICS實驗:轉向開源情報蒐集(OSINT)
暫停ICS實驗的理由與轉向
玄貓認為,雖然我們已經建立了一個基礎的工業控制系統(ICS)實驗室,並學習了如何編寫程式、連接I/O以及遠端控制PLC,但任何滲透測試專案都不能脫離情報蒐集這個重要環節。尤其是在工業環境中,對目標的全面了解是制定有效測試策略的基石。因此,我們將暫時放下ICS實驗的實作,轉而探討開源情報蒐集(Open-Source Intelligence, OSINT)。
為什麼需要OSINT?
- 理解目標:在對任何企業、設施、流程或合約進行滲透測試之前,必須盡可能地蒐集公開資訊。這有助於我們理解目標的運作模式、技術棧、組織結構,甚至是潛在的漏洞。
- 員工資訊洩露:許多員工在社交媒體或公開平台上分享關於公司的資訊,這些看似無害的內容,卻可能包含關鍵的情報,例如:
- 用於網路分段的防火牆型號。
- 端點保護解決方案。
- 網路存取控制(NAC)資訊。
- 入侵偵測系統(IDS)產品。
- 其他揭露公司技術棧或安全策略的線索。
- 供應鏈情報:透過OSINT,我們甚至可以推斷出一家公司正在使用哪些技術或供應商,這對於理解其互聯生態系統至關重要。
- 深入挖掘:了解目標公司(例如Rockwell)後,我們可以進一步探索其支援網路,尋找潛在的帳戶創建機會,或開發工具和人員來進行更深入的偵察。
開源情報蒐集的核心議題
本章將深入探討以下幾個關鍵議題:
- Google-Fu的藝術:學習如何利用Google搜尋引擎的高級功能進行精準情報蒐集。
- LinkedIn的應用:利用專業社交平台LinkedIn來蒐集組織結構、員工背景和技術專長等資訊。
- Exploit Database的研究:探索Exploit-DB,了解已知的漏洞和利用方式。
- 國家漏洞資料庫(NVD)的導覽:學習如何利用NVD來查詢和理解常見漏洞和曝露(CVE)資訊。
技術要求
為了有效進行本章的學習,您需要準備以下工具:
- 電腦與瀏覽器:一台配備您慣用瀏覽器的電腦,以便存取相關網站。
- LinkedIn帳戶:一個LinkedIn帳戶將極大地幫助您進行相關的搜尋和情報蒐集。
Google-Fu的藝術:高級搜尋技巧
玄貓認為,Google不僅僅是一個搜尋引擎,它更是一個強大的情報蒐集工具。掌握Google的高級搜尋技巧,即所謂的Google Dorking或Google Hacking,可以幫助我們從公開索引的資訊中挖掘出敏感情報。
Google搜尋引擎的本質:
Google本質上是一個龐大的索引器,它不斷地爬取網際網路,記錄並歷史化其發現的數據。雖然大多數使用者只會使用基本的關鍵字搜尋,但Google提供了許多高級功能,可以讓搜尋結果更加精準。
Google Dorking的定義與資安倫理:
- 定義:Google Dorking是一種利用Google高級搜尋語法,從網際網路蒐集敏感資訊的方法。透過精密的搜尋指令,使用者可以找到公開索引的、但可能不應被輕易發現的數據。
- 資安倫理:
- 發現漏洞的合法性:發現系統中的漏洞本身並不違法。軟體充滿了錯誤,這也是我們不斷更新的原因。
- 濫用漏洞的違法性:然而,利用新發現的漏洞來濫用其他使用相同軟體的客戶數據是違法的。
- 負責任的揭露(Responsible Disclosure):當資安人員在滲透測試或研究中發現敏感資訊時,必須採取負責任的揭露原則。這意味著將發現傳達給適當的各方,包括軟體或硬體供應商、數據被洩露的公司,以及當地的電腦緊急應變小組(CERT)。
Google Hacking Database (GHDB):
為了更好地理解和應用Google的高級搜尋功能,我們可以參考Google Hacking Database (GHDB)。這個資料庫詳細列出了許多高級搜尋指令,可以幫助我們發現各種敏感資訊。
此圖示:Google-Fu與OSINT核心概念
看圖說話:
此圖示展示了開源情報蒐集(OSINT)的核心概念,特別強調了Google-Fu在其中的作用。OSINT涵蓋了多個面向,包括利用Google-Fu进行高級搜尋、透過LinkedIn蒐集專業資訊、研究Exploit Database中的漏洞,以及導覽國家漏洞資料庫(NVD)。Google-Fu的基礎是Google搜尋引擎的強大索引器和高級搜尋功能。然而,在進行Google Dorking時,必須嚴格遵守資安倫理,區分發現漏洞的合法性與濫用漏洞的違法性,並實踐負責任的揭露原則。這確保了情報蒐集活動在法律和道德的框架內進行,避免將發現的敏感資訊用於惡意目的。
遠端控制PLC:mbtget工具與資安啟示
透過mbtget工具遠端控制PLC
玄貓認為,了解如何從遠端與PLC通訊並控制其I/O,對於理解工業控制系統(ICS)的運作和潛在資安風險至關重要。mbtget工具提供了一個簡潔的介面,讓我們能夠透過ModbusTCP協議讀寫PLC的記憶體地址。
讀取線圈狀態:
- 命令格式:使用
mbtget -r1 -a 0 192.168.1.20命令。
-r1:表示讀取功能碼1(Read Coils),用於讀取位元(bit)狀態。-a 0:表示從地址0開始讀取。192.168.1.20:PLC的IP地址。
- 預期輸出:如果PLC程式設計軟體中的所有覆寫都已清除,您應該會看到地址0的值為0(OFF),表示線圈未被激勵。
寫入線圈狀態:
- 命令格式:使用
mbtget -w5 1 -a 0 192.168.1.20命令。
-w5 1:表示寫入功能碼5(Write Single Coil),將值1(ON)寫入線圈。-a 0:表示寫入地址0。192.168.1.20:PLC的IP地址。
- 預期結果:如果一切順利,您應該能夠點亮信號塔燈的第一個燈(對應
Y001),並在終端機中看到寫入成功的訊息。
再次確認讀取結果:
- 命令格式:再次執行讀取命令
mbtget -r1 -a 0 192.168.1.20。 - 預期輸出:此時,您應該會看到地址0的值變為1,表示線圈已成功被激勵,且燈已點亮。
玄貓建議您繼續測試信號塔燈中其餘的燈,透過修改地址(例如X002到X004對應Y002到Y004),重複讀取和寫入操作,以確保所有燈都能被遠端控制。
此圖示:mbtget遠端控制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 "SCADA VM" as scada_vm
participant "終端機 (Terminal)" as terminal
participant "Koyo Click PLC" as plc
participant "工業信號塔燈" as tower_lamp
user -> terminal : 輸入 "mbtget -r1 -a 0 192.168.1.20" (讀取 Y001)
terminal -> plc : ModbusTCP 讀取請求 (功能碼 1, 地址 0)
plc --> terminal : 返回 Y001 狀態 (例如: 0)
terminal --> user : 顯示讀取結果
user -> terminal : 輸入 "mbtget -w5 1 -a 0 192.168.1.20" (寫入 Y001 ON)
terminal -> plc : ModbusTCP 寫入請求 (功能碼 5, 地址 0, 值 1)
plc --> tower_lamp : 點亮 Y001 對應的燈
plc --> terminal : 返回寫入成功訊息
terminal --> user : 顯示寫入結果
user -> terminal : 輸入 "mbtget -r1 -a 0 192.168.1.20" (再次讀取 Y001)
terminal -> plc : ModbusTCP 讀取請求 (功能碼 1, 地址 0)
plc --> terminal : 返回 Y001 狀態 (例如: 1)
terminal --> user : 顯示讀取結果 (確認燈已亮)
note right of plc
mbtget 透過 ModbusTCP 協議
讀寫 PLC 記憶體地址 (線圈)
end note
@enduml看圖說話:
此圖示展示了透過SCADA虛擬機器上的終端機,使用mbtget工具遠端控制Koyo Click PLC的流程。使用者首先輸入mbtget命令來讀取PLC中Y001線圈的初始狀態。接著,輸入另一個mbtget命令來寫入值1(ON)到Y001線圈,這會透過ModbusTCP協議傳送給PLC,並點亮工業信號塔燈中對應的燈。最後,使用者再次執行讀取命令,確認Y001的狀態已變為1,從而驗證了遠端控制的有效性。這個流程突顯了ModbusTCP協議在ICS系統中實現遠端監控和控制的能力。
資安啟示:ICS環境的脆弱性與防護
玄貓認為,在實驗中,我們可能注意到使用一個簡單的命令列工具就能隨意設定位元,這不禁讓人質疑工業控制系統的資安防護何在。
ICS環境的資安現況:
- 歷史脆弱性:工業環境過去確實存在資安漏洞,但近年來,資安意識已大幅提升。
- 供應商的努力:許多ICS設備供應商已開始在其系統中整合資安層。
- 遺留系統問題:然而,許多客戶尚未將其舊有系統升級到最新技術,這些遺留系統往往缺乏現代資安防護。
覆寫功能的雙面性:
- 在我們的實驗中,
mbtget之所以能夠成功控制PLC,是因為我們在程式設計軟體中啟用了覆寫功能。這使得PLC會響應來自記憶體層面的指令,即使實體輸入並未改變。 - 移除覆寫後的行為:如果您嘗試移除程式設計軟體中的覆寫功能,然後再次使用
mbtget工具強制設定線圈,您會發現PLC不會有任何響應。這是因為PLC已被設定為只響應本地化的實體輸入。
資安教訓:
- 錯誤配置的風險:啟用覆寫功能在測試和開發階段非常有用,但在生產環境中,如果未經授權的遠端存取者利用此功能,將會造成嚴重的資安風險。
- 邏輯漏洞的影響:如同佛羅里達市水廠事件,攻擊者透過調整操作員螢幕上的濃度設定,利用配方邏輯區塊中的漏洞,使得閥門開啟時間延長,從而改變了化學物質的濃度。這說明即使是看似微小的邏輯變更,也可能在現實世界中產生巨大的後果。
暫停ICS實驗:轉向開源情報蒐集(OSINT)
暫停ICS實驗的理由與轉向
玄貓認為,雖然我們已經建立了一個基礎的工業控制系統(ICS)實驗室,並學習了如何編寫程式、連接I/O以及遠端控制PLC,但任何滲透測試專案都不能脫離情報蒐集這個重要環節。尤其是在工業環境中,對目標的全面了解是制定有效測試策略的基石。因此,我們將暫時放下ICS實驗的實作,轉而探討開源情報蒐集(Open-Source Intelligence, OSINT)。
為什麼需要OSINT?
- 理解目標:在對任何企業、設施、流程或合約進行滲透測試之前,必須盡可能地蒐集公開資訊。這有助於我們理解目標的運作模式、技術棧、組織結構,甚至是潛在的漏洞。
- 員工資訊洩露:許多員工在社交媒體或公開平台上分享關於公司的資訊,這些看似無害的內容,卻可能包含關鍵的情報,例如:
- 用於網路分段的防火牆型號。
- 端點保護解決方案。
- 網路存取控制(NAC)資訊。
- 入侵偵測系統(IDS)產品。
- 其他揭露公司技術棧或安全策略的線索。
- 供應鏈情報:透過OSINT,我們甚至可以推斷出一家公司正在使用哪些技術或供應商,這對於理解其互聯生態系統至關重要。
- 深入挖掘:了解目標公司(例如Rockwell)後,我們可以進一步探索其支援網路,尋找潛在的帳戶創建機會,或開發工具和人員來進行更深入的偵察。
開源情報蒐集的核心議題
本章將深入探討以下幾個關鍵議題:
- Google-Fu的藝術:學習如何利用Google搜尋引擎的高級功能進行精準情報蒐集。
- LinkedIn的應用:利用專業社交平台LinkedIn來蒐集組織結構、員工背景和技術專長等資訊。
- Exploit Database的研究:探索Exploit-DB,了解已知的漏洞和利用方式。
- 國家漏洞資料庫(NVD)的導覽:學習如何利用NVD來查詢和理解常見漏洞和曝露(CVE)資訊。
技術要求
為了有效進行本章的學習,您需要準備以下工具:
- 電腦與瀏覽器:一台配備您慣用瀏覽器的電腦,以便存取相關網站。
- LinkedIn帳戶:一個LinkedIn帳戶將極大地幫助您進行相關的搜尋和情報蒐集。
Google-Fu的藝術:高級搜尋技巧
玄貓認為,Google不僅僅是一個搜尋引擎,它更是一個強大的情報蒐集工具。掌握Google的高級搜尋技巧,即所謂的Google Dorking或Google Hacking,可以幫助我們從公開索引的資訊中挖掘出敏感情報。
Google搜尋引擎的本質:
Google本質上是一個龐大的索引器,它不斷地爬取網際網路,記錄並歷史化其發現的數據。雖然大多數使用者只會使用基本的關鍵字搜尋,但Google提供了許多高級功能,可以讓搜尋結果更加精準。
Google Dorking的定義與資安倫理:
- 定義:Google Dorking是一種利用Google高級搜尋語法,從網際網路蒐集敏感資訊的方法。透過精密的搜尋指令,使用者可以找到公開索引的、但可能不應被輕易發現的數據。
- 資安倫理:
- 發現漏洞的合法性:發現系統中的漏洞本身並不違法。軟體充滿了錯誤,這也是我們不斷更新的原因。
- 濫用漏洞的違法性:然而,利用新發現的漏洞來濫用其他使用相同軟體的客戶數據是違法的。
- 負責任的揭露(Responsible Disclosure):當資安人員在滲透測試或研究中發現敏感資訊時,必須採取負責任的揭露原則。這意味著將發現傳達給適當的各方,包括軟體或硬體供應商、數據被洩露的公司,以及當地的電腦緊急應變小組(CERT)。
Google Hacking Database (GHDB):
為了更好地理解和應用Google的高級搜尋功能,我們可以參考Google Hacking Database (GHDB)。這個資料庫詳細列出了許多高級搜尋指令,可以幫助我們發現各種敏感資訊。
此圖示:Google-Fu與OSINT核心概念
@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 "開源情報蒐集 (OSINT)" as osint {
component "Google-Fu" as google_fu
component "LinkedIn 搜尋" as linkedin_search
component "Exploit-DB 研究" as exploit_db
component "NVD 導覽" as nvd
}
rectangle "Google 搜尋引擎" as google_engine {
component "索引器" as indexer
component "高級搜尋功能" as advanced_search
}
rectangle "資安倫理" as ethics {
component "發現漏洞合法性" as discover_legal
component "濫用漏洞違法性" as abuse_illegal
component "負責任的揭露" as responsible_disclosure
}
google_fu -- google_engine
google_fu -- ethics
google_engine --> indexer
google_engine --> advanced_search
osint --> google_fu
osint --> linkedin_search
osint --> exploit_db
osint --> nvd
discover_legal .right.> abuse_illegal : 區別
responsible_disclosure .up.> ethics : 遵守
note right of google_fu
利用 Google 高級搜尋語法
挖掘公開敏感資訊
end note
@enduml看圖說話:
此圖示展示了開源情報蒐集(OSINT)的核心概念,特別強調了Google-Fu在其中的作用。OSINT涵蓋了多個面向,包括利用Google-Fu進行高級搜尋、透過LinkedIn蒐集專業資訊、研究Exploit Database中的漏洞,以及導覽國家漏洞資料庫(NVD)。Google-Fu的基礎是Google搜尋引擎的強大索引器和高級搜尋功能。然而,在進行Google Dorking時,必須嚴格遵守資安倫理,區分發現漏洞的合法性與濫用漏洞的違法性,並實踐負責任的揭露原則。這確保了情報蒐集活動在法律和道德的框架內進行,避免將發現的敏感資訊用於惡意目的。
結論:從技術實作到情資作戰的思維躍遷
縱觀現代工控系統(ICS)的資安攻防演進,從單點技術實作轉向全面情資導向,已是不可逆的趨勢。本文透過 mbtget 工具的實作,不僅揭示了 ModbusTCP 協議的固有脆弱性,其更深層的價值在於驗證了一個關鍵觀點:技術層面的可控性,往往源於管理與配置層面的疏忽。這項發現,正是從技術人員思維邁向管理者戰略視野的轉捩點。
這突顯了當前資安防護的核心瓶頸——許多組織仍停留在被動防堵已知技術漏洞,卻忽略了從外部視角(如開源情報蒐集 OSINT)主動發掘自身曝險面的重要性。從單純的「工具操作」思維,提升至「情資作戰」的戰略高度,是管理者必須突破的認知障礙。僅專注於內部滲透測試,無異於在黑暗中摸索;而透過系統性的情報蒐集,企業才能繪製出完整的攻擊地圖,將有限的資安資源,精準投入在最關鍵的防護節點上。
未來三至五年,我們預見 OT 安全將不再是獨立領域,而是高度整合 IT 安全實踐與情報分析能力的複合戰場。成功的防禦者,將是那些善於融合數位足跡與實體資產情資的團隊。
玄貓認為,對於負責關鍵基礎設施的高階管理者而言,建立組織內部的 OSINT 能力,並將其作為所有資安評估的起點,其策略價值遠高於添購單一的防禦或攻擊工具。這不僅是技術的升級,更是安全思維的根本躍遷。