標籤:

DDOS攻擊方式總結

本文屬於安全脈搏原創現金獎勵計劃,未經允許,嚴禁轉載。

DDOS攻擊方式總結 - SecPulse.COM | 安全脈搏

本人近期一直在研究DDOS攻擊,並通讀了《破壞之王-DDOS攻擊與防範》一書,書中對於DDOS的攻擊方式與防範寫的很詳細,很推薦閱讀,並針對本書中的DDOS攻擊方式做了總結。

1、攻擊網路寬頻資源


1.1直接攻擊

使用大量的受控主機向被攻擊目標發送大量的網路數據包,以沾滿被攻擊目標的寬頻,並消耗伺服器和網路設備的網路數據處理能力,達到拒絕服務的目的。

直接攻擊的主要方法有ICMP/IGMP洪水攻擊和UDP洪水攻擊兩種。

  • 1.1.1 ICMP/UDP洪水攻擊

網路控制消息協議(ICMP)是TCP/IP協議族的核心協議之一,它用於在TCP/IP網路中發送控制消息,提供可能發生在通信環境的各種問題反饋,通過這些消息,管理者可以對所發生的問題做出診斷,然後採取適當的解決措施。

網際網路組管理協議(IGMP)是用於管理網際網路協議多播組成員的一種通信協議,IP主機和相鄰的路由器利用IGMP來建立多播組的組成員。

攻擊者使用受控主機向被攻擊目標發送大量的ICMP/IGMP報文,進行洪水攻擊以消耗目標的寬頻資源,這種類型的攻擊出現的很早,使用hping等工具就能簡單的發起攻擊。但現在使用這種方法發動的攻擊已見不多,被攻擊目標可以在其網路邊界直接過濾並丟棄ICMP/IGMP數據包使攻擊無效化。

  • 1.1.2 UDP洪水攻擊

用戶數據包協議(UDP)是一種面向無連接的傳輸層協議,主要用戶不要求分組順序到達的傳輸,提供面向實事務的簡單的不可靠信息傳送服務。

利用UDP數據報文,攻擊者也可以發送洪水攻擊,UDP洪水攻擊和ICMP/IGMP洪水攻擊的原理基本相同,通常,攻擊者會使用小包和大包兩種方式進行攻擊。

小包是指64位元組大小的數據包,這是乙太網上傳輸數據幀的最小值,在相同流量下,單包體積越小,數據包的數量就越多。由於交換機、路由器等網路設備需要對沒一個數據包進行檢查和校驗,因此使用UDP小包攻擊能夠最有效的增大網路設備處理數據包的壓力,造成處理速度的緩慢和傳輸延遲等拒絕服務攻擊的效果。

大包是指1500位元組以上的數據包,其大小超過了乙太網的最大傳輸單元,使用UDP大包攻擊,能夠有效的佔用網路介面的傳輸寬頻,並迫使被攻擊目標在接受到UDP數據時進行分片重組,造成網路擁堵,伺服器響應速度變慢。

UDP洪水攻擊也是很早就出現的一種拒絕服務攻擊方式,這種攻擊發動簡單,有相當多的工具都能夠發動UDP洪水攻擊,如hping,LOIC等,但UDP洪水攻擊完全依靠受控主機本身的網路性能,因此通常對目標寬頻資源的消耗並不太大。secpulse.com/archives/6

1.2發射和放大攻擊

攻擊者可以使用ICMP/IGMP洪水攻擊和UDP洪水攻擊等方式直接對被攻擊目標展開消耗網路寬頻資源的分散式拒絕服務攻擊,但這種攻擊方式不僅較低,還很容易被查到攻擊的源頭,雖然攻擊者可以使用偽造源IP地址的方式進行隱藏,但更好的方式是使用反射攻擊技術。

發射攻擊又被稱為DRDoS(分散式反射拒絕服務)攻擊,是指利用路由器、伺服器等設施對請求產生應答,從而反射攻擊流量並隱藏攻擊來源的一種分散式拒絕服務攻擊技術。

在進行反射攻擊時,攻擊者使用受控主機發送大量的數據包,這些數據包的特別之處在於,其目的IP地址指向作為反射器的伺服器、路由器等設施,而源IP地址則被偽造成被攻擊目標的IP地址,反射器在收到數據包時,會認為該數據包是否被攻擊目標所發來的請求,因此會將相應數據發送給被攻擊目標,當大量的響應數據包湧向攻擊目標時,就會耗盡目標的網路寬頻資源,造成拒絕服務攻擊。

發動反射攻擊需要在互聯網上找到大量的發射器,某些種類的反射攻擊並不難實現,例如,對於ACK反射攻擊,只需要找到互聯網上開放的TCP埠的伺服器即可,而這種伺服器在互聯網上的存在是非常廣泛的。

發動反射攻擊通常會使用無需認證或者握手的協議,反射攻擊需要將請求數據的源IP地址偽造成被攻擊目標的IP地址,如果使用的協議需要進行認證或者握手,則該認證或握手過程沒有辦法完成,也就不能進行下一步的攻擊,因此,絕大多數的反射攻擊都是使用基於UDP協議的網路服務進行的,

