DoS***原理和防禦方法

Technorati 標籤: DoS,***,網絡防禦,TCP,SYN_Flood

TCP/IP協議的權限DoS (拒絕服務***)----- Denial of Service

該***的原理是利用TCP報文頭來做的文章.

clip_p_w_picpath002

clip_p_w_picpath004

下面是TCP數據段頭格式。

Source Port和 Destination Port :是本地端口和目標端口

Sequence Number 和 Acknowledgment Number :是順序號和確認號,確認號是希望接收的字節號。這都是32位的,在TCP流中,每個數據字節都被編號。Data offset :表明TCP頭包含多少個32位字,用來確定頭的長度,因爲頭中可選字段長度是不定的。Reserved : 保留的我不是人,現在沒用,都是0

接下來是6個1位的標誌,這是兩個計算機數據交流的信息標誌。接收和發送斷根據這些標誌來確定信息流的種類。下面是一些介紹: URG:(Urgent Pointer field significant)緊急指針。用到的時候值爲1,用來處理避免TCP數據流中斷ACK:(Acknowledgment field significant)置1時表示確認號(Acknowledgment Number)爲合法,爲0的時候表示數據段不包含確認信息,確認號被忽略。

PSH:(Push Function),PUSH標誌的數據,置1時請求的數據段在接收方得到後就可直接送到應用程序,而不必等到緩衝區滿時才傳送。

RST:(Reset the connection)用於復位因某種原因引起出現的錯誤連接,也用來拒絕非法數據和請求。如果接收到RST位時候,通常發生了某些錯誤。

SYN:(Synchronize sequence numbers)用來建立連接,在連接請求中,SYN=1,CK=0,連接響應時,SYN=1,

ACK=1。即,SYN和ACK來區分Connection Request和Connection Accepted。

FIN:(No more data from sender)用來釋放連接,表明發送方已經沒有數據發送。

TCP三次握手模型:

clip_p_w_picpath006

我們進入比較重要的一部分:TCP連接握手過程。這個過程簡單地分爲三步。在沒有連接中,接受方(我們針對服務器),服務器處於LISTEN狀態,等待其他機器發送連接請求。

第一步:客戶端發送一個帶SYN位的請求,向服務器表示需要連接,比如發送包假設請求序號爲10,那麼則爲:SYN=10,ACK=0,然後等待服務器的響應。

第二步:服務器接收到這樣的請求後,查看是否在LISTEN的是指定的端口,不然,就發送RST=1應答,拒絕建立連接。如果接收連接,那麼服務器發送確認,SYN爲服務器的一個內碼,假設爲100,ACK位則是客戶端的請求序號加1,本例中發送的數據是:SYN=100,ACK=11,用這樣的數據發送給客戶端。向客戶端表示,服務器連接已經準備好了,等待客戶端的確認這時客戶端接收到消息後,分析得到的信息,準備發送確認連接信號到服務器

第三步:客戶端發送確認建立連接的消息給服務器。確認信息的SYN位是服務器發送的ACK位,ACK位是服務器發送的SYN位加1。即:SYN=11,ACK=101。

這時,連接已經建立起來了。然後發送數據,<SYN=11,ACK=101><DATA>。這是一個基本的請求和連接過程。需要注意的是這些標誌位的關係,比如SYN、ACK。

服務器不會在每次接收到SYN請求就立刻同客戶端建立連接,而是爲連接請求分配內存空間,建立會話,並放到一個等待隊列中。如果,這個等待的隊列已經滿了,那麼,服務器就不在爲新的連接分配任何東西,直接丟棄新的請求。如果到了這樣的地步,服務器就是拒絕服務了。

如果服務器接收到一個RST位信息,那麼就認爲這是一個有錯誤的數據段,會根據客戶端IP,把這樣的連接在緩衝區隊列中清除掉。這對IP欺騙有影響,也能被利用來做DOS***。

有了TCP的基礎和三次握手協商流程,那麼DoS就是利用這其中的漏洞進行***的.下面就是DOS的***原理了:

上面的介紹,我們瞭解TCP協議,以及連接過程。要對SERVER實施拒絕服務***,實質上的方式就是有兩個:

一, 迫使服務器的緩衝區滿,不接收新的請求。

二, 使用IP欺騙,迫使服務器把合法用戶的連接復位,影響合法用戶的連接

這就是DOS***實施的基本思想。具體實現有這樣的方法:

1、SYN FLOOD

