該專案旨在建立一個易於使用的工具,該工具將解析pcap
檔案以返回 TCP 封包中發現的任何歧義。我們目前也致力於實現 UDP 和 ARP 分析。
大綱:
貢獻:歡迎任何評論/想法/貢獻。
make
./p2a -v ./pcap_files/some_pcap_file.pcap -s results.json
$ ./p2a -h
Usage: ./p2a [OPTIONS] FILE
-h,--help: display this help message
-v,--verbose: verbose option
-d,--debug: debug option
-x,--exclude OPTIONS: exclude some possible ambiguities from analysis
--exclude ret,mac,ttl
ret: exclude retransmission analysis
mac: exclude MAC addresses analysis
ttl: exclude TTL analysis
-s,--save FILENAME: saves results to file FILENAME
JSON format - FILENAME should contain the JSON extension
Examples:
./p2a -v ./pcap_files/some_pcap_file.pcapng
./p2a --exclude mac,ttl --verbose my-pcap-file.pcap -s results.json
我剛剛添加了將所有結果保存到 JSON 檔案的選項。為此,可以使用--save file.json
選項。它將所有會話保存在此文件中,無論是否在其中發現歧義。我目前正在研究一種在 HTML 文件中很好地呈現 JSON 檔案的方法(使用一些 JavaScript)。
SHA(IP, Port)
我們使sha
腳本可用於調試目的。它採用 IP 位址和連接埠號碼作為參數,並傳回 (IP|Port) 的 SHA1 雜湊值。該值用作p2a
腳本中的會話標識符。
make sha
./sha -h
Usage:
./sha IP PORT
./sha 127.0.0.1 12345
IP: 127.0.0.1
Port: 12345
SHA1: 21bf549a8095063f49cff573e689b6b10365f4c8
IP 位址和whois
如果某個會話可疑,了解其相關內容可能會很有用。為此,可以使用 Wireshark 並套用顯示過濾器以僅顯示給定會話。
更簡單的方法是使用whois
來了解誰擁有 IP 位址。
要將whois
與捕獲檔案中的所有 IP 位址一起使用:
for ip in $( tshark -r file.pcapng -T fields -e ip.dst -e ip.src | egrep -o " [0-9]+.[0-9]+.[0-9]+.[0-9]+ " | sort | uniq ) ; do whois $ip | egrep " ^[Oo]rgani[sz]ation " ; done
如果
tshark
不起作用,這裡有一個 C 腳本可以做同樣的事情。
IP 封包的生存時間(TTL) 欄位對應於該封包在被路由器丟棄之前「允許」在網路中傳輸的時間長度。它是一個 8 位元值,通常每跳減一。
根據 Cisco 關於 TTL 過期攻擊的頁面:
「當IOS設備收到TTL值小於或等於1的資料包時,IOS設備會發送ICMPv4 Type 11,Code 0報文,從而對CPU產生相應的影響。出現這種影響是因為更多的CPU響應(使用TTL 超出的封包)TTL 值小於1 的封包需要進行處理,而不是簡單地轉送TTL 值大於1 的封包。
「TTL 過期行為會建立針對網路設備的拒絕服務 (DoS) 攻擊向量。網路設備是專門為盡快轉送普通資料包而設計的。當遇到異常資料包(例如TTL 值過期的資料包)時,數量會有所不同路由器花費了很大的精力來做出適當的響應。
分析/代碼:
在utils.c
中,我們定義了TTL_THRESHOLD
(目前=10)。如果封包的 TTL 低於此值,則會出現一個標誌以指示 TTL 較低。如果出現太多此類標誌,則可能是 TTL 過期攻擊。
範例 pcap 檔案(包含低 TTL 的資料包)是使用./attack_scripts/low_ttl
目錄中的腳本捕獲的。
ARP 中毒在於欺騙主機,使其相信我們是預設閘道。受害者定期向預設網關詢問其 MAC 位址(ARP 協定)。但攻擊者可以向受害者發送封包,稱預設閘道位於另一個 MAC 位址(例如攻擊的 MAC 位址)。攻擊者只需要「足夠定期」發送這些資料包,以便受害者「丟棄」來自預設網關的真實訊息。
這可以讓攻擊者以多種方式繼續攻擊受害者:中間人、DoS、黑洞…
例子:
受害者的IP位址是192.168.10.2
,預設閘道是192.168.1.1
:
sudo arpspoofing -i wlan0 -t 192.168.10.2 192.169.1.1
攻擊者將繼續向受害者發送 ARP 封包,告訴受害者192.168.1.1
是攻擊者的 MAC 位址。這樣,受害者會將其資料包(針對互聯網)發送給攻擊者,而攻擊者不會重定向它們( -r
選項來重定向它們)。
分析/代碼:
為了進行分析,由於我們只查看 IP 封包(目前), p2a
將它遇到的所有對(MAC address, IP address)
保存在鍊錶中。檢查新的給定對時,它會遍歷鍊錶,如果 IP 位址已與另一個 MAC 位址關聯,則傳回錯誤。
對於上面的範例,我們的腳本將檢測到192.168.1.1
(預設閘道)與兩個不同的 MAC 位址相關聯:真實的 MAC 位址,直到攻擊者進來並告訴受害者它是預設閘道並且其MAC 位址已取得與預設閘道關聯(從受害者的 vue 角度來看)。
TCP 連線中發送的每個資料位元組都有一個關聯的序號。這在TCP 標頭的序號欄位上指示。
當接收套接字偵測到傳入的資料段時,它使用 TCP 標頭中的確認號來指示已收到。發送一包資料後,發送方將啟動一個可變長度的重傳定時器。如果在定時器到期之前沒有收到確認,發送方將假定該資料段已遺失並重傳。
當另一個資料包擁有與目前資料包相同的確認和序號時,我們可以看到TCP 重傳。
TCP 重傳非常常見,而且可能是完全正常的(如果一個封包因合法遺失而重傳),但也可能是網路或通訊出現問題的徵兆。
當同一 IP 封包中包含的兩個片段具有表明它們在封包內的定位彼此重疊的偏移量時,就會發生IP 片段重疊漏洞利用。這可能意味著片段 A 被片段 B完全覆蓋,或者片段 A 被片段 B部分覆蓋。片段後。這是淚滴攻擊的基礎。 (取自維基百科)
重疊片段也可用於嘗試繞過入侵偵測系統。在此漏洞中,攻擊的一部分與附加隨機資料一起以片段形式發送;未來的碎片可能會用攻擊的剩餘部分覆蓋隨機資料。如果 IDS 未正確重組完整的資料包,則攻擊將無法偵測。
淚滴攻擊:涉及向目標機器發送具有重疊、超大有效負載的損壞的 IP 片段。
尚未實施
如果我們觀察到給定會話的多個 TTL 值,則可能表示路由已更改,這表示資料包不會像連接開始時那樣遵循與連接結束時相同的路徑。這可能是由於外部真正的變化,但也可能意味著攻擊者更改了封包所採用的路由(例如進行 MiTM 攻擊)。
然而,大多數時候,一個會話在整個連線中具有兩個或三個不同的 TTL 值:大多數時候,客戶端和伺服器不使用相同的初始 TTL 值。
如果給定會話有兩個以上不同的 TTL 值,則腳本將傳回錯誤。
目錄 | 描述/內容 |
---|---|
./attack_scripts | 用於測試和記錄一些 TCP 歧義(欺騙、低 TTL)的簡單腳本 |
./pcap_files | 用於測試p2a PCAP 文件 |
./tests_libpcap | 用於測試和開始使用libpcap 兩個腳本 |
libpcap
pcap
應用程式pcap
範例檔案位於網頁末尾tcpdump
過濾器libpcap
教程libpcap
pcap.h
手冊頁