網路封包分析是網路管理和安全的重要環節,能深入瞭解網路通訊行為。本文將探討如何在 Linux 系統中使用 tcpdump 和 Wireshark 進行封包擷取和分析,從 Layer 2 探索協定 LLDP 和 CDP 開始,進一步分析 VoIP 通話,並探討相關安全議題。我們將示範如何使用 tcpdump 擷取特定網路介面的流量,並使用 Wireshark 分析不同協定,如 SIP 和 RTP,以及如何解讀封包內容以瞭解 VoIP 通話的建立、語音傳輸和 DSCP 標記等細節。此外,文章也將探討 VoIP 通話的安全性問題,例如來電顯示欺騙和組態檔案竄改,並提供使用 Wireshark 分析和過濾封包的技巧,幫助讀者提升網路安全意識。最後,文章將討論如何使用 Linux 工具進行日誌管理和流量分析,包含日誌輪替策略、使用 grep 進行日誌搜尋,以及設定特定事件警示等實務操作。
封包擷取與分析在Linux中的應用
在前面的章節中,我們討論了DHCP服務的安全性問題。現在,讓我們進一步探討如何使用封包擷取和分析技術來瞭解網路中的通訊。
LLDP和CDP:Layer 2探索協定
LLDP(Link Layer Discovery Protocol)和CDP(Cisco Discovery Protocol)是兩種常見的Layer 2探索協定,它們可以提供有關網路拓撲的有價值資訊。這些協定對於網路管理和安全至關重要。
為什麼LLDP和CDP很重要?
LLDP和CDP可以提供以下資訊:
- 網路裝置的型號和韌體版本
- 網路裝置的連線埠和VLAN資訊
- 網路裝置的電源供應情況(例如,PoE)
這些資訊對於網路管理員來說非常有用,因為它們可以幫助管理員瞭解網路拓撲、識別潛在的安全風險和最佳化網路組態。
如何擷取LLDP和CDP封包?
要擷取LLDP和CDP封包,我們可以使用Wireshark等封包分析工具。以下是擷取這些封包的過濾器範例:
ether host 01:00:0c:cc:cc:cc or ether proto 0x88cc
或者
ether host 01:00:0c:cc:cc:cc or ether host 01:80:C2:00:00:0E
分析LLDP封包
在擷取到LLDP封包後,我們可以使用Wireshark來分析它們。以下是LLDP封包的範例:
此圖示顯示了一個LLDP封包的詳細資訊:
+
---
-
---
-
---
-
---
+
| LLDP Header |
+
---
-
---
-
---
-
---
+
| Chassis ID |
| Port ID |
| TTL |
| ... |
+
---
-
---
-
---
-
---
+
內容解密:
- LLDP Header:LLDP封包的標頭,包含協定版本和容量。
- Chassis ID:裝置的機殼ID,通常是MAC地址。
- Port ID:裝置的連線埠ID,通常是連線埠編號。
- TTL:存活時間,表示LLDP封包的有效時間。
從LLDP封包中,我們可以獲得以下資訊:
- 該電話裝置的型號是Yealink T21P-E2,序號是805ec086ac2c。
- 該裝置正在執行韌體版本52.84.0.15。
- 該裝置位於未標記(原生)VLAN中(VLAN ID為0),並且沒有設定QoS標籤(DSCP為0,L2優先順序為0)。
從封包擷取中收集檔案
如果我們在封包擷取中看到檔案傳輸,我們可以使用Wireshark來收集該檔案。以下是從TFTP檔案傳輸中收集檔案的步驟:
- 開啟Wireshark並載入封包擷取檔案。
- 使用過濾器來找出TFTP封包(例如,
tftp)。 - 右鍵點選第一個資料封包並選擇「Follow」>「UDP Stream」。
- 在新視窗中,我們可以看到傳輸的檔案內容。
- 點選「Save as…」來儲存檔案。
程式碼範例:使用Wireshark的tftp過濾器
tftp
內容解密:
tftp過濾器用於找出TFTP封包。- Wireshark會自動解碼TFTP封包並顯示檔案傳輸的內容。
在這個範例中,我們成功地從TFTP檔案傳輸中收集了一個名為SIPDefault.cnf的檔案。該檔案包含了Cisco SIP電話的預設組態。
在Linux中進行封包捕捉與分析:VoIP電話呼叫的故障排除
在前面的討論中,我們已經瞭解瞭如何使用Linux工具捕捉和分析網路流量。現在,我們將探討一個特定的應用案例:捕捉和分析VoIP電話呼叫。
捕捉VoIP電話呼叫的設定
首先,我們需要設定我們的捕捉環境。為了捕捉VoIP電話呼叫,我們將使用與之前相同的設定。我們將從客戶端電話(連線在G1/0/1埠)撥打電話到客服電話(連線在G1/0/2埠)。透過捕捉G1/0/1埠的進出流量,我們應該能夠獲得所需的資料。
捕捉過程
# 啟動捕捉過程,確保在撥打電話之前開始捕捉,並在結束通話電話之後結束捕捉
tcpdump -i G1/0/1 -w voip_capture.pcap
分析捕捉的VoIP電話呼叫
捕捉完成後,我們可以使用Wireshark開啟PCAP檔案(例如HelpDesk Telephone Call.pcapng)進行分析。
探索SIP封包
在Wireshark中,我們可以看到SIP(Session Initiation Protocol)封包用於建立VoIP呼叫。例如,在第6個封包中,我們可以看到標有“Ringing”的SIP INVITE訊息。
SIP封包結構
### SIP INVITE訊息結構
- 方法:INVITE
- URI:sip:被叫方@目的IP
- 頭部欄位:包含主叫方資訊、被叫方資訊、呼叫控制資訊等
分析RTP封包
一旦呼叫建立,協定就會從SIP(在5060/udp埠)切換到RTP(Real-Time Protocol)。RTP封包包含實際的語音資料。
RTP封包的DSCP標記
在RTP封包中,我們可以看到DSCP(Differentiated Services Code Point)值被設定為46(Expedited Forwarding,EF)。這告訴網路裝置優先處理這些封包,以確保語音流的完整性。
跟蹤RTP流
透過在Wireshark中選擇一個RTP封包,右鍵點選並選擇“Follow UDP Stream”,我們可以提取整個呼叫的RTP語音資料進行分析。
重現VoIP對話
Wireshark提供了一個特殊的處理程式來還原語音對話。開啟Telephony | VoIP Calls,雙擊捕捉的呼叫,我們可以看到對話的兩個部分被表示為兩個WAV輸出檔案。可以透過點選“Play”按鈕播放整個對話。
儲存VoIP對話
另外,可以透過選擇Telephony | RTP | Stream Analysis,然後選擇“Save”將對話儲存為AU(Sun Audio)檔案,該檔案可以被大多數媒體播放器播放,或轉換為其他所需的音訊格式。
內容解密:
- 使用tcpdump進行捕捉:使用tcpdump命令在指定的網路介面上捕捉VoIP通話相關的封包。
- Wireshark分析:開啟捕捉的PCAP檔案,使用Wireshark分析SIP和RTP封包,瞭解VoIP呼叫的建立和語音資料傳輸過程。
- DSCP標記的作用:DSCP值(如EF)用於指示網路裝置如何優先處理封包,以確保語音流的品質。
- 跟蹤RTP流:使用Wireshark的功能提取和播放VoIP對話,用於故障排除或安全分析。
本章節重點介紹瞭如何在Linux環境中使用tcpdump和Wireshark工具來捕捉和分析VoIP電話呼叫。透過這種方法,讀者可以更深入地瞭解VoIP通訊的工作原理,並具備進行相關故障排除和安全分析的能力。
VoIP 通話的封包擷取與分析
VoIP 通話的安全性問題
VoIP(Voice over IP)技術在現代通訊中扮演著越來越重要的角色,但其安全性問題也不容忽視。預設情況下,大多數 VoIP 組態不加密語音流量,以避免加密/解密造成的延遲或抖動,這些都是影響語音品質的主要因素。這意味著在這些情況下,語音資料無法被視為「安全」。
在我們討論的客服電話案例中,客服人員使用了來電顯示來驗證呼叫者的身份。然而,這種方法在某些情況下可能被攻破。攻擊者可以透過封包擷取來瞭解 VoIP 基礎設施的工作原理,然後在自己的電腦上設定一個「軟電話」。在這種情況下,攻擊者可以自定義來電顯示的內容,因為它只是一個簡單的文字欄位。當通話建立時,通常來電顯示是由電話機而不是 PBX(Private Branch Exchange)提供的,因此客服人員很容易被欺騙。
VoIP 電話組態的安全漏洞
通常,電話機的啟動順序使用根據 TFTP 或 HTTP 的組態服務。該服務根據電話機的「名稱」下載組態檔案。在許多情況下,電話機的「名稱」是 SIP 後面跟著電話機的 MAC 地址——您也可以在電話機的 LLDP 廣告中看到這些名稱。不同電話機廠商的命名規則可能會有所不同,但幾乎總是一個簡單的文字字串與電話機 MAC 地址結合。攻擊者只需在組態/供應伺服器和電話機之間進行 MiTM(Man-in-the-Middle)攻擊,就可以輕易地竄改組態檔案中的關鍵欄位,再加上組態檔案的明文性質,使得攻擊者能夠修改關鍵欄位。
使用 Wireshark 分析 VoIP 通話
使用 Wireshark 過濾 VoIP 通話的封包,可以幫助我們瞭解通話的建立和拆除過程。例如,我們可以過濾出 SIP 協定的封包,以檢視通話的建立過程:
圖 11.21 – 僅過濾 SIP 協定(呼叫建立/拆除)
此圖顯示了整個呼叫建立、響鈴、接聽和最終結束通話(BYE 封包在 7848)的過程。我們還可以透過指定 udp.port==5060 來過濾 SIP 協定。比較這與封包擷取過濾器,請注意顯示過濾器使用不同的語法,這使得它更加靈活。通常,您會使用一個過濾器來擷取所需的內容,然後在 Wireshark 中再次過濾,以便使用多個過濾器串聯起來鑽取到您想要的內容。
程式碼範例:使用 Wireshark 過濾 SIP 協定
# 使用 Wireshark 過濾 SIP 協定
wireshark -Y "sip" -r capture_file.pcap
內容解密:
此命令使用 Wireshark 的顯示過濾器功能,僅顯示 SIP 協定的封包。-Y 選項指定了過濾器語法,而 -r 選項則指定了要讀取的封包擷取檔案。
分析 RTP 流量
要分析 VoIP 通話的實際語音內容,我們需要過濾出 RTP(Real-time Transport Protocol)流量:
圖 11.22 – 僅過濾 RTP 流量(語音對話)
通常,您只需要透過協定名稱來過濾 RTP,因為 RTP 連線埠會在每次通話中根據 SIP 建立過程進行協商。透過深入分析 RTP 封包,我們可以看到使用的連線埠號碼,例如 12200 和 12830。
SDP 協定在 RTP 連線埠協商中的作用
SDP(Session Description Protocol)是 SIP 協定的一部分,用於協商 RTP 連線埠。第一個 SDP 封包(封包 4)中,呼叫者指定了自己的 RTP 連線埠。回應的 SDP 封包(封包 13)中,被呼叫者指定了自己的 RTP 連線埠。
圖 11.24 – 呼叫者設定 RTP 連線埠
圖 11.25 – 被呼叫者設定 RTP 連線埠
重點回顧
- VoIP 通話預設不加密,可能導致語音資料被竊聽。
- 攻擊者可以透過封包擷取和 MiTM 攻擊來竄改 VoIP 電話組態。
- 使用 Wireshark 可以有效地分析和排除 VoIP 通話的問題。
- SDP 協定在 RTP 連線埠協商中扮演重要角色。
練習題
- 為什麼要使用端點主機或中間裝置上的 SPAN 連線埠進行封包擷取?
- 在什麼情況下會使用
tcpdump而不是 Wireshark? - 用於 VoIP 對話的 RTP 通常使用哪些連線埠?這些連線埠是如何協商的?
網路監控:使用 Linux 進行日誌管理和流量分析
技術需求與環境建置
在本章中,我們將討論多種網路監控與管理的方法。雖然您可以重現本章中的範例架構,但請注意您的實際資料將有所不同。因此,在使用不同搜尋條件處理您的環境中的資料(以及需要解決的問題)時,方法論將保持一致。您可以使用現有的 Linux 主機或虛擬機器來建立本章中描述的範例系統。然而,在實際生產環境中,您可能會將這些功能分散到一台、兩台或甚至更多的專用伺服器上。
使用 Syslog 進行日誌管理
日誌管理是管理任何系統的關鍵部分,集中式日誌管理幾乎被普遍推薦。集中式日誌管理允許您將多台伺服器或服務的日誌合併到一個按時間順序排列的檔案中。這樣可以加快故障排除或診斷的速度,因為您可以檢視事件在不同平台之間的流動。
日誌大小、輪替與資料函式庫
首先要注意的是,日誌檔案會快速增長。即使在小型組織中,如果啟用了防火牆的完整日誌記錄,日誌檔案每天都可以達到數 GB。加上來自路由器、交換器、伺服器及其服務的日誌,日誌檔案可能會變得非常龐大和難以搜尋。
# 範例:使用 tcpdump 捕捉並儲存網路流量到檔案
tcpdump -i eth0 -w capture.pcap -s 0 -G 60 -W 1440
內容解密:
-i eth0指定要捕捉流量的網路介面。-w capture.pcap將捕捉的流量儲存到名為capture.pcap的檔案中。-s 0設定捕捉資料包的最大長度為 65535 位元組,以捕捉完整資料包。-G 60每 60 秒輪替一次日誌檔案。-W 1440最多保留 1440 個檔案,即一天(24小時)的資料。
這種做法可以幫助管理和儲存大量的日誌資料,同時確保重要的資訊不會因為日誌檔案過大而被覆寫或遺失。
網路監控的關鍵議題
在進行網路監控時,除了日誌管理之外,還需要考慮使用 SNMP(簡單網路管理協定)來收集網路裝置和主機的效能統計資料,這對於故障排除和容量規劃非常有用。此外,NetFlow 和其他流量收集協定可以用於檢測流量異常,從而幫助識別潛在的安全威脅。
使用 SNMP 進行網路監控
SNMP 是一種廣泛使用的網路管理協定,可以用來監控和控制網路裝置。它允許管理站透過查詢或接收通知來收集裝置的資訊。
# 範例:使用 snmpwalk 命令查詢裝置資訊
snmpwalk -v 2c -c public 192.168.1.1 sysDescr
內容解密:
-v 2c指定 SNMP 版本為 2c。-c public指定共同體字串為public,用於身份驗證。192.168.1.1是被查詢裝置的 IP 地址。sysDescr是 SNMP 物件識別符,用於取得裝置的描述資訊。
使用 NetFlow 分析網路流量
NetFlow 是一種用於收集 IP 網路流量資訊的協定,可以用來分析網路流量模式,檢測異常流量,並進行安全監控。
# 範例:使用 nfcapd 收集 NetFlow 資料
nfcapd -p 9995 -l /var/log/netflow
內容解密:
-p 9995指定 nfcapd 監聽的埠號為 9995。-l /var/log/netflow指定 NetFlow 資料的儲存目錄。
透過這些工具和技術,您可以有效地進行網路監控和管理,及時發現並解決潛在的問題。
Linux 網路監控與日誌分析
在處理日常問題時,解析日誌資料並將其儲存在資料函式庫中至關重要。這樣做不僅能大幅加快搜尋速度,尤其是在套用策略性索引後,還能更有效地管理資料的整體大小。該方法的關鍵不在於管理磁碟空間,而是在於盡可能根據目標時間間隔來管理日誌量,以便於可預測和可重複的故障排除和報告視窗。
日誌分析 – 尋找「問題」
一旦擁有儲存在磁碟上的日誌,主要挑戰就在於如何有效地使用它們。特別是在故障排除或處理安全事件時,知道日誌中存在有價值的資訊,但卻不知道從哪裡開始搜尋、如何搜尋以及使用哪些工具,對於初學者來說是一項艱巨的任務。
從哪裡開始搜尋
通常,確定問題出現在OSI堆積疊的哪一層是有意義的。例如,重複的IP地址是第三層問題,您需要在路由器或交換器日誌中查詢。然而,同樣的問題可能最初是由終端使用者報告的,例如「網頁伺服器運作不穩定」,因此您可能會從網頁伺服器的應用程式日誌開始著手。可能需要花一些時間透過各種伺服器和裝置日誌向下追蹤,以找到根本原因。
如何進行搜尋
在大多數情況下,搜尋日誌涉及一系列的包含和排除子句。如果您正在搜尋文字日誌,通常會使用類別似 grep –i "包含文字" 或 grep –i –v "排除文字" 的命令。使用 -i 選項可以使搜尋不區分大小寫。如果您將足夠多的這些命令按照正確的順序組合起來,通常就足夠了。
cat logfile.txt | grep –v "a.a.a.a" | grep –v "b.b.b.b" | grep "/53 " | sed 's/\t/ /g' | tr –s " " | cut -d " " -f 13 | sed 's/:/ /g' | sed 's/\// /g' | cut -d " " -f 2 | sort | uniq –c | sort –r
內容解密:
cat logfile.txt: 將logfile.txt的內容輸出到標準輸出。grep –v "a.a.a.a": 排除包含a.a.a.a的行。grep –v "b.b.b.b": 排除包含b.b.b.b的行。grep "/53 ": 只保留包含/53的行,通常與DNS查詢相關。sed 's/\t/ /g': 將製表符替換為空格。tr –s " ": 將多個連續空格壓縮為一個空格。cut -d " " -f 13: 以空格為分隔符,提取第13個欄位。sed 's/:/ /g'和sed 's/\// /g': 分別將冒號和斜線替換為空格,以便於後續的欄位提取。cut -d " " -f 2: 再次以空格為分隔符,提取第2個欄位。sort | uniq –c | sort –r: 對結果進行排序、計數並按降序排列,以找出最常見的專案。
這種方法看似複雜,但實際上是逐步迭代完成的。透過逐步構建查詢陳述式,可以有效地縮小搜尋範圍,最終找到所需的資訊。
特定事件的警示
除了事後分析日誌外,還可以設定對特定事件的即時警示。這需要在日誌中定義一些簡單的文字字串,當這些字串出現時,就會觸發警示,向相關人員傳送電子郵件或簡訊警示。
常見的搜尋詞彙包括(通常建議進行不區分大小寫的搜尋):
- 各種錯誤訊息或警告
- 安全相關的日誌條目
- 系統或應用程式故障的跡象
透過設定這些警示,可以在問題發生的第一時間獲得通知,從而快速採取行動,避免問題擴大。