利用服務器的連接緩衝區(Backlog Queue),利用特殊的程序,設置TCP的Header,向服務器端不斷地成倍發送只有SYN標誌的TCP連接請求。當服務器接收的時候,都認爲是沒有建立起來的連接請求,於是爲這些請求建立會話,排到緩衝區隊列中。

如果你的SYN請求超過了服務器能容納的限度,緩衝區隊列滿,那麼服務器就不再接收新的請求了。其他合法用戶的連接都被拒絕掉。可以持續你的SYN請求發送,直到緩衝區中都是你的只有SYN標記的請求。現在有很多實施SYN FLOOD的工具,呵呵,自己找去吧。

-----------對於SYN flood***,防護原理是:現在很多動態防火牆都可以提供SYN代理功能, 具體的原理框架如下:

clip_p_w_picpath008

2、IP欺騙DOS***

這種***利用RST位來實現。假設現在有一個合法用戶(1.1.1.1)已經同服務器建立了正常的連接,***者構造***的TCP數據,僞裝自己的IP爲1.1.1.1,並向服務器發送一個帶有RST位的TCP數據段。服務器接收到這樣的數據後,認爲從1.1.1.1發送的連接有錯誤,就會清空緩衝區中建立好的連接。這時,如果合法用戶1.1.1.1再發送合法數據,服務器就已經沒有這樣的連接了,該用戶就必須從新開始建立連接。***時,僞造大量的IP地址,向目標發送RST數據,使服務器不對合法用戶服務。

3、 帶寬DOS***

如果你的連接帶寬足夠大而服務器又不是很大,你可以發送請求,來消耗服務器的緩衝區消耗服務器的帶寬。這種***就是人多力量大了,配合上SYN一起實施DOS,威力巨大。不過是初級DOS***。呵呵。Ping白宮??你發瘋了啊!

4、自身消耗的DOS***

這是一種老式的***手法。說老式,是因爲老式的系統有這樣的自身BUG。比如Win95 (winsock v1), Cisco IOS v.10.x, 和其他過時的系統。

這種DOS***就是把請求客戶端IP和端口弄成主機的IP端口相同,發送給主機。使得主機給自己發送TCP請求和連接。這種主機的漏洞會很快把資源消耗光。直接導致當機。這中僞裝對一些身份認證系統還是威脅巨大的。

上面這些實施DOS***的手段最主要的就是構造需要的TCP數據,充分利用TCP協議。這些***方法都是建立在TCP基礎上的。還有其他的DOS***手段。

5、塞滿服務器的硬盤

通常,如果服務器可以沒有限制地執行寫操作,那麼都能成爲塞滿硬盤造成DOS***的途徑,比如:

發送垃圾郵件。一般公司的服務器可能把郵件服務器和WEB服務器都放在一起。破壞者可以發送大量的垃圾郵件,這些郵件可能都塞在一個郵件隊列中或者就是壞郵件隊列中,直到郵箱被撐破或者把硬盤塞滿。

讓日誌記錄滿。***者可以構造大量的錯誤信息發送出來,服務器記錄這些錯誤,可能就造成日誌文件非常龐大,甚至會塞滿硬盤。同時會讓管理員痛苦地面對大量的日誌,甚至就不能發現***者真正的***途徑。向匿名FTP塞垃圾文件。這樣也可以塞滿硬盤空間。

6、合理利用策略

一般服務器都有關於帳戶鎖定的安全策略,比如,某個帳戶連續3次登陸失敗,那麼這個帳號將被鎖定。這點也可以被破壞者利用,他們僞裝一個帳號去錯誤登陸,這樣使得這個帳號被鎖定,而正常的合法用戶就不能使用這個帳號去登陸系統了

我司的設備支持下面的***防範:

針對常見的網絡***手段,如IP Source Address spoofing(僞源地址***)、LAND***、SYN Flood***、Smurf***、Ping Flood***,進行檢測和防範。

ip source-route

源路由包:源路由包除了在網絡測試工具中被正常使用外,往往也是***的一大工具,會話劫持時往往會用到此手段,因此,是否允許源路由包通過被設置成一個可選項;如果不被允許,此類包將一律被否決。

ip record-route

記錄路由:該選項既能用於網絡測試,也可被***用來掌握網絡動態,此項也是可選的。

ip fragment