相比於直接偽造源地址的分散式拒絕服務攻擊,反射攻擊由於增加了一個反射步驟,因此更加難以追溯攻擊來源,但是,這並不是反射攻擊真正的威脅,真正的威脅在於利用反射原理進行的放大攻擊。

放大攻擊是一種特殊的反射攻擊,其特殊之處在於反射器對於網路流量具有放大作用,因此我們也可以將這種反射器成為放大器,進行放大攻擊的方式與反射攻擊的方式也是基本一致的,不用之處在於反射器(放大器)所提供的網路服務需要滿足一定條件。

在反射器所提供的網路服務協議中,需要存在請求和響應數據量不對稱的情況,響應數據量需要大於請求數據量,響應數據量與請求數據量的比值越大,放大器的放大倍數也就越大,進行放大攻擊所產生的消耗寬頻資源的效果也就越明顯。

放大器所使用網路服務部署的廣泛性決定了該放大攻擊的規模和嚴重程度,如果存在某些網路服務,不需要進行認證並且放大效果非常好,但是在互聯網上部署的數量很少,那麼利用該網路服務進行放大也不能達到很大的流量,達不到有效的消耗寬頻資源的效果,這種網路服務也就不能作為主要的放大攻擊流量,而只能作為輔助手段。

1.2.1 ACK反射攻擊

我們知道,在傳輸控制協議建立連接時,首先會進行TCP三次握手,在這個工程中,當伺服器端接收到客戶端發來的SYN連接請求時,會對該請求進行ACK應答,利用TCP握手的ACK應答,即可進行ACK反射攻擊。

如果攻擊者將SYN的源IP地址偽造成被攻擊目標的IP地址,伺服器的應答也就會直接發送給被攻擊目標,由於使用TCP協議的服務在互聯網上廣泛存在,攻擊者可以通過受控主機向大量不同的伺服器發送偽造源IP地址的SYN請求,從而使伺服器響應的大量ACK應答數據湧向被攻擊目標,佔用目標的網路寬頻資源並拒絕服務。

在發動ACK反射攻擊時,首先需要進行掃描,獲得大量的反射器地址,並分別向這些反射器發送偽造源地址的SYN請求數據,因此相比於直接攻擊,這種方式顯得複雜了一些,ACK反射攻擊的優點主要在於其能夠比較有效地隱藏攻擊的來源。

1.2.2 DNS放大攻擊

域名系統是網際網路的一項核心服務,它作為可以將域名和IP地址相互映射的一個分散式資料庫,能夠使人更方便地訪問互聯網,而不用去記住那些難以記憶的IP地址,DNS使用的TCP與UDP埠號都是53,主要使用的UDP協議。

通常,DNS的相應數據包會比查詢數據包大,因此攻擊者利用普通的DNS查詢請求就能夠發動放大攻擊,並將攻擊流量放大2~10倍,但更有效的方法是使用RFC2671中定義的DNS擴展機制EDNS0。

****EDNS0

在沒有EDNS0以前,對DNS查詢的響應數據包被限制在512位元組以內,當需要應答的數據包超過512位元組時,根據DNS伺服器實現的不同,可能會丟棄超過512位元組的部分,也可能會使用TCP協議建立連接並重新發送,無論是哪站方式,都不利於進行DNS放大攻擊。

在EDNS0中,擴展了DNS數據包的結果,增加了OPT RR欄位,在OPT RR欄位中,包含了客戶端能夠處理的最大UDP報文大小的信息,伺服器在響應DNS請求時,解析並記錄下客戶端能夠處理的最大UDP報文的大小,並根據該大小生成響應的報文。

攻擊者能夠利用dig和EDNS0進行高效的DNS放大攻擊,攻擊者向廣泛存在的開放DNS解析器發送dig查詢命令,將OPT RR欄位中UDP報文大小設置為很大的值,並將請求的源IP地址偽造成被攻擊目標的IP地址。DNS解析器收到查詢請求後,會將解析的結果發送給被攻擊目標,當大量的解析結果湧向目標時,就會導致目標網路擁堵和緩慢,造成拒絕服務攻擊。

攻擊者發送的DNS查詢請求數據包大小一般為60位元組左右,而查詢返回結果的數據包大小通常為300位元組以上,因此,使用該方式進行放大攻擊能夠達到50倍以上的放大效果,這种放大效應所產生的攻擊效果是非常驚人的,只要攻擊的發起端能夠發出2Gbit/s的寬頻,就能夠在目標網路處產生 100Gbit/s的寬頻消耗,在2013年3月在Spamhaus的分散式拒絕服務攻擊中,主要就是用了DNS放大攻擊技術,使得攻擊流量達到了史無前例的300Gbit/s,設置拖慢了局部互聯網的響應速度。

與ACK反射攻擊類似,發動DNS放大攻擊也需要先進行掃描,以獲得大量的開放DNS解析器的地址,並向這些開放DNS解析器發送偽造源地址的查詢命令來放大攻擊流量。

1.2.3 NTP放大攻擊

