DoS***_詳解(轉載)

原文地址:https://www.cnblogs.com/davidwang456/p/3590846.html

DoS到底是什麼?接觸PC機較早的同志會直接想到微軟磁盤操作系統的DOS--DiskOperationSystem?不,此DoS非彼DOS也,DoS即DenialOfService,拒絕服務的縮寫。

DoS是Denial of Service的簡稱,即拒絕服務,造成DoS的***行爲被稱爲DoS***,其目的是使計算機或網絡無法提供正常的服務。最常見的DoS***有計算機網絡帶寬***和連通性***。

一、概念理解:

作個形象的比喻來理解DoS。街頭的餐館是爲大衆提供餐飲服務,如果一羣地痞流氓要DoS餐館的話,手段會很多,比如霸佔着餐桌不結賬,堵住餐館的大門不讓路,騷擾餐館的服務員或廚子不能幹活,甚至更惡劣……相應的計算機和網絡系統則是爲Internet用戶提供互聯網資源的,如果有***要進行DoS***的話,可以想象同樣有好多手段!今天最常見的DoS***有對計算機網絡的帶寬***和連通性***。帶寬***指以極大的通信量衝擊網絡,使得所有可用網絡資源都被消耗殆盡,最後導致合法的用戶請求無法通過。連通性***指用大量的連接請求衝擊計算機,使得所有可用的操作系統資源都被消耗殆盡,最終計算機無法再處理合法用戶的請求。
傳統上,***者所面臨的主要問題是網絡帶寬,由於較小的網絡規模和較慢的網絡速度的限制,***者無法發出過多的請求。雖然類似“thepingofdeath”的***類型只需要較少量的包就可以摧毀一個沒有打過補丁的UNIX系統,但大多數的DoS***還是需要相當大的帶寬的,而以個人爲單位的***們很難使用高帶寬的資源。爲了克服這個缺點,DoS***者開發了分佈式的***。***者簡單利用工具集合許多的網絡帶寬來同時對同一個目標發動大量的***請求,這就是DDoS***。

