1 DDoS:Distributed Denial of Service
DDoS攻擊,即分布式拒絕服務(wù)攻擊,是目前黑客經(jīng)常采用而難以防范的攻擊手段。黑客一般是通過制作僵尸網(wǎng)絡(luò)的方式攻擊域名,即在計(jì)算機(jī)中植入特定的惡意程序控制大量“肉雞”(指可以被黑客遠(yuǎn)程控制的機(jī)器),然后通過相對(duì)集中的若干計(jì)算機(jī)向相對(duì)分散的大量“肉雞”發(fā)送攻擊指令,引發(fā)短時(shí)間內(nèi)流量劇增。主要目的是讓指定目標(biāo)無(wú)法提供正常服務(wù),甚至從互聯(lián)網(wǎng)上消失,是目前最強(qiáng)大、最難防御的攻擊之一。
按照發(fā)起的方式,可分為三類:
第一類以力取勝,海量數(shù)據(jù)包從互聯(lián)網(wǎng)的各個(gè)角落蜂擁而來,堵塞IDC入口,讓各種強(qiáng)大的硬件防御系統(tǒng)、快速高效的應(yīng)急流程無(wú)用武之地。這種類型的攻擊典型代表是ICMPFlood和UDPFlood,現(xiàn)在已不常見。
第二類以巧取勝,靈動(dòng)而難以察覺,每隔幾分鐘發(fā)一個(gè)包甚至只需要一個(gè)包,就可以讓豪華配置的服務(wù)器不再響應(yīng)。這類攻擊主要是利用協(xié)議或者軟件的漏洞發(fā)起,例如Slowloris攻擊、Hash沖突攻擊等,需要特定環(huán)境機(jī)緣巧合下才能出現(xiàn)。
第三類是上述兩種的混合,輕靈渾厚兼而有之,既利用了協(xié)議、系統(tǒng)的缺陷,又具備了海量的流量,例如SYNFlood攻擊、DNSQuery Flood攻擊,是當(dāng)前的主流攻擊方式。
2 攻擊方式
2.1 SYN Flood
SYN Flood攻擊利用了TCP三次握手的缺陷:攻擊者偽裝大量的IP地址給服務(wù)器發(fā)送SYN報(bào)文,由于偽造的IP地址幾乎不可能存在,也就幾乎沒有設(shè)備會(huì)給服務(wù)器返回任何應(yīng)答了。因此,服務(wù)器將會(huì)維持一個(gè)龐大的等待列表,不停地重試發(fā)送SYN+ACK報(bào)文,同時(shí)占用著大量的資源無(wú)法釋放。更為關(guān)鍵的是,被攻擊服務(wù)器的SYN_RECV隊(duì)列被惡意的數(shù)據(jù)包占滿,不再接受新的SYN請(qǐng)求,合法用戶無(wú)法完成三次握手建立起TCP連接。也就是說,這個(gè)服務(wù)器被SYN Flood拒絕服務(wù)了。
2.2 DNS Query Flood
DNS Query Flood就是攻擊者操縱大量傀儡機(jī)器,對(duì)目標(biāo)發(fā)起海量的域名查詢請(qǐng)求。為了防止基于ACL的過濾,必須提高數(shù)據(jù)包的隨機(jī)性。常用的做法是UDP層隨機(jī)偽造源IP地址、隨機(jī)偽造源端口等參數(shù)。在DNS協(xié)議層,隨機(jī)偽造查詢ID以及待解析域名。隨機(jī)偽造待解析域名除了防止過濾外,還可以降低命中DNS緩存的可能性,盡可能多地消耗DNS服務(wù)器的CPU資源。
2.3 HTTP Flood
HTTP Flood是針對(duì)Web服務(wù)在第七層協(xié)議(應(yīng)用層)發(fā)起的攻擊。它的巨大危害性主要表現(xiàn)在三個(gè)方面:發(fā)起方便、過濾困難、影響深遠(yuǎn)。
HTTP Flood攻擊通過端口掃描程序在互聯(lián)網(wǎng)上尋找匿名的HTTP代理或者SOCKS代理,攻擊者通過匿名代理對(duì)攻擊目標(biāo)發(fā)起HTTP請(qǐng)求。匿名代理是一種比較豐富的資源,花幾天時(shí)間獲取代理并不是難事,因此攻擊容易發(fā)起而且可以長(zhǎng)期高強(qiáng)度的持續(xù)。
HTTP Flood攻擊在HTTP層發(fā)起,極力模仿正常用戶的網(wǎng)頁(yè)請(qǐng)求行為,與網(wǎng)站業(yè)務(wù)緊密相關(guān),安全廠商很難提供一套通用的且不影響用戶體驗(yàn)的方案。
HTTP Flood攻擊會(huì)引起嚴(yán)重的連鎖反應(yīng),不僅僅是直接導(dǎo)致被攻擊的Web前端響應(yīng)緩慢,還間接攻擊到后端的Java等業(yè)務(wù)層邏輯以及更后端的數(shù)據(jù)庫(kù)服務(wù),增大它們的壓力,甚至對(duì)日志存儲(chǔ)服務(wù)器都帶來影響。
2.4 慢速連接攻擊:Sloworis
攻擊者在HTTP請(qǐng)求頭中將Connection設(shè)置為Keep-Alive,要求Web Server保持TCP連接不要斷開,隨后緩慢地每隔幾分鐘發(fā)送一個(gè)key-value格式的數(shù)據(jù)到服務(wù)端,如a:b,導(dǎo)致服務(wù)端認(rèn)為HTTP頭部沒有接收完成而一直等待。如果攻擊者使用多線程或者傀儡機(jī)來做同樣的操作,服務(wù)器的Web容器很快就被攻擊者占滿了TCP連接而不再接受新的請(qǐng)求。
3 防御
3.1 SYN Flood防御
SYN Flood攻擊大量消耗服務(wù)器的CPU、內(nèi)存資源,并占滿SYN等待隊(duì)列。相應(yīng)的,我們修改內(nèi)核參數(shù)即可有效緩解。主要參數(shù)如下:
net.ipv4.tcp_syncookies = 1 #啟用SYN Cookie
net.ipv4.tcp_max_syn_backlog = 8192 #設(shè)置SYN最大隊(duì)列長(zhǎng)度
net.ipv4.tcp_synack_retries = 2 #設(shè)置SYN+ACK最大重試次數(shù)
SYN Cookie的作用是緩解服務(wù)器資源壓力。啟用之前,服務(wù)器在接到SYN數(shù)據(jù)包后,立即分配存儲(chǔ)空間,并隨機(jī)化一個(gè)數(shù)字作為SYN號(hào)發(fā)送SYN+ACK數(shù)據(jù)包。然后保存連接的狀態(tài)信息等待客戶端確認(rèn)。啟用SYN Cookie之后,服務(wù)器不再分配存儲(chǔ)空間,而且通過基于時(shí)間種子的隨機(jī)數(shù)算法設(shè)置一個(gè)SYN號(hào),替代完全隨機(jī)的SYN號(hào)。發(fā)送完SYN+ACK確認(rèn)報(bào)文之后,清空資源不保存任何狀態(tài)信息。直到服務(wù)器接到客戶端的最終ACK包,通過Cookie檢驗(yàn)算法鑒定是否與發(fā)出去的SYN+ACK報(bào)文序列號(hào)匹配,匹配則通過完成握手,失敗則丟棄。
tcp_max_syn_backlog則是使用服務(wù)器的內(nèi)存資源,換取更大的等待隊(duì)列長(zhǎng)度,讓攻擊數(shù)據(jù)包不至于占滿所有連接而導(dǎo)致正常用戶無(wú)法完成握手。
net.ipv4.tcp_synack_retries是降低服務(wù)器SYN+ACK報(bào)文重試次數(shù),盡快釋放等待資源。
ps:可能消耗服務(wù)器更多的內(nèi)存資源,甚至影響正常用戶建立TCP連接,需要評(píng)估服務(wù)器硬件資源和攻擊大小謹(jǐn)慎設(shè)置。
3.2 HTTP Flood防御
HTTP Flood攻擊防御主要通過緩存的方式進(jìn)行,盡量由設(shè)備的緩存直接返回結(jié)果來保護(hù)后端業(yè)務(wù)。大型的互聯(lián)網(wǎng)企業(yè),會(huì)有龐大的CDN節(jié)點(diǎn)緩存內(nèi)容。當(dāng)高級(jí)攻擊者穿透緩存時(shí),清洗設(shè)備會(huì)截獲HTTP請(qǐng)求做特殊處理。最簡(jiǎn)單的方法就是對(duì)源IP的HTTP請(qǐng)求頻率做統(tǒng)計(jì),高于一定頻率的IP地址加入黑名單。這種方法過于簡(jiǎn)單,容易帶來誤殺,并且無(wú)法屏蔽來自代理服務(wù)器的攻擊,因此逐漸廢止,取而代之的是JavaScript跳轉(zhuǎn)人機(jī)識(shí)別方案。HTTP Flood是由程序模擬HTTP請(qǐng)求,一般來說不會(huì)解析服務(wù)端返回?cái)?shù)據(jù),更不會(huì)解析JS之類代碼。因此當(dāng)清洗設(shè)備截獲到HTTP請(qǐng)求時(shí),返回一段特殊JavaScript代碼,正常用戶的瀏覽器會(huì)處理并正常跳轉(zhuǎn)不影響使用,而攻擊程序會(huì)攻擊到空處。
3.3 DNS Flood防御
DNS攻擊防御也有類似HTTP的防御手段,第一方案是緩存。其次是重發(fā),可以是直接丟棄DNS報(bào)文導(dǎo)致UDP層面的請(qǐng)求重發(fā),可以是返回特殊響應(yīng)強(qiáng)制要求客戶端使用TCP協(xié)議重發(fā)DNS查詢請(qǐng)求。
3.4 慢速連接攻擊防御
Slowloris攻擊防御比較簡(jiǎn)單,主要方案有兩個(gè):
第一個(gè)是統(tǒng)計(jì)每個(gè)TCP連接的時(shí)長(zhǎng)并計(jì)算單位時(shí)間內(nèi)通過的報(bào)文數(shù)量即可做精確識(shí)別。一個(gè)TCP連接中,HTTP報(bào)文太少和報(bào)文太多都是不正常的,過少可能是慢速連接攻擊,過多可能是使用HTTP1.1協(xié)議進(jìn)行的HTTP Flood攻擊,在一個(gè)TCP連接中發(fā)送多個(gè)HTTP請(qǐng)求。
第二個(gè)是限制HTTP頭部傳輸?shù)淖畲笤S可時(shí)間。超過指定時(shí)間HTTPHeader還沒有傳輸完成,直接判定源IP地址為慢速連接攻擊,中斷連接并加入黑名單。
4 新型攻擊方式
DNS 反射/放大攻擊利用互聯(lián)網(wǎng)上的DNS基礎(chǔ)結(jié)構(gòu)來放大攻擊能夠產(chǎn)生的通信量。DNS是用于主機(jī)名到IP地址解析的互聯(lián)網(wǎng)基礎(chǔ)設(shè)施的重要組成部分。DNS反射/放大攻擊通過使用多個(gè)客戶端肉機(jī)(bots僵尸肉機(jī))將查詢發(fā)送到多個(gè)開放DNS解析器中,從而使大量的攻擊流量從廣泛分布源中產(chǎn)生(在Spamhaus襲擊期間,使用了超過30K開放解析器)。
——Rango Chen