ICMP 隧道——將流量封裝進 IMCP 的 ping 數據包中,旨在利用 ping 穿透防火牆的檢測


利用 ICMP 隧道穿透防火牆

以前穿透防火牆總是使用 SSH 隧道、DNS 隧道或 HTTP 隧道等等,今天來說一個利用 SNMP 隧道進行穿透工具--icmptunnel。

簡介

icmptunnel 可以將 IP 流量封裝進 IMCP 的 ping 數據包中,旨在利用 ping 穿透防火牆的檢測,因為通常防火牆是不會屏蔽 ping 數據包的。但是現在市面上已經有了很多類似的工具了,那么 icmptunnel 又有哪些優勢呢?icmptunnel 提供在狀態機防火牆和 NAT 網絡之間,更加可靠的連接。

編譯

首先從 Github 上面 clone 下代碼:

git clone https://github.com/jamesbarlow/icmptunnel.git 

隨后使用 make 命令進行編譯即可。

示例

注:這款工具只能在 Linux 下面使用。

首先我們需要在兩端設備上面禁止 ICMP 響應。下面這條命令會阻止內核響應 ping 數據包:

# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all 

隨后,在服務端以服務器模式啟動 icmptunnel,並給隧道接口分配一個 IP 地址:

# ./icmptunnel –s opened tunnel device: tun0 (ctrl-z) # bg # /sbin/ifconfig tun0 10.0.0.1 netmask 255.255.255.0 

在客戶端,使用 icmptunnel 連接上服務器,並給隧道接口分配一個 IP 地址:

# ./icmptunnel <server> opened tunnel device: tun0 connection established. (ctrl-z) # bg # /sbin/ifconfig tun0 10.0.0.2 netmask 255.255.255.0 

現在,我們就擁有一個端到端基於 ICMP 數據包的隧道了。其中服務器地址為 10.10.0.1,客戶端地址為 10.10.0.2。在客戶端可以嘗試通過 SSH 連接服務器:

# ssh root@10.0.0.1 Password: 

當然也可以把遠程服務器當作一個加密的 SOCKS 代理:

# ssh -D 8080 -N root@10.0.0.1 Password: 

至此,我們就可以在瀏覽器上使用本地 SOCKS 代理了。

工作機理

請求端的 Ping 工具通常會在 ICMP 數據包后面附加上一段隨機的數據作為 Payload,而響應端則會拷貝這段 Payload 到 ICMP 響應數據包中返還給請求端,用於識別和匹配 Ping 請求。

Windows 和 Linux 系統下的 Ping 工具默認的 Payload 長度為 64 比特,但實際上協議允許附加最大 64K 大小的 Payload。

對於隧道數據,icmptunnel 首先會指定客戶端和服務器端。隨后,客戶端會將 IP 幀封裝在 ICMP 請求數據包中發送給服務器,而服務器端則會使用相匹配的 ICMP 響應數據包進行回復。這樣在旁人看來,網絡中傳播的僅僅只是正常的 ICMP 數據包。

狀態防火牆和 NAT

那么就出現了一個問題,隧道如何穿過狀態防火牆或 NAT?一些設備會過濾沒有匹配響應數據包的 Ping 包。而在非對稱連接中,來自服務器端的流量會大於客戶端,反之亦然,這樣客戶端可能會丟棄一些相應數據包,因為響應數據包多余請求數據包。

icmptunnel 有一個機制來專門解決這個問題。客戶端會定期發送一個空的 ICMP 請求數據包給狀態防火牆或 NAT,而這些請求數據包都會被記錄在防火牆狀態表中。同時通過保持發送帶有載體的數據包,這樣客戶端會維持一個可以用於服務器端發送數據的“數據包窗口”。

檢測隧道

下面是一些檢測惡意 ICMP 流量的方法:

  • 檢測同一來源 ICMP 數據包的數量。一個正常的 ping 每秒最多只會發送兩個數據包。而使用 ICMP 隧道的瀏覽器在同一時間會產生上千個 ICMP 數據包。
  • 注意那些 ICMP 數據包中 payload 大於 64 比特的數據包。當然 icmptunnel 可以配置限制所有數據包的 payload 為 64 比特,這樣會使得更難以被檢測到。
  • 尋找那些響應數據包中 payload 跟請求數據包不一致的 ICMP 數據包。
  • 檢查 ICMP 數據包的協議標簽。例如,icmptunnel 會在所有的 ICMP payload 前面增加 'TUNL' 標記以用於識別隧道,這就是特征。

工具地址:https://github.com/jamesbarlow/icmptunnel


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM