浅谈ddos的测试方式

运维安全 2017-11-12

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模型的简单介绍:

1.jpg

网络和传输层攻击

这种攻击方式通常是向服务器发送恶意流量,尽可能消耗服务器的资源来达到拒绝服务的目的。

TCP SYN floods

SYN洪水攻击在传输层,为了更好的理解这种类型的攻击,我们需要先了解TCP的三次握手。

先来看张图如下:

2.jpg

对照上图来理解一下:

第一次握手:建立连接。客户端发送连接请求报文段,将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进行回应。如图:

3.png

想要使用放大攻击必须使用不需要验证源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的通讯量。

下面看两个图,正常的查询:

4.jpg

下面是放大攻击的图:

5.jpg

对比上面的连个图,发下放大攻击之后有大量的数据查询后的响应数据包返回给受害者的机器,这样就造成了对受害者的拒绝服务攻击。

测试工具: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请求,导致拒绝服务。

总结

这里说了这么多关于拒绝服务的方式,我知道这些内容并不是很全,而且解释的也比较简单,没有深入去解释各种协议,这些基础的东西就需要大家自行去研究学习。这里只是做一个简要介绍做个笔记。里面涉及的攻击就只能请大家自行测试了 。


本文由 myh0st 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

楼主残忍的关闭了评论