0X00前言暑假无聊,找了一家公司实习,打算学点东西。这家公司早些年是做抗DDOS设备的,培训的时候就很粗略的讲了部分原理,但是我却对DDOS产生了浓厚的兴趣。一但有了兴趣,便有了研究下去的动力。所以我开始在网络上搜集各种DDOS文章、书籍,学习的同时还做了记录,在此与大家分享,文中必要之处,我会连同协议的工作方式及报文格式一并讲解,这样才能更好的理解攻击触发点。 0X01DDOS简介DDOS(Distributed Denial of Service),又称分布式拒绝服务攻击。骇客通过控制多个肉鸡或服务器组成的僵尸网络,对目标发送大量看似合法请求,从而占用大量网络资源,瘫痪网络,阻止用户对网络资源的正常访问。 0X02DDOS危害出口带宽堵死 0X03攻击来源高性能服务器配合发包软件 0X04流量特点IP地址随机或固定某些IP段随机 0X05导致DDOS原因人类因素金钱利益 非人类因素带宽上限 0X06攻击类型及防御Smurf攻击
TearDrop攻击在了解这种攻击之前,需要先知道什么是IP fragmentation(数据包分片)。数据在网络中传输必定会产生数据包被分片,因为每种网络都有不同的最大单个数据包的大小,也就是常说的MTU(Maximum Transmission Unit,最大传输单元)。当要传输的数据超过你要通信的那台主机所处网络的MTU时,数据包就会被分片进行传输,然后在到达目的地再重新组装成原来的数据包,下面是数据包分片重组过程
Land Attack攻击者发动Land Attack攻击时,需要先发出一个SYN数据包,并将数据包的源IP与目的IP都设置成要攻击的目标IP,这样目标在接收到SYN数据包后,会根据源IP回应一个SYN+ACK数据包,即和自己建立一个空连接,然后到达idel超时时间时,才会释放这个连接。攻击者发送大量这样的数据包,从而耗尽目标的TCP连接池,最终导致拒绝服务。攻击过程如下
SYN FLOOD攻击SYN FLOOD攻击是在TCP三次握手过程中产生的。攻击者通过发送大量伪造的带有SYN标志位的TCP报文,与目标主机建立了很多虚假的半开连接,在服务器返回SYN+ACK数据包后,攻击者不对其做出响应,也就是不返回ACK数据包给服务器,这样服务器就会一直等待直到超时。这种攻击方式会使目标服务器连接资源耗尽、链路堵塞,从而达到拒绝服务的目的。SYN FLOOD攻击图示如下
ACK FLOOD攻击ACK FLOOD攻击是利用TCP三次握手过程。这里可以分为两种。 第一种:攻击者伪造大量的SYN+ACK包发送给目标主机,目标主机每收到一个SYN+ACK数据包时,都会去自己的TCP连接表中查看有没有与ACK的发送者建立连接 ,如果有则发送ACK包完成TCP连接,如果没有则发送ACK+RST 断开连接。但是在查询过程中会消耗一定的CUP计算资源。如果瞬间收到大量的SYN+ACK数据包,将会消耗服务器的大量cpu资源,导致正常的连接无法建立或增加延迟,甚至造成服务器瘫痪、死机。 第二种:利用TCP三次握手的ACK+SYN应答,攻击者向不同的服务器发送大量的SYN请求,这些SYN请求数据包的源IP均为受害主机IP,这样就会有大量的SYN+ACK应答数据包发往受害主机,从而占用目标的网络带宽资源,形成拒绝服务。
UDP FLOOD攻击UDP(User Datagram Protocol,用户数据报协议),是一种无连接和无状态的网络协议,UDP不需要像TCP那样进行三次握手,运行开销低,不需要确认数据包是否成功到达目的地。这就造成UDP泛洪攻击不但效率高,而且还可以在资源相对较少的情况下执行。UDP FLOOD可以使用小数据包(64字节)进行攻击,也可以使用大数据包(大于1500字节,以太网MTU为1500字节)进行攻击。大量小数据包会增大网络设备处理数据包的压力;而对于大数据包,网络设备需要进行分片、重组,最终达到的效果就是占用网络传输接口的带宽、网络堵塞、服务器响应慢等等。
NTP放大攻击NTP(Network Time Protocol,网络时间协议),是用来使计算机网络时间同步化的一种协议,它可以使计算机与时钟源进行同步化并提供高精度的时间校正,使用UDP123端口进行通信。通常在NTP服务器上会有一些调试接口,而利用这些接口中的monlist请求,就可触发放大攻击。当主机向NTP服务器发送monlist查询请求时,NTP服务器会将与之进行时间同步的最后600个IP地址返回。所以攻击者只需要将源地址伪造为受害主机的IP,向NTP服务器发送一个monlist查询请求包,受害主机就会收到大量的UDP响应包。这种攻击在放大攻击里,危害相对较大。下面是NTP放大攻击示意图
DNS放大攻击DNS(Domain Name System,域名系统),由于使用IP地址来记忆各个网站比较困难,所以就产生了使用主机名称来表示对应的服务器,主机名称通过域名解析的过程转换成IP地址。下面来看一下DNS报文格式,以便了解攻击发生在何处。
SNMP放大攻击SNMP(Simple Network Management Protocol,简单网络管理协议),是目前网络中应用最为广泛的网络管理协议,它提供了一个管理框架来监控和维和互联网设备,它使用UDP161端口进行通信。攻击者向互联网上开启SNMP服务的设备发送GetBulk请求,并使用默认通信字符串作为认证凭据。常见的默认通信字符串如public、private以及一些厂商默认的通信字符串。GetBulk请求是在SNMPv2中添加的的,该请求会让SNMP设备尽可能多的返回数据,这也就是SNMP放大攻击的利用点。下面来看一下SNMP的PDU格式 攻击者先将源地址改成要攻击的目标IP,再使用默认的通信字符串,向大量SNMP设备发出GetBulk请求,设备收到GetBulk请求数据包后,会将一大段的设备检索信息返回给目标主机,最终目标主机会被这些SNMP设备返回的数据包淹没,导致拒绝服务。看一下SNMP的攻击图
TFTP放大攻击TFTP(Trivial File Transfer Protocol,简单文件传输协议),使用UDP 69端口进行通信,由于TFTP使用的是不可靠的UDP协议,所以他不能确保发送的任何报文都能真正到达目的地,因此他必须使用定时器来检测并重传报文,以下是TFTP传输文件过程图 可以看到,TFTP协议将数据分成好多个数据块进行传输,每个数据块最大为512字节,客户端在接受到数据块时,需要给服务器端返回一个ACK确认报文,然后才会继续传输下一个报文。若服务器没有收到客户端发来ACK报文,则在时间到达超时计数器时,便会开启重传机制,这也就是攻击利用点。攻击者利用TFTP协议上的缺陷,伪造源地址向服务器发起请求,服务器回复的第1个data数据包后无法收到客户端发送的ACK。此时TFTP就会利用他的重传机制,定时重传第1个data数据包,当攻击者发出大量的这种请求时,TFTP放大攻击也就发生了。来看一下TFTP放大攻击示意图
CC攻击CC攻击(ChallengeCollapsar)又称作HTTP 泛洪攻击,其原理是攻击者控制肉鸡、僵尸网络或使用代理服务器,不停地向目标的web服务发送大量合法请求,使得正常用户的web请求处理缓慢甚至得不到处理,制造大量的后台数据库查询动作,消耗目标CPU资源,最终导致服务器宕机崩溃。这种攻击方式不需要很大的带宽,且无法使用伪造IP地址进行攻击,需要真实的机器与web服务器建立连接,因为HTTP协议是建立在TCP协议上,必须先进行TCP三次握手才能进行HTTP通信。如果目标web服务器支持HTTPS,那么发起的HTTPS泛洪攻击还能穿透一些防护设备。
HTTP慢速攻击Slow HTTP Dos AttACKs(慢速HTTP拒绝服务攻击),黑客模拟正常用户向web服务器发送慢速http请求,由于是慢速的,服务器端需要保持连接资源,直到数据传输结束或请求结束才可释放连接。当服务器端建立了大量这样的慢速连接,就会导致服务器拒绝服务。这种攻击可以分为两类,一类是客户端发数据,另一类是客户端读取服务器发来的数据。HTTP慢速攻击对基于线程处理的web服务器影响显著,如apache、dhttpd,而对基于事件处理的web服务器影响不大,如ngix、lighttpd。HTTP慢速攻击还可以细分成以下几种攻击方式. Slowloris攻击方式 Slow post攻击方式 Slow read攻击方式 Apache range header攻击
XSS-DOS利用网站存在的存储型XXS漏洞,在网站中插入恶意的javascript代码。代码的功能是不断向web服务器发起大量请求,从而导致服务器宕机,无法响应正常用户的请求。客户端访问已插入恶意的javascript代码的页面后,抓包截图如下
时间透镜攻击通过控制相同源和相同目的IP报文,使得走不同路径的数据包,在同一时刻到达目标服务器,从而达到流量集中攻击的目的。这种攻击其实我也还弄不太懂,详细信息可以阅读这篇paper:Temporal Lensing and its Application in Pulsing Denial-of-Service Attacks,或者看这个视频,还有这份中文分析:时间透镜及其在脉冲拒绝服务攻击的应用。看一下freebuf上的一个分析图 防御方案:增加抖动,干扰攻击路径,使得数据包无法预期到达;由运营商禁止源路由。 0X07总结这篇文章是自己对DDOS学习的一个总结,当中参考了不少文章书籍,当然还有很多类型的DDOS文中未提及,需要再深入学习,文中若有原理性错误,还望大家指出修正。如果大家有什么好的书籍或关于这方面的资料,欢迎推荐、交流(QQ:379032449),文章仅用于研究,切勿用在非法用途。在下一篇文章中,我将还原大部分DDOS攻击的场景。 |