本人近期一直在研究DDOS攻擊,并通讀了《破壞之王-DDOS攻擊與防范》一書(shū),書(shū)中對(duì)于DDOS的攻擊方式與防范寫(xiě)的很詳細(xì),很推薦閱讀,并針對(duì)本書(shū)中的DDOS攻擊方式做了總結(jié)。
1、攻擊網(wǎng)絡(luò)寬帶資源
1.1直接攻擊
使用大量的受控主機(jī)向被攻擊目標(biāo)發(fā)送大量的網(wǎng)絡(luò)數(shù)據(jù)包,以沾滿被攻擊目標(biāo)的寬帶,并消耗服務(wù)器和網(wǎng)絡(luò)設(shè)備的網(wǎng)絡(luò)數(shù)據(jù)處理能力,達(dá)到拒絕服務(wù)的目的。

直接攻擊的主要方法有ICMP/IGMP洪水攻擊和UDP洪水攻擊兩種。
1.1.1 ICMP/UDP洪水攻擊
網(wǎng)絡(luò)控制消息協(xié)議(ICMP)是TCP/IP協(xié)議族的核心協(xié)議之一,它用于在TCP/IP網(wǎng)絡(luò)中發(fā)送控制消息,提供可能發(fā)生在通信環(huán)境的各種問(wèn)題反饋,通過(guò)這些消息,管理者可以對(duì)所發(fā)生的問(wèn)題做出診斷,然后采取適當(dāng)?shù)慕鉀Q措施。
因特網(wǎng)組管理協(xié)議(IGMP)是用于管理因特網(wǎng)協(xié)議多播組成員的一種通信協(xié)議,IP主機(jī)和相鄰的路由器利用IGMP來(lái)建立多播組的組成員。
攻擊者使用受控主機(jī)向被攻擊目標(biāo)發(fā)送大量的ICMP/IGMP報(bào)文,進(jìn)行洪水攻擊以消耗目標(biāo)的寬帶資源,這種類型的攻擊出現(xiàn)的很早,使用hping等工具就能簡(jiǎn)單的發(fā)起攻擊。但現(xiàn)在使用這種方法發(fā)動(dòng)的攻擊已見(jiàn)不多,被攻擊目標(biāo)可以在其網(wǎng)絡(luò)邊界直接過(guò)濾并丟棄ICMP/IGMP數(shù)據(jù)包使攻擊無(wú)效化。
1.1.2 UDP洪水攻擊
用戶數(shù)據(jù)包協(xié)議(UDP)是一種面向無(wú)連接的傳輸層協(xié)議,主要用戶不要求分組順序到達(dá)的傳輸,提供面向?qū)嵤聞?wù)的簡(jiǎn)單的不可靠信息傳送服務(wù)。
利用UDP數(shù)據(jù)報(bào)文,攻擊者也可以發(fā)送洪水攻擊,UDP洪水攻擊和ICMP/IGMP洪水攻擊的原理基本相同,通常,攻擊者會(huì)使用小包和大包兩種方式進(jìn)行攻擊。
小包是指64字節(jié)大小的數(shù)據(jù)包,這是以太網(wǎng)上傳輸數(shù)據(jù)幀的最小值,在相同流量下,單包體積越小,數(shù)據(jù)包的數(shù)量就越多。由于交換機(jī)、路由器等網(wǎng)絡(luò)設(shè)備需要對(duì)沒(méi)一個(gè)數(shù)據(jù)包進(jìn)行檢查和校驗(yàn),因此使用UDP小包攻擊能夠最有效的增大網(wǎng)絡(luò)設(shè)備處理數(shù)據(jù)包的壓力,造成處理速度的緩慢和傳輸延遲等拒絕服務(wù)攻擊的效果。
大包是指1500字節(jié)以上的數(shù)據(jù)包,其大小超過(guò)了以太網(wǎng)的最大傳輸單元,使用UDP大包攻擊,能夠有效的占用網(wǎng)絡(luò)接口的傳輸寬帶,并迫使被攻擊目標(biāo)在接受到UDP數(shù)據(jù)時(shí)進(jìn)行分片重組,造成網(wǎng)絡(luò)擁堵,服務(wù)器響應(yīng)速度變慢。
UDP洪水攻擊也是很早就出現(xiàn)的一種拒絕服務(wù)攻擊方式,這種攻擊發(fā)動(dòng)簡(jiǎn)單,有相當(dāng)多的工具都能夠發(fā)動(dòng)UDP洪水攻擊,如hping,LOIC等,但UDP洪水攻擊完全依靠受控主機(jī)本身的網(wǎng)絡(luò)性能,因此通常對(duì)目標(biāo)寬帶資源的消耗并不太大。http://www.tjdsmy.cn/archives/64088.html
1.2發(fā)射和放大攻擊
攻擊者可以使用ICMP/IGMP洪水攻擊和UDP洪水攻擊等方式直接對(duì)被攻擊目標(biāo)展開(kāi)消耗網(wǎng)絡(luò)寬帶資源的分布式拒絕服務(wù)攻擊,但這種攻擊方式不僅較低,還很容易被查到攻擊的源頭,雖然攻擊者可以使用偽造源IP地址的方式進(jìn)行隱藏,但更好的方式是使用反射攻擊技術(shù)。
發(fā)射攻擊又被稱為DRDoS(分布式反射拒絕服務(wù))攻擊,是指利用路由器、服務(wù)器等設(shè)施對(duì)請(qǐng)求產(chǎn)生應(yīng)答,從而反射攻擊流量并隱藏攻擊來(lái)源的一種分布式拒絕服務(wù)攻擊技術(shù)。

