DDoS攻击

DDoS攻击

1.1DDoS定义及原理

DDoS攻击(Distributed denial of service),分布式拒绝服务,拒绝服务是指攻击者向互联网上的某个服务器不停发送大量分组,使该服务无法提供正常服务,甚至完全瘫痪,若攻击者组织成百上千个协作的同伴(或计算机),从不同位置同时提出服务请求,直到服务无法访问,这就是“分布式”。而发起攻击的网络称为僵尸网络(BotNet),每个僵尸可以是一台个人电脑,可以是一台服务器,甚至可以是一台智能手机,而为了得到这样一个僵尸网络,利用木马、蠕虫、后台等恶意程序感染大量设备,形成大量网络。

1.2DDos攻击的历史

历史上第一次DoS攻击是在1996年9月6日,互联网服务提供商Panix的服务器受到每秒150次的异常连接攻击, 导致服务器疲于应对非法流量,而拒绝了正常用户的合法请求,至少6000名用户因此无法收取邮件。
1999年8月17日,美国明尼苏达大学的服务器,被迫终止了2天,而这至少277台发起攻击的设备都是在不知情的情况下被Trinoo工具感染的,而成为一员,在通过IP追踪并让设备停止攻击后,问题还是未能解决,因为不断有新的攻击设备加入进来。这应该是第一次真正意义上的DDoS攻击。
此后DDoS经历了工具化、武器化、普及化的发展应用于有组织犯罪、网络战以及黑客运动主义中。时至今日,DDoS攻击问题也没能完全解决,而且不断出现新的方式出现,这就需要我们熟悉了解它的原理及攻击方法,进而做好预防。

2.DDoS攻击的方法

分布式服务攻击的精髓在于利用分布式的客户端,向服务器发起大量看似合法的请求,消耗或长期占用大量资源,从而达到拒绝服务的目的。现代互联网中的数据流转依靠的是以TCP/IP协议为核心的通信系统,TCP/IP的参考模型是一个4层结构。从数据的通信过程中我们发现,前3层容易被DDoS攻击,由此,我们对其进行分类,如下图所示[1]:
DDoS攻击_第1张图片

2.1互联网层

互联网层主要规定了通信双方地址的编码规则, 这一层采用的是IP协议,所以大家经常会听到所谓的设备IP地址。
(1)ICMP洪水攻击
网络控制消息协议(Internet Control Message Protocol,ICMP)是TCP/IP协议族的核心协议之一,是IP协议中用来进行差错控制的一个补充,本质是还是一个IP包。
攻击者使用受控主机向被攻击目标发送大量的ICMP报文,进行洪水攻击以消耗目标的带宽资源,这种攻击方式也称为ICMP洪水(ICMP flood),这种攻击手段会霸占服务器的网络带宽资源,我们只需向一台服务器发送大量的IP协议数据包,就可以慢慢的消耗掉对方的网络带宽,像ping工具就可以发起一次攻击,ping产生的是ICMP协议包[1]。

2.2传输层

传输层,规定了数据的传输方式,像通过3次握手的TCP协议建立可靠的连接,还有不需要握手建立连接直接把数据投递的UDP协议,在传输层与应用层之间对网络连接进行加密的SSL协议等。

2.2.1攻击TCP连接

(1)TCP连接洪水攻击

因为TCP协议中有连接的概念,所以还可以攻击服务器的连接资源,服务器和客户端每次建立一个TCP连接时,然后把连接信息放入连接表中维护而连接表的大小是有限的,我们可以让发起攻击的设备直接发起大量的TCP连接,从而占满服务器的这个连接表,而无法响应后续的TCP连接请求,从而达到DDoS攻击的效果,这种直接被称之为TCP洪水(TCP flood),但因为有三次握手的存在,所以TCP洪水无法通过伪造IP隐藏自己。

(2)SYN洪水攻击

首先,在TCP连接时,会进行三次握手,客户端发送SYN=1,ACK=0,然后服务器进行回复确认,发送SYN=1,ACK=1,接着客户端发送 ACK=1进行确认。
SYN洪水攻击就是攻击者利用受控主机发送大量的TCP SYN报文,使服务器打开大量的半开连接,占满服务器的连接表,从而影响正常用户与服务器建立会话,造成拒绝服务。
攻击者将SYN报文的源IP地址随机伪造成其他主机的IP地址或不存在的IP地址,在发送TCP SYN报文时,可以在收到服务器端返回的SYN+ACK报文后,利用TCP协议中有重传机制,使连接处于半开状态,从而占用连接资源并隐藏攻击来源。

