ICMP消息的作用和控制
我們學習網絡,少不了對OSI模型的認識。從中,我們也知道,支持網絡結構的一些協議,也是有著層次的區分。那么今天我們介紹的ICMP以及ICMP消息的有關內容也是其中的重點。OSI模式的第3層是網絡層。數據鏈路層提供節點間的連接,而網絡層則負責路由轉發及實現路由表協議。其中最主要的就是互聯網協議(IP)。網絡層上還提供其他的服務,如互聯網控制消息協議(ICMP)。ICMP是專門用作邏輯錯誤和診斷的信使。RFC792對它作了詳細的闡述。任何IP網絡設備都有發送、接收或運作ICMP消息的功能。雖然ICMP的設計者沒有考慮今天出現的安全性問題,但是他們已經設計了一些能使ICMP更有效運作的基本準則。
1. 為了確保ICMP消息不會淹沒IP網絡,ICMP沒有任何特別的優先級,它總是一種常規流量。
2. ICMP消息作為其他ICMP消息的響應而發送。這個設計機制是為了防止出現一個錯誤消息不斷地重復制造出另一個錯誤消息。否則,它就真的是個大問題了。
3. ICMP不能作為多播或廣播流量的響應而發送。
知道了這些ICMP基本準則后,我們再來關注下ICMP報頭的格式。設計好的ICMP的報頭就包含了一個類型域和代碼域。通常ICMP包含以下類型:
0 Echo Reply (Ping)
3 Destination Unreachable
4 Source Quench
5 Redirect Message
6 Alternate Host Address
8 Echo Request (Ping)
9 Router Advertisement
10 Router Solicitation
11 Time Exceeded
類型域和代碼域可以一起用于確定ICMP消息的發送原因。例如,類型3表示一個目標不能到達。在類型3消息中有16位唯一碼。該代碼標識了目標為什么不能到達。其中可能包括網絡問題(代碼0)、路由阻擋數據包(代碼13),或者甚至是應用不在目標計算機(代碼3)。最常見的ICMP信息類型是8/0,它是一個呼叫請求/回答(ping)。
現在有很多基于ICMP開發的網絡工具。Traceroute就是其中的一個。Traceroute以連續地發送有序編號的IP TTL數據包來尋找ICMP TTL溢出的返回消息。通過它的這個設計,你能發現ICMP是一個非常有用的網絡工具。但是,它也是最常用的和最濫用的協議之一。現在,讓我們來看看一些關于ICMP濫用的情況。
ICMP濫用
之前介紹過使用ping作為基本的連接工具。但它也被黑客廣泛地用來在攻擊前進行連接驗證。你是無法攻擊一個沒有連接上和沒有啟動的系統——而ping則是幫你發現系統是否正在運行的好辦法。由于這樣的問題太多了,以致目前很多網絡都阻擋了ping。雖然這樣做是一個好的開始,但是它并沒有完全解決問題。比如,隱藏工具Loki就是一個例子。
1996年Phrak的地鐵雜志上發布了Loki,它是一個概念驗證工具。如果安裝在內部電腦上,Loki可以使用ICMP回叫網絡外的黑客。管理員看到的只是發出的新ping流量,而黑客則事實上已經建立了隱秘的通道。ICMP協議從而正被用于消息傳送。但是,只要在防火墻上同時阻擋進出的ICMP就可以解決這個問題。
與ICMP相關的另一個潛在問題是它在拒絕服務(DoS)攻擊中的使用。Smurf就是一個例子。Smurf使用ping數據包來濫用ICMP。它會發送壞ICMP數據包。它能修改目標地址以將數據包發送到網絡節點的廣播地址。而源地址則已經被重新指定為被攻擊者地址。在大型的網絡上,很多系統都會響應廣播ping。這樣攻擊的結果是導致被攻擊者被ping響應流所淹沒,以致合法的訪問被阻斷。在2002年發生了一個類似的、針對核心DNS服務器的攻擊案例。管理員可以在Cisco路由器上添加以下命令來防止他們的網絡響應Smurf流量:no ip directed-broadcast.
ICMP還可以用于輔助進行端口掃描和OS識別,這也叫做指紋識別。它是攻擊過程中一個必要的步驟。畢竟,在不知道目標系統運行狀態的情況下,攻擊是無法成功的。例如,黑客可能只有一個針對Windows XP的攻擊,因此它對于Windows 2003系統就沒有用了。指紋識別是用于識別OS的。當進行指紋識別時,黑客會使用一個掃描工具來向目標系統發送一系列正常的、特有的以及異常的ICMP查詢。接著,掃描工具會觀察響應并將它們與數據庫進行比較。
ICMP是設計用于更可信網絡的。有了ICMP的所有功能,如果它可以在網絡上自由的進出,那么它將會是非常實用的。但是,事實上并不是這樣的。如果你的目的是為了使網絡更加的安全,那么要盡可能地在重要的網絡訪問端口阻截和禁用ICMP。你的選擇將會丟棄或拒絕流量。但是,這些都由你自己來決定。從安全的角度考慮,丟棄數據包可以減少信息的泄露并使黑客更加難以收集到信息。而拒絕數據包會使服務能發現操作失敗并快速地中止,而這使使網絡更加容易受到攻擊了。基于這些原因,作者建議選擇丟棄ICMP數據。