查看單個文章
舊 2003-12-14, 08:50 PM   #1
psac
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設 關於IP分片的攻擊方法

IP分片是在網路上傳輸IP報文時常採用的一種技術手段,但是其中存在一些安全隱患。Ping of Death, teardrop等攻擊可能導致某些系統在重組IP分片的程序中宕機或者重新啟動。最近,一些IP分片攻擊除了用於進行拒絕服務攻擊之外,還經常用於躲避防火牆或者網路入侵檢測系統的一種手段。部分路由器或者關於網路的入侵檢測系統(NIDS),由於IP分片重組能力的欠缺,導致無法進行正常的過濾或者檢測。在本文中將從 IP分片的基本概念介紹入手,詳細探討關於IP分片的攻擊和迂迴入侵檢測系統所採用的一些手段。

IP分片的理解

IP傳輸協定在傳輸資料包時,將資料報文分為若干分片進行傳輸,並在目標系統中進行重組。這一程序稱為分片( fragmentation)。 IP 分片(Fragmentation)發生在要傳輸的IP報文大小超過最大傳輸服務機構MTU(Maximum Transmission Unit)的情況。比如說,在乙太網(Ethernet)環境中可傳輸最大IP報文大小(MTU)為1500字元。如果要傳輸的報文大小超過1500字元,則需要分片之後進行傳輸。由此可以看出,IP分片在網路環境中是經常發生的事件。但是,如果經過人為的惡意操作的分片,將會導致拒絕服務攻擊或者迂迴路由器、防火牆或者網路入侵檢測系統(NIDS)的一種攻擊手段。

為到達目標主機之後能夠正常重組,各分片報文具有如下信息:

* 各IP分片關於IP分片識別號進行重組,識別號相同的重組為相同的IP報文。IP分片識別號長度為16位,叫做「IP identification number」或者「fragment ID」。

* 各分片具有從原始報文進行分片之前的分片偏移量以確定其位置。

* 各分片具有分片資料長度,其中20字元IP包頭不包含在該資料長度中。即,傳輸1500字元的資料時,實際資料長度為1480(1500-20)字元。

* 當每個分片之後還存在後續的分片時,該分片的ME(More Fragment)標誌位為1。

為了更加深入地瞭解IP分片原理,下面觀察一下4,000字元的 ICMP 資料傳輸時的分片情況。

首先傳送4000字元的 ICMP資料。(通常 ping 報文傳輸大小為56字元的ICMP報文。為了測試,我們利用 -s 選項傳送4000字元的 ICMP報文以便發生分片。)

〔root@linux /root]# ping -s 4000 192.168.0.25
PING 192.168.0.25 (192.168.0.25): 4000 data bytes
4008 bytes from 192.168.0.25: icmp_seq=0 ttl=254 time=20.7 ms
4008 bytes from 192.168.0.25: icmp_seq=1 ttl=254 time=20.1 ms


利用 tcpdump 進行抓包分析結果如下。

20:55:56.548630 linux.test.com >
test.com.cn: (frag 30338:1048@2960)
20:55:56.558095 linux.test.com >
test.com.cn: (frag 30338:1480@1480+)
20:55:56.565466 linux.test.com >
test.com.cn: icmp: echo request (frag 30338:1480@0+)


傳輸之前的資料報文長度為20字元,IP報頭+ 8字元,ICMP報頭+ 4000字元,ICMP之和為4028字元。由於資料長度超過乙太網的MTU 1500字元,因此必須進行分片傳輸。上圖是通過乙太網傳輸的3個分片的情況。
本文就通過Tcpdump進行監聽並分析分片的整個程序和關於分片的攻擊技術做討論。

下面通過Tcpdump進行監聽並分析分片的整個程序。

首先第一個分片中包含20字元的IP報頭和8字元的ICMP報頭及1472(=1500-20-8)字元的 ICMP資料。

其中IP 報頭中包含如下內容。

Protocol = ICMP
Fragment ID = 30338
More Fragments Flag = 1
Fragment Offset = 0
Data Length = 1480


下面由tcpdump監聽到的分片內容中,30338代表fragment ID。1480代表資料長度,0代表分片偏移量,+代表MF標誌位為 1。

