現代工業控制系統(ICS)已普遍採用網路化的SCADA管理介面,這雖然提升了操作便利性,卻也將過去相對封閉的系統暴露於網路安全威脅之中。相較於底層工業協議的複雜性,Web應用層的漏洞往往成為更直接的攻擊切入點。本篇文章將理論與實踐結合,闡述如何透過代理工具鏈對SCADA系統進行系統性的滲透測試。其核心方法論在於建立一個中間人(Man-in-the-Middle)環境,藉由FoxyProxy與Burp Suite的協同運作,精準攔截並解構系統的身份驗證與授權流程。從代理配置、憑證信任建立到實際流量分析,此一系列操作不僅是技術演練,更是理解現代工控系統安全弱點的關鍵途徑,為後續發掘與驗證帳號權限漏洞奠定穩固基礎。

Ethernet/IP在工業滲透測試中的戰略意義與未來展望

玄貓認為,Ethernet/IP協議雖然在初看之下可能比Modbus複雜,但其class/instance/attribute的結構化定址方式,實則使其命令傳輸與接收變得相當直觀。這項認知在工業滲透測試中具有舉足輕重的地位。

Ethernet/IP的戰略重要性:

如前言所述,Ethernet/IP協議在全球工業設備中佔有約30%的運行比例。無論是啟動或停止Colonial Pipeline的主線壓縮站,還是運行Amazon物流中心的輸送帶,您在進行工業滲透測試時都將會遇到這個協議。掌握其通訊機制,對於評估和強化工業控制系統的安全至關重要。

下章預告:

在下一章中,我們將探討如何使用Burp Suite對基於網路的SCADA介面進行滲透測試。

SCADA網路介面滲透測試:Burp Suite與暴力破解

玄貓認為,在工業控制系統的滲透測試中,除了底層協議的分析,針對上層SCADA網路介面的攻擊同樣不容忽視。本章將聚焦於如何利用Burp Suite等工具,對SCADA系統進行暴力破解攻擊。

攻擊鏈的兩端:

在上一章中,我們探討了工業協議的原理,特別是Modbus和Ethernet/IP的細微之處。我們討論並使用了工具來枚舉埠並找出這些設備上運行的服務。在第七章「掃描」中,我們利用工具瀏覽目錄和虛擬主機,這表明我們對攻擊鏈的兩端都有紮實的理解。

現在是時候將重點放在攻擊,尤其是**暴力破解(brute force)**上。儘管發現一個遺留服務,然後花時間進行逆向工程和開發漏洞利用程式令人興奮,但時間往往不允許。

弱密碼與預設密碼的風險:

操作人員使用基本密碼或出廠預設密碼來存取Ignition SCADA等系統(我們在第七章「掃描」中安裝過)是非常常見的。作為使用者,您可以透過暴力破解完全控制一個工業製程。因此,學習如何使用像Burp Suite這樣的網路滲透測試工具至關重要,因為它將幫助您存取許多系統。

本章將涵蓋以下關鍵主題:

  1. 安裝FoxyProxy
  2. 運行Burp Suite
  3. 建構SCADA暴力破解腳本

技術要求:

為了完成本章的內容,您將需要以下工具:

  • 運行Firefox瀏覽器的Kali Linux虛擬機。
  • 已安裝Burp Suite Community Edition。
  • 一份SCADA設備預設密碼列表。

安裝FoxyProxy:

1. 代理伺服器與流量攔截:

在我們開始安裝FoxyProxy之前,玄貓認為理解**代理伺服器(proxy server)**是什麼以及為什麼要使用它至關重要。代理伺服器是一種設備或網路,它將流量從一個網路或設備轉換到另一個網路或設備。然而,這說起來容易做起來難:這對我們意味著什麼?為什麼我們應該關心流量轉換?透過代理伺服器,我們可以攔截所有源自和導向我們攻擊主機的流量。這使我們能夠增強和調整請求與伺服器互動的方式。

2. FoxyProxy的功能:

現在我們已經建立了一個代理伺服器,那麼FoxyProxy到底是什麼?FoxyProxy是一個簡單而有效的代理切換器。它消除了您必須手動更改瀏覽器內部代理設定的繁瑣過程。

此圖示:工業網路滲透測試流程概覽

