歡迎您光臨本站 註冊首頁

IDS欺騙之Fragroute篇(上)

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0
1.簡介
2.fragroute和fragrouter
3.網路層和傳輸控制層IDS欺騙技術
3.1.網路層技術
3.1.1.攙雜無效數據的技術
3.1.2.IP碎片
3.2.網路層問題
3.2.1.插入垃圾數據
3.2.2.TCP流重組問題





1.簡介


2002年3月左右,Dug Song(dugsong@monkey.org)發布了一個工具fragroute,在入侵檢測領域引起了相當大的震動.有關fragroute的討論成了3-4月http://www.securityfocus.com和snort郵件列表的一個熱點.

fragroute能夠截取、修改和重寫向外發送的報文,實現大部分在了Secure Networks Insertion, Evasion, and Denial of Service: Eluding Network Intrusion Detection中敘述的IDS欺騙技術,包括IP、TCP層的數據包碎片以及數據包數據重疊等.



2.fragroute和fragrouter


其實,早在1999年5月,Dug Song就發布了一個類似的工具--fragrouter.這個工具是網路入侵檢測系統(NIDS)性能測試套件--nidsbench一個部分,顧名思義,fragrouter是一個具有路由器功能的應用程序,它能夠對攻擊者發送的攻擊流量進行分片處理之後,向攻擊目標轉發.其原理如下所示:


攻擊流量 分片之後的攻擊流量
------- ------------ --------
| hax0r |-----| fragrouter |- - - - - - - - - - ->| victim |
------- ------------ | --------
V
------ ------
| network IDS |
-------------


如果入侵檢測系統不能進行IP和TCP分片重組或者重組功能不太完善,將不能發現針對victim攻擊.

從實現的技術來看,fragroute和fragrouter差不多.和fragroute不同的是,它只處理本地主機發送到遠程主機的數據流量,不支持數據包的轉發,因此不會在本地主機打開IP轉發功能.





3.網路層和傳輸控制層IDS欺騙技術


在介紹fragroute之前,我們首先要介紹一些fragroute實現的技術,這些技術主要是在網路層和傳輸控制層.除此之外,還有一些應用應用層的技術,不過,在本文中將不多做贅述.如果您希望了解更多信息,可以參考Insertion,Evasion and Denial of Service: Eluding Network Intrusion Detection、IDS Evasion Techniques and Tactics、IDS Evasion with Unicode、 A Look At Whisker』s Anti-IDS Tactics和Polymorphic Shellcodes vs. Application IDSs等文檔.


3.1.網路層技術

我們首先討論網路層(IP)的IDS欺騙技術.互聯網協議(Internet Protocol)提供一種無連接和不可靠的分組投遞服務(RFC791).它會盡最大努力投遞IP分組,但是不能保證分組能夠正確地投遞到目的地.為了能夠更好地理解本文討論的IDS欺騙技術,我們先看一下IP分組的結構:


0 4 7 15 31
| | | | |
------------------------------------------|
| Ver|head|type of | total length |
| (4)|len |service | (in bytes) |
|-----------------------------------------|
| identification |0|D|M| fragment |
| | |F|F| offset |
|-----------------------------------------|
| time to | proto | header of |
| live(TTL)| | checksum |
|-----------------------------------------|
| source address(32 bytes) |
|-----------------------------------------|
| destination address(32 bytes) |
|-----------------------------------------|
/ /
option
/ /
|-----------------------------------------|
/ /
data
/ /
|-----------------------------------------|

圖3-1.IP分組結構


如圖3-1所示,每個IP分組的長度都是4個位元組的倍數,各個域的意義如下:



4位版本號,一般為4.


以4個位元組為單位的分組頭的長度,取值範圍5-15(默認值5).




8位的服務類型(Type Of Service,TOS),服務類型的前3位設置分組的優先順序,數值越大,則分組越重要.接下來的3位分別表示延遲、吞吐率和可靠性,如果為0則表示常規服務,如果為1則表示短延遲、高吞吐率和高可靠性.兩位沒有使用.


16位元組的總長度,單位是位元組,包括分組頭和數據的長度.


