因为最近要测试antiddos的功能,所以简单了解了一下antiddos是什么,纯小白。
ddos全称是Distributed Denial of Service,翻译过来就是分布式拒绝服务。拒绝服务呢,就是用某种技术手段让被攻击的服务器资源耗尽,拒绝正常请求;分布式呢,可以理解成多台计算机联合起来作为一个攻击平台。
如上所述,ddos攻击的目的是为了让被攻击的服务器资源耗尽,服务器资源当然包括计算、网络、存储等,也就是通过一些手段使得服务器的计算性能达到上限、网络带宽被占满或者存储空间被用完,这样服务器就无法响应正常的请求了。
大家肯定都熟悉OSI七层模型,ddos攻击最常出现在第三层(网络层)、第四层(传输层)、第六层(表示层)和第七层(应用层)。第三层和第四层的ddos攻击一般被统称为基础设施层攻击,一般通过模拟大量三四层的报文如icmp、udp、tcp来让服务器进行响应,从而达到消耗服务器资源的目的。这种攻击是最常见的,也是最简单的,甚至开源了很多工具如hping3来模拟这种ddos攻击。正因为这类攻击有一些独有的特性,也使得开发者可以比较容易的识别出这类攻击从而进行防范;第六层和第七层的ddos攻击一般可以归为应用层攻击,这类攻击通过模拟应用层的请求如http来让服务器进行响应。这类攻击没有第一类常见,因为攻击者必须了解服务端应用程序工作方式,需要构造更加复杂的请求,比如某登陆页的http请求、某dns服务器的dns请求。这一类攻击都是正常的请求,所以也更难防范。
这种攻击有一点以巧取胜的意思,它并不需要很大的数量,也许只需要一个特殊的报文就可以导致服务器的崩溃。所谓畸形报文,就是指那些不符合协议规定的报文,比如tcp头的SYN、RST标志位都置1的报文;比如ip头例源地址和目的地址都是同一个的报文等等。
攻击者利用udp无状态的特点,向服务器的不同端口发送udp报文,服务器收到之后会寻找对应端口的应用程序,如果没有找到,会返回“目标不可达”的消息。攻击者往往会通过伪造源ip来达到隐藏自己身份的目的。这种攻击方法以量取胜,一旦服务器被攻击流量淹没,那就无法响应正常用户的请求。
攻击者想服务器发送大量icmp报文,服务器收到之后会回复一个icmp echo给源地址。这种攻击和上面的udp flood攻击类似,可以看到攻击请求和服务器响应流量是1:1的关系,“性价比”并不高,现在已经很少看到了。
最常见最知名的一种攻击,它的防御方法甚至被写进了linux内核。攻击者利用了三次握手的机制,发送大量第一次握手的syn包给服务器,并且无视服务器返回第二次握手的synack包,故意不发送第三次握手,导致服务器大量端口处于SYN_RECV状态。由于服务器收不到第二次握手的报文,超时重传,重传一定次数之后,才会释放连接。服务器的这个状态我们一般称为半连接,要知道服务器能每收到一个syn包时,都会将连接信息储存到一个队列中,这个队列肯定也是有长度的,当超过队列长度时,新来的syn包就无法被响应,服务器也就无法响应正常的tcp请求了。
攻击者向服务器发送大量ack标志位置1的报文,服务器收到后,会在协议栈判断报文是否合法(是否有该四元组的连接,序列号是否正常等等),如果不合法,服务器会返回一个rst报文。跟这种攻击比较类似的还有rst flood和fin flood。
udp是无状态的,没有三次握手,攻击者利用udp的这个特点,向服务器发送大量业务请求,导致服务器返回远大于请求量的响应,从而达到占用大量带宽的目的。
udp reflect攻击主要针对哪些响应包远大于请求包的协议,如dns、ntp等,以达到四两拨千斤的效果。
以dns为例,由于dns大部分提供公网服务,会将53端口暴露到公网上。攻击者伪造一个源ip地址,向dns服务器的53端口发送大量的dns请求,dns服务器收到之后,会回给攻击者伪造的ip地址大量的dns响应。可以看到受攻击的对象有两个,一个是攻击者伪造的ip地址,另一个是dns服务器。
这是表示层的一种ddos攻击。SSL握手的过程中,在协商加密算法时服务器CPU的开销是客户端开销的15倍左右。攻击者利用这一特点,在一个TCP连接中不停地快速重新协商,从而达到耗尽服务器CPU资源的目的。
SSL客户端发送一条ClientHello消息来初始化一次新的握手,该消息大约100字节左右,不需要加密。服务器端响应ClientHello消息,需要连续发出3个消息,ServerHello、Certificate、ServerHelloDone,这3个消息一般在3000字节左右,需要用高级加密标准AES或流加密算法簇RC-4进行加密后再发送。每次ssl握手,SSL服务端发送的数据比客户端多了30倍,还要进行加密,从而导致服务端CPU计算资源大量占用。
http flood是最难模拟也是最难防范的一种攻击,攻击者模拟用户的真实操作对某些接口发送大量http请求,导致其他正常用户的请求响应速度变慢甚至被拒绝。
https://help.aliyun.com/document_detail/65932.html阿里云的这片文章其实已经说的很详细了,这里说些我对这篇文章的理解。
如果我们没有防御成功,需要及时止损,将影响降到最低。
预防ddos攻击的关键其实就是怎么识别正常流量和异常流量。这需要我们对ddos攻击的方法非常了解,对不同的ddos攻击类型做出相应的防御动作。服务器本身几乎没有识别异常流量的能力,所以大部分企业都会购买anti-ddos服务或者waf这样的专业设备来防御ddos攻击。
anti-ddos当然也分为硬件设备和软件。硬件anti-ddos一般会旁挂到汇聚或者核心交换机上,交换机将流量镜像一份发给ddos,ddos识别出异常流量后会做一些流量清洗动作。软件antiddos可能会直接安装到四七层网关上,对经过四七层网关的流量进行过滤。显而易见,软件anti-ddos的优点就是便宜,简单;缺点是可能会拖累四七层网关的性能,可防护的ddos类型和防御能力肯定不如硬件anti-ddos。
但其实有的地方硬件和软件anti-ddos都会用,硬件antiddos主要是进行一个流量清洗的功能,软件antiddos在硬件的后面,主要做一个兜底的作用。
syn flood是最常见的一种ddos攻击,在服务器、网关、anti-ddos每一个环节都有相应的手段可以进行防御。
这三种ddos攻击比较类似,都依赖于会话。如果没有建立会话,那不管是在服务器还是在网关都会直接被丢弃的。判断是否收到攻击也比较简单,就比较命中会话的报文和没命中的比例就好了。
畸形报文往往有一些特征,antiddos可以提前识别以下畸形报文:
其他的一些攻击比如udp reflect、http flood、ssl flood,都是一些接近正常流量的请求,感觉识别异常流量比较复杂,应该只能通过算法来识别。也可以借鉴syn flood的防御方法,主要还是得识别出异常流量和正常流量的源ip地址。
最后如果有条件的话,可以使用hping3模拟三四层的ddos攻击,测试antiddos的功能。hping3不支持ipv6,不过网上有很多开源的ipv6 ddos测试工具如thcsyn6。