DDoS和CC攻击原理(中)

华盟原创文章投稿奖励计划

0、前言

本主题研究DDoS和CC的实现原理以及其具体的实现方法,并对如何检测和防护进行说明。

文章一共分为(上)(中)(下)三篇

1、DDoS攻击

1.1 IP Spoofing/syn flood攻击

IP Spoofing也叫IP欺骗,其原理是攻击者机器A利用软件构造一个虚假不存在的IP地址,并以此不存在地址为源IP地址向受害者机器B发送SYN报文,请求建立TCP/IP连接。目标机器B接收到这个SYN报文后,会将收到的SYN报文中的源IP地址提取出来,并将此IP作为目的IP,回复一个ACK/SYN确认报文给B,并等待接收来自B的确认报文。由于这个目的IP是攻击者A伪造的,实际网络中根本不存在,所以这个ACK/SYN确认报文也就无法到达,B也就不可能接收到它的确认报文。

但是,根据TCP/IP协议规范,受害者B必须一直等待接收A回复的确认报文,直到受害者B内部的定时器超时才放弃等待。这就是一次IP Spoofing攻击,假如攻击者A使用软件以每秒几百次几千次乃至几万次的速度向同一个受害者B发送虚假SYN报文,那么受害者机器B上就会产生大量的TCP/IP半连接,并且都要等待这些半连接超时(在等待的时候要专心,不能干别的事情的,呵呵),从而使系统资源(CPU、内存、数据缓冲区、数据包处理队列)耗尽不能及时响应正常的服务请求。

如果攻击者A控制几百几千台乃至几万台机器同时使用软件分别以每秒几百次几千次乃至几万次的速度向同一个受害者B发送虚假SYN报文,这样,受害者B所建立的TCP/IP半连接数量会呈指数上升,即使B的处理能力再强,网络带宽再宽,系统也会在瞬间崩溃,这就是DDoS攻击。

另外还有一种利用大量真实ip的肉鸡实施的syn攻击,也属于syn flood攻击。

1.2 land攻击

Land攻击其实是IP Spoofing攻击的一个变种。其原理是攻击者机器A向受害者机器B发送一个伪造的SYN报文,此SYN报文的源IP地址和目的IP地址都被设成受害者机器B的IP地址,源端口号和目的端口号也相同。

受害者机器B接收到此SYN报文后,提取报文的源IP地址(其实是B机器自己的IP地址),并将其作为目的IP地址发送一个SYN/ACK 报文(其实是向它自己发送了一个SYN/ACK报文),结果这个地址又发回ACK确认报文,从而创建了一个空连接,每一个这样的空连接都将保留到内部定时器超时后才释放,从而消耗掉大量的系统资源。对于Land 攻击,各种操作系统的反应也有所不同UNIX 系统将会崩溃,而NT 系统将变的极其缓慢,时间大约持续五分钟。

1.3 ack攻击

系统在收到一个ACK报文时,如果目的端口未开放,那么端系统会直接向源IP发送RST报文, 如果系统的相关端口是对外开放的,那么其在收到ACK报文时,首先会检查这个ACK报文是否属于TCP连接表中的一个已有连接(这个过程会对端系统主机CPU资源造成一定的消耗),如果是的话,则正常处理如果不属于任何一个已有连接,那么系统会向源IP发送RST报文。

因此,单纯的伪造IP进行ack攻击对系统的影响并不大,ack攻击需要配合SYN flood攻击才能产生较好的攻击效果,原因为针对防护SYN flood攻击的一种技术 ——SYN cookie技术。当某些启用SYN cookie技术进行SYN flood攻击防护的中间设备(专业抗DOS设备、防火墙、IPS、负载均衡、路由器等),在收到ACK报文时,需要计算cookie值,这个过程会消耗一部分中间设备的CPU资源,如果大量的ACK报文过来的话,很可能很快就会导致设备资源耗尽,达到拒绝服务的效果。

另外,高于10kpps的ACK Flood会造成服务器网卡中断频率过高,负载过重而停止响应。

1.4 syn、ack混合攻击

建立TCP连接后再进行流量型攻击,能够绕过纯流量型防御算法(绝大部分防火墙会先检查连接跟踪表)。如果连接较多该种攻击对服务器的危害较大。

DDoS和CC攻击原理(中)

1.5 udp flood攻击

UDP Flood攻击的原理是攻击者机器A伪造一个并不存在的IP地址,并以此为源IP地址向受害者机器B发送一个UDP报文,B收到UDP报文后,发现上层没有任何应用程序在等待UDP端口,于是B就会生成一个ICMP报文发给该伪造的源IP地址,告诉对方刚才所发的UDP报文无法连接。如果A向B发送的足够多的UPD报文,受害者B将忙于处理这些无用的UDP报文,造成系统资源耗尽,导致瘫痪。