標誌符(identification)長度16位,唯一地標識該IP分組.IP分組在傳輸過程中,期間可能通過一些子網,這些子網間允許的最大協議數據單元(PDU)可能小於該IP分組的長度.為了處理這種情況,IP協議為一數據報方式傳輸的IP分組提供了分片和重組的功能.當一個路由器分割一個IP分組時,要把IP分組頭中的大多數數據段複製到分片中,標誌符段是必須複製的數據段.到達目的地之後,目標主機就是通過這個標誌符來確定分片屬於那個IP分組.


3位的標誌段,低序兩位分別控制IP分組是否可以分片(DF位)和是否是一個碎片(MF位),還有一位沒有定義.


13位的碎片偏移表示IP碎片在原始IP分組中的偏移.


生存時間設置分組在互聯網中能夠經過的跳數.


協議(protocol)段指定高層協議的類型,例如:ICMP是1、TCP是6、UDP是17.


校驗和(checksum)保證IP分組頭的完整性.


分別為32位的源地址和目的地址.


除了以上這些必需項之外,還可能包括一些任選項,例如源路由.


下面,我們將以此為基礎討論如何使用這些IP分組的域來欺騙IDS.


3.1.1.攙雜無效數據的技術

使用這種技術,攻擊者在其發出的攻擊數據中,攙雜一些只能被IDS接受的數據,從而影響IDS的正常檢測.一般攻擊者主要通過使用錯誤的包頭域或者IP選項錯誤的數據包實現這個目的.




錯誤的包頭域

這是最早被攻擊者採用的一種攻擊方式.攻擊者構造壞的IP包頭域,使攻擊目標能夠丟棄這個包,而讓NIDS能夠接受這個數據包,從而在NIDS接收的數據中插入無效的數據.不過,這種技術有兩個問題.路由器會丟棄這種數據包,因此這種技術很難用於遠程攻擊,除非IDS和攻擊者是在同一個LAN中.另外一個問題是IDS是否能夠以攻擊者設想的方式解釋具有壞包頭的數據包.例如,如果使用錯誤的IP包頭的大小,會使IDS無法定位傳輸控制層的位置,因此,不是每個IP包頭的域都是可以使用的.一般使用校驗和、TTL和不可分片(DF)等包頭域.

校驗和域的錯誤很容易被IDS忽視.有的IDS不校驗數據包的校驗和,因此不會丟棄校驗和錯誤的數據包.但是,絕大多數系統的TCP/IP協議棧都會丟棄校驗和錯誤的IP數據包.

TTL(Time To Live)也是一個可以利用的包頭域,它表示一個IP分組從源地址到達目的地址最多可以經過多少跳(hop),一個在互聯網上傳輸的IP分組,每經過一個路由器它的TTL就會減一,如果這個分組在到達目的地址之前,TTL變成0,就會被丟棄.根據這個原理,如果IDS和目標系統不在同一個網段上,我們可以構造IP分組的TTL域,使分組剛好能夠到達IDS,而不能到達目標系統,從而在IDS中插入無用信息.

攻擊者常用的IP包頭域是DF,這個位表示如果這個IP分組超過了轉發設備允許的最大長度,是否可以分片.如果IP分組的DF標誌被設置為1,就表示這個分組不能被分片,當它超過了轉發設備的允許的最大長度時,就會被丟棄.因此,如果NIDS允許的最大數據包長度大於其監視的系統,我們就可以使包含垃圾信息的分組大小介於兩者之間,從而在IDS中插入垃圾信息.

這些技術在原理上看起來比較容易,但是在實際應用過程中,需要對目標網路和系統的情況有非常深刻的了解才能實施,否則成功的幾率非常小:).




IP選項

錯誤的校驗和問題不難解決,只要使IDS對錯誤校驗和的分組採用與其它系統相同的處理方式就可以了.IP分組的選項域也可以被攻擊者用來給IDS插入垃圾信息.對於IP選項,各種系統的處理方式差別很大,因此很容易使攻擊者詭計得逞.

攻擊者最為常用的IP選項就是嚴格源路由(strict source routed)選項.一般情況下,如果自己的地址沒有出現在IP分組的源路由表中,系統就會丟棄收到的IP分組.有些系統可以配置為自動丟棄包含嚴格源路由選項的IP分組.這就給IDS的處理帶來了很大的困難.


3.1.2.IP碎片

