網路通訊的理論基礎,如OSI模型與IPv4封包結構,是理解數據流動的基石。然而,在網路安全與故障排除的實務中,將抽象理論轉化為可操作的洞察力至關重要。本文透過Wireshark工具,系統性地將理論知識與真實世界的封包數據進行對應。從解析乙太網路幀的MAC位址,到檢視IP層的路由資訊,再到傳輸層的埠號與應用層的原始數據,文章展示了如何逐層解構網路通訊。此外,內容將深入探討擷取與顯示過濾器的策略性運用,並以工業控制系統(ICS)場景為例,示範如何從看似平常的HTTP流量中挖掘出關鍵安全情資,展現從理論到實戰的完整分析流程。

Wireshark封包分析與OSI模型實踐

玄貓認為,對IPv4封包結構的快速解釋,旨在為讀者提供一個理解背景,以便在Wireshark中檢視幀和封包時,能夠理解細節和工件的呈現方式。接下來,我們將實際操作Wireshark,將理論與實務結合。

Wireshark封包細節面板:

Wireshark的封包細節面板(Packet Details Pane)是分析網路流量的核心工具。它將捕獲到的封包內容,按照OSI模型的層次結構進行解析和展示。

此圖示:Wireshark封包細節面板概覽

@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 "Wireshark 封包細節面板" as wireshark_pane {
rectangle "Ethernet II (資料連結層)" as ethernet_layer
rectangle "Internet Protocol Version 4 (網路層)" as ip_layer
rectangle "User Datagram Protocol (傳輸層)" as udp_layer
rectangle "應用層數據 (KOP協議)" as app_data_layer
}

ethernet_layer --> ip_layer : 封裝
ip_layer --> udp_layer : 封裝
udp_layer --> app_data_layer : 承載

note right of ethernet_layer
顯示目的MAC、來源MAC、類型等。
與OSI資料連結層對應。
end note

note right of ip_layer
顯示來源IP、目的IP、TTL、協議等。
與OSI網路層對應。
end note

note right of udp_layer
顯示來源埠、目的埠。
與OSI傳輸層對應。
end note

note right of app_data_layer
顯示應用層原始數據,
可能包含憑證等敏感資訊。
end note

@enduml

看圖說話:

此圖示展示了Wireshark封包細節面板的概覽,它將一個網路封包按照OSI模型的分層結構進行解析。最底層是Ethernet II(資料連結層),顯示了MAC位址等資訊。其上是Internet Protocol Version 4(網路層),包含了來源與目的IP位址、TTL等關鍵路由資訊。再往上是User Datagram Protocol(傳輸層),展示了來源與目的埠號。最上層則是應用層數據,這裡顯示了KOP協議的原始數據。透過這種分層展示,Wireshark讓使用者能夠直觀地將理論的OSI模型與實際捕獲的封包內容聯繫起來,從而深入理解網路通訊的每一個環節。

展開Wireshark中的各層次:

  1. 乙太網路層(Ethernet II)
  • 與OSI模型的資料連結層密切相關。
  • 可見欄位包括:目的MAC位址、來源MAC位址、類型(Type)和填充(Padding)。
  • 組織唯一識別碼(Organizational Unique Identifier, OUI):MAC位址的前三個位元組與OUI相關聯。Wireshark會解析OUI,顯示設備製造商,例如VMware或KoyoElec PLC。
  1. 網路層(Network Layer)
  • 在此層中,我們可以將之前學到的IPv4封包結構直接映射到捕獲到的封包。
  • 關鍵欄位包括:版本(4)、標頭長度(20位元組)、服務類型(0x00)、總長度(43)、識別(0x61ff)、標誌(0x00)、分段偏移(0)、存活時間(128)、協議(UDP, 17)、標頭檢查和(0x5354)、來源IP位址(192.168.3.10)、目標IP位址(192.168.1.20)。
  1. 傳輸層(Transport Layer)
  • 應用程式透過埠號在此層進行通訊。
  • 可見欄位包括:來源埠(54782)和目的埠。
  1. 應用層(Application Layer)
  • 這是封包中最有趣的部份,因為它通常包含未加密的資訊,如憑證。
  • 由於沒有特定的Koyo Click協議解剖器,數據可能不會被解析成友好的格式。
  • 在封包位元組面板(Packet Bytes Pane)中,可以看到ASCII轉換。例如,數據部分以4b 4f 50開頭,其ASCII轉換為KOP字元,這是Koyo Click協議的直接標記。

理論與實踐的結合:

本節討論了OSI模型和封包結構的理論,並將其應用於即時捕獲的流量。透過這種方式,我們能夠將理論與實際應用聯繫起來。接下來,我們將在工程軟體中執行命令,使用Wireshark透過鏡像埠收集數據,然後深入研究KOP協議。這項分析將有助於未來的滲透測試。

網路上的封包擷取

玄貓認為,上一節我們已經描述了OSI模型及其構成和結構的層次。我們也探討了封包的建構方式,並將封包結構與PLC和工程軟體之間的通訊交換進行了比較。在本節中,我們將使用Wireshark更深入地探討,並專注於一些玄貓在實際工作中用於擷取流量的關鍵方面。

