最近花了點時間把《破壞之王-DDOS攻擊與防範深度剖析》看了一遍,坦白來講,這本書比較淺顯,能夠說是入門書,固然對於我這種對DDOS只知其一;不知其二的人來講,也是一本不錯的書,起碼我學到了一些東西。
DDOS是分佈式拒絕服務(Distributed Denial of Service, DDOS)的簡寫,從名字能夠看出,其攻擊是分佈式的,即多臺(可能上萬臺,甚至更多)電腦同時對目標進行攻擊,攻擊的目的是讓目標沒法提供服務。從根本上來講,讓目標沒法提供服務,辦法有不少,好比侵入目標服務器,刪除關鍵服務或程序,或者其餘的物理方式,這些確實有效,可是在隱蔽性上,以及目標恢復服務的難度上,都和DDOS相去甚遠。DDOS本質來講是用一些方法消耗目標服務器的資源,一臺服務器提供正常的對外服務,它必須擁有足夠的硬件設備,如CPU、內存、足夠快的硬盤,以及系統軟件,如穩定的操做系統、穩定的應用服務器以及數據庫等,還須要穩定的應用服務,好比基於JavaEE和PHP的程序,還須要足夠的帶寬,讓用戶能夠訪問。這些是提供服務的基礎,也是DDOS攻擊的關鍵,從這個角度來看,DDOS的攻擊通常分爲帶寬攻擊、系統資源攻擊和應用資源供給。簡單說明以下:
1)帶寬攻擊:這個很容易理解,就是向目標服務器發送大量的數據包,讓其餘的正經常使用戶沒法鏈接上服務器,這個最好理解,也最容易實現,不少壓力測試的工具均可以達到這種效果。可是這種壓力測試工具很容易被經過IP黑名單的辦法屏蔽掉。常見的攻擊方式有ICMP/IGMP洪水攻擊和UDP洪水攻擊,這種攻擊方式比較古老,很容易過濾,而且受制於攻擊電腦的性能,每每達不到想要的效果。更好的方式是反射攻擊技術,所謂的反射攻擊,就是攻擊電腦假裝成目標主機,向某些服務器(如DNS、NTP、ACK、SNMP)發送請求,這些服務器返回的報文遠大於請求內容,而且其返回的數據是指向目標主機的,這即方便了攻擊隱藏,也避免了攻擊主機的性能限制,由於某些狀況下,其放大效果能達到700倍。
2)攻擊系統資源:主要是指攻擊TCP連接和攻擊CPU、內存等資源,TCP鏈接被設計爲可靠的三次握手模式,對。於後兩次而言,每當有一次出現問題,就會引發等待和重傳,沒有完成的鏈接被稱爲半開鏈接,半開鏈接會很快耗盡服務器的鏈接資源,這就是常見的SYN洪水攻擊;另外客戶端發送完數據以後,會設置PSH標誌,服務器收到這一信息後,就會清空緩衝區,將數據提交給服務進程,若是發送大量的PSH位的數據,也會形成服務器資源的佔用。另外還有RST攻擊和SocketStress攻擊,前者相對困難,後者是一種慢速攻擊,這是經過TCP鏈接中的傳輸窗口的特性進行攻擊。另外還有利用SSL的特性,讓服務器端耗費大量的資源進行加解密,進而耗盡資源致使其沒法服務。
3)攻擊應用資源:常見的有攻擊DNS和攻擊HTTP服務,攻擊DNS實際上一種無目的的、針對整個網絡的攻擊,至關於毀掉了整個城市的站牌和路標,天然就沒法通行了。攻擊HTTP服務是利用HTTP服務的一些設計缺陷,如HTTP洪水攻擊,其實和攻擊TCP鏈接相似,攻擊者鏈接服務器以後,馬上切斷鏈接,並從新鏈接,這樣服務器的鏈接在超時以前須要保存,就會耗盡服務器資源;再好比Slowloris攻擊,就是利用了HTTP頭部的結束標誌位"\r\n\r\n",攻擊者發送其餘的Head字段,就是不發送"\r\n\r\n"標誌,就會致使服務器的鏈接耗盡,IIS、Nginx進行修改,可是Apache彷佛沒有修改;再如慢速POST攻擊,是利用了Content-Length指定了Body的傳輸長度這一特色,指定巨大的Content-Length值,而後緩慢的發送body信息,從而佔有http鏈接,進而耗盡服務器資源。還有一些就是數據處理過程的攻擊,如正則表達式和哈希衝突拒絕服務攻擊,這些也是下降服務器的處理速度,佔有關鍵資源,從而達到拒絕服務的目的。
DDOS的治理:
1)最可行的辦法,其實就是杜絕IP地址僞造,其實這個處理起來並不難,只要讓路由器判斷這個包是不是從本網域發出來的,若是不是,則拒絕,可是因爲成本和缺少激勵機制,尚未實現。還有一些相似的方案,若是可以獨具IP地址僞造,那麼DDOS攻擊應該減小大部分。
2)攻擊流量的緩解主要是對網絡流量進行清洗,清洗以前須要稀釋,稀釋的辦法主要有CDN、AnyCast,前者是經過智能DNS,將用戶的訪問分佈到不一樣的機器上,可是這種方法對指定IP的攻擊無效,AnyCast能夠解決針對IP攻擊的問題。
3)數據清洗的辦法不少,可是並非十分有效,常見的辦法有IP信譽檢查、攻擊特徵匹配、速度限制和檢查、TCP代理和驗證、協議完整性驗證、客戶端真實性驗證等方法