在進(jìn)行反射攻擊時(shí),攻擊者使用受控主機(jī)發(fā)送大量的數(shù)據(jù)包,這些數(shù)據(jù)包的特別之處在于,其目的IP地址指向作為反射器的服務(wù)器、路由器等設(shè)施,而源IP地址則被偽造成被攻擊目標(biāo)的IP地址,反射器在收到數(shù)據(jù)包時(shí),會(huì)認(rèn)為該數(shù)據(jù)包是否被攻擊目標(biāo)所發(fā)來(lái)的請(qǐng)求,因此會(huì)將相應(yīng)數(shù)據(jù)發(fā)送給被攻擊目標(biāo),當(dāng)大量的響應(yīng)數(shù)據(jù)包涌向攻擊目標(biāo)時(shí),就會(huì)耗盡目標(biāo)的網(wǎng)絡(luò)寬帶資源,造成拒絕服務(wù)攻擊。
發(fā)動(dòng)反射攻擊需要在互聯(lián)網(wǎng)上找到大量的發(fā)射器,某些種類的反射攻擊并不難實(shí)現(xiàn),例如,對(duì)于ACK反射攻擊,只需要找到互聯(lián)網(wǎng)上開(kāi)放的TCP端口的服務(wù)器即可,而這種服務(wù)器在互聯(lián)網(wǎng)上的存在是非常廣泛的。
發(fā)動(dòng)反射攻擊通常會(huì)使用無(wú)需認(rèn)證或者握手的協(xié)議,反射攻擊需要將請(qǐng)求數(shù)據(jù)的源IP地址偽造成被攻擊目標(biāo)的IP地址,如果使用的協(xié)議需要進(jìn)行認(rèn)證或者握手,則該認(rèn)證或握手過(guò)程沒(méi)有辦法完成,也就不能進(jìn)行下一步的攻擊,因此,絕大多數(shù)的反射攻擊都是使用基于UDP協(xié)議的網(wǎng)絡(luò)服務(wù)進(jìn)行的,
相比于直接偽造源地址的分布式拒絕服務(wù)攻擊,反射攻擊由于增加了一個(gè)反射步驟,因此更加難以追溯攻擊來(lái)源,但是,這并不是反射攻擊真正的威脅,真正的威脅在于利用反射原理進(jìn)行的放大攻擊。
放大攻擊是一種特殊的反射攻擊,其特殊之處在于反射器對(duì)于網(wǎng)絡(luò)流量具有放大作用,因此我們也可以將這種反射器成為放大器,進(jìn)行放大攻擊的方式與反射攻擊的方式也是基本一致的,不用之處在于反射器(放大器)所提供的網(wǎng)絡(luò)服務(wù)需要滿足一定條件。
在反射器所提供的網(wǎng)絡(luò)服務(wù)協(xié)議中,需要存在請(qǐng)求和響應(yīng)數(shù)據(jù)量不對(duì)稱的情況,響應(yīng)數(shù)據(jù)量需要大于請(qǐng)求數(shù)據(jù)量,響應(yīng)數(shù)據(jù)量與請(qǐng)求數(shù)據(jù)量的比值越大,放大器的放大倍數(shù)也就越大,進(jìn)行放大攻擊所產(chǎn)生的消耗寬帶資源的效果也就越明顯。
放大器所使用網(wǎng)絡(luò)服務(wù)部署的廣泛性決定了該放大攻擊的規(guī)模和嚴(yán)重程度,如果存在某些網(wǎng)絡(luò)服務(wù),不需要進(jìn)行認(rèn)證并且放大效果非常好,但是在互聯(lián)網(wǎng)上部署的數(shù)量很少,那么利用該網(wǎng)絡(luò)服務(wù)進(jìn)行放大也不能達(dá)到很大的流量,達(dá)不到有效的消耗寬帶資源的效果,這種網(wǎng)絡(luò)服務(wù)也就不能作為主要的放大攻擊流量,而只能作為輔助手段。
1.2.1 ACK反射攻擊
我們知道,在傳輸控制協(xié)議建立連接時(shí),首先會(huì)進(jìn)行TCP三次握手,在這個(gè)工程中,當(dāng)服務(wù)器端接收到客戶端發(fā)來(lái)的SYN連接請(qǐng)求時(shí),會(huì)對(duì)該請(qǐng)求進(jìn)行ACK應(yīng)答,利用TCP握手的ACK應(yīng)答,即可進(jìn)行ACK反射攻擊。
如果攻擊者將SYN的源IP地址偽造成被攻擊目標(biāo)的IP地址,服務(wù)器的應(yīng)答也就會(huì)直接發(fā)送給被攻擊目標(biāo),由于使用TCP協(xié)議的服務(wù)在互聯(lián)網(wǎng)上廣泛存在,攻擊者可以通過(guò)受控主機(jī)向大量不同的服務(wù)器發(fā)送偽造源IP地址的SYN請(qǐng)求,從而使服務(wù)器響應(yīng)的大量ACK應(yīng)答數(shù)據(jù)涌向被攻擊目標(biāo),占用目標(biāo)的網(wǎng)絡(luò)寬帶資源并拒絕服務(wù)。

在發(fā)動(dòng)ACK反射攻擊時(shí),首先需要進(jìn)行掃描,獲得大量的反射器地址,并分別向這些反射器發(fā)送偽造源地址的SYN請(qǐng)求數(shù)據(jù),因此相比于直接攻擊,這種方式顯得復(fù)雜了一些,ACK反射攻擊的優(yōu)點(diǎn)主要在于其能夠比較有效地隱藏攻擊的來(lái)源。
1.2.2 DNS放大攻擊
域名系統(tǒng)是因特網(wǎng)的一項(xiàng)核心服務(wù),它作為可以將域名和IP地址相互映射的一個(gè)分布式數(shù)據(jù)庫(kù),能夠使人更方便地訪問(wèn)互聯(lián)網(wǎng),而不用去記住那些難以記憶的IP地址,DNS使用的TCP與UDP端口號(hào)都是53,主要使用的UDP協(xié)議。
通常,DNS的相應(yīng)數(shù)據(jù)包會(huì)比查詢數(shù)據(jù)包大,因此攻擊者利用普通的DNS查詢請(qǐng)求就能夠發(fā)動(dòng)放大攻擊,并將攻擊流量放大2~10倍,但更有效的方法是使用RFC2671中定義的DNS擴(kuò)展機(jī)制EDNS0。
****EDNS0
在沒(méi)有EDNS0以前,對(duì)DNS查詢的響應(yīng)數(shù)據(jù)包被限制在512字節(jié)以內(nèi),當(dāng)需要應(yīng)答的數(shù)據(jù)包超過(guò)512字節(jié)時(shí),根據(jù)DNS服務(wù)器實(shí)現(xiàn)的不同,可能會(huì)丟棄超過(guò)512字節(jié)的部分,也可能會(huì)使用TCP協(xié)議建立連接并重新發(fā)送,無(wú)論是哪站方式,都不利于進(jìn)行DNS放大攻擊。
在EDNS0中,擴(kuò)展了DNS數(shù)據(jù)包的結(jié)果,增加了OPT RR字段,在OPT RR字段中,包含了客戶端能夠處理的最大UDP報(bào)文大小的信息,服務(wù)器在響應(yīng)DNS請(qǐng)求時(shí),解析并記錄下客戶端能夠處理的最大UDP報(bào)文的大小,并根據(jù)該大小生成響應(yīng)的報(bào)文。
攻擊者能夠利用dig和EDNS0進(jìn)行高效的DNS放大攻擊,攻擊者向廣泛存在的開(kāi)放DNS解析器發(fā)送dig查詢命令,將OPT RR字段中UDP報(bào)文大小設(shè)置為很大的值,并將請(qǐng)求的源IP地址偽造成被攻擊目標(biāo)的IP地址。DNS解析器收到查詢請(qǐng)求后,會(huì)將解析的結(jié)果發(fā)送給被攻擊目標(biāo),當(dāng)大量的解析結(jié)果涌向目標(biāo)時(shí),就會(huì)導(dǎo)致目標(biāo)網(wǎng)絡(luò)擁堵和緩慢,造成拒絕服務(wù)攻擊。
攻擊者發(fā)送的DNS查詢請(qǐng)求數(shù)據(jù)包大小一般為60字節(jié)左右,而查詢返回結(jié)果的數(shù)據(jù)包大小通常為300字節(jié)以上,因此,使用該方式進(jìn)行放大攻擊能夠達(dá)到50倍以上的放大效果,這種放大效應(yīng)所產(chǎn)生的攻擊效果是非常驚人的,只要攻擊的發(fā)起端能夠發(fā)出2Gbit/s的寬帶,就能夠在目標(biāo)網(wǎng)絡(luò)處產(chǎn)生 100Gbit/s的寬帶消耗,在2013年3月在Spamhaus的分布式拒絕服務(wù)攻擊中,主要就是用了DNS放大攻擊技術(shù),使得攻擊流量達(dá)到了史無(wú)前例的300Gbit/s,設(shè)置拖慢了局部互聯(lián)網(wǎng)的響應(yīng)速度。
與ACK反射攻擊類似,發(fā)動(dòng)DNS放大攻擊也需要先進(jìn)行掃描,以獲得大量的開(kāi)放DNS解析器的地址,并向這些開(kāi)放DNS解析器發(fā)送偽造源地址的查詢命令來(lái)放大攻擊流量。