DDoS和CC攻击原理(中)

1.6 ICMP flood攻击/Smurf攻击

ICMP Flood攻击的原理就在在较短时间内向受害者机器发送大量的ICMP请求报文,使受害者机器忙于向外发送ICMP应答报文,造成系统资源耗尽导致瘫痪。

Smurf攻击的原理是攻击者A向广播地址发送ICMP请求广播报文,不过该广播报文的源IP地址不是攻击者A本身,而是伪造成受害者B的IP地址,这样,广播域内所有收到该ICMP请求报文的机器都会给受害者B回复ICMP应答报文,因而产生大量的通信业务,从而导致受害者B的网络拥塞及系统瘫痪。对于Smurf攻击,广播域内的机器数量越多,攻击效果就越明显。

1.7 DNS(UDP53)反射放大攻击

DDoS和CC攻击原理(中)

1.8 DNS Query Flood攻击

攻击采用的方法是向被攻击的服务器发送大量的域名解析请求,通常请求解析的域名是随机生成或者是网络上根本不存在的域名,被攻击的DNS 服务器在接收到域名解析请求的时候首先会在服务器上查找是否有对应的缓存,如果查找不到并且该域名无法直接由服务器解析的时候,DNS 服务器会向其上层DNS服务器递归查询域名信息,直到该域名的最终解析服务器。域名解析的过程给服务器带来了很大的负载,每秒钟域名解析请求超过一定的数量(根据购买套餐不同)就会造成DNS服务商停止对该域名的解析服务。

DDoS和CC攻击原理(中)

1.9 XSSDoS攻击

当网站存在XSS漏洞时,攻击者可以在用户的自定义头像中插入邪恶的javascript代码。所以当合法的用户访问这些存在漏洞的页面时(这些页面包含了攻击者的评论,评论中包含头像),攻击者藏在头像中的恶意javascript代码就会被执行,这段代码向用户浏览器中插入一个隐藏的iframe,其地址指向DDos攻击者的C&C服务器。攻击者使用一个基于 Ajax-script 的DDos工具控制着DDos攻击的频率。当每个10分钟的视频每分钟都有成千上万的用户进行观看的时候,这些看似不起眼的访问就会变成一场可怕的DDos风暴。

DDoS和CC攻击原理(中)

1.10 CPDoS攻击

Cache-Poisoned Denial-of-Service (CPDoS) 一种新式的web缓存污染攻击
https://cpdos.org/
基本攻击流程描述如下,如图所示:

攻击者发送一个简单的HTTP请求,其中包含针对某些Web服务器提供的受害者资源的恶意标头。该请求由中间缓存处理,而恶意标头保持不显眼。

高速缓存将请求转发到原始服务器,因为它不存储目标资源的新副本。在原始服务器上由于请求处理中包含恶意头因此请求处理会引发错误。

结果,原始服务器返回一个错误页面该页面由缓存而不是请求的资源存储。

攻击者作为响应检索到错误页面时,知道攻击是成功的。

合法用户尝试通过后续请求获取目标资源...

...将获得缓存的错误页面,而不是原始内容。

DDoS和CC攻击原理(中)

1.11 ReDoS攻击

写得不好的正则表达式可能会导致正则表达式引擎耗费大量的时间在回溯上,达到输入长度的指数级!一个不太长的字符串(几十或几百)就能让正则引擎这辈子都跑不出匹配结果,从而导致拒绝服务攻击(Denial of Service),因为是正则表达式导致的,缩写成ReDoS。

DDoS和CC攻击原理(中)

1.12 反射放大攻击

1.12.1 NTP(UDP123)

NTP (网络时间同步协议)包含一个 monlist 功能,也被称为 MON_GETLIST,主要用于监控 NTP 服务器,NTP 服务器响应 monlist 后就会返回与 NTP 服务器进行过时间同步的最后 600 个客户端的 IP,响应包按照每 6 个 IP 进行分割,最多有 100 个响应包。当攻击者伪造目标ip对NTP服务器发起monlist请求时,目标ip将受到来自NTP服务器的monlist响应包,请求包的大小为 234 字节,每个响应包为 482 字节,如果单纯按照这个数据我们可以计算出放大的倍数是:482*100/234 = 206 倍。

DDoS和CC攻击原理(中)

1.12.2 SNMP(UDP168)

SNMP第二版里面引入了getbulk,在单个请求里面能获得大量的管理数据一次bulk请求就可以收到一个包含70条信息的响应包从而实现放大攻击。

DDoS和CC攻击原理(中)