網路時間協議是用來使計算器時間同步化的一種協議,他可以使計算機與時鐘源進行同步化並提供高精準度的時間校正,NTP使用UDP123埠進行通信。

在NTP協議的伺服器實現上,通常會實現一系列Mode7的調試介面,而介面中的monlist請求能夠獲取到目標NTP伺服器進行同步的最後600個客戶端的IP地址等信息。這意味著,只需要發送一個很小的請求包,就能觸發大量連續的包含IP地址信息等數據的UDP響應數據包。

實際上,monlist請求返回的數據量與一段時間內和NTP伺服器交互的客戶端數據量有關,由於NTP服務使用的是UDP單包通信,因此攻擊者可以將偽造源IP地址的UDP請求包發送給NTP放大器,偽造客戶端與NTP伺服器的交互,增加「和NTP伺服器交互的客戶端的數量」,以此來增加monlist請求的響應數據量並增大NTP放大器的放大倍數,只要向NTP放大器發送600個不超過64位元組的請求包(約40KB數據),就能夠快速的將NTP放大器的放大倍數提高到700倍以上,並在該伺服器的NTP服務關閉或重新啟動之前一直保持這麼大的放大倍數。

攻擊者發送的monlist請求數據包大小不超過64位元組,而請求返回的結果會包含100個482位元組的UDP響應數據,因此使用該方式進行放大攻擊能夠達到700倍以上的放大效果。

與ACK反射攻擊和DNS放大攻擊類似,發動NTP放大攻擊也需要先進行網路掃描,以獲取大量的NTP伺服器,並向這些NTP伺服器發送偽造源地址的請求來放大攻擊流量,相比於DNS放大攻擊,NTP放大攻擊的放大倍數更大,因此其危害也更加嚴重,在針對Spamhaus的大規模分散式拒絕服務攻擊事件中,如果攻擊者不使用DNS放大攻擊而改用NTP放大攻擊,那麼攻擊流量將會達到2Tbit/s以上。

1.2.4 SNMP放大攻擊

簡單網路管理協議是目前網路中應用最為廣泛的網路管理協議,他提供了一個管理框架來監控和維護互聯網的設備,SNMP協議使用UDP161埠進行通信。

利用SNMP協議中的默認通信字元串和GetBulk請求,攻擊者能夠開展有效的SNMP放大攻擊。

由於SNMP的效果很好,網路硬體廠商開始把SNMP加入到它們製作的每一台設備,這導致各種網路設備上都可以看到默認啟用的SNMP服務,從交換機到路由器,從防火牆到網路印表機,無一例外,同時,許多廠商安裝的SNMP都採用了默認的通信字元串,這些通信字元串是程序獲取設備信息和修改配置必不可少的,最常見的默認通信字元串是public和private,除此之外還有許多廠商私有的默認通信字元串,幾乎所有運行SNMP的網路設備上,都可以找到某種形式的默認通信字元串。

在SNMPv1中定義的get請求可以嘗試一次獲取多個MIB對象,但相應消息的大小受到設備處理能力的限制,如果設備不能返回全部請求的響應,則會返回一條錯誤信息。在SNMPv2中,添加了getbulk請求,該請求會通知設備返回儘可能多的數據,這使得管理程序能夠通過發送一次請求就獲得大段的檢索信息。

攻擊者向廣泛存在並開啟了SNMP服務的網路設備發送getbulk請求,使用默認通信字元串作為認證憑據,並將源IP地址偽造成攻擊目標的IP地址,設備收到getbulk請求後,會將響應結果發送給攻擊目標,當大量的響應結果湧向攻擊目標時,就會導致攻擊目標網路擁堵和緩慢,造成拒絕服務攻擊。

攻擊者發送的getbulk請求數據包約為60位元組,而請求的響應數據能夠達到1500位元組以上,因此,使用該方式進行放大攻擊能夠達到25倍以上的放大效果,這也是一种放大效應明顯且有效的放大攻擊方式。

在發動SNMP放大攻擊時,同樣需要先進行網路掃描以找到開放了SNMP協議的網路社保,雖然開放SNMP協議的網路設備很多,但是在掃描到這些設備之後還需要對他們所使用的默認字元串進行猜測,因此,相比DNS放大攻擊,不論是簡單度還是放大倍數的影響力,SNMP放大攻擊都略遜一籌,不過從總體上來看,SNMP放大攻擊依然是一種非常有效的消耗寬頻資源的攻擊方式。

1.3攻擊鏈路

攻擊鏈路與以前介紹的幾種攻擊方法有所不同,其攻擊的目標並不是作為互聯網斷點的伺服器的寬頻資源,而是骨幹網上的鏈路的寬頻資源,對鏈路進行攻擊的一種典型的方式是Coremelt攻擊。

Coremelt是安全研究人員在2009年提出的一種針對鏈路的分散式拒絕服務攻擊方法,攻擊者需要控制一個分布足夠廣泛的殭屍網路來發動Coremelt攻擊。