1.2.3 NTP放大攻擊
網(wǎng)絡(luò)時(shí)間協(xié)議是用來(lái)使計(jì)算器時(shí)間同步化的一種協(xié)議,他可以使計(jì)算機(jī)與時(shí)鐘源進(jìn)行同步化并提供高精準(zhǔn)度的時(shí)間校正,NTP使用UDP123端口進(jìn)行通信。
在NTP協(xié)議的服務(wù)器實(shí)現(xiàn)上,通常會(huì)實(shí)現(xiàn)一系列Mode7的調(diào)試接口,而接口中的monlist請(qǐng)求能夠獲取到目標(biāo)NTP服務(wù)器進(jìn)行同步的最后600個(gè)客戶端的IP地址等信息。這意味著,只需要發(fā)送一個(gè)很小的請(qǐng)求包,就能觸發(fā)大量連續(xù)的包含IP地址信息等數(shù)據(jù)的UDP響應(yīng)數(shù)據(jù)包。
實(shí)際上,monlist請(qǐng)求返回的數(shù)據(jù)量與一段時(shí)間內(nèi)和NTP服務(wù)器交互的客戶端數(shù)據(jù)量有關(guān),由于NTP服務(wù)使用的是UDP單包通信,因此攻擊者可以將偽造源IP地址的UDP請(qǐng)求包發(fā)送給NTP放大器,偽造客戶端與NTP服務(wù)器的交互,增加“和NTP服務(wù)器交互的客戶端的數(shù)量”,以此來(lái)增加monlist請(qǐng)求的響應(yīng)數(shù)據(jù)量并增大NTP放大器的放大倍數(shù),只要向NTP放大器發(fā)送600個(gè)不超過(guò)64字節(jié)的請(qǐng)求包(約40KB數(shù)據(jù)),就能夠快速的將NTP放大器的放大倍數(shù)提高到700倍以上,并在該服務(wù)器的NTP服務(wù)關(guān)閉或重新啟動(dòng)之前一直保持這么大的放大倍數(shù)。

攻擊者發(fā)送的monlist請(qǐng)求數(shù)據(jù)包大小不超過(guò)64字節(jié),而請(qǐng)求返回的結(jié)果會(huì)包含100個(gè)482字節(jié)的UDP響應(yīng)數(shù)據(jù),因此使用該方式進(jìn)行放大攻擊能夠達(dá)到700倍以上的放大效果。
與ACK反射攻擊和DNS放大攻擊類似,發(fā)動(dòng)NTP放大攻擊也需要先進(jìn)行網(wǎng)絡(luò)掃描,以獲取大量的NTP服務(wù)器,并向這些NTP服務(wù)器發(fā)送偽造源地址的請(qǐng)求來(lái)放大攻擊流量,相比于DNS放大攻擊,NTP放大攻擊的放大倍數(shù)更大,因此其危害也更加嚴(yán)重,在針對(duì)Spamhaus的大規(guī)模分布式拒絕服務(wù)攻擊事件中,如果攻擊者不使用DNS放大攻擊而改用NTP放大攻擊,那么攻擊流量將會(huì)達(dá)到2Tbit/s以上。
1.2.4 SNMP放大攻擊
簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議是目前網(wǎng)絡(luò)中應(yīng)用最為廣泛的網(wǎng)絡(luò)管理協(xié)議,他提供了一個(gè)管理框架來(lái)監(jiān)控和維護(hù)互聯(lián)網(wǎng)的設(shè)備,SNMP協(xié)議使用UDP161端口進(jìn)行通信。
利用SNMP協(xié)議中的默認(rèn)通信字符串和GetBulk請(qǐng)求,攻擊者能夠開(kāi)展有效的SNMP放大攻擊。
由于SNMP的效果很好,網(wǎng)絡(luò)硬件廠商開(kāi)始把SNMP加入到它們制作的每一臺(tái)設(shè)備,這導(dǎo)致各種網(wǎng)絡(luò)設(shè)備上都可以看到默認(rèn)啟用的SNMP服務(wù),從交換機(jī)到路由器,從防火墻到網(wǎng)絡(luò)打印機(jī),無(wú)一例外,同時(shí),許多廠商安裝的SNMP都采用了默認(rèn)的通信字符串,這些通信字符串是程序獲取設(shè)備信息和修改配置必不可少的,最常見(jiàn)的默認(rèn)通信字符串是public和private,除此之外還有許多廠商私有的默認(rèn)通信字符串,幾乎所有運(yùn)行SNMP的網(wǎng)絡(luò)設(shè)備上,都可以找到某種形式的默認(rèn)通信字符串。
在SNMPv1中定義的get請(qǐng)求可以嘗試一次獲取多個(gè)MIB對(duì)象,但相應(yīng)消息的大小受到設(shè)備處理能力的限制,如果設(shè)備不能返回全部請(qǐng)求的響應(yīng),則會(huì)返回一條錯(cuò)誤信息。在SNMPv2中,添加了getbulk請(qǐng)求,該請(qǐng)求會(huì)通知設(shè)備返回盡可能多的數(shù)據(jù),這使得管理程序能夠通過(guò)發(fā)送一次請(qǐng)求就獲得大段的檢索信息。
攻擊者向廣泛存在并開(kāi)啟了SNMP服務(wù)的網(wǎng)絡(luò)設(shè)備發(fā)送getbulk請(qǐng)求,使用默認(rèn)通信字符串作為認(rèn)證憑據(jù),并將源IP地址偽造成攻擊目標(biāo)的IP地址,設(shè)備收到getbulk請(qǐng)求后,會(huì)將響應(yīng)結(jié)果發(fā)送給攻擊目標(biāo),當(dāng)大量的響應(yīng)結(jié)果涌向攻擊目標(biāo)時(shí),就會(huì)導(dǎo)致攻擊目標(biāo)網(wǎng)絡(luò)擁堵和緩慢,造成拒絕服務(wù)攻擊。

攻擊者發(fā)送的getbulk請(qǐng)求數(shù)據(jù)包約為60字節(jié),而請(qǐng)求的響應(yīng)數(shù)據(jù)能夠達(dá)到1500字節(jié)以上,因此,使用該方式進(jìn)行放大攻擊能夠達(dá)到25倍以上的放大效果,這也是一種放大效應(yīng)明顯且有效的放大攻擊方式。
在發(fā)動(dòng)SNMP放大攻擊時(shí),同樣需要先進(jìn)行網(wǎng)絡(luò)掃描以找到開(kāi)放了SNMP協(xié)議的網(wǎng)絡(luò)社保,雖然開(kāi)放SNMP協(xié)議的網(wǎng)絡(luò)設(shè)備很多,但是在掃描到這些設(shè)備之后還需要對(duì)他們所使用的默認(rèn)字符串進(jìn)行猜測(cè),因此,相比DNS放大攻擊,不論是簡(jiǎn)單度還是放大倍數(shù)的影響力,SNMP放大攻擊都略遜一籌,不過(guò)從總體上來(lái)看,SNMP放大攻擊依然是一種非常有效的消耗寬帶資源的攻擊方式。
1.3攻擊鏈路
攻擊鏈路與以前介紹的幾種攻擊方法有所不同,其攻擊的目標(biāo)并不是作為互聯(lián)網(wǎng)斷點(diǎn)的服務(wù)器的寬帶資源,而是骨干網(wǎng)上的鏈路的寬帶資源,對(duì)鏈路進(jìn)行攻擊的一種典型的方式是Coremelt攻擊。
Coremelt是安全研究人員在2009年提出的一種針對(duì)鏈路的分布式拒絕服務(wù)攻擊方法,攻擊者需要控制一個(gè)分布足夠廣泛的僵尸網(wǎng)絡(luò)來(lái)發(fā)動(dòng)Coremelt攻擊。