(3)PSH+ACK洪水攻击

在TCP协议中,第三次握手时,如果服务器收到了一个PSH+ACK标志的报文时,服务器会立即将数据递交服务进程并清空缓存。利用这点,攻击者可以利用受控主机向攻击目标发送大量PSH+ACK数据包,攻击目标会不断做清空处理,导致无法正常处理数据,造成DDoS攻击。

(4)RST洪水攻击

在TCP协议中,一般用4次挥手结束连接,但为了防止出现异常,一方可以发送一个RST数据强制切段连接,利用这点,攻击者可以让攻击设备不断的尝试各种伪造各种IP地址,并发送RST数据进行“盲打”,一旦IP和其他的一些配置和某个正常用户的匹配上,就能切断正常用户和服务器之间的连接,这种攻击方式更针对用户。
(5)Sockstress攻击
Sockstress攻击属于慢速攻击,简单的说其原理是建立了连接,但是不传数据,而且这个连接不会断开,占用资源,最后导致拒绝服务攻击。

2.2.2攻击SSL连接

安全套接层(Secure Sockets Layer,SSL)的作用是在端系统应用层的HTTP和运输层之间,在TCP之上建立一个安全通道,为数据提供安全保障。
SSL的工作流程简单的说是,当建立TCP连接后,先进行握手协议,完成加密算法的协商和会话密钥的传递,然后进行安全数据传输,实际步骤要复杂许多。

THC SSL DoS攻击

在完成握手后的第二步加密协商中有一个Renegotiation选项,即重新协商建立密钥。利用这点,攻击者可以不断进行密钥的重新协商,而重新协商要服务器投入比客户端多15倍的资源,造成被攻击者目标资源耗尽,这就是THC SSL DOS攻击。

SSL洪水攻击

在握手时,服务器会对资源进行解密,再对数据进行有效检验,这会消耗较多CPU。利用这点,攻击者并不需要完成SSL握手和秘钥交换,而只需要在握手过程中让服务器去解密和验证,就能够大量的消耗服务器的计算资源,这就是SSL洪水攻击。

2.2.3攻击UDP连接

(1)UDP洪水攻击

用户数据报协议(User Datagram Protocol,UDP)是一种面向无连接的传输层协议,主要用于不要求分组顺序到达的传输,提供面向事务的简单的不可靠信息传送服务。与ICMP攻击类似,我们可以发送传输层的UDP协议包,发起一次UDP洪水攻击(UDP flood)。
使用UDP小包攻击能够最有效地增大网络设备处理数据包的压力,造成处理速度的缓慢和传输延迟等拒绝服务攻击的效果。使用UDP大包攻击,能够有效地占用网络接口的传输带宽,并迫使被攻击目标在接收到UDP数据时进行分片重组,造成网络拥堵,服务器响应速度变慢。像第一章提到的明尼苏达大学的DDoS攻击就是UDP洪水攻击。但有一个问题,这会暴露攻击设备的IP地址,而被对方进攻,所以攻击者一般都会通过伪造IP地址隐藏自己。像前面提到的名尼茨达大学的DDoS攻击用的就是UDP洪水攻击。

2.2.4反射和放大攻击

基于隐藏自己的这个目的,发明了一种更有趣的攻击方式,反射攻击 DRDoS(Distributed Reflection Denialof Service),简单来说就是利用路由器、服务器的应答来达到反射隐藏攻击来源的效果,这些路由器、服务器第三方机器称为“反射器”。而放大攻击就是指反射器对网络流量具有放大作用,原理与反射攻击一致。

(1)ACK反射攻击

与前文的SYN洪水类似,ACK应答进行反射攻击,只是把源地址设置为被攻击目标IP,攻击目标不是服务器。
具体地,攻击者把源地址伪造成攻击目标的IP地址,然后目的地址设置为互联网上大量的第三方机器,这样攻击者可以通过受控主机向大量不同的服务器发送伪造源IP地址的SYN请求,从而使服务器响应的大量ACK应答数据涌向被攻击目标,占用目标的网络带宽资源并造成拒绝服务。 其优点在于能够有效隐藏攻击来源。

(2)DNS放大攻击

DNS服务器是一种用来把域名解析为IP地址的设备。通常DNS响应的数据包都比查询数据包大,可以将攻击流量放大210倍,这样攻击者不断的去对DNS服务器发起查询请求,并把源地址伪造为攻击目标的IP,那么这样的反射攻击就会产生210倍的流量放大效果,进而导致目标网络拥堵和缓慢。