首先,攻擊者通過traceroute等手段來判斷各個殭屍主機和將要攻擊的鏈路之間的位置關係,並根據結果將殭屍主機分為兩個部分,然後,攻擊者控制殭屍主機,使其與鏈路另一側的每一台殭屍主機進行通信並收發大量數據,這樣,大量的網路數據包就會經過骨幹網上的被攻佔鏈路,造成網路擁堵和延時。

從骨幹網上來看,這些殭屍主機之間相互收發的數據包確實是真是存在的通信數據,沒有辦法將這些通信數據與真正的合法通信數據進行有效的區分,因此這種攻擊方式更加難以防護和緩解。

2、攻擊系統資源


誤區:DDOS攻擊都是消耗網路寬頻資源的攻擊。

很多時候,新聞報道中提到DDOS攻擊,都會以「攻擊流量達到*****」的語句來描述攻擊的猛烈程度,這種以攻擊流量的寬頻作為DDOS攻擊危害程度描述指標的說法,通常會讓人們誤以為DDOS攻擊都是消耗網路寬頻資源的攻擊。

事實上,除了網路寬頻資源,DDOS攻擊還有消耗系統資源和應用資源的攻擊方法,而攻擊流量的大小只是決定攻擊危害程度的一個方面,對於相同種類的攻擊,通常攻擊流量越大,其危害也越大,而如果在相同攻擊流量的情況下,不同的攻擊方法造成的危害和影響則不盡相同。

有時候,人們會錯誤的將SYN洪水攻擊認為是消耗網路寬頻資源的DDOS攻擊,而事實上,這種攻擊的主要危害在於耗盡系統鏈接表資源,相同攻擊流量的SYN洪水攻擊會比UDP洪水攻擊的危害更大。

2.1 攻擊TCP連接

TCP是一種面向連接的、可靠的、基於位元組流的傳輸層通訊協議,不同主機的應用層之間經常需要可靠的、像管道一樣的連接,但是IP層無法提供這樣的流機制,在現實的互聯網中,這種連接通常通過TCP協議來實現。

TCP連接包括三個階段:連接創建,數據傳送和連接終止,由於在協議的設計過程當中只專註於協議的可用性,而沒有對協議的安全性進行比較周密和詳細的考慮,因此TCP協議存在很多安全缺陷和安全性問題。

TCP連接的三個階段都容易受到拒絕服務攻擊的影響,我們會在這裡對這些攻擊手段分別進行介紹。

2.1.1 TCP連接洪水攻擊

TCP連接洪水攻擊是在連接創建階段對TCP資源進行攻擊的。

在三次握手進行的過程中,伺服器會創建並保存TCP連接的信息,這個信息通常被保存在連接表結構中,但是,連接表的大小是有限的,一旦伺服器接收到的連接數量超過了連接表能存儲的數量,伺服器就無法創建新的TCP連接了。

攻擊者可以利用大量受控主機,通過快速建立大量惡意的TCP連接佔滿被攻擊目標的連接表,使目標無法接受新的TCP連接請求,從而達到拒絕服務攻擊的目的。

TCP連接洪水攻擊是攻擊TCP連接的最基本方法,當有大量的受控主機發起攻擊時,其效果非常明顯。

2.1.2 SYN洪水攻擊

SYN洪水攻擊是最經典的一種拒絕服務攻擊方式,這種攻擊方式在2000年以前就出現過,直到現在依然被攻擊者大規模的廣泛使用,近年來,SYN洪水攻擊仍然佔據全部分散式拒絕服務攻擊的三分之一以上。

TCP半開連接:

在建立TCP連接的過程中,如果在伺服器返回SYN+ACK報文後,客戶端由於某種原因沒有對其進行確認,這時伺服器端就需要重傳SYN+ACK報文,並等待客戶端的確認報文直到TCP連接超時,這種等待客戶確認的連接狀態通常被稱為半開連接

在連接超時之前,半開連接會一直保存在伺服器的連接表中。

由於連接表的大小是有限的,如果在短時間內產生大量的半開連接,而這些連接又無法很快的結束,連接表就會很快被佔滿,導致新的連接TCP連接無法建立。

SYN洪水攻擊就是攻擊者利用受控主機發送大量的TCP SYN報文,使伺服器打開大量的半開連接,佔滿伺服器的連接表,從而影響正常用戶與伺服器建立會話,造成拒絕服務。

攻擊者在發送TCP SYN報文時,可以在收到伺服器返回的SYN+ACK報文後,跳過最後的ACK報文發送,使連接處於半開狀態,但是這樣會很明顯的暴露出進行SYN洪水攻擊的IP地址,同時相應報文會作為反射流量佔用攻擊者的寬頻資源,所以更好的方式是攻擊者將SYN報文的源IP地址隨機偽造其他主機的IP地址或者不存在的IP地址,這樣攻擊目標將會應答發送給被偽造的IP地址,從而佔用連接資源並隱藏攻擊來源。

SYN洪水攻擊發動簡單,效果明顯,有大量的攻擊工具都能夠發動這種攻擊,至今依然是攻擊者最愛好的攻擊方法之一。

2.1.3 PSH+ACK洪水攻擊

在TCP數據傳輸的過程中,可以通過設置PSH標誌位來表示當前數據傳輸結束,需要服務端進行處理。

