淺談ddos的測試方式

FLy_鵬程萬里發表於2018-06-01

前言

DOS(denial of service--拒絕服務)攻擊的目的是使服務正常功能不可用。不像其他型別的攻擊的目的是獲取敏感資訊,Dos攻擊是不會威脅到敏感資訊而是使合法使用者不能使用服務。有時候Dos在其他攻擊中也會存在一定的作用,比如使web應用防火牆拒絕服務,從而繞過防火牆。

DOS與DDOS的區別

Dos是拒絕服務攻擊,而DDOS是分散式拒絕服務攻擊;Dos與DDOS都是攻擊目標伺服器、網路服務的一種方式。Dos是利用自己的計算機攻擊目標,也是一對一的關係,而DDOS是DoS攻擊基礎之上產生的一種新的攻擊方式,利用控制成百上千臺肉雞,組成一個DDOS攻擊群,同一時刻對目標發起攻擊。

從理論上來說,無論目標伺服器、網路服務的資源多大,也是頻寬、記憶體、CPU多大,都無法避免Dos與DDOS攻擊,因此任何資源再大也有一個極限值,比如說,一臺伺服器每秒可以處理1000個資料包,而通過DOS攻擊給這臺伺服器傳送1001個資料包,這時伺服器無法正常執行,需要給伺服器擴容。 從技術上來說,DOS和DDOS都是攻擊目標伺服器的頻寬和連通性,使得目標伺服器的頻寬資源耗盡,無法正常執行。

DOS的型別

DOS攻擊可以分為兩個大類,一個是應用層攻擊一個網路層攻擊。那麼我們首先要了解層的概念,這裡的層是OSI模型中的層級劃分,包括:應用層、表示層、會話層、傳輸層、網路層、資料鏈路層以及物理層。下圖就是OSI模型的簡單介紹:

網路和傳輸層攻擊

這種攻擊方式通常是向伺服器傳送惡意流量,儘可能消耗伺服器的資源來達到拒絕服務的目的。

TCP SYN floods

SYN洪水攻擊在傳輸層,為了更好的理解這種型別的攻擊,我們需要先了解TCP的三次握手。

先來看張圖如下:

對照上圖來理解一下:

第一次握手:建立連線。客戶端傳送連線請求報文段,將SYN位置為1,Sequence Number為x;然後,客戶端進入SYN_SEND狀態,等待伺服器的確認;

第二次握手:伺服器收到SYN報文段。伺服器收到客戶端的SYN報文段,需要對這個SYN報文段進行確認,設定Acknowledgment Number為x+1(Sequence Number+1);同時,自己自己還要傳送SYN請求資訊,將SYN位置為1,Sequence Number為y;伺服器端將上述所有資訊放到一個報文段(即SYN+ACK報文段)中,一併傳送給客戶端,此時伺服器進入SYN_RECV狀態;

第三次握手:客戶端收到伺服器的SYN+ACK報文段。然後將Acknowledgment Number設定為y+1,向伺服器傳送ACK報文段,這個報文段傳送完畢以後,客戶端和伺服器端都進入ESTABLISHED狀態,完成TCP三次握手。 完成了三次握手,客戶端和伺服器端就可以開始傳送資料。

想要了解更多關於tcp關於三次握手的技術細節,可以參看我朋友的公眾號,有想學習java的也可以關注一下,傳送門點我

如果攻擊者傳送足夠的SYN資料包,因為伺服器的併發TCP連線數量有限所以會導致伺服器沒有更多的資源可用。 如果伺服器達到限制,在現有的處於SYN-RCVD狀態的連線超時之前則不能在建立新的連線,這就造成了拒絕服務攻擊。

SYN洪水攻擊測試工具,我們可以用hping3,下載地址:http://www.hping.org/hping3.html

命令:

1 簡單例子: hping3 -S --flood -V -p TARGET_PORT TARGET_SITE

2 隨機源IP: hping3 -c 20000 -d 120 -S -w 64 -p TARGET_PORT --flood --rand-source TARGET_SITE

UDP floods

UDP協議是無連線的傳輸層協議,提供面向事務的簡單不可靠資訊傳送服務。

由於UDP協議是無連線性的,所以只要開了一個UDP的埠提供相關服務的話,那麼就可針對相關的服務進行攻擊。這種攻擊的原理是通過偽造的IP向目標伺服器傳送大量的UDP資料包,伺服器在接收到資料包後無法處理每一條請求,並且通過向伺服器傳送ICMP "destination unreachable"來消耗其頻寬。

測試工具:

1 hping3 命令:hping3 --flood --rand-source --udp -p TARGET_PORT TARGET_IP

2 loic 下載地址: https://sourceforge.net/projects/loic/

TCP FIN Flood

這種FIM標誌的資料包只有在TCP建立連線之後才會被接受,如果沒有建立TCP連線,那麼這個標誌的資料包將會被簡單的刪除處理。

如果攻擊者只是在沒有建立TCP連線的情況下對伺服器進行泛洪攻擊,那麼FIN資料包將會別丟棄,但是伺服器還是會分配一些資源來檢視資料包防止冗餘。

這種攻擊很容易被實現。

測試工具:hping3

命令:hping3 --flood --rand-source -F -p TARGET_PORT TARGET_IP

TCP RST Flood

TCP中的RST包的意思是立即斷開連線,當連線出錯需要停止掉的時候非常有用。

如果攻擊者能夠以某種方式檢視從源到目的地的流量,則可以傳送具有適當值的RST報文(源IP,目的IP,源埠,目的埠,序列號等),該報文將斷開源和目的地之間的TCP連線。 這也是一種拒絕服務的方式。