(3)NTP放大攻击

网络时间协议(Network Time Protocol,NTP)是用来使计算机时间同步化的一种协议,它可以使计算机与时钟源进行同步化并提供高精准度的时间校正。通常NTP会实现一系列Mode 7的调试接口,里面的monlist请求会获取与目标NTP服务器同步的最后600个客户端的信息。进而达到600倍的放大效果。与DNS放大攻击类似,攻击者只需伪造源地址的IP地址的UDP请求包发送给NTP放大器,就可达到700倍以上的放大效果,导致攻击目标网络拥堵和缓慢。

(4)SNMP放大攻击

简单网络管理协议(Simple Network ManagementProtocol,SNMP)是目前网络中应用最为广泛的网络管理协议,它提供了一个管理框架来监控和维护互联网设备。在SNMPv2中,添加了GetBulk请求,该请求会通知设备返回尽可能多的数据,这使得管理程序能够通过发送一次请求就获得大段的检索信息,使用该方式进行放大攻击能够达到25倍以上的放大效果。类似的,将源IP地址伪造成攻击目标的IP地址。设备收到GetBulk请求后,会将响应结果发送给攻击目标。当大量的响应结果涌向攻击目标时,就会导致攻击目标网络拥堵和缓慢。

2.3应用层

应用层规定了一些数据内容的协议规则,像常用的http协议就是属于这一层。无论是利用IP,UDP还是TCP协议攻击,针对的都是网络和连接资源,还有一种针对服务内部资源的攻击方式,消耗目标的计算和资源。
当客户端与服务器建立会话连接后,客户端不能获取到所需的内容,网络应用和服务在处理数据时,消耗一定的网络连接、计算和存储资源,这些资源是由应用程序向系统进行申请并自行管理和维护的,消耗应用资源的DDoS攻击就是通过提交大量消耗资源的请求,从而达到拒绝服务的目的。这里主要分为DNS和Web服务两大类。

2.3.1攻击DNS服务

DNS服务是互联网的一项核心服务。通过使用DNS,人们在访问网站时不需要记忆其IP地址,而只须输入其域名即可。
DNS Query洪水攻击
DNS QUERY洪水攻击是指向DNS服务器发送大量查询请求以达到拒绝服务效果的一种攻击方法。如果攻击者利用大量受控主机不断发送不同域名的解析请求,那么DNS服务器的缓存会被不断刷新,而大量解析请求不能命中缓存又导致DNS服务器必须消耗额外的资源进行迭代查询,这会极大地增加DNS服务器的资源消耗,导致DNS响应缓慢甚至完全拒绝服务。
DNS NXDOMAIN洪水攻击
DNS NXDOMAIN洪水攻击是DNS QUERY洪水攻击的一个变种攻击方式,向DNS服务器查询一个不存在的域名。当DNS NXDOMAIN洪水攻击时,DNS服务器会进行多次域名查询,缓存被大量占满,导致正常用户的DNS解析请求的响应速度变慢。除此以外,一部分DNS服务器在获取不到域名的解析结果时,还会再次进行递归查询,向其上一级的DNS服务器发送解析请求并等待应答,这进一步增加了DNS服务器的资源消耗。

2.3.2攻击Web服务

人们一般通过浏览器使用Web服务,简单方便获取需要的信息。一旦Web服务受到攻击,会对所承载的业务造成致命的影响。

(1)http洪水攻击

在处理HTTP的GET请求和POST请求时,Web服务器需要解析请求、处理和执行服务端脚本、验证用户权限、多次访问数据库,这回消耗大量计算资源和IO访问资源。
我们可以对一个站点发起http洪水攻击,比如站点的搜索功能,不断生成大量的关键词送入查询地址,因为http请求作为用户直接发送的涉及具体业务的请求,服务器在收到请求后需要进行数据库这样的IO操作,这样的攻击首发会对目标产生更大的消耗,当然http洪水攻击有个问题,那就是不能伪造IP地址,因为http协议实质上是基于TCP协议的,需要经历3次握手的过程,所以常见的方法是借助网络代理主机,得到不同的真实IP发起攻击。HTTP洪水是目前威胁最大的攻击之一,发动简单效果明显,已经成为主流攻击方式之一。

(2)其他慢速攻击