首先,攻擊者通過(guò)traceroute等手段來(lái)判斷各個(gè)僵尸主機(jī)和將要攻擊的鏈路之間的位置關(guān)系,并根據(jù)結(jié)果將僵尸主機(jī)分為兩個(gè)部分,然后,攻擊者控制僵尸主機(jī),使其與鏈路另一側(cè)的每一臺(tái)僵尸主機(jī)進(jìn)行通信并收發(fā)大量數(shù)據(jù),這樣,大量的網(wǎng)絡(luò)數(shù)據(jù)包就會(huì)經(jīng)過(guò)骨干網(wǎng)上的被攻占鏈路,造成網(wǎng)絡(luò)擁堵和延時(shí)。
從骨干網(wǎng)上來(lái)看,這些僵尸主機(jī)之間相互收發(fā)的數(shù)據(jù)包確實(shí)是真是存在的通信數(shù)據(jù),沒(méi)有辦法將這些通信數(shù)據(jù)與真正的合法通信數(shù)據(jù)進(jìn)行有效的區(qū)分,因此這種攻擊方式更加難以防護(hù)和緩解。
2、攻擊系統(tǒng)資源
誤區(qū):DDOS攻擊都是消耗網(wǎng)絡(luò)寬帶資源的攻擊。
很多時(shí)候,新聞報(bào)道中提到DDOS攻擊,都會(huì)以“攻擊流量達(dá)到*****”的語(yǔ)句來(lái)描述攻擊的猛烈程度,這種以攻擊流量的寬帶作為DDOS攻擊危害程度描述指標(biāo)的說(shuō)法,通常會(huì)讓人們誤以為DDOS攻擊都是消耗網(wǎng)絡(luò)寬帶資源的攻擊。
事實(shí)上,除了網(wǎng)絡(luò)寬帶資源,DDOS攻擊還有消耗系統(tǒng)資源和應(yīng)用資源的攻擊方法,而攻擊流量的大小只是決定攻擊危害程度的一個(gè)方面,對(duì)于相同種類的攻擊,通常攻擊流量越大,其危害也越大,而如果在相同攻擊流量的情況下,不同的攻擊方法造成的危害和影響則不盡相同。
有時(shí)候,人們會(huì)錯(cuò)誤的將SYN洪水攻擊認(rèn)為是消耗網(wǎng)絡(luò)寬帶資源的DDOS攻擊,而事實(shí)上,這種攻擊的主要危害在于耗盡系統(tǒng)鏈接表資源,相同攻擊流量的SYN洪水攻擊會(huì)比UDP洪水攻擊的危害更大。
2.1 攻擊TCP連接
TCP是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通訊協(xié)議,不同主機(jī)的應(yīng)用層之間經(jīng)常需要可靠的、像管道一樣的連接,但是IP層無(wú)法提供這樣的流機(jī)制,在現(xiàn)實(shí)的互聯(lián)網(wǎng)中,這種連接通常通過(guò)TCP協(xié)議來(lái)實(shí)現(xiàn)。
TCP連接包括三個(gè)階段:連接創(chuàng)建,數(shù)據(jù)傳送和連接終止,由于在協(xié)議的設(shè)計(jì)過(guò)程當(dāng)中只專注于協(xié)議的可用性,而沒(méi)有對(duì)協(xié)議的安全性進(jìn)行比較周密和詳細(xì)的考慮,因此TCP協(xié)議存在很多安全缺陷和安全性問(wèn)題。
TCP連接的三個(gè)階段都容易受到拒絕服務(wù)攻擊的影響,我們會(huì)在這里對(duì)這些攻擊手段分別進(jìn)行介紹。
2.1.1 TCP連接洪水攻擊
TCP連接洪水攻擊是在連接創(chuàng)建階段對(duì)TCP資源進(jìn)行攻擊的。
在三次握手進(jìn)行的過(guò)程中,服務(wù)器會(huì)創(chuàng)建并保存TCP連接的信息,這個(gè)信息通常被保存在連接表結(jié)構(gòu)中,但是,連接表的大小是有限的,一旦服務(wù)器接收到的連接數(shù)量超過(guò)了連接表能存儲(chǔ)的數(shù)量,服務(wù)器就無(wú)法創(chuàng)建新的TCP連接了。
攻擊者可以利用大量受控主機(jī),通過(guò)快速建立大量惡意的TCP連接占滿被攻擊目標(biāo)的連接表,使目標(biāo)無(wú)法接受新的TCP連接請(qǐng)求,從而達(dá)到拒絕服務(wù)攻擊的目的。

TCP連接洪水攻擊是攻擊TCP連接的最基本方法,當(dāng)有大量的受控主機(jī)發(fā)起攻擊時(shí),其效果非常明顯。
2.1.2 SYN洪水攻擊
SYN洪水攻擊是最經(jīng)典的一種拒絕服務(wù)攻擊方式,這種攻擊方式在2000年以前就出現(xiàn)過(guò),直到現(xiàn)在依然被攻擊者大規(guī)模的廣泛使用,近年來(lái),SYN洪水攻擊仍然占據(jù)全部分布式拒絕服務(wù)攻擊的三分之一以上。
TCP半開(kāi)連接:
在建立TCP連接的過(guò)程中,如果在服務(wù)器返回SYN+ACK報(bào)文后,客戶端由于某種原因沒(méi)有對(duì)其進(jìn)行確認(rèn),這時(shí)服務(wù)器端就需要重傳SYN+ACK報(bào)文,并等待客戶端的確認(rèn)報(bào)文直到TCP連接超時(shí),這種等待客戶確認(rèn)的連接狀態(tài)通常被稱為半開(kāi)連接

在連接超時(shí)之前,半開(kāi)連接會(huì)一直保存在服務(wù)器的連接表中。
由于連接表的大小是有限的,如果在短時(shí)間內(nèi)產(chǎn)生大量的半開(kāi)連接,而這些連接又無(wú)法很快的結(jié)束,連接表就會(huì)很快被占滿,導(dǎo)致新的連接TCP連接無(wú)法建立。
SYN洪水攻擊就是攻擊者利用受控主機(jī)發(fā)送大量的TCP SYN報(bào)文,使服務(wù)器打開(kāi)大量的半開(kāi)連接,占滿服務(wù)器的連接表,從而影響正常用戶與服務(wù)器建立會(huì)話,造成拒絕服務(wù)。
攻擊者在發(fā)送TCP SYN報(bào)文時(shí),可以在收到服務(wù)器返回的SYN+ACK報(bào)文后,跳過(guò)最后的ACK報(bào)文發(fā)送,使連接處于半開(kāi)狀態(tài),但是這樣會(huì)很明顯的暴露出進(jìn)行SYN洪水攻擊的IP地址,同時(shí)相應(yīng)報(bào)文會(huì)作為反射流量占用攻擊者的寬帶資源,所以更好的方式是攻擊者將SYN報(bào)文的源IP地址隨機(jī)偽造其他主機(jī)的IP地址或者不存在的IP地址,這樣攻擊目標(biāo)將會(huì)應(yīng)答發(fā)送給被偽造的IP地址,從而占用連接資源并隱藏攻擊來(lái)源。