當路由器準備將IP分組發送到網路上,而該網路又無法將這個IP分組一次全部發送時,路由器必需將分組分成小塊,使其長度能夠滿足這一網路對分組大小的限制,這些分割出來的小塊就叫作碎片(fragmentation).IP分組可以獨立地通過不同的路徑轉發,是的碎片只有到達目的主機之後才可能彙集到一塊,碎片不一定按照次序到達.到達目的主機后,目的主機會重組IP分片.

當一個路由器分割一個IP分組時,要把IP分組頭的大多數段值複製到每個碎片中,其中16位的標誌符是必須複製的段,它能夠唯一地標誌一個IP分組,使目的主機能夠判斷每個碎片所屬的IP分組,每個碎片中都偏移值,用來標記素片在IP分組中的位置.

由於目標系統能夠重組IP分片,因此需要網路入侵檢測系統具有種族IP分片的能力.如果網路入侵檢測系統沒有重組IP分片的能力,將無法檢測通過IP分片進入的攻擊數據.不過,現在的網路入侵檢測產品基本都具有良好的IP分片重組能力,因此基本的IP碎片問題不會給網路入侵檢測系統造成太大的麻煩.但是,象碎片重疊之類的技術仍然會帶來很大的問題.



下面我們詳細介紹如何使用IP碎片欺騙網路入侵檢測系統.


基本的重組問題

IP碎片通常會按照順序到達目的地,的碎片的MF位為0(表示這是一個碎片).不過,IP片有可能不按照順序到達,目標系統必須能夠重組碎片.但是,如果網路入侵檢測系統總是假設IP碎片是按照順序到達就會出現漏報的情況.攻擊者可以打亂碎片的的到達順序,達到欺騙IDS的目的.

除此之外還有一個問題,IDS必須把IP碎片保存到一個緩衝區里,等所有的碎片到達之後重組IP分組.如果攻擊者不送出所有的碎片,就可能使那些緩存所有碎片的IDS消耗掉所有內存.目標系統必須有處理這種情況的能力.一些系統會根據TTL,丟棄碎片.IDS必須以和目標系統相同的方式處理碎片.如果IDS接收被監視的主機丟棄的碎片流,就會被攻擊者插入垃圾數據;如果IDS丟棄被監視系統接受的數據,就可能遺漏攻擊數據流量.


碎片重疊問題

目前,主要有兩種技術用於逃避檢測設備的監視.第一種就是使用儘可能小的碎片,例如:每個碎片只有8個位元組(碎片最小8個位元組),而每個碎片中都沒有足夠的信息,從而逃過檢測.但是,現在的包過濾設備一般會主動丟棄這種碎片,入侵檢測設備也會發出碎片攻擊的報警,因此這種逃避方式很難奏效.

另外一種方式就是碎片重疊.在IP分組中有一個13位的域(fragment offset),標識每個碎片在原始IP分組中的偏移.構造錯誤的碎片偏移值,可能造成碎片的重疊,如圖:



|<--- offset=0 size=256 --|
----------------------- ----
| | | frag1
| | |
----------------------- ----
---- ----------------------
| | | frag2
| | |


---- ----------------------
|<-- offset=248,size=256 |
圖3-2


圖3-2中,frag1負載的數據偏移值為0(也就是第一個碎片),大小是256,而第二個碎片frag2的數據偏移是248,造成了兩個碎片的部分數據重疊.這樣會使某個碎片的數據覆蓋掉另一個碎片的重疊數據.而哪一個碎片重疊部分的數據被覆蓋由操作系統決定.例如,如果frag1先於frag2到達,在NT/Y2K和solaris2.6中,frag1的數據會覆蓋frag2的重疊數據;而在Linux中,frag2的數據會覆蓋frag1的數據.而如果兩個碎片不按正常順序到達,也就是frag2先於frag1到達,在NT/Y2K和solaris2.6中,frag2的數據會覆蓋frag1的重疊數據;而在Linux中,frag1的數據會覆蓋frag2的數據.這些細節在使用fragroute之前一定要弄清楚.

