http://blog.c114.net/html/15/562315-76242.html
http://blog.c114.net/html/15/562315-76243.html
http://blog.c114.net/html/15/562315-76245.html
DoS 的英文全稱是 Denial of Service ,也就是「拒絕服務」的意思。廣義的 DOS 攻擊是指:「任何導致被攻擊的服務器不能正常提供服務的攻擊方式」。
DoS 攻擊和其他類型的攻擊不大一樣 攻擊者並不是去尋找進入內部網絡的入口 而是去阻止合法的用戶訪問資源或路由器。
DOS 攻擊的基本原理是設法使被攻擊服務器充斥大量要求回復的信息,消耗網絡帶寬或系統資源導致網絡或系統不勝負荷以至於癱瘓而寬或系統資源,導致網絡或系統不勝負荷以至於癱瘓而停止提供正常的網絡服務。 DoS 攻擊一般是採用一對一方式的,當被攻擊目標 CPU 速度低、內存小或者網絡帶寬小等等各項性能指標不高時攻擊的效果就更明顯。
隨著計算機與網絡技術的發展,計算機的處理能力迅速增長,內存大大增加,同時也出現了千兆級別的網絡,這些變化都使得目標計算機有足夠的資源來應付這些 DoS 攻擊報文,這使得
DoS 攻擊的困難程度加大,效果減小。
在這種情況下, DDoS 攻擊方法就應運而生, DDoS 是英文 Distributed Denial of Service 的縮寫,即「分佈式拒絕服務」,它是一種基於 DoS 的特殊形式的拒絕服務攻擊。前面已經提到了,當今的計算機和網絡速度都普遍比較快,尤其是大型服務器和數據中心,那數據處理能力和網絡速度簡直令人歎為觀止,因此傳統的基於一對一的 DoS 攻擊效果已不再那麼明顯。
於是,我們偉大的 IT 高手們秉承「辦法總比困難多」的勵志理念,汲取街頭打架鬥毆場景中的精髓,既然一個人打不過,那就來群毆。
DDoS
攻擊便是利用一批受控制的機器向一台機器發起攻擊,這樣來勢迅猛的攻擊令,即使性能再高的服務器也無法應付,因此產生的破壞性極大。主要目標是較大的站點,像商業公司、搜索引擎和政府部門的站點。
DDoS 攻擊的 4 個組成部分:
1). 攻擊者
攻擊者所用的主機,也稱為攻擊主控台;
2). 主控端
攻擊者侵入並控制的一些主機,分別控制大量代理攻擊主機;
3). 代理攻擊端
攻擊者侵入並控制的一批主機,其上面運行攻擊程序,接收和運行主控端發來的命令,代理攻擊端俗稱「肉雞」;
4). 受害者
被攻擊的目標主機。
DDoS 攻擊示意圖如下:

上圖為 DDoS 直接攻擊方式,另外還有一種威力更大、更隱蔽的 DDoS 間接攻擊方式,其原理是攻擊者偽造源地址為受害者地址的 SYN 連接請求包發送給大量服務器,隨後,服務器群會向源 IP (也就是受害者)發出大量的
SYN+ACK 或 RST 包來進行響應,大量服務器的響應數據包最終在受害者處彙集為洪水,使受害者網絡癱瘓,甚至死機,此攻擊方式隱蔽性非常強,受害方很難找到攻擊來源。其攻擊示意圖如下所示。