SYN洪水攻擊發(fā)動(dòng)簡(jiǎn)單,效果明顯,有大量的攻擊工具都能夠發(fā)動(dòng)這種攻擊,至今依然是攻擊者最愛(ài)好的攻擊方法之一。
2.1.3 PSH+ACK洪水攻擊
在TCP數(shù)據(jù)傳輸?shù)倪^(guò)程中,可以通過(guò)設(shè)置PSH標(biāo)志位來(lái)表示當(dāng)前數(shù)據(jù)傳輸結(jié)束,需要服務(wù)端進(jìn)行處理。
在正常的TCP傳輸過(guò)程當(dāng)中,如果待發(fā)送的數(shù)據(jù)會(huì)清空發(fā)送緩沖區(qū),那么操作系統(tǒng)的TCP/IP協(xié)議棧就會(huì)自動(dòng)為該數(shù)據(jù)包設(shè)置PSH標(biāo)志,同樣,當(dāng)服務(wù)端接收到一個(gè)設(shè)置了PSH+ACK標(biāo)志的報(bào)文時(shí),意味著當(dāng)前數(shù)據(jù)傳輸已經(jīng)結(jié)束,因此需要立即將這些數(shù)據(jù)投遞交給服務(wù)進(jìn)程并清空接收緩沖區(qū),而無(wú)須等待判斷是否還會(huì)有額外的數(shù)據(jù)到達(dá)。
由于帶有PSH標(biāo)志位的TCP數(shù)據(jù)包會(huì)強(qiáng)制要求接收端將接收緩沖區(qū)清空并將數(shù)據(jù)提交給應(yīng)用服務(wù)進(jìn)行處理,因此當(dāng)攻擊者利用受控主機(jī)向攻擊目標(biāo)發(fā)送大量的PSH+ACK數(shù)據(jù)包時(shí),被攻擊目標(biāo)就會(huì)消耗大量的系統(tǒng)資源不斷地進(jìn)行接收緩沖區(qū)的清空處理,導(dǎo)致無(wú)法正常處理數(shù)據(jù),從而造成拒絕服務(wù)。

單獨(dú)使用PSH+ACK洪水攻擊對(duì)服務(wù)器產(chǎn)生的影響并不十分明顯,更有效的方式是SYN洪水攻擊與ACK洪水攻擊相結(jié)合,這樣能夠繞過(guò)一部分防護(hù)設(shè)備,增強(qiáng)攻擊的效果。
2.1.4 RST洪水攻擊
在TCP連接的終止階段,通常是通過(guò)帶有FIN標(biāo)志報(bào)文的四次交互(TCP四次握手)來(lái)切斷客戶端與服務(wù)端的TCP連接,但是客戶端或服務(wù)器其中之一出現(xiàn)異常狀況,無(wú)法正常完成TCP四次握手以終止連接時(shí),就會(huì)使用RST報(bào)文將連接強(qiáng)制中斷。
TCP RST攻擊:
在TCP連接中,RST表示復(fù)位,用來(lái)在異常時(shí)關(guān)閉連接,發(fā)送端在發(fā)送RST報(bào)文關(guān)閉連接時(shí),不需要等待緩沖區(qū)中的數(shù)據(jù)報(bào)全部發(fā)送完畢,而會(huì)直接丟棄緩沖器的數(shù)據(jù)并發(fā)送RST報(bào)文,同樣,接收端在收到RST報(bào)文后,也會(huì)清空緩沖區(qū)并關(guān)閉連接,并且不必發(fā)送ACK報(bào)文進(jìn)行確認(rèn)。
攻擊者可以利用RST報(bào)文的這個(gè)特性,發(fā)送偽造的帶有RST標(biāo)志位的TCP報(bào)文,強(qiáng)制中斷客戶端與服務(wù)端的TCP連接,在偽造RST報(bào)文的過(guò)程中,服務(wù)端的IP地址和端口號(hào)是已知的,攻擊者還需要設(shè)法獲取客戶端的IP地址和端口號(hào),并且使RST報(bào)文的序列號(hào)處于服務(wù)器的接收窗口之內(nèi),如果攻擊者和被攻擊客戶端或服務(wù)器處于同一內(nèi)網(wǎng),這些信息可以通過(guò)欺騙和嗅探等方式獲取到。
TCP RST攻擊的原理如圖所示

很多情況下,攻擊者不會(huì)與被攻擊客戶端或服務(wù)器處于同一內(nèi)網(wǎng),導(dǎo)致發(fā)動(dòng)TCP RST攻擊時(shí)難以獲取端口和序列號(hào),在這種情況下,攻擊者可以利用大量的受控主機(jī)猜測(cè)端口和序列號(hào),進(jìn)行盲打,發(fā)送RST洪水攻擊,只要在數(shù)量巨大的RST報(bào)文中有一條與攻擊目標(biāo)的端口號(hào)相同,并且序列號(hào)落在目標(biāo)的接收窗口之中,就能夠終端連接。
RST洪水攻擊的原理如圖所示

嚴(yán)格來(lái)說(shuō),TCP RST攻擊和RST洪水攻擊是針對(duì)用戶的拒絕攻擊方式,這種攻擊通常被用來(lái)攻擊在線游戲或比賽的用戶,從而影響比賽的結(jié)果并獲得一定的經(jīng)濟(jì)利益。
2.1.5 Sockstress攻擊
Sockstress攻擊是研究人員在2008年提出的一種攻擊TCP連接的方法,與前面幾種攻擊方式不同的是,Sockstress攻擊不需要在短時(shí)間內(nèi)發(fā)送大量的攻擊流量,因此不屬于洪水攻擊,而是一種慢速攻擊。
在TCP傳輸數(shù)據(jù)時(shí),并不是將數(shù)據(jù)直接遞交給應(yīng)用程序處理,而是先臨時(shí)存儲(chǔ)在接受緩沖區(qū)里,該接收緩沖區(qū)的大小是由TCP窗口表示的,如果TCP窗口大小為0,則表示接收緩沖區(qū)已被填滿,發(fā)送端應(yīng)該停止發(fā)送數(shù)據(jù),知道接收端的窗口發(fā)生了更新,Sockstress攻擊就是利用該原理長(zhǎng)時(shí)間維持TCP連接,以達(dá)到拒絕服務(wù)攻擊的目的。
Sockstress攻擊首先會(huì)完成TCP三次握手以建立TCP連接,但是在三次握手的最后一次ACK應(yīng)答中,攻擊者將其TCP窗口大小設(shè)置為0,隨后 進(jìn)行一次數(shù)據(jù)請(qǐng)求,攻擊目標(biāo)在傳輸數(shù)據(jù)時(shí),發(fā)現(xiàn)接收端的TCP窗口大小為0,就會(huì)停止傳輸數(shù)據(jù),并發(fā)出TCP窗口探測(cè)包,詢問(wèn)攻擊者其TCP窗口是否有更新,由于攻擊者沒(méi)有更改TCP窗口的大小,被攻擊目標(biāo)就會(huì)一直維持TCP連接等待數(shù)據(jù)發(fā)送,并不斷進(jìn)行窗口更新的探測(cè),如果攻擊者利用大量的受控主機(jī)進(jìn)行Sockstress攻擊,被攻擊目標(biāo)會(huì)一直維持大量的TCP連接并進(jìn)行大量窗口更新探測(cè),其TCP連接表會(huì)逐漸耗盡,無(wú)法連接新的連接而導(dǎo)致拒絕服務(wù)。
Sockstress攻擊的原理如圖所示