在正常的TCP傳輸過程當中,如果待發送的數據會清空發送緩衝區,那麼操作系統的TCP/IP協議棧就會自動為該數據包設置PSH標誌,同樣,當服務端接收到一個設置了PSH+ACK標誌的報文時,意味著當前數據傳輸已經結束,因此需要立即將這些數據投遞交給服務進程並清空接收緩衝區,而無須等待判斷是否還會有額外的數據到達。

由於帶有PSH標誌位的TCP數據包會強制要求接收端將接收緩衝區清空並將數據提交給應用服務進行處理,因此當攻擊者利用受控主機向攻擊目標發送大量的PSH+ACK數據包時,被攻擊目標就會消耗大量的系統資源不斷地進行接收緩衝區的清空處理,導致無法正常處理數據,從而造成拒絕服務。

單獨使用PSH+ACK洪水攻擊對伺服器產生的影響並不十分明顯,更有效的方式是SYN洪水攻擊與ACK洪水攻擊相結合,這樣能夠繞過一部分防護設備,增強攻擊的效果。

2.1.4 RST洪水攻擊

在TCP連接的終止階段,通常是通過帶有FIN標誌報文的四次交互(TCP四次握手)來切斷客戶端與服務端的TCP連接,但是客戶端或伺服器其中之一出現異常狀況,無法正常完成TCP四次握手以終止連接時,就會使用RST報文將連接強制中斷。

TCP RST攻擊:

在TCP連接中,RST表示複位,用來在異常時關閉連接,發送端在發送RST報文關閉連接時,不需要等待緩衝區中的數據報全部發送完畢,而會直接丟棄緩衝器的數據並發送RST報文,同樣,接收端在收到RST報文後,也會清空緩衝區並關閉連接,並且不必發送ACK報文進行確認。

攻擊者可以利用RST報文的這個特性,發送偽造的帶有RST標誌位的TCP報文,強制中斷客戶端與服務端的TCP連接,在偽造RST報文的過程中,服務端的IP地址和埠號是已知的,攻擊者還需要設法獲取客戶端的IP地址和埠號,並且使RST報文的序列號處於伺服器的接收窗口之內,如果攻擊者和被攻擊客戶端或伺服器處於同一內網,這些信息可以通過欺騙和嗅探等方式獲取到。

TCP RST攻擊的原理如圖所示

很多情況下,攻擊者不會與被攻擊客戶端或伺服器處於同一內網,導致發動TCP RST攻擊時難以獲取埠和序列號,在這種情況下,攻擊者可以利用大量的受控主機猜測埠和序列號,進行盲打,發送RST洪水攻擊,只要在數量巨大的RST報文中有一條與攻擊目標的埠號相同,並且序列號落在目標的接收窗口之中,就能夠終端連接。

RST洪水攻擊的原理如圖所示

嚴格來說,TCP RST攻擊和RST洪水攻擊是針對用戶的拒絕攻擊方式,這種攻擊通常被用來攻擊在線遊戲或比賽的用戶,從而影響比賽的結果並獲得一定的經濟利益。

2.1.5 Sockstress攻擊

Sockstress攻擊是研究人員在2008年提出的一種攻擊TCP連接的方法,與前面幾種攻擊方式不同的是,Sockstress攻擊不需要在短時間內發送大量的攻擊流量,因此不屬於洪水攻擊,而是一種慢速攻擊。

在TCP傳輸數據時,並不是將數據直接遞交給應用程序處理,而是先臨時存儲在接受緩衝區里,該接收緩衝區的大小是由TCP窗口表示的,如果TCP窗口大小為0,則表示接收緩衝區已被填滿,發送端應該停止發送數據,知道接收端的窗口發生了更新,Sockstress攻擊就是利用該原理長時間維持TCP連接,以達到拒絕服務攻擊的目的。

Sockstress攻擊首先會完成TCP三次握手以建立TCP連接,但是在三次握手的最後一次ACK應答中,攻擊者將其TCP窗口大小設置為0,隨後 進行一次數據請求,攻擊目標在傳輸數據時,發現接收端的TCP窗口大小為0,就會停止傳輸數據,並發出TCP窗口探測包,詢問攻擊者其TCP窗口是否有更新,由於攻擊者沒有更改TCP窗口的大小,被攻擊目標就會一直維持TCP連接等待數據發送,並不斷進行窗口更新的探測,如果攻擊者利用大量的受控主機進行Sockstress攻擊,被攻擊目標會一直維持大量的TCP連接並進行大量窗口更新探測,其TCP連接表會逐漸耗盡,無法連接新的連接而導致拒絕服務。

Sockstress攻擊的原理如圖所示

Sockstress攻擊的另一種方式是將TCP窗口設置為一個非常小的值,例如4位元組,這樣攻擊目標將不得不把需要發送的數據切分成大量4位元組大小的分片,這會極大的消耗目標的內存和處理器資源,造成系統響應緩慢和拒絕服務。

2.2 攻擊SSL連接

安全套接層是為網路通信提供安全及數據完整性的一種安全協議,SSL能夠在傳輸層對網路連接進行加密,以防止傳輸的數據明文被監聽和截獲。