究竟是後面到達的碎片覆蓋先到達的重疊數據,還是後到達碎片的重疊數據被覆蓋可以使用fragroute軟體包中的一個工具fragtest進行判斷.fragroute的配置選項ip_frag size [new|old]用於IP碎片覆蓋方式的配置,new表示後到達的碎片覆蓋先到碎片的重疊數據,old表示後到達的碎片覆蓋先到碎片的重疊數據.這兩個選項是fragroute配置選項中比較難以理解的.

對於碎片重疊,如果網路入侵檢測系統的處理方式不同,就會造成漏報.例如,使用運行於Linux之上的snort作為網路入侵檢測系統,而攻擊者的攻擊目標是Y2K系統.


3.2.網路層問題

TCP用於在不可靠的網路上為兩台主機之間提供有序可靠的數據投遞服務.實現其可靠性傳輸的基礎是序列號和應答號.TCP包頭結構如下:


0 15 31
| | |
|-------------------- ------------------------|
| source port | destination port |
|---------------------------------------------|
| sequence number |


|---------------------------------------------|
| acknowledge number |
|------------- ------ ------------------------|
| data | | code | window |
|offset| | | |
|-------------------- ------------------------|
| checksum | urgent pointer |
|-------------------- ------------------------|
| option | padding |
|-------------------- ------------------------|
/ /
data
/ /
|---------------------------------------------|

圖3-2.TCP報文結構


每個TCP報文由兩個部分組成:包頭和數據.TCP包頭包括如下域:



16位元組的源埠和目的埠.


32位元組的序列號和應答號.


4位數據偏移,標識包頭的打消,單位是4個位元組.


6位編碼位,確定報文的類型和目的.從左到右依次是:URGENT、ACK、PSH、RST、SYN和FIN.


2位元組的窗口段.標識發送該報文的TCP實體在相反的闡述方向上能夠棘手的位元組數.


2位元組的校驗和用於最基本的差錯控制.


選項域用於處理其它情況.例如:定義通信過程中的最大報文長度,保護序列號的時間戳以及用於告訴網路通訊的窗口放大因子等.


填充域用於使包頭的大小是4個位元組的倍數.



3.2.1.插入垃圾數據

在前面我們討論了使用IP協議向IDS插入垃圾數據.由於TCP協議的處理更為複雜,因此有很多情況可以使系統丟棄收到的TCP報文.如果IDS和受監視的系統使用不同的處理方式,就可能被攻擊者利用,在IDS中插入垃圾數據,干擾IDS的檢測.


TCP包頭的畸形域

某些IDS產品雖然支持TCP會話重組,但是如果它們在沒有檢查就重組TCP會話,就可能被攻擊者利用在檢測數據中插入垃圾信息.

一個容易被忽視的是TCP包頭的編碼段(code),這六位標誌TCP報文的類型和內容.這些編碼位可以進行組合,而某些組合是無效的,例如:把所有的編碼位都打開,這些類型的報文應該被丟棄.某些系統不接收沒有ACK位的TCP報文.



另一個經常被忽視的TCP包頭域是校驗和域.所有的系統都會丟棄校驗和錯誤的TCP報文,但是某些入侵檢測系統卻並不檢查這個域,從而能夠被攻擊者利用.


TCP選項

IDS應該能夠處理TCP選項,但是和IP選項不同,TCP選項要複雜的多,經常會出現新的TCP選項.另外一個很難處理TCP選項的原因是某些TCP選項只在某些連接狀態下出現.對於包含壞TCP選項的TCP報文,某些系統會拒絕,而另一些系統會忽略壞TCP選項.網路入侵檢測系統很難判斷被監視系統的處理方式,給攻擊者以可乘之機.

RFC1323提出了兩個TCP選項(窗口放大和時間戳選項),用於提高高速環境TCP傳輸的效率和可靠性.和以前的規定不同,這兩個新的選項可能出現在非SYN報文段中.有的TCP實現會拒絕包括選項的非SYN報文段,而有些系統會忽略這樣的選項繼續處理.這為IDS造成了很大的困難,如果IDS不能採取和受監視系統相同的處理方式,就會被攻擊者插入垃圾數據.