Sockstress攻擊的另一種方式是將TCP窗口設(shè)置為一個(gè)非常小的值,例如4字節(jié),這樣攻擊目標(biāo)將不得不把需要發(fā)送的數(shù)據(jù)切分成大量4字節(jié)大小的分片,這會(huì)極大的消耗目標(biāo)的內(nèi)存和處理器資源,造成系統(tǒng)響應(yīng)緩慢和拒絕服務(wù)。
2.2 攻擊SSL連接
安全套接層是為網(wǎng)絡(luò)通信提供安全及數(shù)據(jù)完整性的一種安全協(xié)議,SSL能夠在傳輸層對(duì)網(wǎng)絡(luò)連接進(jìn)行加密,以防止傳輸?shù)臄?shù)據(jù)明文被監(jiān)聽(tīng)和截獲。
然而,SSL協(xié)議加密、解密和秘鑰協(xié)商的過(guò)程中會(huì)消耗大量的系統(tǒng)資源,嚴(yán)重降低機(jī)器的性能,因此,通常只有在傳輸密碼等機(jī)密信息時(shí)才使用SSL協(xié)議進(jìn)行傳輸。
攻擊者可以利用SSL協(xié)議消耗資源的特性進(jìn)行拒絕服務(wù)攻擊。
2.2.1 THC SSL DOS攻擊
在進(jìn)行SSL數(shù)據(jù)傳輸之前,通信雙方首先要進(jìn)行SSL握手,以協(xié)商加密算法交換加密秘鑰,進(jìn)行身份驗(yàn)證,通常情況下,這樣的SSL握手過(guò)程只需要進(jìn)行一次即可,但是在SSL協(xié)議中有一個(gè)Renegotiation選項(xiàng),通過(guò)它可以進(jìn)行秘鑰的重新協(xié)商以建立新的秘鑰。
THC SSL DOS攻擊是安全研究人員在2011年提出的一種針對(duì)SSL的拒絕服務(wù)攻擊方法,這種方法就是利用Renegotiation選項(xiàng),造成被攻擊目標(biāo)資源耗盡,在進(jìn)行SSL連接并握手之后,攻擊者反復(fù)不斷的進(jìn)行秘鑰重新協(xié)商過(guò)程,而秘鑰重新協(xié)商過(guò)程需要服務(wù)器投入比客戶端多15倍的CPU計(jì)算資源,攻擊者只需要一臺(tái)普通的臺(tái)式機(jī)就能拖慢一臺(tái)高性能服務(wù)器,而如果有大量主機(jī)同時(shí)進(jìn)行攻擊,則會(huì)使服務(wù)器忙于協(xié)商秘鑰而完全停止響應(yīng)。
THC SSL DOS攻擊的原理如圖所示

另外,即使服務(wù)器不支持Renegotiation,攻擊者依然可以通過(guò)另行打開(kāi)新的SSL連接的方式來(lái)制造類似的攻擊效果。
2.2.2 SSL洪水攻擊
在SSL握手的過(guò)程中,服務(wù)器會(huì)消耗較多的CPU計(jì)算資源進(jìn)行加解密,并進(jìn)行數(shù)據(jù)的有效性檢驗(yàn),對(duì)于客戶端發(fā)過(guò)來(lái)的數(shù)據(jù),服務(wù)器需要先花費(fèi)大量的計(jì)算資源進(jìn)行解密,之后才能對(duì)數(shù)據(jù)的有效性進(jìn)行檢驗(yàn),重要的是,不論數(shù)據(jù)是否是有效的,服務(wù)器都必須先進(jìn)行解密才能夠做檢查,攻擊者可以利用這個(gè)特性進(jìn)行SSL洪水攻擊。
在進(jìn)行洪水攻擊時(shí),一個(gè)要點(diǎn)是需要攻擊者能夠在客戶端大量的發(fā)出攻擊請(qǐng)求,這就需要客戶端所進(jìn)行的計(jì)算盡可能的少,對(duì)于SSL洪水攻擊,比較好的方式是在數(shù)據(jù)傳輸之前,進(jìn)行SSL握手的過(guò)程中發(fā)動(dòng)攻擊,攻擊者并不需要完成SSL握手和秘鑰交換,而只需要在這個(gè)過(guò)程中讓服務(wù)器去解密和驗(yàn)證,就能夠大量的消耗服務(wù)器的計(jì)算資源,因此,攻擊者可以非常容易的構(gòu)造秘鑰交換過(guò)程中的請(qǐng)求數(shù)據(jù),達(dá)到減少客戶端計(jì)算量的目的。
SSL洪水攻擊的原理如圖所示

攻擊者可以使用SSL Squeeze等工具來(lái)發(fā)動(dòng)SSL洪水攻擊。
3.攻擊應(yīng)用資源
近年來(lái),消耗應(yīng)用資源的分布式拒絕服務(wù)攻擊正逐漸成為拒絕服務(wù)攻擊的主要手段之一,而由于DNS和Web服務(wù)的廣泛性和重要性,這兩種服務(wù)也就成為了消耗應(yīng)用資源的分布式拒絕服務(wù)攻擊的最主要的攻擊目標(biāo)。
3.1 攻擊DNS服務(wù)
DNS服務(wù)是互聯(lián)網(wǎng)的一項(xiàng)核心服務(wù),通過(guò)使用DNS,人們?cè)谠L問(wèn)網(wǎng)絡(luò)時(shí)不需要記住其IP地址,而只需輸入其域名即可,在IPv6網(wǎng)絡(luò)環(huán)境下,由于IP地址由原來(lái)的32位擴(kuò)展到了128位,變得更加難以記憶,DNS服務(wù)也就變得更加重要,當(dāng)DNS服務(wù)的可用性收到威脅時(shí),互聯(lián)網(wǎng)上的大量設(shè)備都會(huì)受到影響甚至無(wú)法正常運(yùn)行,歷史上曾有多次針對(duì)DNS的攻擊事件,都造成了較大影響。
針對(duì)DNS服務(wù)的攻擊方法主要有DNS QUERY洪水攻擊和DNS NXDOMAIN洪水攻擊兩種
3.1.1 DNS QUERY洪水攻擊
DNS查詢和解析過(guò)程:
當(dāng)客戶端向DNS服務(wù)器查詢某域名時(shí),DNS服務(wù)器會(huì)首先檢查其本地緩存中是否有該域名的記錄,如果緩存中有該域名的記錄(即命中),則直接講緩存中記錄的IP地址作為非權(quán)威應(yīng)答返回給客戶端,如果在緩存中沒(méi)有找到該域名的記錄,則會(huì)進(jìn)行迭代查詢,從根域名開(kāi)始,逐級(jí)進(jìn)行域名解析,直到解析出完整的域名,之后服務(wù)器會(huì)將域名解析結(jié)果作為應(yīng)答發(fā)送給客戶端,并生成一條解析記錄保存到緩存中。
DNS查詢和解析過(guò)程如圖所示:

在DNS解析的過(guò)程中,客戶端發(fā)起一次查詢請(qǐng)求,DNS服務(wù)器可能需要進(jìn)行額外的多次查詢才能完成解析的過(guò)程并給出應(yīng)答,在這個(gè)過(guò)程中會(huì)消耗一定的計(jì)算和網(wǎng)絡(luò)資源,如果攻擊者利用大量受控主機(jī)不斷發(fā)送不同域名的解析請(qǐng)求,那么DNS服務(wù)器的緩存會(huì)被不斷刷新,而大量解析請(qǐng)求不能命中緩存又導(dǎo)致DNS服務(wù)器必須消耗額外的資源進(jìn)行迭代查詢,這會(huì)極大的增加DNS服務(wù)器的資源消耗,導(dǎo)致DNS響應(yīng)緩慢甚至完全拒絕服務(wù)。
DNS QUERY洪水攻擊的原理如圖所示