鏡像埠的驗證:

在第五章中,我們使用Wireshark驗證了鏡像埠已正確設定和配置。這是進行有效封包擷取的前提。

兩個重要提示:

在深入探討即將到來的內容之前,玄貓要強調兩個非常重要的提示。

Wireshark實戰:流量擷取與過濾技巧

玄貓認為,在網路安全領域,熟練運用Wireshark進行流量分析是不可或缺的技能。透過實踐操作,我們可以將OSI模型的理論知識與實際的封包數據連結起來。

Wireshark流量擷取介面:

啟動Wireshark後,您會看到一個列出不同介面的清單,您可以選擇其中一個來擷取流量。

此圖示:Wireshark擷取介面與過濾框

@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 "Wireshark 擷取介面" as capture_interface {
rectangle "介面列表" as interface_list {
component "乙太網路 0" as eth0
component "Wi-Fi" as wifi
component "迴路介面" as loopback
component "其他介面..." as others
}
rectangle "擷取過濾器輸入框" as capture_filter_input
rectangle "開始擷取按鈕" as start_button
}

eth0 -[hidden]-> wifi
wifi -[hidden]-> loopback
loopback -[hidden]-> others

capture_filter_input -[hidden]-> start_button

note right of capture_filter_input
在此輸入擷取過濾器語法,
精準控制擷取流量的範圍。
end note

note right of interface_list
顯示所有可用的網路介面,
可選擇一個或多個進行監聽。
end note

@enduml

看圖說話:

此圖示展示了Wireshark的擷取介面,其中包含了介面列表,列出了所有可用的網路介面,如乙太網路0、Wi-Fi和迴路介面等,使用者可以選擇一個或多個介面進行流量監聽。圖中特別標示了擷取過濾器輸入框,這是Wireshark的一個核心功能,允許使用者在開始擷取之前,輸入特定的過濾語法,以精準地控制要擷取的流量範圍。最後,開始擷取按鈕則啟動了實際的流量捕獲過程。透過這個介面,使用者可以有效地管理和篩選網路流量,從而提高分析效率。

擷取過濾器(Capture Filter):

  • 功能:擷取過濾器允許我們精準地擷取流量。如果您正在尋找特定的主機、主機範圍、協議或任何與互動相關的內容,這將非常有用。
  • 與顯示過濾器(Display Filter)的區別
  • 擷取過濾器:會丟棄或拒絕不符合條件的封包,因此這些封包不會被儲存。
  • 顯示過濾器:只會隱藏不符合條件的封包,但這些封包仍然會被儲存下來,以便後續分析。
  • 玄貓建議:如果您不確定在滲透測試中會擷取到什麼,建議先擷取所有流量,然後再應用顯示過濾器進行分析。然而,在非常嘈雜的網路中,幾秒鐘內就可能擷取到數百萬個封包,產生數百GB的數據。此時,擷取過濾器可以幫助您獲得更小、更易於管理的封包擷取檔案。但這也意味著您可能會錯過其他可能包含「黃金」資訊的流量。

常見的擷取過濾器範例:

以下是一些在實務中常用的簡單擷取過濾器範例:

  1. 針對特定主機(host)
  • 語法host 192.168.1.20
  • 功能:擷取所有發送給或來自192.168.1.20的流量,其他流量將被丟棄。這在客戶限制您進行高度目標性滲透測試時非常有用。
  1. 針對特定子網路(subnet)
  • 語法net 192.168.1.0/24
  • 功能:僅擷取目標為192.168.1.0/24子網路的流量。這對於客戶不希望您接觸其他網路或與其通訊的情況很有用。這種情況通常出現在灰箱或白箱滲透測試中。
  1. 針對特定埠(port)
  • 語法port 502
  • 功能:擷取所有通過埠502的流量。例如,這對於監控Modbus流量非常有用,特別是當您需要針對設施內特定流程的特定程序時。

更複雜的過濾方式:

  • 您可以利用更複雜的過濾器來追蹤檔案傳輸協議(FTP)、網路檔案系統(NFS)、SMB檔案移動、TELNET或基本的HTTP認證流量。
  • 當您的目標明確時,使用擷取過濾器可以幫助您專注於重要的封包,並將檔案大小保持在可管理的範圍。
  • 儘管擷取過濾器可以生成更小、更易於管理的封包擷取檔案,但您可能會錯過其他可能包含重要資訊的流量。

玄貓認為,接下來我們將專注於顯示過濾器,這將提供更大的靈活性來分析已捕獲的所有流量。

Wireshark顯示過濾器:深入分析ICS協議

玄貓認為,相較於擷取過濾器,顯示過濾器在滲透測試和網路鑑識中提供了更大的彈性與深度。透過擷取所有封包,我們可以在事後對相關攻擊向量進行更全面的鑑識分析,而這些資訊若使用擷取過濾器則可能被忽略。