Slowloris攻击、慢速POST请求攻击、数据处理过程攻击3类都是属于慢速攻击。
Slowloris攻击主要是在发送HTTP GET请求时,缓慢地发送无用的header字段,并且一直不发送“\r\n\r\n”结束标志,长期占用连接,耗尽连接资源,导致其他正常用户的HTTP请求无法被处理,造成拒绝服务;
类似的,慢速POST请求攻击通过在请求头部中将Content-Length设置为一个很大的值(例如10000),并将HTTP BODY以非常缓慢的速度一个字节一个字节的向Web服务器发送,从而达到耗尽Web服务器的连接资源的目的;
数据处理过程攻击通过恶意构造请求数据的内容,攻击者可以显著地增加数据处理过程中的资源消耗,造成拒绝服务攻击,主要有正则表达式和哈希冲突拒绝服务攻击。

DDoS攻击的治理和缓解

DDoS攻击的主要手段有IP地址伪造、放大器,那么只要解决了这些问题就可以很好的治理DDoS攻击,但并不是所有企业都承担得起这些治理方案,所以有了缓解DDoS的保守方案,主要有对攻击流量的稀释和清洗两种方法。

(1)分布式过滤

针对伪造IP地址的问题,提出了分布式过滤的方法,庞大的互联网中不同的网段依靠路由器把彼此连接,IP可以伪造,但是路径不可能伪造,一个数据从甲发送到乙,无论如何都不会经过A,如果经过了,就将数据包丢弃。从而消灭伪造IP的问题。

(2)网络设备IP过滤

而治理伪造IP地址的另一个简单的方法就是,先在互联网的下游,也就是在用户设备接入的这一端,设备通过路由(或者通过多个路由网关)接入互联网服务提供商(ISP),所以只要让路由设备检测IP把源地址IP不属于本路由所在网段的数据都过滤掉,这样试图伪造IP的流量就无法发出。

(3)稀释攻击流量

DDoS的可怕在于分布式,当一个僵尸网络上对目标发起攻击时,很难处理这些来自四面八方的发流量,把一个网络的流量分散到不同的地方,从而稀释攻击流量,比如各个站点普遍采用CDN技术,把一些相对静态的资源作为缓解分发给各个CDN节点,用户在请求的时候好从最近的节点返回,这样就在一定程度上缓解了DDoS攻击。

(4)清洗攻击流量

CDN的缓解作用比较有限,目前主流的方案是流量清洗。只需在服务器前架设一台流量清洗设备,比如,面对TCP协议的SYN洪水,客户端发起的SYN先进行清洗设备,由清洗设备回复SYN+ACK,如果对方应答了那说明是正常流量,清洗设备再把本次连接交给后发的服务器正常通信,如果对方不应答,清洗设备该重试重试,超时之后就断开连接。

3.未来发展方向

软件定义网络(SDN)是一种新型的、控制与转发分离、并直接可编程的网络架构,是未来新型的网络架构,它简单的说是把传统软硬件网络给软件化、具象化了,分为应用层、控制层、数据层,其中OpenFlow协议被看成SDN体系结构中控制层与数据层之间的通信接口,用于根据特定的规则转发流量的OpenFlow交换机。
一个OpenFlow交换机有一个或多个流表。这些表用于根据从集中控制器接收到的数据包处理规则(流规则)来控制数据包(例如,转发或丢弃)。因此,根据管理流表的控制器策略,OpenFlow交换机可以充当路由器、交换机或防火墙,或表现出取决于数据包处理规则的类似功能。具体工作流程如下[2]:
DDoS攻击_第2张图片

图 1Open Flow工作流程
DDoS攻击_第3张图片

图 2 SDN的DDoS攻击
由于每个未知流都会出现table-miss情况并在交换机的内存里加一个新条目,而交换机的流表大小、缓存表有限,这会导致资源被占用,针对表项问题提出了一下解决方案[2]:
DDoS攻击_第4张图片

当然还有其他DDoS攻击,比如调度问题、架构问题、统计、机器学习方面的问题等等,限于篇幅,这里就不赘述。

参考文献

[1]鲍旭华,洪海,曹智华.破坏之王:DDoS攻击与防范深度剖析[M].北京:机械工业出版社.2014:57-94,126-154.
[2]Eliyan Lubna Fayez,Di Pietro Roberto. DoS and DDoS attacks in Software Defined Networks: A survey of existing solutions and research challenges[J]. Future Generation Computer Systems,2021(prepublish).

你可能感兴趣的:(dos,网络,服务器,安全)