進(jìn)行DNS QUERY洪水攻擊的要點(diǎn)在于每一個(gè)DNS解析要求所查詢的域名應(yīng)是不同的,這樣可以比較有效的避開(kāi)NDS服務(wù)器緩存中的解析記錄,達(dá)到更好的資源消耗效果。
3.1.2 DNS NXDOMAIN洪水攻擊
DNS NXDOMAIN洪水攻擊是DNS QUERY洪水攻擊的一個(gè)變種攻擊方式,區(qū)別在于后者是向DNS服務(wù)器查詢一個(gè)真實(shí)存在的域名,而前者是向DNS服務(wù)器查詢一個(gè)不存在的域名。
在進(jìn)行DNS NXDOMAIN洪水攻擊時(shí),DNS服務(wù)器會(huì)進(jìn)行多次域名查詢,同時(shí),其緩存會(huì)被大量NXDOMAIN記錄所填滿,導(dǎo)致響應(yīng)正常用戶的DNS解析請(qǐng)求的速度變慢,這與DNS QUERY洪水攻擊所達(dá)到的效果類似,除此之外,一部分DNS服務(wù)器在獲取不到域名的解析結(jié)果時(shí),還會(huì)再次進(jìn)行遞歸查詢,向其上一級(jí)的DNS服務(wù)器發(fā)送解析請(qǐng)求并等待應(yīng)答,這進(jìn)一步增加了DNS服務(wù)器的資源消耗,因此,DNS NXDOMAIN洪水攻擊通常比DNS QUERY洪水攻擊的效果更好。
DNS NXDOMAIN洪水攻擊 的原理如果所示

3.2 攻擊web服務(wù)
近年來(lái),web技術(shù)發(fā)展非常迅速,人們可以通過(guò)瀏覽器使用web服務(wù),簡(jiǎn)單方便的獲取需要的信息,而許多機(jī)構(gòu)和企業(yè)的重要信息和關(guān)鍵業(yè)務(wù)也是通過(guò)web服務(wù)的方式對(duì)外提供,一旦web服務(wù)受到解決服務(wù)攻擊,就會(huì)對(duì)其承載的業(yè)務(wù)造成致命的影響。
3.2.1 HTTP洪水攻擊
Web服務(wù)通常使用超文本傳輸協(xié)議進(jìn)行請(qǐng)求和響應(yīng)數(shù)據(jù)的傳輸。

常見(jiàn)的HTTP請(qǐng)求有GET請(qǐng)求和POST請(qǐng)求兩種,通常GET請(qǐng)求用于從wen服務(wù)器獲取數(shù)據(jù)和資源,例如請(qǐng)求頁(yè)面、獲取圖片和文檔等;POST請(qǐng)求用于向web服務(wù)器提交數(shù)據(jù)和資源,例如發(fā)送用戶名/密碼、上傳文件等。在處理這些HTTP請(qǐng)求的過(guò)程中,web服務(wù)器通常需要解析請(qǐng)求、處理和執(zhí)行服務(wù)端腳本、驗(yàn)證用戶權(quán)限并多次訪問(wèn)數(shù)據(jù)庫(kù),這會(huì)消耗大量的計(jì)算資源和IO訪問(wèn)資源。
如果攻擊者利用大量的受控主機(jī)不斷的向web服務(wù)器發(fā)送惡意大量HTTP請(qǐng)求,要求web服務(wù)器處理,就會(huì)完全占用服務(wù)器的資源,造成其他正常用戶的web訪問(wèn)請(qǐng)求處理緩慢設(shè)置得不到處理,導(dǎo)致拒絕服務(wù),這就是HTTP洪水攻擊。
由于HTTP協(xié)議是基于TCP協(xié)議的,需要完成三次握手建立TCP連接才能開(kāi)始HTTP通信,因此進(jìn)行HTTP洪水攻擊時(shí)無(wú)法使用偽造源IP地址的方式發(fā)動(dòng)攻擊,這時(shí),攻擊者通常會(huì)使用HTTP代理服務(wù)器,HTTP代理服務(wù)器在互聯(lián)網(wǎng)上廣泛存在,通過(guò)使用HTTP代理服務(wù)器,不僅可以隱藏來(lái)源以避免被追查,還能夠提高攻擊的效率--攻擊者連接代理服務(wù)器并發(fā)送完成請(qǐng)求后,可以直接切斷與該代理服務(wù)器的連接并開(kāi)始連接下一個(gè)代理服務(wù)器,這時(shí)代理服務(wù)器與目標(biāo)web服務(wù)器的HTTP連接依然保持,web服務(wù)器需要繼續(xù)接收數(shù)據(jù)并處理HTTP請(qǐng)求。
HTTP洪水攻擊的原理如圖所示

與DNS服務(wù)類似,web服務(wù)也存在緩存機(jī)制,如果攻擊者的大量請(qǐng)求都命中了服務(wù)器緩存,那么這種攻擊的主要作用僅體現(xiàn)咋消耗網(wǎng)絡(luò)寬帶資源上,對(duì)于計(jì)算和IO資源的消耗是非常有限的,因此,高效的HTTP洪水攻擊應(yīng)不斷發(fā)出針對(duì)不同資源和頁(yè)面的HTTP請(qǐng)求,并盡可能請(qǐng)求無(wú)法被緩存的資源,從而加重服務(wù)器的負(fù)擔(dān),增強(qiáng)攻擊效果。
此外,如果web服務(wù)器支持HTTPS,那么進(jìn)行HTTPS洪水攻擊是更為有效的一種攻擊方式,一方面,在進(jìn)行HTTPS通信時(shí),web服務(wù)器需要消耗更多的資源用來(lái)進(jìn)行認(rèn)證和加解密,另一方面,一部分的防護(hù)設(shè)備無(wú)法對(duì)HTTPS通信數(shù)據(jù)流進(jìn)行處理,也會(huì)導(dǎo)致攻擊流量繞過(guò)防護(hù)設(shè)備,直接對(duì)web服務(wù)器造成攻擊。
HTTP洪水攻擊是目標(biāo)對(duì)web服務(wù)威脅最大的攻擊之一,有大量的攻擊工具支持HTTP洪水攻擊,發(fā)動(dòng)簡(jiǎn)單其效果明顯,已經(jīng)成為攻擊者使用的主要攻擊方式之一。
3.2.2 Slowloris攻擊
Slowloris攻擊是一種針對(duì)web服務(wù)器的慢速HTTP攻擊,由安全研究人員在2009年提出。
在HTTP協(xié)議中規(guī)定,HTTP頭部以連續(xù)的“\r\n\r\n”作為結(jié)束標(biāo)志,許多web服務(wù)器在處理http請(qǐng)求的頭部信息時(shí),會(huì)等待頭部傳輸結(jié)束后再進(jìn)行處理,因此,如果web服務(wù)器沒(méi)有接受到連續(xù)的“\r\n\r\n”,就會(huì)一直接受數(shù)據(jù)并保持與客戶端的連接,利用這個(gè)特性,攻擊者能夠長(zhǎng)時(shí)間與web服務(wù)器保持聯(lián)系,并逐漸耗盡web服務(wù)器的連接資源。
攻擊者在發(fā)送HTTP GET請(qǐng)求時(shí),緩慢的發(fā)送無(wú)用的header字段,并且一直不發(fā)送“\r\n\r\n”結(jié)束標(biāo)志,這樣就能夠長(zhǎng)時(shí)間占用與web服務(wù)器的連接并保證該連接不被超時(shí)中斷,然而,web服務(wù)器能夠處理的并發(fā)連接數(shù)是有限的,如果攻擊者利用大量的受控主機(jī)發(fā)送這種不完整的HTTP GET請(qǐng)求并持續(xù)占用這些連接,就會(huì)耗盡web服務(wù)器的連接資源,導(dǎo)致其他用戶的http 請(qǐng)求無(wú)法被處理,造成拒絕服務(wù)。
Slowloris攻擊原理如圖所示