然而,SSL協議加密、解密和秘鑰協商的過程中會消耗大量的系統資源,嚴重降低機器的性能,因此,通常只有在傳輸密碼等機密信息時才使用SSL協議進行傳輸。

攻擊者可以利用SSL協議消耗資源的特性進行拒絕服務攻擊。

2.2.1 THC SSL DOS攻擊

在進行SSL數據傳輸之前,通信雙方首先要進行SSL握手,以協商加密演算法交換加密秘鑰,進行身份驗證,通常情況下,這樣的SSL握手過程只需要進行一次即可,但是在SSL協議中有一個Renegotiation選項,通過它可以進行秘鑰的重新協商以建立新的秘鑰。

THC SSL DOS攻擊是安全研究人員在2011年提出的一種針對SSL的拒絕服務攻擊方法,這種方法就是利用Renegotiation選項,造成被攻擊目標資源耗盡,在進行SSL連接並握手之後,攻擊者反覆不斷的進行秘鑰重新協商過程,而秘鑰重新協商過程需要伺服器投入比客戶端多15倍的CPU計算資源,攻擊者只需要一台普通的台式機就能拖慢一台高性能伺服器,而如果有大量主機同時進行攻擊,則會使伺服器忙於協商秘鑰而完全停止響應。

THC SSL DOS攻擊的原理如圖所示

另外,即使伺服器不支持Renegotiation,攻擊者依然可以通過另行打開新的SSL連接的方式來製造類似的攻擊效果。

2.2.2 SSL洪水攻擊

在SSL握手的過程中,伺服器會消耗較多的CPU計算資源進行加解密,並進行數據的有效性檢驗,對於客戶端發過來的數據,伺服器需要先花費大量的計算資源進行解密,之後才能對數據的有效性進行檢驗,重要的是,不論數據是否是有效的,伺服器都必須先進行解密才能夠做檢查,攻擊者可以利用這個特性進行SSL洪水攻擊。

在進行洪水攻擊時,一個要點是需要攻擊者能夠在客戶端大量的發出攻擊請求,這就需要客戶端所進行的計算儘可能的少,對於SSL洪水攻擊,比較好的方式是在數據傳輸之前,進行SSL握手的過程中發動攻擊,攻擊者並不需要完成SSL握手和秘鑰交換,而只需要在這個過程中讓伺服器去解密和驗證,就能夠大量的消耗伺服器的計算資源,因此,攻擊者可以非常容易的構造秘鑰交換過程中的請求數據,達到減少客戶端計算量的目的。

SSL洪水攻擊的原理如圖所示

攻擊者可以使用SSL Squeeze等工具來發動SSL洪水攻擊。

3.攻擊應用資源


近年來,消耗應用資源的分散式拒絕服務攻擊正逐漸成為拒絕服務攻擊的主要手段之一,而由於DNS和Web服務的廣泛性和重要性,這兩種服務也就成為了消耗應用資源的分散式拒絕服務攻擊的最主要的攻擊目標。

3.1 攻擊DNS服務

DNS服務是互聯網的一項核心服務,通過使用DNS,人們在訪問網路時不需要記住其IP地址,而只需輸入其域名即可,在IPv6網路環境下,由於IP地址由原來的32位擴展到了128位,變得更加難以記憶,DNS服務也就變得更加重要,當DNS服務的可用性收到威脅時,互聯網上的大量設備都會受到影響甚至無法正常運行,歷史上曾有多次針對DNS的攻擊事件,都造成了較大影響。

針對DNS服務的攻擊方法主要有DNS QUERY洪水攻擊和DNS NXDOMAIN洪水攻擊兩種

3.1.1 DNS QUERY洪水攻擊

DNS查詢和解析過程:

當客戶端向DNS伺服器查詢某域名時,DNS伺服器會首先檢查其本地緩存中是否有該域名的記錄,如果緩存中有該域名的記錄(即命中),則直接講緩存中記錄的IP地址作為非權威應答返回給客戶端,如果在緩存中沒有找到該域名的記錄,則會進行迭代查詢,從根域名開始,逐級進行域名解析,直到解析出完整的域名,之後伺服器會將域名解析結果作為應答發送給客戶端,並生成一條解析記錄保存到緩存中。

DNS查詢和解析過程如圖所示:

在DNS解析的過程中,客戶端發起一次查詢請求,DNS伺服器可能需要進行額外的多次查詢才能完成解析的過程並給出應答,在這個過程中會消耗一定的計算和網路資源,如果攻擊者利用大量受控主機不斷發送不同域名的解析請求,那麼DNS伺服器的緩存會被不斷刷新,而大量解析請求不能命中緩存又導致DNS伺服器必須消耗額外的資源進行迭代查詢,這會極大的增加DNS伺服器的資源消耗,導致DNS響應緩慢甚至完全拒絕服務。

DNS QUERY洪水攻擊的原理如圖所示

進行DNS QUERY洪水攻擊的要點在於每一個DNS解析要求所查詢的域名應是不同的,這樣可以比較有效的避開NDS伺服器緩存中的解析記錄,達到更好的資源消耗效果。