顯示過濾器(Display Filter)的應用:

  • 操作步驟:停止當前的Wireshark擷取,移除任何擷取過濾器,然後重新選擇您的介面進行擷取。這樣,您就能夠擷取網路上的所有封包。
  • 實務範例:您應該能夠看到Koyo Click PLC或您在實驗室中用於與工程軟體互動的任何PLC之間的通訊。

此圖示: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 "工程工作站" as workstation
control "Wireshark" as wireshark
entity "Koyo Click PLC" as plc

workstation -[hidden]-> wireshark
wireshark -[hidden]-> plc

workstation -- plc : 執行命令/配置
plc -- workstation : 回應/數據

wireshark --> workstation : 顯示分析結果
wireshark --> plc : 監聽通訊

note right of wireshark
Wireshark監聽並捕獲
PLC與工作站之間的所有通訊。
end note

note "顯示過濾器在此處輸入" as filter_note
filter_note -[hidden]-> wireshark

@enduml

看圖說話:

此圖示展示了PLC與工程工作站之間的通訊概覽,以及Wireshark在其中扮演的監聽角色。工程工作站作為操作者,向Koyo Click PLC發送命令或配置,而PLC則回應相應的數據。Wireshark則在兩者之間監聽並捕獲所有的通訊流量。圖中特別標示了「顯示過濾器在此處輸入」,這強調了Wireshark的顯示過濾器功能,它允許使用者在捕獲所有流量後,透過輸入特定的過濾條件,從龐大的數據中篩選出感興趣的資訊,以便進行深入分析,而不會遺漏任何潛在的「黃金」數據。

顯示過濾器輸入欄:

這是進行封包評估的關鍵位置。玄貓將介紹在滲透測試中常用的一些重要過濾器。

針對ICS協議的分析:

在操作技術(OT)生態系統中,存在許多ICS專用的協議,例如Modbus、Ethernet/IP、DNP3、S7、HART等。這些協議將在後續章節中深入探討。然而,本節將重點關注一些「低垂的果實」,這些協議在網路中傳輸大量數據,並在客戶基礎設施中進行樞軸攻擊時非常有用。

HTTP協議分析:

HTTP協議是玄貓在Wireshark中分析的首選,因為它能夠提取大量資訊。儘管安全業界正積極推動HTTPS的部署,但在ICS領域,許多SCADA系統、HMI、RTU、PLC、流量電腦和氣相層析儀(GC)仍然使用傳統的Web介面來傳輸數據或執行控制。

HTTP協議中的「寶貴金塊」:

HTTP協議中蘊藏著豐富的寶貴資訊,包括:

  • 基本認證(Basic Authentication):可以直接提取和解碼Base64編碼的使用者名稱和密碼。在尚未更新的舊系統中,這些數據仍然可以找到。
  • 授權和摘要存取(Authorization and Digest Access):可以提取用於協商憑證的授權和摘要存取資訊,這些資訊隨後可以使用Hashcat或John the Ripper等工具進行暴力破解。
  • 請求方法:提取所有GETDELETE方法,提供大量有用資訊。
  • API呼叫和指令:對於尋找應用程式介面(API)呼叫和指令非常有用。

實際案例分享:機場滲透測試

玄貓分享了一個參與機場相關專案的經驗:

  • 問題:該機場的公共Wi-Fi網路實際上是一個扁平網路(flat network),且其閘道器未更改預設憑證。
  • 漏洞:他們沒有在SIEM(安全資訊和事件管理)系統上實施HTTPS,並且使用單一帳戶記錄和存取所有進出SIEM的流量。
  • 攻擊過程:玄貓獲得Base64編碼的憑證後,經過簡單解碼和登入,便能看到完整的機場基礎設施,包括所有航廈、行李處理、HVAC(暖通空調)、人員移動設備、照明等。

玄貓強調,由於HTTP攜帶大量數據,因此在Wireshark中,它通常是首選的分析目標。玄貓希望能夠盡可能地找出所有「低垂的果實」。

結論

縱觀網路滲透測試的實踐效益,Wireshark 的價值不僅在於技術操作的熟練度,更深刻地體現在分析策略的選擇與決策品質上。擷取過濾器與顯示過濾器的權衡,正是專業深度與實戰思維的體現。前者追求效率與檔案管理,卻潛藏著錯失關鍵線索的系統性風險;後者看似笨拙地全盤接收,卻為事後鑑識保留了最大的可能性與攻擊向量的完整視野,確保了資訊優勢。

本文透過對HTTP等傳統協議的分析案例揭示,在看似陳舊的技術棧中,往往蘊藏著價值最高的「黃金資訊」。這種在龐雜數據中發掘「低垂果實」的能力,正是全面擷取策略的核心投資回報。隨著OT與IT領域的持續融合,這種將傳統IT分析技術精準應用於工控場景的跨界能力,將成為區分頂尖安全專家與一般從業人員的關鍵績效指標。

玄貓認為,真正的封包分析大師,並非僅僅熟稔工具語法,而是懂得在效率與全面性之間做出策略取捨的藝術家。對於追求卓越成就的專業人士而言,養成優先確保數據完整性、再以深度分析提煉價值的習慣,才能在複雜的網路攻防中,始終掌握發掘致勝情報的主動權。