@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 "滲透測試者 (玄貓)" as pentester
rectangle "Kali Linux VM" as kali_vm {
component "Firefox 瀏覽器" as firefox
component "FoxyProxy" as foxyproxy
component "Burp Suite" as burpsuite
component "SCADA 暴力破解腳本" as brute_force_script
}
rectangle "工業控制網路" as icn {
cloud "網路" as network
rectangle "SCADA 系統" as scada_system {
component "Web 介面" as web_interface
database "使用者資料庫" as user_db
}
rectangle "PLC/控制器" as plc_controller {
component "Modbus/EthernetIP 協議" as industrial_protocols
}
}

pentester --> kali_vm : 準備環境 (安裝工具)
kali_vm --> foxyproxy : 安裝 FoxyProxy
kali_vm --> burpsuite : 運行 Burp Suite

foxyproxy --> firefox : 管理代理設定
firefox --> burpsuite : 導向 HTTP/S 流量

burpsuite --> web_interface : 攔截/修改 HTTP/S 請求
burpsuite --> brute_force_script : 執行暴力破解攻擊

brute_force_script --> web_interface : 嘗試登入憑證
web_interface --> user_db : 驗證憑證

web_interface --> scada_system : 存取 SCADA 功能
scada_system --> industrial_protocols : 控制 PLC/控制器

note right of burpsuite
用於攔截、分析和修改 Web 流量
支援暴力破解模組
end note

note right of foxyproxy
簡化瀏覽器代理切換
end note

@enduml

看圖說話:

此圖示概述了工業網路滲透測試的流程,特別是針對SCADA網路介面的攻擊策略滲透測試者(玄貓)Kali Linux虛擬機上準備了必要的工具,包括Firefox瀏覽器FoxyProxyBurp SuiteFoxyProxy被用來管理瀏覽器的代理設定,將所有HTTP/S流量導向Burp SuiteBurp Suite作為核心工具,負責攔截、分析和修改發往SCADA系統Web介面的請求。透過Burp Suite的暴力破解模組,或結合自定義的SCADA暴力破解腳本,玄貓可以嘗試不同的登入憑證,以期突破Web介面的防線,進而存取SCADA功能,甚至透過工業協議控制底層的PLC/控制器。這個流程強調了從Web應用層面發起攻擊的重要性,以及代理工具在其中扮演的關鍵角色。

FoxyProxy安裝與Burp Suite配置:網路滲透測試的基石

玄貓認為,在進行網路滲透測試時,有效的流量管理和攔截工具是不可或缺的。FoxyProxyBurp Suite的結合,為滲透測試者提供了一個強大且靈活的平台,用於分析和操縱SCADA系統的Web流量。

FoxyProxy的安裝:

1. 啟動Firefox並開啟選單:
  • 登入您的Kali Linux虛擬機,並啟動Firefox ESR瀏覽器。
  • 在螢幕右側,點擊「漢堡」按鈕(選單按鈕),將會出現一個下拉選單。
2. 搜尋並安裝FoxyProxy Standard:
  • 在選單中選擇「附加元件」(Add-ons)選項。
  • 在附加元件頁面,前往搜尋欄,輸入「FoxyProxy Standard」,然後點擊搜尋。
  • 您將看到一個可能匹配的附加元件列表,其中FoxyProxy Standard通常位於列表頂部。
  • 點擊「FoxyProxy Standard」連結,將會彈出一個視窗,允許您點擊「新增至Firefox」(Add to Firefox)選項。
3. 授予權限並完成安裝:
  • 點擊「新增至Firefox」按鈕繼續。此時,您將面臨一個權限請求。玄貓提醒,這至關重要,因為FoxyProxy將會存取您的瀏覽器設定。您將允許它以下權限。
  • 點擊「新增」(Add)按鈕以成功安裝FoxyProxy。
  • 在Firefox的工具列右側,您現在應該會看到一個狐狸圖示。點擊該圖示,將會出現FoxyProxy的配置畫面。
4. 配置FoxyProxy設定:
  • 目前我們沒有任何代理設定,因此我們將透過點擊「+新增」(+ Add)連結來建立一些。
  • 點擊後,您將進入一個螢幕,可以在其中輸入您的初始代理設定。玄貓通常使用以下參數:
  • 標題(Title):BurpSuite Proxy
  • 代理IP位址(Proxy IP Address):127.0.0.1
  • 埠號(Port):8080
  • 點擊「儲存」(Save)後,您應該會看到新添加的設定,顯示為「BurpSuite Proxy」。

