?這里是Themberfue
今天我們不聊別的,我們聊聊著名的網絡攻擊手段之一的 DDoS,看看其背后的技術細節。
DoS?
- 了解 DDoS 前,先來講講 DoS 是什么,此 DoS 而不是 DOS 操作系統啊。
- 1996年9月6日,世界第三古老的網絡服務提供商 Panix 的服務器受到每秒高達 150 次的異常連接攻擊,由于服務器無法正常分辨哪個是正常用戶的連接,而疲于這些異常連接,從而導致無法處理正常用戶的連接,這次攻擊被認為是首個 DoS 攻擊的目標。
- DoS,也就是?Denial of Service,即拒絕服務,任何對服務的干涉,使得其可用性降低或者失去可用性均稱為拒絕服務。例如一個計算機系統崩潰或其帶寬耗盡或其硬盤被填滿,導致其不能提供正常的服務,就構成拒絕服務。
- 通過占用網絡服務資源讓服務器應接不暇,從而拒絕正常的業務流量。其實對網絡帶寬進行的消耗性攻擊只是拒絕服務攻擊的一小部分,只要能夠對目標造成麻煩,使某些服務被暫停甚至主機死機,都屬于拒絕服務攻擊。
- DoS 攻擊可以具體分成三種形式:帶寬消耗型、資源消耗型、漏洞觸發型。前兩者都是透過大量合法或偽造的請求占用大量網絡以及器材資源,以達到癱瘓網絡以及系統的目的。而漏洞觸發型,則是觸發漏洞導致系統崩潰癱瘓服務。
DDoS?
- DDoS,也就是 Distributed Denial of Service,是 DoS 攻擊的分布式版本,分布式拒絕服務。通俗來說,就是群毆,一臺設備持續對一臺服務器的攻擊有限,而我們引入多臺設備一起攻擊一臺服務器,其攻擊的效果是顯而易見的。
- 發起攻擊的網絡一般稱為僵尸網絡(BotNet),每個僵尸可以是一臺個人電腦,一臺服務器,甚至是一部智能手機。這些 “僵尸” 的獲得可以是黑客通過病毒或木馬感染個人設備,亦或是加錢購買多臺設備。
- 攻擊者控制大量受害設備(如被感染的計算機、物聯網設備)形成僵尸網絡(Botnet),讓它們同時向目標服務器發送大量流量、請求或惡意數據。最終導致服務器資源(如CPU、內存、帶寬)耗盡,導致無法響應正常用戶請求。網絡擁塞,影響服務器和用戶之間的通信。
- 通過之前的學習我們知道,OSI五層網絡模型,數據從組包到拆包所經歷的每一層都有機會發動 DDoS 攻擊。
帶寬消耗型攻擊
DDoS帶寬消耗攻擊可以分為兩個不同的層次;洪泛攻擊或放大攻擊。洪泛攻擊的特點是利用僵尸程序發送大量流量至受損的受害者系統,目的在于堵塞其寬帶。放大攻擊與其類似,是通過惡意放大流量限制受害者系統的寬帶;其特點是利用僵尸程序通過偽造的源IP(即攻擊目標IP)向某些存在漏洞的服務器發送請求,服務器在處理請求后向偽造的源IP發送應答,由于這些服務的特殊性導致應答包比請求包更長,因此使用少量的寬帶就能使服務器發送大量的應答到目標主機上。
ICMP洪水攻擊(ICMP floods)
ICMP洪水攻擊是通過向未良好設置的路由器發送廣播信息占用系統資源的做法,利用 ICMP(如 ping)發送大量請求,導致網絡帶寬耗盡。
- 霸占服務器的網絡帶寬資源是在網絡層發動 DDoS 攻擊,我們只需要向一臺服務器發送大量的 IP 協議數據包,就可以慢慢地消耗掉對方的網絡帶寬。
- 比如用大家耳熟能詳的 ping 工具就可以發動一次 “攻擊”,ping 產生的是 ICMP 協議包,ICMP 是 IP 協議中用來進行差錯控制的一個協議,全程為?Internet?Control?Message?Protocol,即互聯網控制消息協議,其本質上還是一個 IP 協議數據包,這種攻擊方式被稱為?ICMP洪水攻擊(ICMP floods)
UDP洪水攻擊(User Datagram Protocol floods)
- UDP(用戶數據報協議)是一種無連接協議,當數據包通過 UDP 發送時,所有的數據包在發送和接收時不需要進行握手驗證。當大量 UDP 數據包發送給受害系統時,可能會導致帶寬飽和從而使得合法服務無法請求訪問受害系統。遭受 DDoS UDP 洪泛攻擊時,UDP 數據包的目的端口可能是隨機或指定的端口,受害系統將嘗試處理接收到的數據包以確定本地運行的服務。如果沒有應用程序在目標端口運行,受害系統將對源 IP 發出 ICMP 數據包,表明 “目標端口不可達” 。某些情況下,攻擊者會偽造源 IP 地址以隱藏自己,這樣從受害系統返回的數據包不會直接回到僵尸主機,而是被發送到被偽造地址的主機。有時 UDP 洪泛攻擊也可能影響受害系統周圍的網絡連接,這可能導致受害系統附近的正常系統遇到問題。然而,這取決于網絡體系結構和線速。
- 從上述介紹我們得知,這是在 傳輸層 中發動的 DDoS 攻擊,通過發送大量的 UDP 數據包,也可以起到占用網絡帶寬的效果,但這里就有一個漏洞了,發送 傳輸層 的數據包,勢必會經過 網絡層,那么這就會暴露攻擊設備的 IP 地址,從而被對方封禁。所以攻擊者一般都會偽造 IP 地址隱藏自己。
- 單純地隱藏 IP 地址似乎沒那么 “有趣”,所以人們發明了一種更加有趣的方式,反射攻擊,既然可以偽造 IP,那么就不必拘泥于偽造源 IP,同樣可以偽造 目的IP,從而達到 “借刀殺人” 的效果。攻擊者偽造受害者的 IP 地址,也就是將源 IP 偽造為受害者的 IP 地址,攻擊者向多個開放的服務器發送請求(如 DNS、NTP、Memcached),這些服務器會把響應數據(通常比請求數據大得多)直接發送到受害者,受害者被大量流量沖擊,導致網絡擁塞、服務不可用。這些開放的服務器被稱為 “反射器”。
- 在上述基礎上,人們還發明了一種更加厲害的,放大攻擊,我們都知道 DNS 服務器是用來解析域名的,同時 DNS 查詢通常使用 UDP 這個不驗證來源的傳輸協議,綜合來看,DNS 就是一個很好的放大器,因為一次 DNS 請求,返回的數據往往大于請求的數據,這里有一個 帶寬放大因子(BAF) 的概念,一般一個 60 字節的請求數據可以返回 3000 字節的響應數據,那么 BAF = 3000 / 60 = 50,從而產生 50 倍的放大效果。利用開放的 DNS 服務器,把小請求轉化為大響應,并把這些大響應流量回發到受害者。
資源消耗型攻擊
TCP洪水攻擊
- 因為 TCP 協議有連接的概念,所以還可以攻擊服務器的連接資源,服務器和客戶端每次建立一個 TCP 連接時,需要經歷三次握手,然后把連接信息放入連接表中維護,而連接表的大小是有限的,我們可以讓發起攻擊的設備直接發起大量的 TCP 連接,從而占滿服務器的這個連接表,而無法響應后續的 TCP 連接請求,這種直接的方式被稱為 TCP 洪水攻擊(TCP Flood)。
- 因為有三次握手的存在,所以 TCP 洪水無法通過偽造 IP 地址來隱藏自己。在建立連接時,如果我們在第一次握手中偽造了 IP 地址,那么服務器向客戶端發送的第二次握手就無法到達,因此連接無法建立,連接表的信息就沒有變多。
協議分析攻擊(SYN Flood,SYN洪水)
- 傳送控制協議(TCP)同步(SYN)攻擊。TCP 進程通常包括發送者和接受者之間在數據包發送之前建立的完全信號交換。啟動系統發送一個 SYN 請求,接收系統返回一個帶有自己 SYN 請求的 ACK(確認)作為交換。發送系統接著傳回自己的 ACK 來授權兩個系統間的通訊。若接收系統發送了 SYN 數據包,但沒接收到 ACK,接受者經過一段時間后會再次發送新的 SYN 數據包。接受系統中的處理器和內存資源將存儲該 TCP SYN 的請求直至超時。DDoS TCP SYN 攻擊也被稱為“資源耗盡攻擊”,它利用 TCP 功能將僵尸程序偽裝的 TCP SYN 請求發送給受害服務器,從而飽和服務處理器資源并阻止其有效地處理合法請求。它專門利用發送系統和接收系統間的三向信號交換來發送大量欺騙性的原 IP 地址?TCP SYN 數據包給受害系統。最終,大量 TCP SYN 攻擊請求反復發送,導致受害系統內存和處理器資源耗盡,致使其無法處理任何合法用戶的請求。
- 再簡單說一下,攻擊者只發送 SYN 不作回答,由于 TCP 的重傳機制,受害服務器會觸發超時重傳多次發送 SYN + ACK 直到超時,但問題來了,這時候受害服務器會不斷的向攻擊者發送 SYN + ACK,比如重傳了 10 次,那么攻擊者每攻擊一次,受害者就會回擊 10 次,所謂殺敵 1k 自損 1w 也不過如此,所以攻擊者一般會偽造 SYN 的源 IP 地址,比如一個不存在的 IP 或者 是一個倒霉蛋的 IP。
- 同樣的思路,在 TCP 協議中也可以通過反射發起攻擊,如上所述,向各個反射器發送 SYN,并把發件地址偽造成受害者的 IP,這樣大量的 SYN + ACK 數據包就會從各個反射器上涌入受害者,當然這種攻擊方式因為無法在目標上建立連接,所以并不屬于資源消耗型攻擊,還是屬于帶寬消耗型攻擊。
LAND攻擊
- LAND攻擊(局域網拒絕服務攻擊,Local Area Network Denial attack)這種攻擊方式與 SYN Flood?類似,不過在 LAND 攻擊包中的源地址和目標地址都是攻擊對象的 IP。這種攻擊會導致被攻擊的機器死循環,最終耗盡資源而死機。
RST洪水攻擊(RST Flood)
- 在 TCP 協議中,一般用四次揮手結束連接,但為了防止出現異常,一方可以發送一個 RST 數據包強制切斷連接,這樣我們可以讓攻擊設備不斷的嘗試偽造各種 IP 地址,并發送 RST 數據包進行 “盲打”,一旦 IP 和其他的一些配置和某個正常用戶的匹配上,就能夠切斷正常用戶與服務器之間的連接。
- 這種攻擊方式跟針對用戶,比如在一場網絡游戲對局中,在獲悉對手 IP 地址之后,就可以不斷切斷對方的游戲設備和服務器的連接,從而干擾該用戶的正常游戲。
HTTP Flood(HTTP 洪泛攻擊)
- 不論是利用 IP,UDP 還是 TCP 協議攻擊,針對的都是網絡和連接資源,還有一種直接針對服務器內部資源的攻擊方式,消耗目標的計算和 IO 資源。
- 通過之前的學習我們知道,客戶端向服務器發送請求,服務器按照客戶端的需求查詢隨后計算出相應的數據并返回給客戶端,作為第五層的應用層,應用層通常使用的是 HTTP 協議。
- 所以我們可以對一個站點發送一個 HTTP 洪水攻擊,比如利用站點的搜索功能,不斷生成大量的關鍵詞送入查詢地址,因為 HTTP 請求作為用戶直接發起的涉及具體業務的請求,服務器在收到請求需要根據請求而來的數據進行像數據庫查詢這樣的 IO 操作,所以這樣的攻擊手法會對目標產生更大的消耗。
- 當然,HTTP 洪水也有問題,不能偽造 IP 地址,因為 HTTP 協議實際上是基于 TCP 協議的,需要經歷三次握手的過程,所以常見的方法借助網絡代理主機,得到不同的真實 IP 發起攻擊。
CC攻擊
- CC攻擊( Distributed HTTP flood,分布式HTTP洪水攻擊)向受害服務器發送大量貌似合法的請求(通常為 HTTP?GET )。攻擊者創造性地使用代理服務器,利用廣泛可用的免費代理服務器發動DDoS攻擊。許多免費代理服務器支持匿名,這使追蹤變得非常困難。
- 2004年,一位匿名為 KiKi 的中國黑客開發了一種用于發送 HTTP 請求的 DDoS 攻擊工具以攻擊名為 “Collapsar” 的NSFOCUS防火墻,因此該黑客工具被稱為 “Challenge Collapsar”(挑戰黑洞,簡稱CC),這類攻擊被稱作?“CC攻擊”。
應用程序級洪水攻擊(Application level floods)
- 與前面敘說的攻擊方式不同,應用程序級洪水攻擊主要是針對應用軟件層的,也就是高于?OSI?的。它同樣是以大量消耗系統資源為目的,通過向IIS這樣的網絡服務程序提出無節制的資源申請來破壞正常的網絡服務。
漏洞觸發型
這類攻擊手法,透過嘗試觸發緩存溢出等漏洞,使操作系統發生核心錯誤或藍屏死機,達到拒絕服務攻擊。
死亡之ping(ping of death)
- 死亡之Ping是產生超過 IP 協議能容忍的數據包數,若系統沒有檢查機制,就會宕機。
淚滴攻擊
- 每個資料要發送前,該數據包都會經過切割,每個小切割都會記錄位移的信息,以便重組,但此攻擊模式就是捏造位移信息,造成重組時發生問題,造成錯誤。
防御方式
拒絕服務攻擊的防御方式通常為入侵檢測,流量過濾和多重驗證,旨在堵塞網絡帶寬的流量將被過濾,而正常的流量可正常通過。
- 搗毀僵尸網絡,并讓用戶做好個人防護,避免被感染成僵尸設備是一種很好的方法,但這是需要長期持續進行的方案。
- 從 DDoS 的攻擊原理上我們可以看出來,偽造 IP 地址是 DDoS 攻擊的核心技術之一,一旦攻擊者無法偽造 IP 地址,那機會就形同 冢中枯骨,強弩之末,而治理偽造 IP 的方法并不復雜。
- 我們舉兩個典型的在技術層面上根治 DDoS 攻擊的方法。
激進
網絡設備 IP 過濾
- 現代互聯網的下游,也就是用戶設備接入的這一端,設備通過路由(或者多個路由網關)接入 ISP(互聯網服務商)。
- 所以只要讓路由設備檢測 IP,把源地址 IP 不屬于本路由所在的網段的數據全部過濾掉。這樣試圖偽造 IP 的流量就無法發出。
分布式過濾
- 我們知道,龐大的互聯網中不同的網段依靠路由把彼此連接。一個數據從 甲 發送到 乙,它的 IP 可以偽造成 丙,但是,其所經過的真實路徑不可能作假。
- 從上圖便可得知,從丙到乙的數據不可能經過 路由A,但是偽造 IP 的數據從甲發送到乙卻經過了 路由A,如果路由能根據 IP 地址的路徑邏輯檢測出矛盾,那么就可以過濾到這樣的流量,從而消滅偽造 IP 的伎倆。
- 上述兩種方式都涉及到用戶、服務商、設備商,甚至監管部門的等多方的技術方案,那就不能只是一個技術問題,出于商業上投入產出的考慮,往往是木已成舟,積重難返。
- 這兩種方案很難被執行,只有有一定影響力的大型企業和機構才能撬動這種涉及全球的多方合作,對于中小企業,甚至是剛起步的創業者來說,并不現實。
保守
DDoS 攻擊的可怕之處在于第一個 D(Distributed)——分布式,當一個僵尸網絡對目標發起攻擊時,很難處理這些來自四面八方的流量。我們正常用戶何嘗不能不能聯合起來,把一個網絡服務的流量分散到不同的地方,從而稀釋攻擊流量。
CDN
- 沒錯,CDN 又來了,CDN 即 內容分發網絡,把一些相對靜態的資源作為緩存分發給各個 CDN 節點,在全世界各地都設置一些 CDN 節點,用戶在請求的時候從最近的節點返回,這樣就在一定程度上緩解了 DDoS 攻擊。
- CDN 能緩解 HTTP Flood、CC 攻擊 等......
- 當然,CDN 的緩解作用比較有限。
流量清洗
目前還有一種比較主流的,并有一些廠商專門為此開發產品的方案——流量清洗,當獲取到流量時,通過 DDoS 防御軟件的處理,將正常流量和惡意流量區分開,正常的流量則回注回客戶網站,反之則屏蔽。這樣一來可站點能夠保持正常的運作,僅僅處理真實用戶訪問網站帶來的合法流量。
- 我們可以在服務器前架設一臺流量清洗設備,這個設備就像一個身高馬大的保鏢或秘書,幫助我們對抗 DDoS 流量。
- 比如,在面對 TCP 協議的 SYN 洪水的 DDoS 攻擊時,客戶端發起的 SYN 先經過清洗設備,由清洗設備回復?SYN + ACK,如果對方應答了,那說明是正常流量,清洗設備再把本次連接交給后方的服務器正常通信,如果對方不應答,則觸發超時重傳,重傳一定次數后斷開連接。
- 因為清洗設備人高馬大,其作為專門應對攻擊的角色,對連接資源做了極大的專門的優化,從而能應對極其海量的連接請求,所以攻擊者想要通過 SYN 洪水打垮它非常困難
- 再比如威脅極大的 HTTP 洪水攻擊,正常來說,一個 HTTP 請求,很難用傳統的方式檢測出其是正常流量還是惡意流量,但清洗設備往往會提供專業的流量清洗平臺,這些專業做流量清洗的服務商通過多年和 DDoS 攻擊的對抗,積累了大量的經驗和技術,由于 HTTP 協議無法偽造 IP 地址,所以通過多年的數據積累建立 IP 信用庫,那些經常發起攻擊的、臭名昭著的 IP 發來的流量就會被過濾掉,順便將這些 IP 放進黑名單或者封禁異常 IP,這有點像安卓手機的來點標記,這是流量清洗廠商在數據積累上的優勢。
- 亦或者,惡意流量由于是通過程序自動發出,而不是人類的操作,所以利用算法對流量進行模式識別就可以被檢測出來,這是流量清洗廠商在技術上的優勢。
防火墻
- 防火墻可以設置規則,例如允許或拒絕特定通訊協議,端口或 IP 地址。當攻擊從少數不正常的 IP 地址發出時,可以簡單的使用拒絕規則阻止一切從攻擊源 IP 發出的通信。
- 復雜攻擊難以用簡單規則來阻止,例如 80 端口(網頁服務)遭受攻擊時不可能拒絕端口所有的通信,因為其同時會阻止合法流量。此外,防火墻可能處于網絡架構中過后的位置,路由器可能在惡意流量達到防火墻前即被攻擊影響。然而,防火墻能有效地防止用戶從啟動防火墻后的計算機發起攻擊。
網絡交換設備自有能力
- 大多數交換機有一定的速度限制和訪問控制能力。有些交換機提供自動速度限制、流量整形、后期連接、深度包檢測和假IP過濾功能,可以檢測并過濾拒絕服務攻擊。例如SYN 洪水攻擊可以通過后期連接加以預防。基于內容的攻擊可以利用深度包檢測阻止。
- 和交換機類似,路由器也有一定的速度限制和訪問控制能力。
黑洞引導
- 黑洞引導指將所有受攻擊計算機的通信全部發送至一個?“黑洞”(空接口或不存在的計算機地址)或者有足夠能力處理洪流的網絡設備商,以避免網絡受到較大影響。
- ?不論怎樣,DDoS 作為一種歷史悠久,但破壞能力巨大的黑客攻擊手段,時至今日還是無法被徹底解決。
- 或許你可以說 DDoS 攻擊源自互聯網通訊架構在設計之初考慮的缺失,而人們現在又卻反壯士斷腕的決心從根本上消滅它。
- 這種破壞與對抗將長久的存在于互聯網世界之中,我們對抗的永遠也不是技術上的不確定性,而是設計該技術的人類的不確定性,而我們能做的只是做好防護,保持警惕!!
- ??????本文章部分文案參考——DDoS技術鑒賞、Wiki百科