3.1.2 DNS NXDOMAIN洪水攻擊

DNS NXDOMAIN洪水攻擊是DNS QUERY洪水攻擊的一個變種攻擊方式,區別在於後者是向DNS伺服器查詢一個真實存在的域名,而前者是向DNS伺服器查詢一個不存在的域名。

在進行DNS NXDOMAIN洪水攻擊時,DNS伺服器會進行多次域名查詢,同時,其緩存會被大量NXDOMAIN記錄所填滿,導致響應正常用戶的DNS解析請求的速度變慢,這與DNS QUERY洪水攻擊所達到的效果類似,除此之外,一部分DNS伺服器在獲取不到域名的解析結果時,還會再次進行遞歸查詢,向其上一級的DNS伺服器發送解析請求並等待應答,這進一步增加了DNS伺服器的資源消耗,因此,DNS NXDOMAIN洪水攻擊通常比DNS QUERY洪水攻擊的效果更好。

DNS NXDOMAIN洪水攻擊 的原理如果所示

3.2 攻擊web服務

近年來,web技術發展非常迅速,人們可以通過瀏覽器使用web服務,簡單方便的獲取需要的信息,而許多機構和企業的重要信息和關鍵業務也是通過web服務的方式對外提供,一旦web服務受到解決服務攻擊,就會對其承載的業務造成致命的影響。

3.2.1 HTTP洪水攻擊

Web服務通常使用超文本傳輸協議進行請求和響應數據的傳輸。

常見的HTTP請求有GET請求和POST請求兩種,通常GET請求用於從wen伺服器獲取數據和資源,例如請求頁面、獲取圖片和文檔等;POST請求用於向web伺服器提交數據和資源,例如發送用戶名/密碼、上傳文件等。在處理這些HTTP請求的過程中,web伺服器通常需要解析請求、處理和執行服務端腳本、驗證用戶許可權並多次訪問資料庫,這會消耗大量的計算資源和IO訪問資源。

如果攻擊者利用大量的受控主機不斷的向web伺服器發送惡意大量HTTP請求,要求web伺服器處理,就會完全佔用伺服器的資源,造成其他正常用戶的web訪問請求處理緩慢設置得不到處理,導致拒絕服務,這就是HTTP洪水攻擊。

由於HTTP協議是基於TCP協議的,需要完成三次握手建立TCP連接才能開始HTTP通信,因此進行HTTP洪水攻擊時無法使用偽造源IP地址的方式發動攻擊,這時,攻擊者通常會使用HTTP代理伺服器,HTTP代理伺服器在互聯網上廣泛存在,通過使用HTTP代理伺服器,不僅可以隱藏來源以避免被追查,還能夠提高攻擊的效率--攻擊者連接代理伺服器並發送完成請求後,可以直接切斷與該代理伺服器的連接並開始連接下一個代理伺服器,這時代理伺服器與目標web伺服器的HTTP連接依然保持,web伺服器需要繼續接收數據並處理HTTP請求。

HTTP洪水攻擊的原理如圖所示

與DNS服務類似,web服務也存在緩存機制,如果攻擊者的大量請求都命中了伺服器緩存,那麼這種攻擊的主要作用僅體現咋消耗網路寬頻資源上,對於計算和IO資源的消耗是非常有限的,因此,高效的HTTP洪水攻擊應不斷發出針對不同資源和頁面的HTTP請求,並儘可能請求無法被緩存的資源,從而加重伺服器的負擔,增強攻擊效果。

此外,如果web伺服器支持HTTPS,那麼進行HTTPS洪水攻擊是更為有效的一種攻擊方式,一方面,在進行HTTPS通信時,web伺服器需要消耗更多的資源用來進行認證和加解密,另一方面,一部分的防護設備無法對HTTPS通信數據流進行處理,也會導致攻擊流量繞過防護設備,直接對web伺服器造成攻擊。

HTTP洪水攻擊是目標對web服務威脅最大的攻擊之一,有大量的攻擊工具支持HTTP洪水攻擊,發動簡單其效果明顯,已經成為攻擊者使用的主要攻擊方式之一。

3.2.2 Slowloris攻擊

Slowloris攻擊是一種針對web伺服器的慢速HTTP攻擊,由安全研究人員在2009年提出。

在HTTP協議中規定,HTTP頭部以連續的「

」作為結束標誌,許多web伺服器在處理http請求的頭部信息時,會等待頭部傳輸結束後再進行處理,因此,如果web伺服器沒有接受到連續的「

」,就會一直接受數據並保持與客戶端的連接,利用這個特性,攻擊者能夠長時間與web伺服器保持聯繫,並逐漸耗盡web伺服器的連接資源。

攻擊者在發送HTTP GET請求時,緩慢的發送無用的header欄位,並且一直不發送「

」結束標誌,這樣就能夠長時間佔用與web伺服器的連接並保證該連接不被超時中斷,然而,web伺服器能夠處理的並發連接數是有限的,如果攻擊者利用大量的受控主機發送這種不完整的HTTP GET請求並持續佔用這些連接,就會耗盡web伺服器的連接資源,導致其他用戶的http 請求無法被處理,造成拒絕服務。