無論是DoS還是DDoS,簡單的看,都只是一種破壞網絡服務的***方式,雖然具體的實現方式千變萬化,但都有一個共同點,就是其根本目的是使受害主機或網絡無法及時接收並處理外界請求,或無法及時迴應外界請求。其具體表現方式有以下幾種:

  1. 製造大流量無用數據,造成通往被主機的網絡擁塞,使被主機無法正常和外界通信。
  2. 利用被主機提供服務或傳輸協議上處理重複連接的缺陷,反覆高頻的發出性的重複服務請求,使被***主機無法及時處理其它正常的請求。
  3. 利用被主機所提供服務程序或傳輸協議的本身實現缺陷,反覆發送畸形的數據引發系統錯誤的分配大量系統資源,使主機處於掛起狀態甚至死機。
    二、***流程:

    要理解dos***,首先要理解TCP連接的三次握手過程(Three-wayhandshake)。在TCP/IP協議中,TCP協議提供可靠的連接服務,採用三次握手建立一個連接。
    1.第一次握手:建立連接時,客戶端發送SYN包((SYN=i)到服務器,並進入SYN SEND狀態,等待服務器確認;
    2.第二次握手:服務器收到SYN包,必須確認客戶的SYN (ACK=i+1 ),同時自己也發送一個SYN包((SYN=j)}即SYN+ACK包,此時服務器進入SYN_RECV狀態;
    3.第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ACK=j+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手,客戶端與服務器開始傳送數據。

    在上述過程中,還有一些重要的概念:

    1. 半連接:收到SYN包而還未收到ACK包時的連接狀態稱爲半連接,即尚未完全完成三次握手的TCP連接。
    2. 半連接隊列:在三次握手協議中,服務器維護一個半連接隊列,該隊列爲每個客戶端的SYN包(SYN=i )開設一個條目,該條目表明服務器已收到SYN包,並向客戶發出確認,正在等待客戶的確認包。這些條目所標識的連接在服務器處於SYN_ RECV狀態,當服務器收到客戶的確認包時,刪除該條目,服務器進入ESTABLISHED狀態。
    3. Backlog參數:表示半連接隊列的最大容納數目。
    4. SYN-ACK重傳次數:服務器發送完SYN-ACK包,如果未收到客戶確認包,服務器進行首次重傳,等待一段時間 仍未收到客戶確認包,進行第二次重傳,如果重傳次數超過系統規定的最大重傳次數,系統將該連接信息、從半連接隊列中刪除。注意,每次重傳等待的時間不一定 相同。
    5. 半連接存活時間:是指半連接隊列的條目存活的最長時間,也即服務從收到SYN包到確認這個報文無效的最長時間,該時間值是所有重傳請求包的最長等待時間總和。有時也稱半連接存活時間爲Timeout時間、SYN_RECV存活時間。

上面三個參數對系統的TCP連接狀況有很大影響。

SYN洪水***屬於DoS***的一種,它利用TCP協議缺陷,通過發送大量的半連接請求,耗費CPU和內存資源。 SYN***除了能影響主機外,還可以危害路由器、防火牆等網絡系統,事實上SYN***並不管目標是什麼系統,只要這些系統打開TCP服務就可以實施。從圖 4-3可看到,服務器接收到連接請求(SYN=i )將此信息加入未連接隊列,併發送請求包給客戶端( SYN=j,ACK=i+1 ),此時進入SYN_RECV狀態。當服務器未收到客戶端的確認包時,重發請求包,一直到超時,纔將此條目從未連接隊列刪除。配合IP欺騙,SYN***能 達到很好的效果,通常,客戶端在短時間內僞造大量不存在的IP地址,向服務器不斷地發送SYN包,服務器回覆確認包,並等待客戶的確認,由於源地址是不存 在的,服務器需要不斷的重發直至超時,這些僞造的SYN包將長時間佔用未連接隊列,正常的SYN 請求被丟棄,目標系統運行緩慢,嚴重者引起網絡堵塞甚至系統癱瘓。過程如下:

   ***主機C(地址僞裝後爲C')-----大量SYN包---->被***主機
   C'<-------SYN/ACK包----被***主機

由於C’地址不可達,被主機等待SYN包超時。主機通過發大量SYN包填滿未連接隊列,導致正常SYN包被拒絕服務。另外,SYN洪水還可以通過發大量ACK包進行DoS
三、***手段:

拒絕服務***是一種對網絡危害巨大的惡意***。今天,DoS具有代表性的***手段包括PingofDeath、TearDrop、UDPflood、SYNflood、LandAttack、IPSpoofingDoS等。看看它們又是怎麼實現的。 
  1. 死亡之ping (pingofdeath)
    ICMP(InternetControlMessageProtocol,Internet控制信息協議)在Internet上用於錯誤處理和傳遞控制信息。它的功能之一是與主機聯繫,通過發送一個“迴音請求”(echorequest)信息包看看主機是否“活着”。最普通的ping程序就是這個功能。而在TCP/IP的RFC文檔中對包的最大尺寸都有嚴格限制規定,許多操作系統的TCP/IP協議棧都規定ICMP包大小爲64KB,且在對包的標題頭進行讀取之後,要根據該標題頭裏包含的信息來爲有效載荷生成緩衝區。"PingofDeath"就是故意產生畸形的測試Ping(PacketInternetGroper)包,聲稱自己的尺寸超過ICMP上限,也就是加載的尺寸超過64KB上限,使未採取保護措施的網絡系統出現內存分配錯誤,導致TCP/IP協議棧崩潰,最終接收方宕機。
  2. 淚滴 (teardrop)
    淚滴利用在TCP/IP協議棧實現中信任IP碎片中的包的標題頭所包含的信息來實現自己的。IP分段含有指示該分段所包含的是原包的哪一段的信息,某些TCP/IP協議棧(例如NT在servicepack4以前)在收到含有重疊偏移的僞造分段時將崩潰。

  3. UDP泛洪(UDPflood)
    UDPflood:如今在Internet上UDP(用戶數據包協議)的應用比較廣泛,很多提供WWW和Mail等服務設備通常是使用Unix的服務器,它們默認打開一些被惡意利用的UDP服務。如echo服務會顯示接收到的每一個數據包,而原本作爲測試功能的chargen服務會在收到每一個數據包時隨機反饋一些字符。UDPflood假冒就是利用這兩個簡單的TCP/IP服務的漏洞進行惡意,通過僞造與某一主機的Chargen服務之間的一次的UDP連接,回覆地址指向開着Echo服務的一臺主機,通過將Chargen和Echo服務互指,來回傳送毫無用處且佔滿帶寬的垃圾數據,在兩臺主機之間生成足夠多的無用數據流,這一拒絕服務***飛快地導致網絡可用帶寬耗盡。

  4. SYN泛洪(SYNflood)
    SYNflood:我們知道當用戶進行一次標準的 TCP(TransmissionControlProtocol)連接時,會有一個3次握手過程。首先是請求服務方發送一個 SYN(SynchronizeSequenceNumber)消息,服務方收到SYN後,會向請求方回送一個SYN-ACK表示確認,當請求方收到 SYN-ACK後,再次向服務方發送一個ACK消息,這樣一次TCP連接建立成功。“SYNFlooding”則專門針對TCP協議棧在兩臺主機間初始化連接握手的過程進行DoS,其在實現過程中只進行前2個步驟:當服務方收到請求方的SYN-ACK確認消息後,請求方由於採用源地址欺騙等手段使得服務方收不到ACK迴應,於是服務方會在一定時間處於等待接收請求方ACK消息的狀態。而對於某臺服務器來說,可用的TCP連接是有限的,因爲他們只有有限的內存緩衝區用於創建連接,如果這一緩衝區充滿了虛假連接的初始信息,該服務器就會對接下來的連接停止響應,直至緩衝區裏的連接企圖超時。如果惡意***方快速連續地發送此類連接請求,該服務器可用的TCP連接隊列將很快被阻塞,系統可用資源急劇減少,網絡可用帶寬迅速縮小,長此下去,除了少數幸運用戶的請求可以插在大量虛假請求間得到應答外,服務器將無法向用戶提供正常的合法服務。

    1. Land(LandAttack)
      在Land
      中,利用一個特別打造的SYN包--它的原地址和目標地址都被設置成某一個服務器地址進行。此舉將導致接受服務器向它自己的地址發送SYN-ACK消息,結果這個地址又發回ACK消息並創建一個空連接,每一個這樣的連接都將保留直到超時,在Land***下,許多UNIX將崩潰,NT變得極其緩慢(大約持續五分鐘)。

      1. IP欺騙dos
        這種
        利用TCP協議棧的RST位來實現,使用IP欺騙,迫使服務器把合法用戶的連接復位,影響合法用戶的連接。假設現在有一個合法用戶(100.100.100.100)已經同服務器建立了正常的連接,者構造的TCP數據,僞裝自己的IP爲100.100.100.100,並向服務器發送一個帶有RST位的TCP數據段。服務器接收到這樣的數據後,認爲從100.100.100.100發送的連接有錯誤,就會清空緩衝區中已建立好的連接。這時,合法用戶100.100.100.100再發送合法數據,服務器就已經沒有這樣的連接了,該用戶就被拒絕服務而只能重新開始建立新的連接。

      2. smurf***

    Smurf是一種簡單但有效的DDoS技術,它利用了ICMP(Internet控制信息協議)。ICMP在Internet上用於錯誤處理和傳遞控制信息。它的功能之一是與主機聯繫,通過發送一個“迴音請求”(echorequest)信息包看看主機是否“活着”。最普通的ping程序就使用了這個功能。Smurf是用一個偷來的帳號安裝到一個計算機上的,然後用一個僞造的源地址連續ping一個或多個計算機網絡,這就導致所有計算機所響應的那個計算機並不是實際發送這個信息包的那個計算機。這個僞造的源地址,實際上就是的目標,它將被極大數量的響應信息量所淹沒。對這個僞造信息包做出響應的計算機網絡就成爲***的不知情的同謀。

四、常見的DoS***與防護

  1. SYN Flood
    原理:
    問題就出在TCP連接的三次握手中,假設一個用戶向服務器發送了SYN報文後突然死機或掉線,那麼服務器在發出SYN+ACK應答報文後是無法收到客戶端的 ACK報文的(第三次握手無法完成),這 種情況下服務器端一般會重試(再次發送SYN+ACK給客戶端)並等待一段時間後丟棄這個未完成的連接,這段時間的長度我們稱爲SYN Timeout,一般來說這個時間是分鐘的數量級(大約爲30秒 -2分鐘);一個用戶出現異常導致服務器的一個線程等待1分鐘並不是什麼很大的問題,但如果有一個惡意的
    者大量模擬這種情況,服務器端將爲了維護一個 非常大的半連接列表而消耗非常 多的資源----數以萬計的半連接,即使是簡單的保存並遍歷也會消耗非常多的CPU時間和內存,何況還要不斷對這個列表中的IP進行SYN+ACK的重 試。實際上如果服務器的TCP/IP棧不夠強大,最 後的結果往往是堆棧溢出崩潰---即使服務器端的系統足夠強大,服務器端也將忙於處理者僞造的TCP連接請求而無暇理睬客戶的正常請求(畢竟客戶端的 正常請求比率非常之小),此時從 正常客戶的角度看來,服務器失去響應,這種情況我們稱作:服務器端受到了SYN Flood(SYN洪水)。
    防範:
    第一種是縮短SYN Timeout時間
    第二種方法是設置SYN Cookie,就是給每一個請求連接的IP地址分配一個Cookie,如果短時間內連續受到某個IP的重複SYN報文,就認定是受到了
    ,以後從這個IP地址來的包會被一概丟棄。

    netstat -n -p tcp >result.txt

    1. Smurf
      原理:
      發送僞裝的ICMP數據包,目的地址設爲某個網絡的廣播地址,源地址設爲要
      的目的主機,使所有收到此ICMP數據包的主機都將對目的主機發出一個迴應,使被***主機在某一段時間內收到 成千上萬的數據包
      防範:
      在cisco路由器上配置如下可以防止將包傳遞到廣播地址上:
      Router(config-if)# no ip directed-broadcast

    2. Ping of Death
      原理:
      "ping of death"就是我們常說的"死亡Ping"
      這種
      通過發送大於65536字節的ICMP包使操作系統崩潰;通常不可能發送大於65536個字節的ICMP包,但可以把報文分割成片段,然後在目標主機上重組;最終會導致被目標緩衝區溢出,引起拒絕服務。有些時候導致telnet和http服務停止,有些時候路由器重啓。

    3. 淚滴
      原理:
      對於一些大的IP數據包,往往需要對其進行拆分傳送,這是爲了迎合鏈路層的MTU(最大傳輸單元)的要求。比如,一個6000字節的IP包,在MTU爲2000的鏈路上傳輸的時候,就需要分成3個IP 包。在IP報頭中有一個偏移字段和一個拆分標誌(MF)。如果MF標誌設置爲1,則表示這個IP包是一個大IP包的片段,其中偏移字段指出了這個片段在整 個IP包中的位置。例如,對一個6000字 節的IP包進行拆分(MTU爲2 000),則3個片段中偏移字段的值依次爲0,2000,4000。這樣接收端在全部接收完IP數據包後,就可以根據這些信息重新組裝這幾個分次接收的拆分IP包。在這 裏就有一個安全漏洞可以利用了,就是如果
      們在截取IP數據包後,把偏移字段設置成不正確的值,這樣接收端在收到這些分拆的數據包後,就不能按數據包中 的偏移字段值正確組合這些拆 分的數據包,但接收端會不斷嘗試,這樣就可能致使目標計算機操作系統因資源耗盡而崩潰。

      1. DRDOS
        原理:
        時,者巧妙的利用了反彈服務器羣來將洪 水數據包反彈給目標主機 反彈服務是指某些服務器在收到一個請求數據報後就會產生一個迴應數據報。所有的 Web 服務器、DNS 服務器及路 由器都是反彈服務器,他們會對 SYN 報文或其他 TCP 報文迴應 SYNACKs 或 RST 報文, 以及對一些 IP 報文迴應 ICMP 數據報超時或目的地不可達消息的數據 報。任何用於普通目的 TCP 連 接許可的網絡服務器都可以用做數據包反射服務器
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章