ღ Miranda

常见的Dos攻击原理及实现方法

Dos(Denial of Service)攻击已经成为了当今最危险的一种攻击,不仅可以使得服务器的服务无响应,甚至可以使整个系统崩溃。

分类

网络

第一种就是对网络进行拒绝服务攻击,主要是用巨量的网络流量耗尽目标服务器的带宽资源,主要有ICMP FloodUDP Flood

协议

第二种就是利用协议的漏洞进行拒绝服务攻击,主要有SYN FloodPing of Death和一些协议的放大攻击。

应用

第三种就是应用层,主要通过应用代码的漏洞,提交异常数据,或者是处理大量请求时能力有限。


常见攻击

SYN Flood

原理

SYN Flood主要利用了TCP协议的三次握手,建立三次握手时,客户端向服务器先发一个SYN包,服务器回复一个SYN ACK,然后客户端再发一个ACK建立三次握手,但如果客户端只向服务器发一个SYN包的话,服务器在发送SYN ACK后就会等待客户端回复,这样的连接称为半开连接,攻击者向被攻击者发送大量的SYN包,在服务器上产生大量的半开连接从而使得正常的客户端无法建立连接。

实现

这里有个问题,如果主动发送SYN包而不发送最后的ACK包,操作系统会自动发送一个RST包,终止连接,这样不能占用半开连接,所以在攻击前要先用iptables设置防火墙规则,防止系统自动发送的RST包,设置如下:

设置好规则后就可以攻击了,这里使用Scapy包来写脚本,创建了200个线程,攻击一段时间后可以发现192.168.1.103的网页就会无响应了:

这样一般的linux服务器TCP半开连接数最大为256,所以很容易就会被拒绝服务,这时候用netstat查看,会发现有大量的SYN-RECV状态的连接:

防范

主要有两种办法防止这种攻击,第一种是缩短SYN Timeout时间,由于SYN Flood攻击的效果取决于服务器上保持的SYN半连接数,所以通过缩短从接收到SYN报文到确定这个报文无效并丢弃该连接的时间可以成倍的降低服务器的负荷。第二种方法是设置SYN Cookie,就是给每一个请求连接的IP地址分配一个Cookie,它的原理是,在TCP服务器收到SYN包并返回SYN ACK包时,不分配一个专门的数据区,而是根据这个SYN包计算出一个cookie值。在收到ACK包时,服务器再根据cookie值检查这个ACK包的合法性。如果合法,再分配专门的数据区进行处理连接,这样就不用为每个半开连接分配单独的数据区了。

Smurf

原理

Smurf原理是向广播地址发送大量的Ping包,并且把源地址伪造成要攻击的地址,同一网段里的主机收到包后都会向源地址发送echo reply包,这是一种放大攻击的方式,主机越多,攻击效果越好,但这种攻击方式十分古老,对现代操作系统已经几乎没用了。

实现

实现与SYN Flood相似,只要把TCP协议改为ICMP协议:

Sockstress

原理

这个也是针对TCP连接的攻击,为了消耗目标系统的资源,攻击达到的效果会使得服务器CPU和内存全部占满,实现方法是与目标建立大量的socket连接,完成三次握手,但最后一次ACKwindow的值为0window的值代表了发包的一方下次可以接收的数据的大小,设置为0以后就代表不能接收任何数据,但服务端要一直保持连接,维持大量的这种连接会导致拒绝服务。

实现

同样可以用Scapy实现:

github上也有C写的工具:

TearDrop

原理

这种攻击主要针对早期系统,利用了IP头的Fragment Offset字段,在发送过大的数据时,在传输中会被分成几个包分次发送,这几个包的id值相同,More Fragment被置为1Fragment Offset字段为前面包数据段长度和,当后面Fragment Offset与之前的包有重叠的时候,老的操作系统就会无法处理,蓝屏,崩溃。

实现

网上找到的exploit如下:

由于只对老的系统有效,所以现在已经无法实践。

DNS Amplification

原理

利用DNS查询能够使得返回数据包比发送数据包大的特点,也是一种放大攻击,伪造源地址为被攻击目标的地址,向递归域名查询服务器发起查询。

实现

Scapy的数据包可以构造如下:

IP头中的目的地址要指定一个支持递归查询的DNS服务器地址,源地址为攻击目标地址。

可以使用Saddam这个工具进行类似的放大攻击https://github.com/OffensivePython/Saddam

SNMP Amplification

原理

利用了SNMP协议,也利用了小请求流量可以返回大的查询结果流量的特点,结合源地址伪造实现攻击,但需要有SNMP的服务端并且要知道Community的值。

实现

数据包构造为:

NTP Amplification

原理

NTP服务开在123端口,服务有个monlist查询功能,可以返回最后同步时间的600个客户端的IP,每6IP一个数据包,最多返回100个数据包,能够放大约100倍,只要在公网上寻找有NTP服务的主机既可以用来作为工具,所以现在NTP服务默认关闭此功能。

实现

网上找的脚本如下:

防范

可以升级到最新版本,也可以手动编辑ntp.conf文件,添加:

MS12-020

原理

这是一个典型的应用层的dos攻击,是一个比较严重的漏洞,可以直接使得主机蓝屏,这个漏洞是针对windows远程桌面端口3389的攻击,在2012.5.12之前的任何windows系统都有该漏洞。

实现

提供两个exp:

LAND

原理

特殊种类的SYN Flood,源目的地址都是受害者,自己和自己进行三次握手,每一个这样的连接都将保留直到超时掉,许多UNIX系统将崩溃,而Windows NT会变的极其缓慢。

实现

DOS工具

slowhttptest

低带宽的慢速dos攻击,擅长攻击apachetomcat服务器。

攻击方法

  • SlowlorisSlow HTTP POST

都是慢慢耗尽web应用的连接池,与SYN Flood相似,Slowloris主要是http请求的结尾为\r\n,而正常的应是\r\n\r\n,让服务器端等待。Slow HTTP POSThttp头的content-length声明长度,使body部分缓慢发送。

  • Slow Read attack

请求正常发送,但缓慢读取响应数据,调整TCP window窗口的大小。

  • Apache Range Header attack

为了耗尽CPU和内存。

hping3

hping3linux下一个自带的工具,用于测试WF,端口扫描等,但也可以用于SYN Flood攻击:

ICMP Flood:

Siege

http/https压力测试工具,模拟多用户的并发请求:

-A可以指定User-Agent-c指定并发连接数。

也可以在/etc/siege/urls.txt文件里写入要测试的url,这时候直接运行siege -i -c 1000即可。

T50

主要用于网络层压力测试

发表评论

电子邮件地址不会被公开。