攻擊者使用Slowloris、slowhttptest等工具就可以簡(jiǎn)單的發(fā)動(dòng)Slowloris攻擊。在Slowloris攻擊方法出現(xiàn)以后,IIS、nignx等一部分web服務(wù)器軟件針對(duì)該攻擊方法進(jìn)行了修改,但是Apache.dhttpd等web服務(wù)器軟件依然會(huì)受到Slowloris攻擊的影響。
3.2.3 慢速POST請(qǐng)求攻擊
慢速POST請(qǐng)求攻擊也是一種針對(duì)web服務(wù)器的慢速http攻擊,由安全研究人員在2010年提出,與Slowloris攻擊不同的是,慢速POST請(qǐng)求攻擊利用緩慢發(fā)送HTTP BODY的方式達(dá)到占用并耗盡web服務(wù)器連接資源的目的。
在HTTP頭部信息中,可以使用Content-Length字段來(lái)指定HTTP消息實(shí)體的傳輸長(zhǎng)度,當(dāng)web服務(wù)器接收到的請(qǐng)求頭部中含有Content-Length字段時(shí),服務(wù)器會(huì)將該字段的值作為 HTTP BODY的長(zhǎng)度,持續(xù)接收數(shù)據(jù)并在達(dá)到Content-Length值時(shí)對(duì)HTTP BODY的數(shù)據(jù)內(nèi)容進(jìn)行處理,利用這個(gè)特性,攻擊者能夠長(zhǎng)時(shí)間與web服務(wù)器保持連接,并逐漸耗盡web服務(wù)器的連接資源。
攻擊者在發(fā)送HTTP POST請(qǐng)求時(shí),在請(qǐng)求頭部中將Content-Length設(shè)置為一個(gè)很大的值,并將HTTP BODY以非常緩慢的速度一個(gè)字節(jié)一個(gè)字節(jié)的向web服務(wù)器發(fā)送,這樣,web服務(wù)器就需要一直維持與客戶端的連接并等待數(shù)據(jù)傳輸結(jié)束,由于Content-Length被設(shè)置成了很大的值,而HTTP BODY的傳輸速度又非常緩慢,攻擊者就可以長(zhǎng)時(shí)間占用這個(gè)連接,通過(guò)間斷性的發(fā)送單字節(jié)的HTTP BODY內(nèi)容,攻擊者就能夠確保連接不因超時(shí)而導(dǎo)致中斷,如果攻擊者利用大量的受控主機(jī)發(fā)送這種緩慢的HTTP POST請(qǐng)求并持續(xù)占用這些連接,就會(huì)耗盡web服務(wù)器的連接資源,導(dǎo)致其他用戶的HTTP請(qǐng)求無(wú)法被處理,造成拒絕服務(wù)。
慢速POST請(qǐng)求攻擊原理如圖:

攻擊者可以使用Slowhttptest等攻擊發(fā)動(dòng)慢速POST請(qǐng)求攻擊,與Slowloris攻擊有所不同,由于HTTP協(xié)議設(shè)計(jì)上的原因,所有的web服務(wù)器軟件都會(huì)受到慢速POST請(qǐng)求攻擊的影響。
3.2.4 數(shù)據(jù)處理過(guò)程攻擊
web服務(wù)器在收到HTTP請(qǐng)求之后,需要檢查并處理其中的數(shù)據(jù),通過(guò)惡意構(gòu)造請(qǐng)求數(shù)據(jù)的內(nèi)容,攻擊者可以顯著的增加數(shù)據(jù)處理過(guò)程中的資源消耗,造成拒絕服務(wù)攻擊。
這里已正則表達(dá)式拒絕服務(wù)攻擊和哈希沖突拒絕服務(wù)攻擊為例進(jìn)行說(shuō)明。
正則表達(dá)式拒絕服務(wù)攻擊又被稱為ReDoS,是安全研究人員在2009年發(fā)現(xiàn)的一種拒絕服務(wù)攻擊方法,在處理請(qǐng)求數(shù)據(jù)時(shí),web應(yīng)用通常會(huì)使用正則表達(dá)式進(jìn)行字符的匹配操作,一部分正則表達(dá)式引擎會(huì)使用一種被稱為非確定性有限狀態(tài)自動(dòng)機(jī)的實(shí)現(xiàn)方式,以便能夠處理復(fù)雜的正則表達(dá)式,例如包含了向后引用或者捕獲括號(hào)的正則表達(dá)式。然而,這種正則引擎的實(shí)現(xiàn)方式也導(dǎo)致了其處理時(shí)間增加,尤其是在確定“否定匹配”時(shí),正則引擎需要對(duì)所有可能的匹配路徑全部進(jìn)行測(cè)試,如果位于web應(yīng)用中的正則表達(dá)式寫(xiě)的不好,需要測(cè)試的匹配路徑數(shù)量會(huì)隨著輸入字符串的長(zhǎng)度呈指數(shù)級(jí)增長(zhǎng),利用惡意構(gòu)造的輸入字符串,攻擊者只需要提交相對(duì)較短的輸入字符串,就可以強(qiáng)制正則引擎處理數(shù)億個(gè)匹配路徑,所需時(shí)間可以達(dá)到幾個(gè)小時(shí)甚至幾天,只需要幾個(gè)這種類似的惡意正則表達(dá)式匹配請(qǐng)求,就能夠完全占用web服務(wù)器的計(jì)算資源,造成web服務(wù)器拒絕服務(wù)。
哈希沖突拒絕服務(wù)攻擊是安全研究人員在2011年提出的一種拒絕服務(wù)攻擊方法,web應(yīng)用在處理請(qǐng)求中的POST數(shù)據(jù)時(shí),通常使用鍵-值對(duì)的方式來(lái)進(jìn)行存儲(chǔ),在PHP、Python、Java等語(yǔ)言中,鍵-值對(duì)的實(shí)質(zhì)是一個(gè)哈希表,web應(yīng)用程序通過(guò)計(jì)算“鍵”的哈希來(lái)獲取其所對(duì)應(yīng)的的“值”。正常情況下,這個(gè)哈希表的哈希沖突較少,因此進(jìn)行查找和插入的速度很快,正常狀態(tài)下的哈希表如圖所示。

如果攻擊者構(gòu)造一組惡意的POST數(shù)據(jù),使得請(qǐng)求中的“鍵”的哈希值全部相同,那么保存POST數(shù)據(jù)的哈希表就會(huì)因此退化成為鏈表 ,對(duì)哈希表的查找和插入等操作規(guī)則變成了對(duì)鏈表的遍歷操作,造成大量的計(jì)算資源被占用,導(dǎo)致拒絕服務(wù)攻擊。如圖所示為大量沖突狀態(tài)下的哈希表。

(本文屬于安全脈搏原創(chuàng)現(xiàn)金獎(jiǎng)勵(lì)計(jì)劃,未經(jīng)允許,嚴(yán)禁轉(zhuǎn)載。)