1.12.3 TFTP(UDP69)

tftp没有认证过程,这样就可以随意登录读取文件,同时伪造源(攻击目标)IP地址,为反射做好准备,而tftp重传机制,当服务端在没有收到我们的攻击目标的ACK包时,就会重传一定的次数给攻击目标,达到放大的目的。

DDoS和CC攻击原理(中)

1.12.4 SSDP(UDP1900)

简单服务发现协议(SSDP,Simple Service Discovery Protocol)是一种应用层协议,是构成通用即插即用(UPnP)技术的核心协议之一,广泛应用于无线路由器、网络摄像头、打印机、智能家电等UPnP设备。

攻击者通过伪造SSDP请求源地址,使UPnP设备将SSDP应答消息发往攻击目标,由于UPnP设备数量较多,攻击者实现将大量流量引入特定攻击目标。据统计,SSDP放大倍数在30倍左右。

DDoS和CC攻击原理(中)

1.12.5 Chargen(UDP15)

Chargen 字符发生器协议(Character Generator Protocol)是一种简单网络协议,设计的目的是用来调试TCP 或UDP 协议程序、测量连接的带宽或进行QoS 的微调等。它的默认端口为19,分为基于TCP 和UDP 两种方式,TCP 方式下建立连接后,服务器会不断传送任意字符到客户端,直到客户端关闭连接。UDP 方式下每当服务器收到客户端的一个UDP数据包后向客户端返回一个数据包,长度为0~512 字节之间随机值数据包的负载可以是任意字符。

Chargen 协议的设计初衷是为了网络测试,并没有严格的访问控制和流量控制机制,在UDP 模式下任何人都可以向开放该服务的主机请求服务,这种简单的请求-回复模式便为DDoS 攻击者提供了便利。这个漏洞早在1996年就被发现(CVE-1999-0103),该漏洞被利用最主要的原因是实现过程没有设计必要的访问控制。

1.12.6 BT

广泛使用的BitTorrent客户端如uTorrent、Mainline和Vuze,被发现都存在弱点,可被利用发动DDoS攻击, 允许一个人轻而易举的瘫痪一个网站。分布式反射拒绝服务攻击漏洞存在于BitTorrent协议之中,它允许一名BitTorrent用户向其它 BitTorrent用户发送伪造请求。BitTorrent客户端收到请求之后将能以50倍到120倍于原始请求的流量攻击目标计算机。让这种攻击变为可能的关键在于BitTorrent使用的用户数据报文协议没有包含防止IP地址纂改的机制。

DDoS和CC攻击原理(中)

1.12.7 memcached

很多管理员在安装memcache时将服务错误监听在0.0.0.0,且未进行防火墙规则设置,导致攻击者可发送大量伪造攻击目标IP的UDP请求包给memcache服务器,服务器将在不需要认证的情况下直接回应请求包,且回应包比请求包的大小高出上万倍,形成巨大的反射放大流量,其倍数能达到五万倍。

DDoS和CC攻击原理(中)

2、CC攻击

2.1 webcc之http get/post

这种攻击是指攻击源和服务器建立正常的TCP连接,并不断的向脚本程序提交查询、列表等大量耗费数据库资源的调用,典型的以小博大的攻击方法。一般来说,提交一个GET或POST指令对客户端的耗费和带宽的占用是几乎可以忽略的,而服务器为处理此请求却可能要从上万条记录中去查出某个记录,这种处理过程对资源的耗费是很大的,常见的数据库服务器很少能支持数百个查询指令同时执行,而这对于客户端来说却是轻而易举的,因此攻击者只需通过Proxy代理向主机服务器大量递交查询指令,只需数分钟就会把服务器资源消耗掉而导致拒绝服务,常见的现象就是网站慢如蜗牛、ASP程序失效、PHP连接数据库失败、数据库主程序占用CPU偏高。

DDoS和CC攻击原理(中)

2.2 webcc之http head

http HEAD方法跟GET方法相同,只不过服务器响应时不会返回消息体。一个HEAD请求的响应中,HTTP头中包含的元信息应该和一个GET请求的响应消息相同。这种方法可以用来获取请求中隐含的元信息而不用传输实体本身。

DDoS和CC攻击原理(中)

2.3 变异http攻击

变异GET提交的数据大致模拟IE访问时的数据包..包含有完整的User-Agent 等信息...因为包体比普通CC的要大.所以受肉鸡网络环境所影响..对WEB端口的拒绝服务效率要低于前者..但是因为伪造完整正常的数据包..所以在穿透防火墙的效果上要高于普通的CC..

DDoS和CC攻击原理(中)

2.4 变参http攻击

