Internet Control Message Protocol POD攻擊 IPv6 ICMP 網路

理解ICMPv6新協定 鞏固網管查修與資安防線

2017-04-13
本文將講解ICMP協定的運作方式,並介紹Ping、Trace及Traceroute等常見的ICMP工具,也會示範Ping工具的網路攻擊行為以及防禦的方式,以及說明最新版的ICMPv6。
在諸多的網路協定中,ICMPv6是ICMP協定在IPv6網路環境底下的新版本,其內容被定義在RFC 4443文件之中。而ICMP協定最主要的目的是用來了解網路封包或是分析路由的情況,大多都是透過所傳回來的錯誤訊息來分析,而網路管理人員透過這個協定的工具來了解狀況,進而使用其他措施來解決所遇到的問題。

ICMP協定被廣泛地使用,所以不只網路管理人員,很多進階的網路使用者也大多聽過。以下將講解ICMP協定的運作方式,以及常見的ICMP工具Ping、Trace、Traceroute,並說明Ping工具的網路攻擊行為和防禦之道,當然也會介紹ICMPv6。由於本篇文章主要是針對網路管理人員,所以其防禦之道也是針對所常用的路由器(Router)設備中下手。

ICMPv6網路協定簡介

ICMP是Internet Control Message Protocol的縮寫,這個網路協定運用在網路七層協定中的第三層。其最主要的目的是用來了解網路封包或是分析路由的情況,大多都是透過所傳回的錯誤訊息來做分析,而網路管理人員利用這個協定的工具來得知狀況,進而使用其他措施來解決所遇到的問題。

ICMP協定是基於IP協定之上來運作的,不過主要不是用於點與點之間的傳輸,但是有兩個工具卻是用於點與點之間,透過ICMP協定來了解網路狀況,它們就是Ping與Traceroute,下面會做說明。

ICMP協定被定義在RFC 792文件內。其中一個重要的觀念是,ICMP會使用TTL(Time To Live)的概念,其值代表還有多少的「生存時間」,其實就是還可以被轉發處理多少次。

每個路由器在轉發ICMP封包時,都會把IP Header的TTL值減1,如果TTL值已經到0,就代表TTL已經到期,接著就會傳送錯誤訊息給原本發送的網路設備。Traceroute工具就是使用TTL的方式來達到網路檢測,而Ping則是透過ICMP的Echo Request和Echo Reply來完成檢測。

而ICMPv6協定則是ICMP網路協定在IPv6網路環境中的特殊版本,詳細資料定義在RFC 4443編號的文件中。與ICMP網路協定一樣,都是運作在網路七層協定中的第三層,其用途與ICMP協定是一樣的。

認識ICMPv6資料格式

ICMPv6協定的資料格式主要定義在RFC 58文件內,其資料內容可以分成錯誤訊息(Error Message)和資料訊息(Information Message)兩大類型。如何決定一個ICMPv6封包是錯誤訊息或是資料訊息,則取決於表頭(Header)中的資料。在Header中,有以下三個主要的欄位:

‧ 類型(Type)

‧ 代碼(Code)

‧ 校正碼(Checksum)

第一個值類型是用來指明現在這個封包是錯誤訊息還是資料訊息,這是一個8位元的欄位。如果第一個位元為0(也就是類型的值介於0到127之間),代表此封包是一個錯誤訊息。如果第一個位元是1(類型的值介於127到255之間),則表示這個封包是一個資料訊息。

代碼則用來表示後面所接的資料的詳細分類,所以與類型的值是有關連的,代碼也是一個長度為8位元的欄位。而最後的校正碼與大部分的校正碼觀念一樣,是用來檢驗整個封包的資料完整性,這是一個16位元的欄位。這個校正碼的預設值為0。表1列出一些錯誤訊息類型的值及其代表的意義對應,可供大家參考。

表1 錯誤訊息類型的值及其代表的意義

以上都是錯誤訊息的類型,當然對於類型值為1或3或是4,都還要查看代碼以便於解讀這個錯誤訊息。例如目的地無法到達,可能是因為沒有任何已知的網路路徑能夠傳送到目的地(代碼為1),或者是管理上的因素無法獲得傳遞到目的地的權限(代碼為2)。除此之外,還有很多種類的代碼,細節可查看RFC文件。

了解Ping指令的用法

Ping是一個網路工具,這個指令最主要的功能就是用來測試網路的連線能力是否正常,而這個測試是基於IP協定運作的。該指令能夠回報Ping封包到目的端設備來回所需的最少時間、最大時間與平均時間,可以用來確認到指定設備之間網路路徑的可靠程度。

雖然Windows系統也有ping指令,但是Cisco設備中ping指令的輸出結果是截然不同的,如果沒有注意的話,很容易會誤會結果所代表的意義。表2是Cisco設備中ping指令輸出結果中各種符號所代表的意義一覽表。

表2 Cisco設備中ping指令輸出符號的代表意義

Ping的運作原理是向目的端設備發送一個ICMP echo@要求封包,並且等待目的端回傳封包。1983年首先由Mike Muuss編寫了這樣一個程式,用於測試IP網路的問題。取名為ping是因為這個工具的用途與潛水艇的主動聲納技術很相近,於是Mike就將這個程式取名為「ping」。

由於Ping的普及性,其實很多人都會以ping當成動詞,來代表ping這個動作。例如「ping看看那台伺服器」,以代表是否有可能從目前這個設備傳送網路封包到那台伺服器。

在IRC上,很多人也以ping這個動詞來嘗試找到某人,例如某人想要找Mike Muuss,而假設他的IRC代號為mmuuss,則這個人可能會在IRC頻道上寫上「@mmuuss, ping.」或是「ping mmuuss」等等。而一般來說,對方若發現被找,則可能會回應pong,這是因為ping與pong,像是乒乓球一樣來回拍打的聲音。

底下是在Mac作業系統上的ping指令執行範例。這裡以IPv4為範例,應該會比較容易理解,IPv4與IPv6在這邊的運作方式大同小異。


在上面的範例中,這裡是發送ICMP的ping到140.115.1.254伺服器,若看到有時間time=xx ms,代表成功發送過去。這裡看得出來是用64個Bytes做傳送測試,對方反應時間為11~13毫秒之間。如果失敗的話,則會看到類似以下timeout的訊息:



追蹤我們Featrue us

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!