這就完成了FoxyProxy的安裝和第一個代理選項的配置,這對於Burp Suite來說非常有用。FoxyProxy的便利性在於您可以輕鬆快速地配置代理、開啟和關閉它們,並在多個代理之間切換,這在您的滲透測試生涯中將會非常實用。

運行Burp Suite:

1. Burp Suite憑證的導入:

在上一節中,我們安裝了FoxyProxy並修改了一些參數以適應我們的Burp Suite程式。在本節中,我們將使用Burp Suite來了解Ignition SCADA用於處理身份驗證和授權的請求/回應操作。為了繼續進行,我們現在必須將Burp Suite的憑證添加為受信任的來源;否則,我們將被迫將訪問過的每個頁面都識別為例外。

2. 下載CA憑證:
  • 為此,我們需要訪問我們在設定中指定的IP位址和埠號(通常是127.0.0.1:8080)。
  • 完成後,您將被引導到一個Burp Suite Community Edition的歡迎頁面,其中右側有一個「CA憑證」(CA Certificate)按鈕。
  • 點擊此按鈕,您將進入一個螢幕,選擇「儲存」(Save)選項,然後點擊「確定」(OK)按鈕。這會將cacert.der憑證檔案下載到您的系統中。
3. 導入CA憑證到Firefox:
  • 接著,在Firefox的「漢堡」選單下,選擇「設定」(Preferences)。
  • 在左側,點擊「隱私與安全」(Privacy & Security)。
  • 向下滾動直到您到達「憑證」(Certificates)部分。
  • 選擇「檢視憑證」(View Certificates)。將會彈出一個視窗。
  • 點擊「導入…」(Import…)按鈕,導航到您剛才下載的cacert.der檔案。

此圖示:FoxyProxy與Burp Suite配置流程

@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 "滲透測試者 (玄貓)" as pentester
rectangle "Kali Linux VM" as kali_vm {
component "Firefox 瀏覽器" as firefox
component "FoxyProxy 附加元件" as foxyproxy_addon
component "Burp Suite" as burpsuite_app
}

pentester -> firefox : 啟動 Firefox ESR
firefox --> foxyproxy_addon : 搜尋並安裝 FoxyProxy Standard
foxyproxy_addon --> firefox : 授予權限
foxyproxy_addon --> pentester : 顯示狐狸圖示

pentester -> foxyproxy_addon : 配置代理設定 (127.0.0.1:8080)
foxyproxy_addon --> foxyproxy_addon : 儲存設定為 "BurpSuite Proxy"

pentester -> burpsuite_app : 啟動 Burp Suite

pentester -> firefox : 訪問 Burp Suite 代理介面 (127.0.0.1:8080)
firefox --> burpsuite_app : 載入歡迎頁面
burpsuite_app --> pentester : 顯示 "CA Certificate" 按鈕

pentester -> burpsuite_app : 點擊 "CA Certificate" 按鈕
burpsuite_app --> firefox : 下載 `cacert.der` 檔案

pentester -> firefox : 開啟設定 -> 隱私與安全 -> 憑證
firefox --> firefox : 檢視憑證
firefox --> firefox : 點擊 "導入..."

pentester -> firefox : 選擇並導入 `cacert.der` 檔案
firefox --> firefox : 憑證導入成功

note right of foxyproxy_addon
簡化代理切換,提高效率
end note

note right of burpsuite_app
攔截、分析、修改 Web 流量
需導入憑證以處理 HTTPS
end note

@enduml

看圖說話:

此圖示詳細描繪了FoxyProxy和Burp Suite的配置流程,這是網路滲透測試的關鍵準備步驟。滲透測試者(玄貓)首先在Kali Linux虛擬機Firefox瀏覽器中安裝並配置了FoxyProxy附加元件,將其代理設定指向127.0.0.1:8080,這正是Burp Suite應用程式的預設監聽位址。接著,玄貓啟動Burp Suite,並透過Firefox訪問Burp Suite的代理介面,下載其CA憑證。最後,玄貓將這個CA憑證導入到Firefox的信任憑證儲存區中,以確保瀏覽器能夠信任Burp Suite所攔截和重新簽名的HTTPS流量。這個流程確保了所有透過Firefox的Web流量都能被Burp Suite有效攔截和分析,為後續的SCADA Web介面滲透測試奠定了基礎。