20:55:56.565466 linux.test.com > test.com.cn: icmp: echo request (frag 30338:1480@0+)


IP 報頭中封裝的資料可能為TCP、UDP或者ICMP等IP傳輸協定資料。在這裡傳送的是ICMP報文,通過 tcpdump 中監聽到的 ICMP報頭信息中可以看出該報文為 ICMP echo request報文。

第二個分片由20字元的IP報頭和1480字元的ICMP資料組成。所有的分片中都包含20字元的IP報頭,第二個分片的IP報頭中包含如下信息。

Protocol = ICMP
Fragment ID = 30338
More Fragments Flag = 1
Fragment Offset = 1480
Data Length = 1480


可以看出該分片的偏移量為1480,但是不包含ICMP報頭,因此無法獲知ICMP報文類型。

從tcpdump監聽到的資料中可以看出,除了第一個分片中包含"ICMP echo request"報文類型之外,後續的分片中看不到相應的報文類型。對於TCP及UDP資料也存在類似的情況。只有第一個分片中包含TCP、UDP及ICMP報頭,因此對於資料包過濾設備來說,可能只阻斷第一個分片,因此需要根據分片 ID來維持各會話的狀態。智能的包過濾系統可以阻斷含有相同分片識別號的所有資料包。

最後一個分片由20字元的IP報頭和剩餘的ICMP資料組成。相應的IP報頭中包含如下信息。

Protocol = ICMP
Fragment ID = 30338
More Fragments Flag = 0
Fragment Offset = 2960
Data Length = 1048


因為不存在後續的分片,因此MF 標誌位為0。

我們觀察了一下4000字元的ICMP資料傳輸時,分片的整個程序。

關於分片的攻擊技術

如上所述,IP報文分片是一個正常的程序,但是一些攻擊者恰恰利用分片程序中的一些漏洞,迂迴防火牆或者入侵檢測系統進行各種攻擊。

Tiny fragment 攻擊

所謂Tiny fragment攻擊是指通過惡意操作,傳送極小的分片來繞過包過濾系統或者入侵檢測系統的一種攻擊手段。

攻擊者通過惡意操作,可將TCP報頭(通常為20字元)分佈在2個分片中,這樣一來,目的連接埠號可以包含在第二個分片中。

對於包過濾設備或者入侵檢測系統來說,首先通過判斷目的連接埠號來採取允許/禁止措施。但是由於通過惡意分片使目的連接埠號位於第二個分片中,因此包過濾設備通過判斷第一個分片,決定後續的分片是否允許通過。但是這些分片在目標主機上進行重組之後將形成各種攻擊。通過這種方法可以迂迴一些入侵檢測系統及一些安全過濾系統。目前一些智能的包過濾設備直接丟掉報頭中未包含連接埠信息的分片。

通過大家熟知的nmap工具也可以進行一定的Tiny fragment攻擊。通過nmap的-f選項可以將TCP報頭分在多個小碎片中。

[root@linux /root]# nmap -f -sS -p 23 192.168.0.25
Starting nmap V. 2.54BETA1 by fyodor@insecure.org ( www.insecure.org/nmap/ )
Interesting ports on test.com.cn (192.168.0.25):
Port State Service
23/tcp open telnet
Nmap run completed -- 1 IP address (1 host up) scanned in 0 seconds


此時通過tcpdump監聽的結果如下。

02:57:25.633885 truncated-tcp 16 (frag 19350:16@0+)
02:57:25.634375 linux.test.com > test.com.cn: (frag 19350:4@16)
02:57:25.635071 test.com.cn.telnet > linux.test.com.34326:
- S 1348389859:1348389859(0) ack 3078700240 win 32696 (DF)
02:57:25.639159 linux.test.com.34326 > test.com.cn.telnet:
- R 3078700240:3078700240(0)win 0


可以看出通過nmap成功執行了TCP SYN掃瞄。但是第一個分片大小為16字元,小於TCP報頭長度20字元,而TCP報頭的剩餘 4字元包含在第二個分片中。
來源:www.safechina.net
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次