DoS、DDoS與DRDoS攻擊為三種常見黑客攻擊手法。 DoS全稱是Denial of Service(拒絕/拒止/阻斷服務),而DDoS是Distributed Denial of Service的簡稱(分散式拒絕/拒止/阻斷服務),而DRDoS是Distributed Reflection Denial of Service的簡稱(分散反射式拒絕/拒止/阻斷服務)。 不過這3中攻擊方法最厲害的還是DDoS,DRDoS攻擊雖然是一種新的攻擊方法,但它只是DDoS攻擊的變形,它的唯一不同就是無需占領大量的“肉雞”。3種方法都是利用TCP三次握手的漏洞進行攻擊的,所以對三者的防禦手段比較類似。 DoS攻擊最早出現,比較通俗易懂的說法就是單挑:一對一比較量決定誰的機器性能更好。在過去,電腦性能低、網站主機只有一台,這種手段往往會成功得逞。但是現在的科技飛速發展,一般的網站都有十幾台主機,而且各個主機的CPU性能、內存(記憶體)大小和網絡速度都有飛速的發展,有的網絡帶寬甚至超過了千兆(1000M)級別。這樣我一對一單挑式攻擊就沒有作用了,還有可能毀了自己的電腦,因為攻擊者只有一台電腦。舉個例子,假如你的電腦每秒能夠發送10個攻擊用的數據包,而被你攻擊的主機每秒能夠接受並處理100個數據包,那樣的話,你的攻擊就什麼用處都沒有了。更何況DoS攻擊同樣會大量消耗使你自己的電腦資源(CPU佔用率可以達到90%以上),隨時害死自己的電腦。 不過,電腦速度越來越快,黑客的技術也在發展。經過無數次當機,黑客們終於又找到一種新的DoS攻擊方法,這就是DDoS攻擊。它的原理通俗而言就是圍毆:用很多主機對目標機器一起發動DoS攻擊。雖然是圍毆,但參與攻擊的人數仍然可以是一人,只不過攻擊者是通過自己的電腦在網絡上控制很多的“肉雞”電腦,並且控制這些“肉雞”來發動DDoS攻擊,這就叫做分布式攻擊。還是剛才的那個例子,你的電腦每秒能發送10個數據包,而被攻擊的機器每秒能夠接受100個數據包,這樣你的攻擊肯定不會起作用。如果你用10萬台或更多的電腦每秒發送100萬個以上的數據包來對被攻擊目標的機器進行攻擊的話,對方就無法承受。 DRDoS分布反射式拒絕服務攻擊是DDoS攻擊的變形,它與DDoS的不同之處就是DrDoS不需要在攻擊之前占領大量的“肉雞”。它的攻擊原理和Smurf攻擊原理相近,不過DRDoS是可以在廣域網(WAN)上進行的,而Smurf攻擊是在局域網(LAN)進行的。它的作用原理是基於廣播地址與回應請求的。一台電腦向另一台發送一些特殊的數據包如ping請求時,會接到它的回應;如果向本網絡的廣播地址發送請求包,實際上會到達網絡上所有的電腦,這時就會得到所有電腦的回應。這些回應是需要被接收的電腦處理的,每處理一個就要占用一份系統資源,如果同時接到網絡上所有電腦的回應,接收方的系統是有可能無法承受的,就象遭到了DDoS攻擊一樣。不過黑客向廣播地址發送請求包,所有的電腦得到請求後,卻不會把回應發到黑客那裏,而是發到被攻擊主機。這是因為黑客冒充了被攻擊主機以保護黑客正在使用的電腦。黑客發送請求包所用的軟件是可以偽造源地址的,接到偽造數據包的主機會根據源地址把回應發出去,這當然就是被攻擊主機的地址。黑客同時還會把發送請求包的時間間隔減小,這樣在短時間能發出大量的請求包,使被攻擊主機接到從被欺騙計算機那裏傳來的洪水般的回應,就像遭到了DDoS攻擊導致系統崩潰。黑客借助了網絡中所有計算機來攻擊受害者,而不需要事先去占領這些被欺騙的主機,這就是Smurf攻擊。而DRDoS攻擊正是這個原理,黑客同樣利用特殊的發包工具,首先把偽造了源地址的SYN連接請求包發送到那些被欺騙的計算機上,根據TCP三次握手的規則,這些計算機會向源IP發出SYN+ACK或RST包來響應這個請求。同Smurf攻擊一樣,黑客所發送的請求包的源IP地址是被攻擊主機的地址,這樣受欺騙的主機就都會把回應發到被攻擊主機處,造成被攻擊主機忙於處理這些回應而癱瘓。 DDoS究竟如何攻擊?目前最流行也是最好用的攻擊方法就是使用SYN-Flood進行攻擊,SYN-Flood中文是SYN洪水攻擊。SYN-Flood不會完成TCP三次握手的第三步,也就是不發送確認連接的信息至服務器(伺服器)。這樣,服務器無法完成第三次握手,但服務器不會立即放棄,服務器會不停的重試並等待一定的時間後放棄這個未完成的連接,這段時間叫做SYN timeout,這段時間大約30秒-2分鐘左右。若是一個用戶在連接時出現問題導致服務器的一個線程等待1分鐘並不是什麼大問題,但是若有人用特殊的軟件大量模擬這種情況,那後果就可想而知了。一個服務器若是處理這些大量的半連接信息而消耗大量的系統資源和網絡帶寬,這樣服務器就不會再有空余去處理普通用戶的正常請求(因為客戶的正常請求比例很小)。這樣這個服務器就無法正常工作了,這種攻擊就叫做SYN-Flood攻擊。 其它的攻擊手段包括: IP欺騙式攻擊:黑客偽造大量正常連接主機的用戶IP並發送錯誤數據迫使主機斷開與這些IP的連接,導致擁有這些IP的用戶無法正常訪問主機。 網絡阻塞式攻擊:黑客對主機發送大量數據以阻塞網絡,屬於低級的DDoS攻擊手段。用戶只需ping目標主機就可以判斷是否受到此種攻擊。如果平時ping主機並不會發生找不到主機IP或數據丟失的情況,但現在卻檢測不到主機IP或數據丟失嚴重,又已知網絡線路並沒有中斷,就可以確定是遭到此類攻擊了。 數據爆炸式攻擊:黑客不斷向主機發送數據或日誌文件以使對方的硬盤(硬碟)塞滿數據而無法正常讀取數據,主機管理員也很難在極多記錄的日誌中找到相關的攻擊記錄。 自我連接式攻擊:黑客透過一些舊版本操作係統的漏洞,偽造目標主機的IP與端口並向這個主機發送數據。主機會不停向自己發送TCP請求與連接並不斷消耗資源直至完全崩潰。這些漏洞存在於Win95(winsock v1)、Cisco IOS v.10.x等舊款操作係統。新的操作係統已經堵塞了這一漏洞。 到目前為止,防禦DDoS攻擊仍然困難重重。首先,這種攻擊的特點是它利用了TCP/IP協議的漏洞,除非主機不使用TCP/IP,才有可能完全抵禦住DDoS攻擊。不過這不等於我們完全無法阻擋DDoS攻擊。我們仍然可以採取一些措施來進行一定的防禦: 1. 即時更新服務器/伺服器的系統版本 2. 關閉不必要的服務與端口 3. 限制同時打開的SYN半連接數目 4. 縮短SYN半連接的time out時間 5. 正確設置防火墻 禁止對主機的非開放服務的訪問 限制特定IP地址的訪問(可能會影響正常訪客) 啟用防火墻的DDoS防禦機制 嚴格限制對外開放的服務器的向外訪問 運行端口映射程序禍端口掃描程序,要認真檢查特權端口和非特權端口 6. 認真檢查網絡設備和主機/服務器系統的日誌,只要日誌出現漏洞或是時間變更, 就可能遭到了攻擊 7. 限制在防火墻外與網絡文件共享 這樣會給黑客截取系統文件的機會,主機的信息暴露給黑客,無疑是給了對方入侵的機會 8. 路由器(Router)設置 以Cisco路由器為例 Cisco Express Forwarding(CEF) 使用 unicast reverse-path 訪問控制列表(ACL)過濾 設置SYN數據包流量速率 升級版本過低的ISO 為路由器建立log server 如果你不了解以上的內容,請聯絡主機服務商尋求協助。能夠了解DDoS攻擊的原理,對我們防禦的措施在加以改進,我們就可以擋住很大一部分的DDoS攻擊。而完全防御DDoS攻擊,則有待未來的技術發展去完善漏洞。 術語解釋 TCP/IP協議(Transmission Control Protocol/Internet Protocol):詳細名稱為傳輸控制協議/互聯網互聯協議,又名網絡通訊協議,是Internet最基本的協議、Internet國際互聯網絡的基礎,由網絡層的IP協議和傳輸層的TCP協議組成。TCP/IP 定義了電子設備如何連入互聯網,以及數據如何在它們之間傳輸的標準。協議采用了4層的層級結構,每一層都呼叫它的下一層所提供的網絡來完成自己的需求。通俗而言,TCP負責發現傳輸的問題,一有問題就發出信號,要求重新傳輸,直到所有數據安全正確地傳輸到目的地。而IP是給互聯網的每一台電腦規定一個地址。 SYN(Synchronize sequence numbers):用來建立連接,在連接請求中,SYN=1,ACK=0,連接響應時,SYN=1,ACK=1。即,SYN和ACK來區分Connection Request和Connection Accepted。 RST(Reset the connection):用於復位因某種原因引起出現的錯誤連接,也用來拒絕非法數據和請求。如果接收到RST位時候,通常發生了某些錯誤。 ACK(Acknowledgment field significant):使用1/0二進制算法,為1時表示確認號(Acknowledgment Number)為合法,為0的時候表示數據段不包含確認信息,確認號被忽略。 肉雞(Zombie):它不是可以食用的雞,而是指那些被黑客通過漏洞入侵與控制,並被黑客操縱以參與攻擊的普通用戶電腦,這些用戶將無法控制他們的電腦以避免成為幫兇。其類似《生化危機》中中了T病毒的僵屍。 TCP三次握手:建立連接協議俗稱三次握手 簡單說明: (1)客戶端發送一個帶SYN標誌的TCP報文到服務器。這是三次握手過程中的第1個報文。 (2)服務器端回應客戶端的是三次握手中的第2個報文,這個報文同時帶ACK標誌和SYN標誌。 因此它表示對剛才客戶端SYN報文的回應;同時又標誌SYN給客戶端, 詢問客戶端是否準備好進行數據通訊。 (3)客戶必須再次回應服務段一個ACK報文,這是3個報文。 詳細說明: 假設我們要準備建立連接,服務器正處於正常的接聽狀態。 第一步:我們也就是客戶端發送一個帶SYN位的請求,向服務器表示需要連接,假設請求包的序列號為10,那麼則為:SYN=10,ACK=0,然後等待服務器的回應。 第二步:服務器接收到這樣的請求包後,查看是否在接聽的是指定的端口,如果不是就發送RST=1回應,拒絕建立連接。如果接收請求包,那麼服務器發送確認回應,SYN為服務器的一個內碼,假設為100,ACK位則是客戶端的請求序號加1,本例中發送的數據是:SYN=100,ACK=11,用這樣的數據回應給我們。向我們表示,服務器連接已經準備好了,等待我們的確認。這時我們接收到回應後,分析得到的信息,準備發送確認連接信號到服務器。 第三步:我們發送確認建立連接的信息給服務器。確認信息的SYN位是服務器發送的ACK位,ACK位是服務器發送的SYN位加1。即:SYN=11,ACK=101。 這樣我們的連接就建立起來了。
|