Burp Suite憑證安裝與流量攔截實踐

玄貓認為,在進行Web應用滲透測試時,正確配置代理工具並導入其憑證,是確保能夠全面攔截和分析HTTPS流量的基礎。本節將詳細說明如何在Firefox中完成Burp Suite憑證的安裝,並啟動Burp Suite進行實際的流量攔截。

導入Burp Suite憑證:

1. 設定信任選項:
  • 選擇您剛剛導入的cacert.der檔案後,點擊「確定」。
  • 接著會出現一個畫面,要求您設定信任選項。勾選「信任此CA以識別網站」(Trust this CA to identify websites)。
  • 點擊「確定」按鈕。
2. 驗證憑證安裝:
  • 為了確保導入成功,請向下滾動憑證列表,找到「PortSwigger」憑證。
  • 點擊「確定」完成憑證安裝。

至此,憑證已成功安裝。

啟動Burp Suite與流量攔截:

1. 啟動Burp Suite並建立專案:
  • 在您的Kali Linux虛擬機上,找到並啟動Burp Suite
  • 您將會看到配置專案的選項。玄貓建議您開始將不同的滲透測試任務分組到不同的專案中,這將有助於您長期撰寫結果報告。對於本次練習,玄貓將使用「暫時專案」(Temporary project)。
  • 在下一個畫面中,您可以選擇載入預設配置或使用Burp Suite的預設設定。玄貓將使用Burp的預設設定。
2. 確認代理監聽器配置:
  • 接下來,我們需要再次檢查Burp是否正在使用正確的代理監聽器。
  • 為此,請前往「代理」(Proxy)選單,然後進入「選項」(Options)。
  • 在這裡,確認有一個新的代理監聽器,其介面IP位址為127.0.0.1,埠號為8080,並且憑證已設定。
3. 啟用攔截功能:
  • 確保您的代理已選中,並且「攔截」(Intercept)功能已開啟。
  • 同時,請確保FoxyProxy中已啟用BurpSuite的代理設定。
4. 攔截Ignition SCADA登入流量:
  • 現在進入有趣的部分:我們將在Burp Suite中攔截流量並研究其行為。
  • 前往Ignition SCADA的登入頁面。
  • 您可能會注意到功能上的缺失,這是因為Burp Suite已經攔截了您剛剛發起的GET請求。如果Burp Suite沒有在應該出現的時候出現,請前往它並點擊「代理」選項卡,然後點擊「攔截」子選項卡。
5. 分析登入請求:
  • 仔細查看數據,您會發現僅僅存取登入畫面就產生了大量的流量。
  • 例如,一個典型的GET請求可能包含以下資訊:
GET /idp/default/authn/login?app=gateway&token=Pj0cPAqKDiqz0WvV4xsfjwnSd2e2Tt74Xz1TcxT7cnQ&token=GH3KbGJqdSGsTTUQNDqKB7WFLR0NOoJgwFniBohji40&response_type=code&client_id=ignition&redirect_uri=%2Fdata%2Ffederate%2Fcallback%2Fignition&scope=openid&state=eyJraWQiOiJrMSIsImFsZyI6IkhTMjU2In0.eyJqdGkiOiJyRUNzVFdPUTE4aDVQM2ViSUd0cnBDc25BTENncmZnakNpNl9nQWlxYjZrIiwidXJpIjoiL3dlYi9ob21lIn0.ogt_6V-fkMDS2gZCVm0lsxc4dF2XrauixoEFznsZ-2c&nonce=XepL7IYBXyStUEVhMKtl83hxnYL9wI1fdM1wsPJgxpM&prompt=login&max_age=1 HTTP/1.1
Host: 192.168.2.10:8088
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Cookie: default.sid=fj0zNMpRCctgmCAWcfJlJwrhPIVrZD-Auda96Bmghk4; JSESSIONID=node01u4ie14zjwage1dqw2zu6fs16q8.node0
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0