Slowloris攻擊原理如圖所示

攻擊者使用Slowloris、slowhttptest等工具就可以簡單的發動Slowloris攻擊。在Slowloris攻擊方法出現以後,IIS、nignx等一部分web伺服器軟體針對該攻擊方法進行了修改,但是Apache.dhttpd等web伺服器軟體依然會受到Slowloris攻擊的影響。

3.2.3 慢速POST請求攻擊

慢速POST請求攻擊也是一種針對web伺服器的慢速http攻擊,由安全研究人員在2010年提出,與Slowloris攻擊不同的是,慢速POST請求攻擊利用緩慢發送HTTP BODY的方式達到佔用並耗盡web伺服器連接資源的目的。

在HTTP頭部信息中,可以使用Content-Length欄位來指定HTTP消息實體的傳輸長度,當web伺服器接收到的請求頭部中含有Content-Length欄位時,伺服器會將該欄位的值作為 HTTP BODY的長度,持續接收數據並在達到Content-Length值時對HTTP BODY的數據內容進行處理,利用這個特性,攻擊者能夠長時間與web伺服器保持連接,並逐漸耗盡web伺服器的連接資源。

攻擊者在發送HTTP POST請求時,在請求頭部中將Content-Length設置為一個很大的值,並將HTTP BODY以非常緩慢的速度一個位元組一個位元組的向web伺服器發送,這樣,web伺服器就需要一直維持與客戶端的連接並等待數據傳輸結束,由於Content-Length被設置成了很大的值,而HTTP BODY的傳輸速度又非常緩慢,攻擊者就可以長時間佔用這個連接,通過間斷性的發送單位元組的HTTP BODY內容,攻擊者就能夠確保連接不因超時而導致中斷,如果攻擊者利用大量的受控主機發送這種緩慢的HTTP POST請求並持續佔用這些連接,就會耗盡web伺服器的連接資源,導致其他用戶的HTTP請求無法被處理,造成拒絕服務。

慢速POST請求攻擊原理如圖:

攻擊者可以使用Slowhttptest等攻擊發動慢速POST請求攻擊,與Slowloris攻擊有所不同,由於HTTP協議設計上的原因,所有的web伺服器軟體都會受到慢速POST請求攻擊的影響。

3.2.4 數據處理過程攻擊

web伺服器在收到HTTP請求之後,需要檢查並處理其中的數據,通過惡意構造請求數據的內容,攻擊者可以顯著的增加數據處理過程中的資源消耗,造成拒絕服務攻擊。

這裡已正則表達式拒絕服務攻擊和哈希衝突拒絕服務攻擊為例進行說明。

正則表達式拒絕服務攻擊又被稱為ReDoS,是安全研究人員在2009年發現的一種拒絕服務攻擊方法,在處理請求數據時,web應用通常會使用正則表達式進行字元的匹配操作,一部分正則表達式引擎會使用一種被稱為非確定性有限狀態自動機的實現方式,以便能夠處理複雜的正則表達式,例如包含了向後引用或者捕獲括弧的正則表達式。然而,這種正則引擎的實現方式也導致了其處理時間增加,尤其是在確定「否定匹配」時,正則引擎需要對所有可能的匹配路徑全部進行測試,如果位於web應用中的正則表達式寫的不好,需要測試的匹配路徑數量會隨著輸入字元串的長度呈指數級增長,利用惡意構造的輸入字元串,攻擊者只需要提交相對較短的輸入字元串,就可以強制正則引擎處理數億個匹配路徑,所需時間可以達到幾個小時甚至幾天,只需要幾個這種類似的惡意正則表達式匹配請求,就能夠完全佔用web伺服器的計算資源,造成web伺服器拒絕服務。

哈希衝突拒絕服務攻擊是安全研究人員在2011年提出的一種拒絕服務攻擊方法,web應用在處理請求中的POST數據時,通常使用鍵-值對的方式來進行存儲,在PHP、Python、Java等語言中,鍵-值對的實質是一個哈希表,web應用程序通過計算「鍵」的哈希來獲取其所對應的的「值」。正常情況下,這個哈希表的哈希衝突較少,因此進行查找和插入的速度很快,正常狀態下的哈希表如圖所示。

如果攻擊者構造一組惡意的POST數據,使得請求中的「鍵」的哈希值全部相同,那麼保存POST數據的哈希表就會因此退化成為鏈表 ,對哈希表的查找和插入等操作規則變成了對鏈表的遍歷操作,造成大量的計算資源被佔用,導致拒絕服務攻擊。如圖所示為大量衝突狀態下的哈希表。(本文屬於安全脈搏原創現金獎勵計劃,未經允許,嚴禁轉載。secpulse.com/archives/6


推薦閱讀:

李博:搖滾的「極客」, 「極客」的搖滾
白帽子同學注意了:不懂《網安法》可能會被請喝咖啡哦!
技術分享:巴基斯坦的某APT活動事件分析
如果家庭寬頻只能分配內網 ip,會有什麼影響?

TAG:DDoS | 网络安全 |