http://blog.chinaunix.net/uid-20556054-id-3164909.htmlhtml
SYN- Flood攻擊是當前網絡上最爲常見的DDoS攻擊,也是最爲經典的拒絕服務攻擊,它利用了TCP協議實現上的一個缺陷,經過向網絡服務所在端口發送大量 的僞造源地址的攻擊報文,就可能形成目標服務器中的半開鏈接隊列被佔滿,從而阻止其餘合法用戶進行訪問。這種攻擊早在1996年就被發現,但至今仍然顯示 出強大的生命力。不少操做系統,甚至防火牆、路由器都沒法有效地防護這種攻擊,並且因爲它能夠方便地僞造源地址,追查起來很是困難。它的數據包特徵一般 是,源發送了大量的SYN包,而且缺乏三次握手的最後一步握手ACK回覆。 例如,攻擊者首先僞造地址對 服務器發起SYN請求(我能夠創建鏈接嗎?),服務器就會迴應一個ACK+SYN(能夠+請確認)。而真實的IP會認爲,我沒有發送請求,不做迴應。服務 器沒有收到迴應,會重試3-5次而且等待一個SYN Time(通常30秒-2分鐘)後,丟棄這個鏈接。
若是攻擊者大量發送這種僞造源地址的 SYN請求,服務器端將會消耗很是多的資源來處理這種半鏈接,保存遍歷會消耗很是多的CPU時間和內存,況且還要不斷對這個列表中的IP進行 SYN+ACK的重試。最後的結果是服務器無暇理睬正常的鏈接請求—拒絕服務 商業產品的防禦算法 1,syn cookie/syn proxy類防禦算法:這種算法對全部的syn包均主動迴應,探測發起syn包的源IP地址是否真實存在;若是該IP地址真實存在,則該IP會迴應防禦設備的探測包,從而創建TCP鏈接;大多數的國內外抗拒絕服務產品採用此類算法 2,safereset算法:此算法對全部的syn包均主動迴應,探測包特地構造錯誤的字段,真實存在的IP地址會發送rst包給防禦設備,而後發起第2次鏈接,從而創建TCP鏈接;部分國外產品採用了這樣的防禦算法。 syn重傳算法:該算法利用了TCP/IP協議的重傳特性,來自某個源IP的第一個syn包到達時被直接丟棄並記錄狀態,在該源IP的第2個syn包到達時進行驗證,而後放行。 3,綜 合防禦算法:結合了以上算法的優勢,並引入了IP信譽機制。當來自某個源IP的第一個syn包到達時,若是該IP的信譽值較高,則採用syncookie 算法;而對於信譽值較低的源IP,則基於協議棧行爲模式,若是syn包獲得驗證,則對該鏈接進入syncookie校驗,一旦該IP的鏈接獲得驗證則提升 其信譽值。有些設備還採用了表結構來存放協議棧行爲模式特徵值,大大減小了存儲量算法
這裏,服務器要作兩個動做:查表、迴應ACK/RST。這種攻擊方式顯然沒有SYN Flood給服務器帶來的衝擊大,所以攻擊者必定要用大流量ACK小包衝擊纔會對服務器形成影響。按照咱們對TCP協議的理解,隨機源IP的ACK小包應該會被Server很快丟棄,由於在服務器的TCP堆棧中沒有這些ACK包的狀態信息。可是實際上經過測試,發現有一些TCP服務會對ACK Flood比較敏感,好比說JSP Server,在數量並很少的ACK小包的打擊下,JSP Server就很難處理正常的鏈接請求。對於Apache或者IIS來講,10kpps的ACK Flood不構成危脅,可是更高數量的ACK Flood會形成服務器網卡中斷頻率太高,負載太重而中止響應。能夠確定的是,ACK Flood不但能夠危害路由器等網絡設備,並且對服務器上的應用有不小的影響。 兩點:
1,查找耗時,影響因子爲包的個數 2,報文中斷耗時, 防禦: 利用對稱性判斷來分析出是否有攻擊存在。所謂對稱型判斷,就是收包異常大於發包,由於攻擊者一般會採用大量ACK包,而且爲了提升攻擊速度,通常採用內容基本一致的小包發送。這能夠做爲判斷是否發生ACK Flood的依據,可是目前已知狀況來看,不多有單純使用ACK Flood攻擊,都會和其餘攻擊方法混合使用,所以,很容易產生誤判。服務器
一些防火牆應對的方法是:創建一個hash表,用來存放TCP鏈接「狀態」,相對於主機的TCP stack實現來講,狀態檢查的過程相對簡化。例如,不做sequence number的檢查,不做包亂序的處理,只是統計必定時間內是否有ACK包在該「鏈接」(即四元組)上經過,從而「大體」肯定該「鏈接」是不是「活動的」。