這段請求顯示了訪問登入頁面時,瀏覽器發送的各種資訊,包括URL參數、HTTP頭部和Cookie。

6. 嘗試登入:

現在,嘗試使用admin:admin憑證登入。儘管我們知道實際的憑證是scada:scada,但我們將假裝我們剛剛發現了這個登入介面,並嘗試常見的預設憑證。

此圖示:Burp Suite憑證安裝與流量攔截流程

@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 "滲透測試者 (玄貓)" as pentester
rectangle "Kali Linux VM" as kali_vm {
component "Firefox 瀏覽器" as firefox
component "Burp Suite" as burpsuite
component "FoxyProxy 附加元件" as foxyproxy
}
rectangle "Ignition SCADA 系統" as scada_system {
component "Web 登入介面" as login_page
}

pentester -> firefox : 啟動 Firefox
pentester -> burpsuite : 啟動 Burp Suite (臨時專案, 預設設定)

pentester -> firefox : 訪問 Burp Suite 代理介面 (127.0.0.1:8080)
firefox --> burpsuite : 下載 `cacert.der` 憑證
pentester -> firefox : 導入 `cacert.der` 到 Firefox 信任憑證區
firefox --> firefox : 憑證安裝完成

pentester -> burpsuite : 確認代理監聽器 (127.0.0.1:8080)
pentester -> burpsuite : 啟用攔截 (Intercept is on)
pentester -> foxyproxy : 啟用 BurpSuite 代理

pentester -> firefox : 訪問 Ignition SCADA 登入頁面 (例如: 192.168.2.10:8088)
firefox --> burpsuite : **攔截 GET 請求**
burpsuite --> pentester : 顯示攔截到的 GET 請求 (例如: /idp/default/authn/login?...)

pentester -> firefox : 嘗試登入 (admin:admin)
firefox --> burpsuite : **攔截 POST 登入請求**
burpsuite --> pentester : 顯示攔截到的 POST 請求

note right of burpsuite
核心功能:
- 代理監聽
- 流量攔截與修改
- 憑證管理
end note

note right of login_page
目標: 透過 Burp Suite 分析
認證與授權流程
end note

@enduml

看圖說話:

此圖示詳細描繪了Burp Suite憑證安裝和流量攔截的整個流程,這是對Web應用進行滲透測試的基礎。滲透測試者(玄貓)首先在Kali Linux虛擬機上啟動了Firefox瀏覽器Burp Suite。玄貓透過訪問Burp Suite的代理介面下載並成功將其CA憑證導入到Firefox中,確保了HTTPS流量能夠被Burp Suite正確攔截和解密。隨後,玄貓確認了Burp Suite的代理監聽器已啟用,並透過FoxyProxy將Firefox的流量導向Burp Suite。當玄貓訪問Ignition SCADA的登入頁面時,Burp Suite成功攔截了GET請求,並展示了請求的詳細內容。接著,當玄貓嘗試使用admin:admin憑證登入時,Burp Suite再次攔截了POST登入請求。這個流程清晰地展示了如何利用Burp Suite作為中間人,來觀察和分析Web應用程式的認證與授權流程。

檢視SCADA網路介面滲透測試在高壓時程下的實踐效益,可以發現,熟練掌握Burp Suite與FoxyProxy這類Web流量分析工具,已不僅是技術選項,而是決定測試成敗的關鍵策略資產。相較於耗時費力的底層協議逆向工程,直接鎖定普遍存在的弱密碼與預設憑證風險,形成一條高效率、高投資回報率的攻擊路徑。本章詳述的配置流程看似基礎,實則為測試者構建了穩固的分析基石,使其能將精力從繁瑣的環境設定,轉移至核心的認證邏輯漏洞挖掘,大幅提升在有限時間內發現關鍵脆弱點的可能性。

展望未來,隨著工業4.0與IIoT的推進,SCADA系統與標準IT技術的融合將更為深化,這意味著傳統Web應用安全攻防技術將全面移植到OT安全場域。

因此,玄貓認為,對於工業安全專業人士而言,將Web應用攻擊思維與工具鏈整合至OT評估流程中,已是刻不容緩的技能升級。這不僅是技術的演進,更是戰略思維的轉變,能以最小投入,精準打擊當前工業控制系統最普遍的脆弱環節。