1. 程式人生 > >網路安全知識之DDOS介紹

網路安全知識之DDOS介紹

      DOS:DOS的全稱是Denial of Service,意思是拒絕服務。其目的就是通過各種手段,使網路或者計算機無法提供正常服務。

      DDOS:DDOS攻擊就是高階的DOS攻擊,全稱是Distributed Denial of Service,意思是分散式拒絕訪問攻擊。隨著計算機科技的發展,伺服器的效能也再不斷的提升,靠單一的機器來對伺服器進行DOS攻擊已經杯水車薪,所以出現了分散式DOS攻擊,即利用成千上萬的機器來對伺服器發起DOS攻擊,這些成千上萬的機器被成為“肉雞”。

      DDOS的比喻:譬如有一個黑客想攻擊你家的電話,那麼他可以找來幾百個人同時給你家打電話,這樣正常使用者想聯絡你時會一直佔線,可以理解為 你的電話遭遇了“DDOS攻擊”。

二. 發生在身邊的DDOS——比特幣交易網站崩潰

      親身經歷:

      2013.11.21:我入手萊特幣(簡稱LTC,比特幣的兄弟)。入手時60元一個,買了1w的。交易網站是 中國最大的LTC交易平臺 OKCOIN。

      2013.11.29:LTC瘋漲到380元一個,1w變成了4w。周圍的同事都瘋了一樣,緊緊握住手中的幣,深深相信LTC的價格將直奔1000元。

      2013.12.10:OKCOIN交易網站出現了無法訪問的現象,隨後OKCOIN官方微博釋出宣告:OKCOIN正在遭受DDOS攻擊,使用者的資金不受影響,稍安勿躁。LTC的價格開始下跌。

      2013.12.15:央行發表正式宣告,宣告稱:虛擬貨幣不是貨幣,之後將禁止其買賣。BTC和LTC的價格開始大跌。LTC從200+降到40而後反彈回150,這期間只用了3-4個小時。

      2013.12月底:OKCOIN交易網站又遭受了幾次DDOS的攻擊,不過此時的使用者的心理素質已經變強,攻擊後價格波動不大。趁著價格波動,又入手1w。

      2014.初:LTC價格仍舊居高不下,央行又陸續發表了n次宣告。

      2014.中:LTC價格終於跌回20元。當時有朋友說,LTC終究會漲回去的,我半信半疑。

      2015年今天:LTC價格仍舊在20元左右徘徊。算了算,賠了1w。

      結論:在金融的世界,技術DDOS神馬的都是浮雲,政策才是王道。珍愛生命,遠離虛擬貨幣。

三. 小試牛刀——Target is CRM

      實驗原理:利用slowloris指令碼來對Apache進行攻擊

      實驗方法:

      1. 在192.168.22.194的8082埠上佈置CRM的服務

      2. 在192.168.22.194上佈置Apache服務,預設在80埠監聽,並設定轉發規則如下:

      3. 訪問http://192.168.22.194/,可以正常訪問CRM服務

      4. 在192.168.11.243,執行attack.sh

      5. 再次訪問http://192.168.22.194/,觀察效果

      6. 在192.168.22.194上執行netstat -anpt | grep 80,觀察效果

四. 琳琅滿目的攻擊方式——DDOS的原理及工具

      1. DDOS攻擊原理

          一個比較完善的DDOS攻擊體系,分為4大部分,如下圖:

          

      2. DDOS攻擊方式

          (1) 畸形HTTP請求

               原理:此種攻擊方式利用Web Server的設計缺陷,以極低的速度往伺服器傳送Http請求,但是該請求是畸形的:正常的Http請求以兩個\r\n表示頭部的結束,攻擊者只發送一個。這時Web Server認為該請求的頭部尚未結束,保持連線不放。這樣一來,Web Server將會保持大量的惡意連線,而Web Server對於併發的連線數都是有上限的(Apache預設是256),當達到上限時,將無法提供正常服務。

               工具:Slowloris(Perl編寫),就是利用這個原理來進行攻擊。

          (2) SYN FLOOD

               原理:SYN FLOOD利用TCP三次握手的固有漏洞來進行攻擊。攻擊機器向目標機發送SYN(第一次握手)後,不接收伺服器返回的ACK並給與迴應,這種情況下,伺服器一般會重試並等待一段時間後再丟棄這個連線,等待的時間是分鐘級(30s-2min)。當攻擊者向伺服器大量傳送這種SYN包,並且不做迴應時,伺服器將維護一個非常巨大的半連線列表並忙於重試,消耗大量的資源而導致無法提供正常服務。

               工具:TFN2K(C語言編寫)和LOIC(低軌道離子炮,C#編寫),都提供了SYN FLOOD的攻擊模式。

          (3) HTTP FLOOD

               原理:利用大量的“肉雞”,向伺服器傳送http請求。當請求量達到一定QPS時,服務將崩潰。當請求的後天處理涉及資料庫請求時,往往瓶頸會出現在資料庫;當不涉及資料庫時,瓶頸會出現在web容器(jetty)。

               工具:LOIC,任意打壓工具。

          (4) PING FLOOD

               原理:PING是通過傳送ICMP報文來探尋網路主機是否存在的一個工具。由於ICMP基於無連線,所以主機A可以偽裝成主機B向主機C傳送ICMP報文,那麼主機C會將回應傳送到主機B,A不受任何影響。當伺服器接收到大量的PING時,有可能會崩潰,瓶頸可能出現在 伺服器資源 或 網路頻寬。

               工具:TFN2K提供了PING FLOOD模式。

五. 人無遠慮,必有近憂——如何防範

      1. 被DDOS時攻擊的現象

          (1) 服務響應變慢甚至無法響應

          (2) 被攻擊的伺服器上充斥著大量的TCP連線,大多數處於SYN_RECV和TIME_WAIT狀態

                檢視方法:netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"\t",state[key]}'

          (3) 網路中充斥著大量的無用資料包

          (4) 伺服器CPU佔有率很高

      2. 防禦方法

          (1) 防火牆

                如果能夠通過netstat觀察出攻擊者的IP特徵,可以用iptables臨時封掉最大嫌疑的ip或ip段。

          (2) 調整服務配置

                (i) 修改tcp_synack_retries,減少伺服器收到SYN包後的重試次數——針對SYN FLOOD

                (ii) 減小TCP的SYN的半連線的超時時間——針對SYN FLOOD

                (iii) 增大Apache或nginx的併發連線數量——針對畸形HTTP請求

          (3) 加機器

                對於HTTP FLOOD的攻擊方式,最簡單的方法就是加機器,以暴制暴,看誰耗得過誰,畢竟攻擊者的資源也是有限的。

          (4) 取消域名繫結

                一般攻擊者是根據域名來對一個服務進行攻擊,所以取消域名繫結,可以讓攻擊者失去目標,同時通知你的使用者通過ip訪問服務。

          (5) nginx限制客服端的訪問頻次

          (6) 第一個也是最重要的是:聯絡運維!