RFC1323定義的另一個概念是PAW(protection against wrapped sequence numbers,序列號回卷保護).如果使用窗口放大(window scale)選項,每個TCP連接的窗口最大可以是65535*2^14,而TCP連接的序列號是32位的,很快就會發生序列號回卷.為了阻止某個序列號為n的報文段,在序列號回卷到n時重新出現,RFC1323提出了PAWS,使用時間戳避免這種情況的出現.如果一個報文段的時間戳早於某個時間值,就會被丟棄.攻擊者會手工製作低時間戳的報文段干擾入侵檢測系統的檢測,這類TCP報文段一般會兼容PAWS系統丟棄.如果IDS不知道被監視系統是否支持PAWS,就會被攻擊者插入垃圾數據.


3.2.2.TCP流重組問題

對於入侵檢測系統,最艱巨的任務是重組通過TCP連接交換的數據.TCP協議提供了足夠的信息幫助目標系統判斷數據的有效性和數據在連接中的位置.TCP協議的重傳機制可以確保數據準確到達,如果在一定的時間之內沒有收到接受方的響應信息,發送方會自動重傳數據.但是,由於監視TCP會話的入侵檢測系統是被動的監視系統,因此無法使用TCP重傳機制.如果數據傳輸過程中,發生順序被打亂或者報文丟失的情況,將加大其檢測難度.更嚴重的是,重組TCP數據流需要進行序列號跟蹤,但是如果在傳輸過程中丟失了很多報文,就可能使入侵檢測系統無法進行序列號跟蹤.如果沒有恢復機制,就可能使入侵檢測系統不能同步監視TCP連接.不過,即使入侵檢測系統能夠恢復序列號跟蹤,也照樣能夠被攻擊.




基本的重組問題

某些入侵檢測系統不使用序列號跟蹤,它們按照收到數據的順序重組TCP流,攻擊者只要把報文的順序打亂,或者在數據流中加入目標系統根本不會接受的垃圾數據,就可以是這種入侵檢測系統失效.


高級重組問題

即使入侵檢測系統能夠跟蹤TCP連接的序列號,也照樣無法保證某個報文段(即使序列號是正確的)能夠被目標系統接受.有很多問題可能是目標系統丟棄需要正確的數據.最基本的就是IP和TCP插入問題,除此之外,還存在一些高層的問題也會是序列號正確的數據被丟棄.

最主要的問題是入侵檢測系統必須知道被監視系統宣布的窗口大小.TCP包頭的窗口域標識TCP連接接收方能夠接收的數據數量,能夠防止發送方向自己的緩衝區發送太多數據.如果收到的數據數量超過窗口的大小,這些數據就會被丟棄.,入侵檢測系統對窗口的化的反應比受監視系統的反應要慢些.如果在兩者不一致的期間有報文到達就會造成問題.

另外,攻擊者發送一些序列號相同而負載不同的報文也會對入侵檢測系統的TCP流重組造成問題,這些序列號相同的報文包頭的各個域完全相同(除了校驗和域).很顯然,接收方只會處理所有序列號相同的報文中的一個,其它的都會被丟棄.但是,一般沒有足夠的信息讓入侵檢測系統判斷究竟哪個報文是有效的.,有些入侵檢測系統經常會接受無效的數據,攻擊者可以先發送一些肯定會接收方系統拒絕的報文段,經過很小的延遲之後發出有效的數據,會造成入侵檢測系統后推序列號而無法接收有效的數據.


數據重疊

和IP碎片一樣,TCP報文段也可能非順序到達,也存在重疊數據覆蓋問題.,究竟是新到數據覆蓋先到數據也由接收方操作系統決定.例如,在NT4.0系統中,先到的報文段會覆蓋後到報文段的重疊數據;而Linux系統則相反.如果入侵檢測系統和受監視系統的處理方式不同,就會造成漏報.



fragroute的配置選項tcp_seg size [new|old]可用於數據重疊和報文段大小的配置.很遺憾,目前還沒有出現專門的工具來判斷目標系統數據覆蓋的方式.



參考資料


Thomas H. Ptacek, Timothy N. Newsham Insertion,Evasion and Denial of Service: Eluding Network Intrusion Detection、


Kevin Timm IDS Evasion Techniques and Tactics


W.Richard Stevens "TCP/IP Illustrated,Volume 1 The Protocols"


責任編輯:nixe0n(02-06-11 08:18)


[火星人 ] IDS欺騙之Fragroute篇(上)已經有1198次圍觀

http://coctec.com/docs/linux/show-post-56444.html