不合理的分片:是利用系統缺陷使系統紊亂的***,該***是利用這樣一種分片:分片重組後該IP數據包的長度大於最大包長度(65535),而有些操作系統不知道如何處理此種異常包,導致系統掛起或死機。這種***中則至少存在這樣一個分片:該分片的IP包數據段長度(IP長度減去IP首部長度)加上分片偏移值的結果,必定會大於最大包長度。因此,只要拒絕這樣的報文,目的系統就能避免受到***。該功能是可選的。

ip small-packet

太小的包:太短的IP包也可能被用來進行***,是否允許這樣的包通過,可以由用戶配置進行選擇(缺省爲32字節)

ip intercept ipeq

源IP地址等於目的IP地址的IP報文,可被***用來進行***。是否允許這樣的包通過,可以由用戶配置進行選擇。

ip icmp intercept fragment

分片的ICMP報文,是否允許這樣的包通過,可以由用戶配置進行選擇。

***檢測功能對ICMP flood、 Smurf、 Fraggle、 SYN flood、 LAND等幾種***包的檢測(或監控)。

ip icmp intercept

ICMP flood,該***通過向目標IP發送大量ICMP包,佔用帶寬,從而導致合法報文無法到達目的地,達到***目的;檢測時,對於發向目的地址爲路由器接口地址的ICMP報文進行記數,一旦報文的接收頻率高出正常範圍,則懷疑存在***行爲,嚴格控制報文的流經頻率;直到頻率低出範圍,又開始放行;此處理方式有一定的侷限性:即當拒絕過量包時也拒絕了合法的包,但在綜合考慮系統自身的承受能力的前提下,此方法是最合理的。

ip smurf intercept

Smurf也是一種這種類型的***,***者先使用該受害主機的地址,向一個廣播地址發送ICMP迴響請求,在此廣播網絡上,潛在的數以千計的計算機將會做出響應,大量響應將發送到受害主機,此***後果同ICMP flood,但比之更爲隱祕;此類包可通過兩種方式攔截,如果僞源地址檢測能夠檢測出來,直接拒絕該包,另外,可打開smurf檢測開關,如果源地址是受保護的目的服務器地址,而目的地址是一個廣播地址,則攔截這樣的包; smurf自身利用的是ICMP_ECHO包,但考慮到其它的ICMP請求包也將導致同樣的後果,因此,將檢測擴展到類型ICMP_TSTAMP、ICMP_IREQ、ICMP_MASKREQ。

ip fraggle intercept

***fraggle嚴格說來,是一個smurf的變種,它針對許多防火牆對於ICMP包檢查比較嚴格的前提,不再向廣播地址發ICMP請求包,而是改爲發送UDP包,當目的網段的計算機收到該包並檢查到目的端口不可達時,將發給受害主機一個“目的端口不可達”的差錯報文,大量的報文同時涌向受害主機,因而達到***目的;此檢測與smurf檢測大同小異,僅僅類型不同而已。

ip tcp intercept land

LAND***則利用了系統的另一個弱點:許多系統不知道如何處理源地址與端口號等同於目的地址與端口號的SYN建連請求,導致系統紊亂或死機;因此,如果檢測到了某個報文的源地址等於目的地址、源端口等於目的端口,當即扔掉這樣的包。

ip tcp intercept list

消耗系統有限資源的***,最有名的當屬SYN泛洪,這是一種蓄意侵入三次握手並打開大量半開TCP/IP連接而進行的***,該***利用IP欺騙,向受害者的系統發送看起來合法的SYN請求,而事實上該源地址不存在或當時不在線,因而回應的ACK消息無法到達目的,而受害者的系統最後被大量的這種半開連接充滿,資源耗盡,而合法的連接無法被響應;對於此***,我們採用一種簡單的攔截方式:閥值攔截,一旦某服務器收到的SYN請求的報文頻率超過閥值限度則對多餘的進行攔截,一方面削弱了syn***強度,另一方面不至於消耗過多的路由器資源而導致自身的拒絕服務。需要注意的是,由於沒有區分SYN報文的合法性,這種方式仍然會造成一部分合法請求被攔截掉,造成無法響應的情況,可以結合僞源地址檢測功能過濾掉大部分***報文,減少合法報文被攔截的情況。

當然,對於動態防火牆來說,本身他就是一種被動的防禦行爲,事先在軟件上面必須要有周全的考慮,才能在防範中做到遊刃有餘,還有一點也是非常重要的,那就是防火牆的性能,和交換機一樣,要做到線速轉發就需要足夠的背板交叉容量的支撐, 任何防火牆都是有極限的。超過了極限值,防火牆也被活活的***死了…..

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章