GET提交数据包 与变异CC一样..只不过他不仅仅是针对一个页面..而是有规则的同时GET多个页面..比如攻击目标使用%d作为通配符 .将%d定义为 1~10(.php) 那么它会依次查询目标的(1.php,2.php,3.php....)等页面..【一般应用于网站子页面有规则的动态站点,例如 论坛,CMS系统等等,特别是对数据库的压力非常之大.因为不停对动态页面的查询会读写数据库..目前这种攻击方式也被防火墙所关注.效率也低了】

DDoS和CC攻击原理(中)

2.5 https攻击

由于对 HTTPS 协议的处理相对 HTTP 会消耗更多的资源,因此无论是网站运营者还是安全服务商在面对 HTTPS CC 资源消耗型攻击时,防护能力会面临巨大挑战。

DDoS和CC攻击原理(中)

2.6 慢速攻击(1)

对任何一个开放了HTTP访问的服务器HTTP服务器,先建立了一个连接,指定一个比较大的content-length(用于描述HTTP消息实体的传输长度),然后以非常低的速度发包,比如1-10s发一个字节,然后维持住这个连接不断开。如果客户端持续建立这样的连接,那么服务器上可用的连接将一点一点被占满,从而导致拒绝服务。

DDoS和CC攻击原理(中)

2.7 慢速攻击(2)

Slow headers:Web应用在处理HTTP请求之前都要先接收完所有的HTTP头部,因为HTTP头部中包含了一些Web应用可能用到的重要的信息。攻击者利用这点,发起一个HTTP请求,一直不停的发送HTTP头部,消耗服务器的连接和内存资源。抓包数据可见,攻击客户端与服务器建立TCP连接后,每30秒才向服务器发送一个HTTP头部,而Web服务器再没接收到2个连续的rn时,会认为客户端没有发送完头部,而持续的等等客户端发送数据。

Slow body:攻击者发送一个HTTP POST请求,该请求的Content-Length头部值很大,使得Web服务器或代理认为客户端要发送很大的数据。服务器会保持连接准备接收数据,但攻击客户端每次只发送很少量的数据,使该连接一直保持存活,消耗服务器的连接和内存资源。抓包数据可见,攻击客户端与服务器建立TCP连接后,发送了完整的HTTP头部,POST方法带有较大的Content-Length,然后每10s发送一次随机的参数。服务器因为没有接收到相应Content-Length的body,而持续的等待客户端发送数据。

Slow read:客户端与服务器建立连接并发送了一个HTTP请求,客户端发送完整的请求给服务器端,然后一直保持这个连接,以很低的速度读取Response,比如很长一段时间客户端不读取任何数据,通过发送Zero Window到服务器,让服务器误以为客户端很忙,直到连接快超时前才读取一个字节,以消耗服务器的连接和内存资源。抓包数据可见,客户端把数据发给服务器后,服务器发送响应时,收到了客户端的ZeroWindow提示(表示自己没有缓冲区用于接收数据),服务器不得不持续的向客户端发出ZeroWindowProbe包,询问客户端是否可以接收数据。

使用较多的慢速攻击工具有:Slowhttptest和Slowloris

2.8 空连接/少包攻击

依靠大量的肉鸡ip对服务器发起连接,连接建立后不发数据包或发少量包(导致不会触发防御阀值),占用连接资源导致服务器崩溃。(这种攻击比较难防,威力较大)

DDoS和CC攻击原理(中)

2.9 gamecc之假人攻击

假人攻击就是黑客利用肉鸡做到很多虚拟帐号同一个时间登陆进服务器,假人数据包和真实玩家数据包完全无差异,真实玩家先是卡之后就进不去了,达到攻击服务器使开服失败的目的!多为发布站之间恶性竞争!比如你在www.123.com做广告!www.456.com的就会攻击你!

游戏一般有游戏网站(客户端、游戏列表)、登录网关端口、角色网关端口、游戏网关端口等组成,任何一个环节的攻击都将导致游戏服务器业务受影响。

DDoS和CC攻击原理(中)

3、小结

根据上面的内容,其实不难看出,DDoS和CC能够实现攻击的基础是:源、目的ip地址伪造,数据包参数伪造,具体是什么使得DDoS和CC攻击成为现实,在最后一篇文章中,我们再来进行总结以及探讨如何对其进行防护。

声明:文章内容均来自互联网,并且仅是对攻击原理进行理论性描述,未具体提供任何可用于直接进行攻击实现的手段,目的是为了进行学习交流,请读者们洁身自好,不要尝试利用,以免误入歧途。

侵权请私聊公众号删文

本文来源疯猫网络,经授权后由congtou发布,观点不代表华盟网的立场,转载请联系原作者。

发表评论