趙開新,李曉月
(河南機(jī)電高等??茖W(xué)校計(jì)算機(jī)科學(xué)與技術(shù)系,河南 新鄉(xiāng) 453002)
隨著Internet的迅速發(fā)展和普及,給人們帶來方便的同時也帶來了嚴(yán)峻的網(wǎng)絡(luò)安全問題,網(wǎng)絡(luò)上充滿了泛洪攻擊,尤其是DoS(Denial of Service Attack),即拒絕服務(wù)攻擊,這種攻擊的目的是使被攻擊的主機(jī)、服務(wù)器等網(wǎng)絡(luò)設(shè)備無法提供正常的服務(wù),而近年來在DoS技術(shù)基礎(chǔ)上發(fā)展起來的DDoS(Distributed Denial of Service),即分布式拒絕服務(wù)攻擊,更使被攻擊者防不勝防,目前DDos攻擊中最常見的攻擊方式是TCP SYN泛洪攻擊。
SYN Flooding利用了TCP/IP協(xié)議固有的漏洞,實(shí)施對網(wǎng)絡(luò)中的客戶機(jī)、服務(wù)器進(jìn)行攻擊,它的攻擊原理是通過偽造一個SYN報(bào)文向服務(wù)器發(fā)起連接,其源地址是偽造的或者是一個不存在的地址,服務(wù)器接收到報(bào)文后發(fā)送SYN ACK報(bào)文應(yīng)答,由于攻擊報(bào)文的源地址不可達(dá),因此應(yīng)答報(bào)文發(fā)出后,不會收到ACK報(bào)文,造成一個半開連接,如果攻擊者發(fā)送大量的報(bào)文,會在被攻擊主機(jī)上出現(xiàn)大量的半開連接,從而消耗其系統(tǒng)資源,使正常的用戶無法訪問。
正常的TCP建立連接的三次握手流程如圖1所示,具體過程如下:
1)A的TCP向B發(fā)出連接請求報(bào)文段,其首部中的同步比特SYN應(yīng)置為1,并選擇序號x,表明傳送數(shù)據(jù)時的第一個數(shù)據(jù)字節(jié)的序號是x。
2)B的TCP收到連接請求報(bào)文段后,如果同意,則發(fā)回確認(rèn),B在確認(rèn)報(bào)文段中應(yīng)將SYN置為1,其確認(rèn)號應(yīng)為x+1,同時也為自己選擇序號y。
3)A收到此報(bào)文段后,向B給出確認(rèn),其確認(rèn)號應(yīng)為y+1,A的TCP通知上層應(yīng)用進(jìn)程,連接已經(jīng)建立。
4)當(dāng)運(yùn)行服務(wù)器進(jìn)程的主機(jī)B的TCP收到主機(jī)A的確認(rèn)后,通知其上層應(yīng)用進(jìn)程,連接已經(jīng)建立。
圖1 TCP連接的建立過程
在上述過程中,服務(wù)器收到SYN報(bào)文后,在發(fā)送SYN/ACK回應(yīng)客戶端之前,需要分配一個數(shù)據(jù)區(qū)記錄這個未完成的TCP連接,這個數(shù)據(jù)區(qū)通常稱為TCB(Transmission Control Block)資源,此時的TCP連接也稱為半開連接。這種半開連接僅在收到客戶端響應(yīng)報(bào)文或者連接超時后才斷開,而客戶端在收到SYN/ACK報(bào)文之后才會分配TCB資源,因此這種不對稱的資源分配模式會被攻擊者所利用形成SYN Flooding攻擊。如果使用一個不存在的源IP地址向目標(biāo)服務(wù)器發(fā)起連接,該服務(wù)器回應(yīng)SYN/ACK消息作為響應(yīng),由于應(yīng)答消息的目的地址并不是攻擊者的實(shí)際地址,并且這個地址也可能不存在,所以服務(wù)器無法收到響應(yīng)信息。因此,TCP握手的最后一個步驟將永遠(yuǎn)不能發(fā)生,該連接就一直處于半開狀態(tài),直到連接超時被刪除,如果攻擊者在一個時間段內(nèi)發(fā)動許多客戶機(jī)與服務(wù)器進(jìn)行連接,這樣會使服務(wù)器的TCB資源被消耗殆盡,以至于不能再接受其他客戶端正常的連接請求[1]。
SYN Flooding攻擊的檢測,可以通過防火墻來進(jìn)行檢測,檢測的方法有兩種,分別是半開連接數(shù)檢測和新建連接速率檢測。
當(dāng)客戶端向服務(wù)器發(fā)起SYN Flooding攻擊時,如果客戶端采用假冒一個不存在的源IP,那么服務(wù)器端就會存在大量半開連接。為了有效區(qū)分假冒的半開連接和正常連接,可以在防火墻上設(shè)置一個半開連接數(shù)的閾值,防火墻實(shí)時記錄所有客戶端向服務(wù)器發(fā)起的所有半開連接數(shù)和能夠完成三次握手的正常連接數(shù),如果所有半開連接數(shù)減去正常連接數(shù)大于這個半開連接閾值,并不斷增加,這時服務(wù)器有可能正在受SYN Flooding的攻擊。
當(dāng)客戶端向服務(wù)器發(fā)起SYN Flooding攻擊時,不管客戶端采用假冒的IP地址還是采用真實(shí)的IP地址,服務(wù)器在短時間內(nèi)的SYN報(bào)文會快速增加。可以通過在防火墻上設(shè)置一個新建連接的閾值,服務(wù)器收到的報(bào)文中一部分是新建連接報(bào)文,一部分是已建立連接的后續(xù)報(bào)文,防火墻實(shí)時記錄每秒新建連接的數(shù)量,然后和設(shè)定的新建連接閾值相比較,如果超過這個閾值,服務(wù)器有可能正在受SYN Flooding的攻擊。
SYN Flooding的防御技術(shù),主要通過防火墻、路由器等過濾網(wǎng)關(guān)防御和SYN Cookie技術(shù)。
3.1.1 防火墻閾值設(shè)置
防火墻可以采用SYN Flooding攻擊檢測技術(shù),對網(wǎng)絡(luò)中新建TCP半開連接數(shù)和新建TCP連接速率進(jìn)行實(shí)時檢測,通過設(shè)置閾值來有效地發(fā)現(xiàn)攻擊服務(wù)器的客戶機(jī),然后通過阻斷新建連接或者釋放無效連接來抵御SYN Flooding攻擊。
3.1.2 SYN 網(wǎng)關(guān)
防火墻收到客戶端的SYN包時,直接轉(zhuǎn)發(fā)給服務(wù)器,防火墻收到服務(wù)器的SYN/ACK包后,一方面將SYN/ACK包轉(zhuǎn)發(fā)給客戶端,另一方面以客戶端的名義給服務(wù)器回送一個ACK包完成TCP的三次握手,讓服務(wù)器端由半開連接狀態(tài)進(jìn)入連接狀態(tài),當(dāng)客戶端真正的ACK包到達(dá)時,有數(shù)據(jù)則轉(zhuǎn)發(fā)給服務(wù)器,否則丟棄該包。由于服務(wù)器能承受連接狀態(tài)要比半開連接狀態(tài)高得多,所以這種方法能有效地減輕對服務(wù)器的攻擊[2]。
3.1.3 SYN 代理
防火墻在收到客戶端的SYN包后,并不向服務(wù)器轉(zhuǎn)發(fā)而是記錄該狀態(tài)信息,然后主動給客戶端回送SYN/ACK包,如果收到客戶端的ACK包表明是正常訪問,由防火墻向服務(wù)器發(fā)送SYN包并完成三次握手,這樣由防火墻作為代理來實(shí)現(xiàn)客戶端和服務(wù)器端的連接,可以完全過濾不可用連接發(fā)往服務(wù)器。
SYN Cookie是對TCP服務(wù)器端的三次握手協(xié)議作一些修改,專門用來防范SYN Flooding攻擊的一種手段。它的原理是:在TCP服務(wù)器收到SYN包并返回SYN/ACK包時,不分配TCB資源,而是根據(jù)這個SYN包計(jì)算出一個Cookie值。在收到ACK包時,服務(wù)器再根據(jù)Cookie值檢查這個ACK包的合法性。如果合法,再分配 TCB資源進(jìn)行處理未來的TCP連接[3]。
如圖2所示,防火墻的內(nèi)網(wǎng)屬于Trust區(qū)域,內(nèi)部服務(wù)器的網(wǎng)絡(luò)屬于DMZ(Demilitarized Zone)區(qū)域,外網(wǎng)屬于Untrust區(qū)域。對DMZ內(nèi)的服務(wù)器進(jìn)行SYN Flooding攻擊防范檢測配置,根據(jù)服務(wù)器的正常流量,配置服務(wù)器的最大新建連接速率的閾值和最大半開連接的閾值,若服務(wù)器受到SYN Flooding的攻擊,防火墻就會檢測到,這樣防火墻可以選擇對后續(xù)向DMZ域內(nèi)的服務(wù)器發(fā)起的訪問,進(jìn)行SYN代理,保證到達(dá)服務(wù)器的TCP連接請求都是正常的。
圖2 SYN Flooding攻擊防范應(yīng)用
本文針對典型的DDOS型的SYN Flooding攻擊特點(diǎn),分析了常見的SYN Flooding攻擊檢測和防范技術(shù)的特點(diǎn),并在此基礎(chǔ)上提出了一個很好的保護(hù)內(nèi)網(wǎng)服務(wù)器,減少其被SYN Flooding攻擊的安全防范方案。但任何的防范技術(shù)都不會萬無一失,為了更好地提高網(wǎng)絡(luò)安全,需要網(wǎng)絡(luò)管理人員學(xué)習(xí)研究更多的防范SYN Flooding攻擊的技術(shù),綜合采用多種安全技術(shù)來盡量降低網(wǎng)絡(luò)中的SYN Flooding攻擊。
[1]熊忠陽,張科,等.一種提高狀態(tài)檢測防火墻抵御SYN Flood攻擊的方法[J].小型微型計(jì)算機(jī)系統(tǒng),2008,29(5):929 -932.
[2]劉雙強(qiáng).SYN Flooding攻擊原理及防范措施[J].電腦知識與技術(shù),2009,15(7):1567 -1568.
[3]劉艷,陳雷霆.在路由器上應(yīng)用SYN Cookie實(shí)現(xiàn)Syn Flooding的防御[J].計(jì)算機(jī)應(yīng)用與軟件,2008,29(5):272 -273.