DOS(Denial of Service,即拒絕服務)

 DOS(Denial of Service,即拒絕服務)


本文主要介紹DOS的機理和常見的實施方法,要想了解DOS攻擊得實現機理,必須對TCP有一定的瞭解。
  
  1、什麼是DOS攻擊
   DOS:即Denial Of Service,拒絕服務的縮寫,可不能認爲是微軟的dos操作系統了。好象在5•1的時候鬧過這樣的笑話,拒絕服務,就相當於必勝客在客滿的時候不再讓人進去一樣,呵呵,你想喫餡餅,就必須在門口等吧。DOS攻擊即讓目標機器停止提供服務或資源訪問。
  
  2、有關TCP協議的東西
   TCP(transmission control protocol,傳輸控制協議),是用來在不可靠的因特網上提供可靠的、端到端的字節流通訊協議,在RFC793中有正式定義,還有一些解決錯誤的東西在RFC 1122中有記錄,RFC 1323則有TCP的功能擴展。我們常見到的TCP/IP協議中,IP層不保證將數據報正確傳送到目的地,TCP則從本地機器接受用戶的數據流,將其分成不超過64K字節的數據片段,將每個數據片段作爲單獨的IP數據包發送出去,最後在目的地機器中再組合成完整的字節流,TCP協議必須保證可靠性。發送和接收方的TCP傳輸以數據段的形式交換數據,一個數據段包括一個固定的20字節,加上可選部分,後面再跟上數據,TCP協議從發送方傳送一個數據段的時候,還要啓動計時器,當數據段到達目的地後,接收方還要發送回一個數據段,其中有一個確認序號,它等於希望收到的下一個數據段的順序號,如果計時器在確認信息到達前超時了,發送方會重新發送這個數據段。
  
   上面,我們總體上了解一點TCP協議,重要的是要熟悉TCP的數據頭(header)。因爲數據流的傳輸最重要的就是header裏面的東西,至於發送的數據,只是header附帶上的。客戶端和服務端的服務響應就是同header裏面的數據相關,兩端的信息交流和交換是根據header中的內容實施的,因此,要實現DOS,就必須對header中的內容非常熟悉。
  
  下面是TCP數據段頭格式。RFC793中的
  (請大家注意網頁顯示空格使下面的格式錯位了)
  
   0 1 2 3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Source Port | Destination Port |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Sequence Number |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Acknowledgment Number |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Data | |U|A|P|R|S|F| |
   | Offset| Reserved |R|C|S|S|Y|I| Window |
   | | |G|K|H|T|N|N| |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Checksum | Urgent Pointer |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Options | Padding |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | data |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  
   TCP Header Format
  
  
  
  Source Port和 Destination Port :是本地端口和目標端口
  Sequence Number 和 Acknowledgment Number :是順序號和確認號,確認號是希望接收的字節號。這都是32位的,在TCP流中,每個數據字節都被編號。
  Data offset :表明TCP頭包含多少個32位字,用來確定頭的長度,因爲頭中可選字段長度是不定的。
  Reserved : 保留的6位,現在沒用,都是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,ACK=0,連接響應時,SYN=1,ACK=1。即,SYN和ACK來區分Connection Request和Connection Accepted。
   FIN:(No more data from sender)用來釋放連接,表明發送方已經沒有數據發送了。
  
   知道這重要的6個指示標誌後,我們繼續來。
  
   16位的WINDOW字段:表示確認了字節後還可以發送多少字節。可以爲0,表示已經收到包括確認號減1(即已發送所有數據)在內的所有數據段。
   接下來是16位的Checksum字段,用來確保可靠性的。
   16位的Urgent Pointer,和下面的字段我們這裏不解釋了。不然太多了。呵呵,偷懶啊。
  
   我們進入比較重要的一部分: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、ACK。
  
  3、服務器的緩衝區隊列(Backlog Queue)
   服務器不會在每次接收到SYN請求就立刻同客戶端建立連接,而是爲連接請求分配內存空間,建立會話,並放到一個等待隊列中。如果,這個等待的隊列已經滿了,那麼,服務器就不在爲新的連接分配任何東西,直接丟棄新的請求。如果到了這樣的地步,服務器就是拒絕服務了。
   如果服務器接收到一個RST位信息,那麼就認爲這是一個有錯誤的數據段,會根據客戶端IP,把這樣的連接在緩衝區隊列中清除掉。這對IP欺騙有影響,也能被利用來做DOS攻擊。
  上面的介紹,我們瞭解TCP協議,以及連接過程。要對SERVER實施拒絕服務攻擊,實質上的方式就是有兩個:
  
  一, 迫使服務器的緩衝區滿,不接收新的請求。
  
  二, 使用IP欺騙,迫使服務器把合法用戶的連接復位,影響合法用戶的連接
  
  這就是DOS攻擊實施的基本思想。具體實現有這樣的方法:
  
  1、SYN FLOOD
  
  利用服務器的連接緩衝區(Backlog Queue),利用特殊的程序,設置TCP的Header,向服務器端不斷地成倍發送只有SYN標誌的TCP連接請求。當服務器接收的時候,都認爲是沒有建立起來的連接請求,於是爲這些請求建立會話,排到緩衝區隊列中。
  
  如果你的SYN請求超過了服務器能容納的限度,緩衝區隊列滿,那麼服務器就不再接收新的請求了。其他合法用戶的連接都被拒絕掉。可以持續你的SYN請求發送,直到緩衝區中都是你的只有SYN標記的請求。
  
  解決辦法:在防火牆上過濾來自同一主機的後續連接,當然還要根據實際的情況來判斷。
   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.Smurf攻擊
  smurf攻擊通過使用將回復地址設置成受害網絡的廣播地址的ICMP應答請求數據包來淹沒受害主機的方式進行,最終導致該網絡的所有主機都對此ICMP應答請求作出答覆,導致網絡阻塞。
  解決辦法:去掉ICMP服務。

6、塞滿服務器的硬盤

通常,如果服務器可以沒有限制地執行寫操作,那麼都能成爲塞滿硬盤造成DOS攻擊的途徑,比如:

發送垃圾郵件。一般公司的服務器可能把郵件服務器和WEB服務器都放在一起。破壞者可以發送大量的垃圾郵件,這些郵件可能都塞在一個郵件隊列中或者就是壞郵件隊列中,直到郵箱被撐破或者把硬盤塞滿。

讓日誌記錄滿。入侵者可以構造大量的錯誤信息發送出來,服務器記錄這些錯誤,可能就造成日誌文件非常龐大,甚至會塞滿硬盤。同時會讓管理員痛苦地面對大量的日誌,甚至就不能發現入侵者真正的入侵途徑。

向匿名FTP塞垃圾文件。這樣也可以塞滿硬盤空間。
解決辦法:對郵件地址進行適當的配置

6、合理利用策略

一般服務器都有關於帳戶鎖定的安全策略,比如,某個帳戶連續3次登陸失敗,那麼這個帳號將被鎖定。這點也可以被破壞者利用,他們僞裝一個帳號去錯誤登陸,這樣使得這個帳號被鎖定,而正常的合法用戶就不能使用這個帳號去登陸系統了。
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章