提到DDoS攻擊,可能大家想到的是大流量高新建,如Cloudflare在2023 年第一季度 DDoS 威脅報(bào)告中指出,最大的一次攻擊峰值高達(dá)每秒7100萬個(gè)請(qǐng)求(RPS),另外觀察到高達(dá)1.3Tbps的單次DDoS攻擊。實(shí)際上針對(duì)HTTP服務(wù)器,有另一種DDoS攻擊方法,反其道而行之,這種攻擊方法稱之為慢速攻擊。
HTTP慢速攻擊是利用HTTP正常交互流程,以極低的速度往服務(wù)器發(fā)送HTTP請(qǐng)求,長時(shí)間占用HTTP服務(wù)器的資源而不釋放,當(dāng)HTTP服務(wù)器的并發(fā)連接數(shù)達(dá)到上限時(shí),服務(wù)器將無法接受新的請(qǐng)求,從而導(dǎo)致拒絕服務(wù)。
目前常見的HTTP慢速攻擊主要分為以下三種:
Slowloris(slow headers)
攻擊原理
客戶端每隔一段時(shí)間如5s發(fā)送一個(gè)HTTP頭部,由于沒有 \r\n\r\n(0d0a0d0a)結(jié)尾,服務(wù)端認(rèn)為頭部沒有傳送完成,會(huì)一直等待客戶端發(fā)送數(shù)據(jù),連接一直被占用。當(dāng)這種請(qǐng)求占用完服務(wù)端的所有資源后,該服務(wù)端將無法提供正常的服務(wù)。
Slow HTTP POST(Slow Body)
攻擊原理
將Content-Length設(shè)置為一個(gè)較大的值(如抓包中的2000字節(jié)),然后以每隔一段時(shí)間去發(fā)送很小的內(nèi)容(如抓包中每次發(fā)送一個(gè)test1234),從而和服務(wù)器保持長時(shí)間連接,當(dāng)這種攻擊數(shù)量大的時(shí)候,服務(wù)器就會(huì)拒絕服務(wù),從而導(dǎo)致正常業(yè)務(wù)無法進(jìn)行。
Slow Read attack
攻擊原理
客戶端發(fā)送Get請(qǐng)求,同時(shí)設(shè)置windows size為65535,當(dāng)Get命令被服務(wù)器接收后,服務(wù)器開始發(fā)送數(shù)據(jù),windows size同樣也為65535。以下列Slow Read Attack的抓包為例,將windows size被刻意設(shè)置為很小的值,如512,然后依次遞減,這樣就會(huì)造成服務(wù)器需要很長時(shí)間發(fā)送客戶端所需數(shù)據(jù),從而達(dá)到長時(shí)間占用服務(wù)器資源的目的。
防御方法
設(shè)定閾值,當(dāng)某個(gè)地址的每秒并發(fā)連接數(shù)超過閾值時(shí),即觸發(fā)HTTP報(bào)文檢查,如果檢測(cè)到該IP連續(xù)發(fā)送的多個(gè)請(qǐng)求報(bào)文均沒有\(zhòng)r\n\r\n(0d0a0d0a)結(jié)束標(biāo)識(shí),則認(rèn)定為攻擊,將該IP加入黑名單,同時(shí)斷開該IP的所有連接。同時(shí)針對(duì)HTTP頭部傳輸時(shí)間進(jìn)行限制,比如頭部傳輸時(shí)間超過10s,則主動(dòng)斷開連接,要求客戶端重連。
由于安全設(shè)備有閾值的設(shè)置,當(dāng)攻擊的速率超過設(shè)定閾值,攻擊IP會(huì)被加入黑名單,此時(shí)攻擊的TCP連接將無法完成?梢酝ㄟ^以上不同session的統(tǒng)計(jì)數(shù)據(jù)來確認(rèn)是在HTTP攻擊報(bào)文階段被安全設(shè)備攔截還是TCP連接完全沒建立成功