RST泛洪的測試工具也是hping3

命令:hping3 --flood --rand-source -R -p TARGET_PORT TARGET_IP

PUSH and ACK Flood

通過大量的PUSH和ACK泛洪可以是伺服器停止對正常使用者的請求進行響應。

測試工具:hping3 和 LOIC

命令:hping3 --flood --rand-source -PA -p TARGET_PORT TARGET_IP

ICMP and IGMP Floods

ICMP(Internet Control Message Protocol--Internet控制訊息協議)和IGMP(Internet Group Management Protocol--Internet組管理協議)是網路層的協議類似於UDP。ICMP遞送狀態訊息,錯誤報告,回答某些請求,報告路由資訊,並且常用於測試網路的連通性和排查問題。IGMP是IP網路上的系統和相鄰路由用來建立和維護多播組成員關係的協議。

ICMP and IGMP Floods類似於UDP不需要任何漏洞,只需要傳送大量的ICMP或IGMP資料包,在處理每一個資料包的時候資源消耗殆盡導致拒絕服務。

測試工具:hping3

命令:hping3 --flood --rand-source -1 -p TARGET_PORT TARGET_IP

放大攻擊

利用回覆包比請求包大的特點(放大流量),偽造請求包的源IP地址,將應答包引向被攻擊的目標。例如:攻擊者偽造源IP為目標的IP然後使用路由廣播IP地址向多個IP傳送訊息,然後這些裝置都向目標IP進行回應。如圖:

想要使用放大攻擊必須使用不需要驗證源IP的無連線協議,像DNS、ICMP( Smurf attack)、UDP(Fraggle attack)等協議。

Smurf Attack

攻擊者會選擇一些中間站點作為放大器,然後傳送巨大數量ICMP(ping)請求到這些中間站點的廣播IP。通過這種方式,將所有的源IP改為目標的IP地址,這些中間地址將這些資料包廣播到所有子網的主機。最後所有主機的回應都發回給目標。

測試工具:hping3

命令:hping3 --icmp --spoof TARGET_IP BROADCAST_IP

DNS Amplification

當前許多DNS伺服器支援EDNS。EDNS是DNS的一套擴大機制,RFC 2671對此有介紹。一些選擇能夠讓DNS回覆超過512位元組並且仍然使用UDP,如果要求者指出它能夠處理這樣大的DNS查詢的話。攻擊者已經利用這種方法產生了大量的通訊。通過傳送一個60個位元組的查詢來獲取一個大約4000個位元組的記錄,攻擊者能夠把通訊量放大66倍。一些這種性質的攻擊已經產生了 每秒鐘許多GB的通訊量,對於某些目標的攻擊甚至超過了每秒鐘10GB的通訊量。

下面看兩個圖,正常的查詢:

下面是放大攻擊的圖:

對比上面的連個圖,發下放大攻擊之後有大量的資料查詢後的響應資料包返回給受害者的機器,這樣就造成了對受害者的拒絕服務攻擊。


測試工具:Tsunami

下載地址: https://www.infosec-ninjas.com/tsunami

測試命令:

1 收集dns伺服器 ./tsunami -o recursive_dns.txt -l 4 -e 172.0.0.0/8

2 對目標進行攻擊 ./tsunami -s TARGET_IP -n pentest.blog -p 3 -f recursive_dns.txt

Fraggle Attack

攻擊者向UDP端點傳送大量的欺騙UDP洪促使這些埠回應目標。

應用層攻擊

應用層攻擊也叫第七層攻擊,可以實行DoS和DDoS攻擊,這種型別的攻擊是基於模仿人的行為。

可能被利用的協議包括HTTP、HTTPS、DNS、SMTP、FTP、VOIP和其他的應用協議

HTTP泛洪

HTTP泛洪是應用層攻擊中最常見的攻擊方式。

這種型別的攻擊可以嘗試使用HTTP GET或者POST方式向伺服器發出請求。通常來說需要多個電腦同時發出請求。

測試工具:

1 LOIC

2 hulk http://www.sectorix.com/2012/05/17/hulk-web-server-dos-tool/

命令:python hulk.py -site http://TARGET.com/test/

3 Apache JMeter https://jmeter.apache.org/

DNS泛洪

DNS泛洪像其他洪水攻擊一樣,DNS泛巨集攻擊的目的是向DNS應用傳送大量DNS請求。DNS伺服器不堪重負,無法處理來自其他使用者的所有合法請求。

測試工具:

1 mz http://www.perihel.at/sec/mz/

命令:mz -A rand -B TARGET_DNS_SERVER -t dns "q=pentest.blog" -c 10000000

2 netstressng https://sourceforge.net/projects/netstressng/

命令:netstress.fullrandom -d TARGET_DNS_SERVER -a dns -t a -n 4 -P 53

Low和Slow攻擊

這個攻擊不像其他的泛洪攻擊,他不需要大量的資料流量。這種型別的攻擊針對的是應用程式和伺服器資源。

這種方式很難被檢測,因為其流量跟正常流量沒什麼兩樣。

測試工具:https://github.com/llaera/slowloris.pl

這個工具的原理就是通過開啟多個連線並保持連線,直到伺服器無法處理跟多的http請求,導致拒絕服務。

總結

這裡說了這麼多關於拒絕服務的方式,我知道這些內容並不是很全,而且解釋的也比較簡單,沒有深入去解釋各種協議,這些基礎的東西就需要大家自行去研究學習。這裡只是做一個簡要介紹做個筆記。裡面涉及的攻擊就只能請大家自行測試了 。


相關文章