DDoS 攻擊步驟
1). 搜集攻擊目標信息。包括目標主機的地址、配置、性能、帶寬等。並根據目標主機的相關參數設計合理的攻擊強度,做到知己知彼,百戰不殆;
2).
佔領傀儡機。攻擊者通過工具掃瞄互聯網上那些有漏洞的機器,隨後就是嘗試攻擊。攻擊成功後,就可以佔領和控制被攻擊的主機,即「肉雞」。攻擊者可以利用 FTP/TFTP 等協議把 DDoS 攻擊用的程序上傳到「肉雞」中。「肉雞」包括主控端和代理端主機,其中一部分主機充當攻擊的主控端,一部分主機充當攻擊的代理端。
不過,攻擊者如果想省事的話,可以直接從網絡上購買「肉雞」,一般是幾角錢一隻,量多優惠。這些「肉雞」就是被黑客成功控制的計算機,並用於出售目的。
3). 實施攻擊。攻擊者登錄到作為控制台的「肉雞」中,向所有做為代理端主機的「肉雞」發出命令,這時候埋伏在「肉雞」中的 DDoS 攻擊程序就會響應控制台的命令,同時向受害主機以高速度發送大量的數據包,導致受害主機死機或是無法響應正常的請求。
在《 DOS/DDOS
原理及攻擊防禦方法淺談 ( 一 ) 》中我們已經瞭解了 DOS/DDOS 攻擊的原理及步驟,下面我們接著介紹 DOS/DDOS 的常用攻擊方法及防禦手段。
Dos 攻擊種類有很多,主要有: IP Spoofing 攻擊、 Land 攻擊、 Smurf 攻擊、 Fraggle 攻擊、 WinNuke 攻擊、 SYN Flood 攻擊、 ICMP Flood
攻擊、 UDP Flood 攻擊、 ICMP-Redirect 攻擊及 ICMP-Unreachable 攻擊等。
1). IP Spoofing 攻擊
IP Spoofing 也叫 IP 欺騙,其原理是攻擊者機器 A 利用軟件構造一個虛假不存在的 IP 地址,並以此不存在地址為源 IP 地址向受害者機器 B 發送
SYN 報文,請求建立 TCP/IP 連接。目標機器 B 接收到這個 SYN 報文後,會將收到的 SYN 報文中的源 IP 地址提取出來,並將此 IP 作為目的 IP ,回復一個 ACK/SYN 確認報文給 B ,並等待接收來自 B 的確認報文。由於這個目的 IP 是攻擊者 A 偽造的,實際網絡中根本不存在,所以這個
ACK/SYN 確認報文也就無法到達, B 也就不可能接收到它的確認報文。
但是,根據 TCP/IP 協議規範,受害者 B 必須一直等待接收 A 回復的確認報文,直到受害者 B 內部的定時器超時才放棄等待。這就是一次 IP Spoofing 攻擊,假如攻擊者 A 使用軟件以每秒幾百次幾千次乃至幾萬次的速度向同一個受害者 B 發送虛假 SYN 報文,那麼受害者機器 B 上就會產生大量的 TCP/IP 半連接,並且都要等待這些半連接超時
( 在等待的時候要專心,不能幹別的事情的,呵呵 ) ,從而使系統資源耗盡,不能及時響應正常的服務請求。
如果攻擊者 A 控制幾百幾千台乃至幾萬台機器同時使用軟件分別以每秒幾百次幾千次乃至幾萬次的速度向同一個受害者 B 發送虛假 SYN 報文,這樣,受害者 B 所建立的 TCP/IP 半連接數量會呈指數上升,即使 B 的處理能力再強,網絡帶寬再寬,系統也會在瞬間崩潰,這就是 DDoS 攻擊。
為了大家更好的理解
IP Spoofing 攻擊方法,這裡再補充介紹下 TCP 鏈接的建立過程。大家都知道,目前網絡中的絕大部分上層應用程序都是基於 TCP 協議的。
TCP 是 Transmission Control Protocol 的縮寫,即傳輸控制協議。 TCP 是一種面向連接的高可靠性協議,它的建立過程包括三個過程,簡稱「三次握手」。如下圖所示。

