如何防止IP Fragment攻擊
IP Fragment攻擊作為一種基于數(shù)據(jù)碎片的攻擊手段,本篇文章通過敘述IP Fragment攻擊的基本概念以及攻擊形式從而通過利用擴(kuò)展ACL防止IP Fragment攻擊,提升企業(yè)在網(wǎng)絡(luò)應(yīng)用中的安全程度,也旨在提高企業(yè)安全管理員的技術(shù)程度。
1.基本概念
要說fragment的話,先說一下MTU(Maximum Transmission Unit,最大傳輸單元),這個是數(shù)據(jù)鏈路層的PDU(Protocol Data Unit,協(xié)議數(shù)據(jù)單元),也就是幀的大小。
不同的數(shù)據(jù)鏈路層協(xié)議, 幀的格式也不同, 但大致都會有目標(biāo)MAC地址、源MAC地址、長度/類型、數(shù)據(jù)(有效載荷: Payload)這幾個字段。 對最常見的以太網(wǎng)而言, 采用的是數(shù)據(jù)鏈路層協(xié)議是基于IEEE 802.2/802.3, 但與標(biāo)準(zhǔn)IEEE 802.2/802.3略有區(qū)別。以太網(wǎng)幀中的數(shù)據(jù)(有效)字段的長度范圍是46-1500個字節(jié)。這個1500就是以太網(wǎng)的MTU。不同鏈路層協(xié)議, MTU值也不同, 對以太網(wǎng), MTU是1500字節(jié), 而對令牌環(huán)(Token Ring)網(wǎng), MTU是4482字節(jié)。當(dāng)鏈路層的上層協(xié)議,比如IP協(xié)議所要傳輸?shù)腎P數(shù)據(jù)包(包括IP Header)大小超過這個長度范圍時, IP數(shù)據(jù)包就必須分成多片傳輸, 這個過程就是分片(Fragmentating), 其中分割出來的每一個片斷就是一個Fragment。
2.IP包中于分片有關(guān)的字段
注意;我們接著往下提到的IP包中的字段都是IPv4中的,IPv6的包中沒有關(guān)于分片的字段,因為IPv6中采用了不同的關(guān)于MTU的機(jī)制,這個回頭在IPv6中提到。
IP數(shù)據(jù)包在封裝時, 在IP頭的第8-9個字節(jié)(16bit)中, 存放關(guān)于分片的信息. 其中前3個bit表示分片的狀態(tài), 后13個bit表示當(dāng)前片斷在分片之前的整塊待封裝的數(shù)據(jù)包中的偏移量(因為IP數(shù)據(jù)包的最大可能長度為16bit, 而這13bit無法表示16bit的范圍, 故實際使用時, 偏移量的計算是用這13bit的值乘8(3bit), 以實現(xiàn)表示16bit的范圍)。
不分片標(biāo)記(Don't Fragment Flag)
IP頭第8-9字節(jié)從左往右的第2bit表示當(dāng)前IP數(shù)據(jù)包是(1)否(0)不分片, 缺省值為0, 就是不不分片, 即允許分片. 因為默認(rèn)允許分片, 所以我們平常使用Ping命令時, 加參數(shù)-l 65500(指定IP包大?。㏄ing一臺機(jī)器也不會有問題。
是否有后續(xù)分片標(biāo)記(More Fragments Flag)
IP頭第8-9字節(jié)從左往右的第3bit表示當(dāng)前數(shù)據(jù)包里的數(shù)據(jù)是否為某塊數(shù)據(jù)的最后一個分片, 若為0, 則說明當(dāng)前數(shù)據(jù)包內(nèi)的數(shù)據(jù)沒有分片或者是最后一個分片, 若為1, 則表示后面還有屬于同一塊數(shù)據(jù)的分片。
最后可以做個測試;
之前一直說以太網(wǎng)MTU是1500,那么我們在主機(jī)上運(yùn)行這樣一個命令:
ping 192.168.0.1 -l 1500 -f '-f參數(shù)是不允許分片,也就是將Don't Fragment Flag設(shè)置為1。
這是提示;Packet needs to be fragmented but DF set.(包需要分片,但是不允許分片。)
這是因為,幀中封裝的是 IP Head+IP Data, IP Head大小20字節(jié),而且ping命令所使用的ICMP協(xié)議會有8個字段的首部信息,1500-20-8=1472,你會發(fā)現(xiàn);
ping 192.168.0.1 -l 1472 -f
這個是能ping通的。
ICMP比較特殊,一般情況下:
各分片具有分片數(shù)據(jù)長度,其中20字節(jié)IP包頭不包含在該數(shù)據(jù)長度中。即,傳輸1500字節(jié)的數(shù)據(jù)時,實際數(shù)據(jù)長度為1480(1500-20)字節(jié)。
3.利用擴(kuò)展ACL防止IP Fragment攻擊
說正題了;fragment攻擊是指通過惡意操作,發(fā)送極小的分片來繞過包過濾系統(tǒng)或者入侵檢測系統(tǒng)的一種攻擊手段。攻擊者通過惡意操作,可將TCP報頭(通常為20字節(jié))分布在2個分片中,這樣一來,目的端口號可以包含在第二個分片中。
對于包過濾設(shè)備或者入侵檢測系統(tǒng)來說,首先通過判斷目的端口號來采取允許/禁止措施。但是由于通過惡意分片使目的端口號位于第二個分片中,因此包過濾設(shè)備通過判斷第一個分片,決定后續(xù)的分片是否允許通過。但是這些分片在目標(biāo)主機(jī)上進(jìn)行重組之后將形成各種攻擊。通過這種方法可以迂回一些入侵檢測系統(tǒng)及一些安全過濾系統(tǒng)。
我們利用擴(kuò)展ACL即可對IP Fragment攻擊進(jìn)行控制,命令如下:
access-list 101 permit/deny <協(xié)議> <源> <目的> fragment '在命令后加個fragment就行了。
加不加這個fragment是有很大區(qū)別的,下面這段借鑒了雪山飛鵠的學(xué)習(xí)筆記;
(1) 當(dāng)一個ACL只含有三層信息時(不含端口號),對所有的包都進(jìn)行控制。
(2) 當(dāng)不使用frament 選項時,一個包含三層和四層信息的acl 條目將對所有的數(shù)據(jù)包進(jìn)行以下控制:
如果是未分片數(shù)據(jù)包(nonfragmented)或者分片數(shù)據(jù)包的第一個分片(initial fragment) ,都將按正常的ACL 進(jìn)行控制(permit 或deny)。
如果是分片數(shù)據(jù)包的后續(xù)分片(noninitial fragment),則只檢查ACL 條目中的三層部分(協(xié)議號、源、目的)。如果三層匹配而且是permit 控制,則允許該分片通過;如果三層匹配而且是deny 控制,則繼續(xù)檢查下一個ACL條目(和正常的ACL 控制順序不同)。
(3)當(dāng)使用fragment 選項時,一個acl 條目將只對分片數(shù)據(jù)包的后續(xù)分片(noninitial fragment)進(jìn)行控制;并且ACL條目中不能包含四層信息。
這里還是不好理解,說一下我的看法;
早期的IOS中,ACL中deny只拒絕匹配丟份的未分片和初始(第一個)分片,而對后續(xù)分片不拒絕。其實這個現(xiàn)在的IOS中已經(jīng)會都拒絕掉了。
而加上fragment的話,這句ACL就只會對后續(xù)分片進(jìn)行控制了。
早期的IOS中我們一般會寫兩句ACL,一句不帶Fragment,一句帶。
但現(xiàn)在的IOS中,一句不帶fragment的ACL也可以deny掉后續(xù)分片。那么帶fragment的ACL還有什么用呢?記住,帶fragment的ACL只會對后續(xù)分
片進(jìn)行控制!我們可以在這樣一種情況下使用;如果不分片的話我就讓你通過,但是你分片了我就不讓你過!從而防止fragment攻擊。
大致是這樣吧,把帶有四層信息的ACL和帶Fragment的ACL結(jié)合在一起用效果會更好的!
【編輯推薦】
- 淺析局域網(wǎng)監(jiān)聽技術(shù)
- 淺析如何預(yù)防DDOS攻擊
- 如何防止網(wǎng)絡(luò)監(jiān)聽與端口掃描
- ARP病毒攻擊原理及破解方案解析
- 無線路由器ARP攻擊故障排除方法共享