如上圖所示,客戶 A 想要從服務器 B
取得服務,首先需要向 B 發送一個 SYN 報文,請求建立 TCP 鏈接,這就是「第一次握手」。服務器 B 收到 SYN 報文後,會將 SYN 的源 IP 地址提取出來作為目的 IP 地址,回復一個 SYN/ACK 報文給客戶 A ,這就是「第二次握手」。客戶 A 收到來自服務器 B 的 SYN/ACK 報文後,再將此報文的源
IP 地址提取出來作為目的 IP 地址,回復一個 ACK 確認報文給服務器 B ,這就是「第三次握手」。服務器 B 收到這個 ACK 報文後,立即啟動對客戶 A 的相應服務。
上面介紹的 IP Spoofing 就是因為 A 偽造了自己的 IP ,使得「第二次握手」的 SYN/ACK 報文不能到達 A ,
A 也不會發 ACK 報文進行「第三次握手」,但是 B 卻一直在苦苦等待「第三次握手」報文 ACK 的到來。
在網絡安全設備中,是通過如下方法來防禦 IP Spoofing 攻擊的: 檢測每個接口流入的 IP 報文的源 IP 地址和目的 IP 地址,並對報文的源 IP 地址反查路由表,如果該 IP 報文的的入接口與以該地址為目的地址的最佳出接口不相同的話,則視為 IP Spoofing 攻擊報文,將禁止其通過,並進行攻擊日誌記錄。
2). Land 攻擊
Land 攻擊其實是 IP Spoofing 攻擊的一個變種。其原理是攻擊者機器 A 向受害者機器 B 發送一個偽造的 SYN 報文,此 SYN 報文的源 IP 地址和目的 IP 地址都被設成受害者機器 B 的 IP
地址,源端口號和目的端口號也相同。
受害者機器 B 接收到此 SYN 報文後,提取報文的源 IP 地址 ( 其實是 B 機器自己的 IP 地址 ) ,並將其作為目的 IP 地址發送一個 SYN/ACK 報文 ( 其實是向它自己發送了一個 SYN/ACK 報文 ) ,結果這個地址又發回
ACK 確認報文,從而創建了一個空連接,每一個這樣的空連接都將保留到內部定時器超時後才釋放,從而消耗掉大量的系統資源。 對於 Land 攻擊,各種操作系統的反應也有所不同, UNIX 系統將會崩潰,而 NT 系統將變的極其緩慢,時間大約持續五分鐘。
在網絡安全設備中,是通過如下方法來防禦 Land 攻擊的: 檢測每個接口流入的 IP 報文的源 IP 地址和目的 IP 地址,阻止那些源 IP 地址落在所保護網絡 IP 地址段內的報文進入。但是,此方法也具有局限性,即不能防禦那些從所保護網絡內部發起的
Land 攻擊。
3). SYN Flood 攻擊
SYN Flood 是當前最流行的 DoS/ 與 DDoS 攻擊方式之一,其原理原理跟上面介紹過的 IP Spoofing 攻擊是一樣的,都是利用 TCP 協議的缺陷,偽造不存在的源 IP 向受害者發送 SYN 報文,使得受害者機器建立大量 TCP 半連接,每個半連接差不多等待
30 秒 ~2 分鐘後才超時釋放。「 Flood 」 的中文意思是「洪水」,顧名思義, SYN Flood 攻擊時,無數偽造的 SYN 攻擊報文就像洪水一樣湧向受害者機器,如果受害者機器的 TCP/IP 棧不夠強大,最後的結果往往是堆棧溢出而使系統崩潰,即使其系統足夠強大,也會因忙於處理偽造的 SYN 報文而無法響應客戶的正常請求,此時從正常客戶的角度看來,服務器失去響應。
針對 SYN Flood 攻擊,一種有效的防禦方法是限制系統 TCP 半連接的數量,並且在 TCP
半連接超過一定數量後,在防火牆端啟動 TCP 代理功能。所謂 TCP 代理功能,就是在客戶發起 TCP 連接時,防火牆不把 SYN 報文發給目標機器,而是自己偽裝成目標機器對 SYN 報文做出 SYN/ACK 應答。
4). UDP Flood 攻擊
為了更好的介紹 UDP Flood 攻擊,我們先來看一下 UDP 協議與 TCP 協議的區別。
TCP(Transmission Control Protocol) 是一種面向連接、可靠的字節流服務。當客戶和服務器彼此交換數據前,必須先在雙方之間建立一個 TCP 連接,之後才能傳輸數據。 TCP 提供超時重發,丟棄重複數據,檢驗數據,流量控制等功能,保證數據能從一端傳到另一端。
UDP(User Datagram Protocol ,用戶數據報協議 ) 是一個簡單的面向數據報的運輸層協議。 UDP 不提供可靠性,它只是把應用程序傳給 IP 層的數據報發送出去,但是並不能保證它們能到達目的地。由於 UDP 在傳輸數據報前不用在客戶和服務器之間建立一個連接,且沒有超時重發等機制,故而傳輸速度很快。
從專業的角度說, TCP 的可靠保證,是它的三次握手機制,這一機制保證校驗了數據,保證了他的可靠性。而 UDP 就沒有了,所以不可靠。不過 UDP 的速度是 TCP 比不了的,而且 UDP 的反應速度更快, QQ 就是用 UDP 協議傳輸的, HTTP 是用 TCP 協議傳輸的。
UDP Flood 攻擊的原理是攻擊者機器 A 偽造一個並不存在的 IP
地址,並以此為源 IP 地址向受害者機器 B 發送一個 UDP 報文, B 收到 UDP 報文後,發現上層沒有任何應用程序在等待 UDP 端口,於是 B 就會生成一個 ICMP 報文發給該偽造的源 IP 地址,告訴對方剛才所發的 UDP 報文無法連接。如果 A 向 B 發送的足夠多的 UPD 報文,受害者
B 將忙於處理這些無用的 UDP 報文,造成系統資源耗盡,導致癱瘓。
5). ICMP Flood 攻擊
ICMP 是 Internet Control Message Protocol 的縮寫,即因特網控制消息協議的意思。 ICMP 協議是 TCP/IP 協議族的一個子協議,它是一種面向連接的網絡層協議,用於傳輸出錯報告控制信息,主要用於在主機與路由器之間傳遞控制信息 , 包括報告錯誤、交換受限控制和狀態信息等。當遇到 IP 數據無法訪問目標、
IP 路由器無法按當前的傳輸速率轉發數據包等情況時,會自動發送 ICMP 消息。我們經常用來檢測網絡通不通的「 Ping 」命令就是使用 ICMP 協議。
ICMP Flood 攻擊的原理就在在較短時間內向受害者機器發送大量的 ICMP 請求報文,使受害者機器忙於向外發送 ICMP 應答報文,造成系統資源耗盡,導致癱瘓。
6). Smurf 攻擊
Smurf 攻擊是以最初發動這種攻擊的程序名「
Smurf 」來命名的。 同 ICMP Flood 攻擊一樣, Smurf 攻擊也是利用了 ICMP 協議的漏洞。其原理是攻擊者 A 向廣播地址發送 ICMP 請求廣播報文,不過該廣播報文的源 IP 地址不是攻擊者 A 本身,而是偽造成受害者 B 的 IP 地址,這樣,廣播域內所有收到該 ICMP 請求報文的機器都會給受害者 B 回復 ICMP
應答報文,因而產生大量的通信業務,從而導致受害者 B 的網絡擁塞及系統癱瘓。對於 Smurf 攻擊,廣播域內的機器數量越多,攻擊效果就越明顯。
在網絡安全設備中,是通過如下方法來防禦 Smurf 攻擊的: 對通過設備的所有 ICMP 請求報文的目的地址進行檢查,如果是子網廣播地址或者子網的網絡地址,則認為是 Smurf 攻擊,直接拒絕通過。
7). Fraggle 攻擊
Fraggle 攻擊的原理與 Smurf 攻擊的原理類似,不過,
Fraggle 攻擊發送的是 UDP 報文而非 ICMP 報文。因為發送的是 UDP 報文, Fraggle 攻擊可以穿過一些阻止 ICMP 報文進入的防火牆。
Fraggle 攻擊的原理是攻擊者 A 向廣播地址發送 UDP 報文,目的端口號為 7(ECHO) 或 19(Chargen) ,報文的源 IP 地址偽裝成受害者
B 的 IP 地址。這樣,廣播域中所有啟用了此功能的計算機都會向受害者 B 發送回應報文,從而產生 大量的流量,導致受害網絡的阻塞或受害主機崩潰。如果廣播域中的主機沒有啟動這些功能,這些主機將產生一個 ICMP 不可達消息發給 B ,仍然消耗帶寬。 Fraggle 攻擊時,也可將源端口改為端口 19(Chargen) ,目的端口為 7(ECHO) ,這樣會自動不停地產生回應報文,其危害性更大。
防禦方法:關閉路由器或防火牆的廣播地址特性,並在防火牆上過濾掉 UDP 報文,阻止所有目的端口或源端口號為 7
或 19 的 UDP 報文通過。
補充下計算機端口方便的知識,大家都知道通信網絡的上層應用程序都是通過端口號來識別傳輸層協議的,比如常用的 HTTP 協議就使用了 80 端口,用於郵件的 SMTP 協議使用的是 25 端口。比如某傳輸層報文的端口號標識位為「 80 」,那麼計算機收到報文後一看端口號就知道該報文是給 HTTP 協議的,直接轉交給它處理。同樣的, TCP/UDP 協議是 IP 的上層協議,
IP 可能會被系統中多個應用程序應用,如何來區分多個應用程序呢?答案是 TCP/UDP 端口號。
TCP 和 UDP 的端口號的編號都是獨立的,都是 0~65535 。例如 DNS ,可以是 TCP 的 53 號端口,也可以是 UDP 的 53 號端口。端口號只具有本地意義,是拿來標識程序的。只有 0~1023 是公認的系統佔用,其他在通信過程中是隨機生成,此次傳輸完成即撤消。在 UDP 的這些端口中,有兩個很特殊的端口
7 和 19 。 UDP 的 7 號端口收到報文後,會像 ICMP Echo Reply 一樣回應收到的內容, 而 19 號端口在收到報文後,會產生一串字符流。
8). WinNuke 攻擊
WinNuke 攻擊是以最初發動這種攻擊的程序名「 WinNuke 」來命名的。 其攻擊原理是利用了
WINDOWS 操作系統的一個漏洞,向 139 端口發送一些攜帶 TCP 帶外( OOB )數據報文,但這些攻擊報文與正常攜帶 OOB 數據報文不同的是,其指針字段與數據的實際位置不符,即存在重疊, WINDOWS 操作系統在處理這些數據的時候,就會崩潰。 還有一種是 IGMP ( Internet Group Management Protocol )分片報文,一般情況下, IGMP 報文是不會分片的,所以,不少系統對 IGMP 分片報文的處理有問題。如果收到 IGMP
分片報文,則基本可判定受到了攻擊。
NetBIOS 作為一種基本的網絡資源訪問接口,廣泛的應用於文件共享,打印共享,進程間通信( IPC ),以及不同操作系統之間的數據交換。一般情況下, NetBIOS 是運行在 LLC2 鏈路協議之上的,是一種基於組播的網絡訪問接口。為了在 TCP/IP 協議棧上實現 NetBIOS , RFC 規定了一系列交互標準,以及幾個常用的 TCP/UDP 端口,如下。
A). 139 : NetBIOS 會話服務的
TCP 端口;
B). 137 : NetBIOS 名字服務的 UDP 端口;
C). 136 : NetBIOS 數據報服務的 UDP 端口。
Windows 操作系統實現了 NetBIOS over TCP/IP 功能,並開放了
139 端口。 WinNuke 攻擊就是利用了 WINDOWS 操作系統的一個漏洞,向這個 139 端口發送一些攜帶 TCP 帶外( OOB )數據報文,但這些攻擊報文與正常攜帶 OOB 數據報文不同的是,其指針字段與數據的實際位置不符,即存在重疊, WINDOWS 操作系統在處理這些數據的時候,就會崩潰。 還有一種是 IGMP ( Internet Group Management Protocol )分片報文,一般情況下,
IGMP 報文是不會分片的,所以,不少系統對 IGMP 分片報文的處理有問題。如果收到 IGMP 分片報文,則基本可判定受到了攻擊。
補充下 NetBIOS 協議方面的知識: NETBIOS 協議是由 IBM 公司開發,主要用於數十台計算機的小型局域網。該協議是一種在局域網上的程序可以使用的應用程序編程接口( API ),為程序提供了請求低級服務的統一的命令集,作用是為了給局域網提供網絡以及其他特殊功能,系統可以利用 WINS 服務、廣播及 Lmhost 文件等多種模式將 NetBIOS 名解析為相應 IP
地址,實現信息通訊,所以在局域網內部使用 NetBIOS 協議可以方便地實現消息通信及資源的共享。因為它佔用系統資源少、傳輸效率高,所以幾乎所有的局域網都是在 NetBIOS 協議的基礎上工作的。
防禦方法:防火牆設備會掃瞄所有進入的「 Microsoft NetBIOS 會話服務」(端口 139 )封包。如果防火牆設備發現某個封包上設置了 TCP URG 代碼位,就會檢查偏移值、刪除碎片重疊並根據需要糾正偏移值以防止發生 OOB 錯誤。然後讓經過修正的封包通過,並在「事件警報」日誌中創建一個 WinNuke 攻擊日誌條目。
9). ICMP-Unreachable 攻擊
ICMP-Unreachable 即 ICMP 報文報文不可到達的意思。 ICMP-Unreachable 攻擊原理是:某些系統在收到網絡(代碼為 0 )或主機(代碼為 1 )不可達的 ICMP 報文後,對於後續發往此目的地的報文直接認為不可達。攻擊者 A 利用這種機制,向受害者 B 發送虛假的 ICMP-Unreachable 報文,干擾了受害者 B 的路由信息,影響了報文發送。
10). ICMP-Redirect 攻擊
ICMP-Redirect 攻擊和 ICMP-Unreachable 攻擊類似。 ICMP-Redirect 攻擊原理是:網絡設備可以向同一個子網的主機發送 ICMP 重定向報文,請求主機修改路由。 攻擊者利用這個原理,跨越網段向另外一個網絡的目標主機發送虛假的重定向報文,以改變目標主機的路由表。這種攻擊干擾了目標主機的路由信息,影響了報文發送。