网站推广.NET

网站推广.NET

ddos是什么?遇到ddos攻击应该怎么去应对?

来源:互联网

DDoS是“Distributed denial of service attack”的缩写,意为:分布式拒绝服务攻击

DoS denial of service:拒绝服务,指的是服务器或者网络的一种状态,服务不能正常工作,只要造成服务产生DoS状态的攻击成为DoS攻击,而DDoS分布式的DoS攻击,指的是多台机器同时对目标产生DoS攻击行为。

比如占用网络带宽的DDoS攻击,如下图所示:

DDOS攻击主要分为三类:1、流量型攻击2、连接型攻击3、特殊协议缺陷。包括了 Ip Flood、Syn Flood、Udp 反射 Flood、Dns Query Flood、Dns Reply Flood、Http Flood、Https Flood、Sip Invite Flood、Sip Register Flood、Ntp Request Flood、Ntp Reply Flood、Connection Flood、cc攻击、http slow header慢速攻击、http slow post慢速攻击、Https-ssl-dos攻击、Dns NX攻击、Dns 投毒等等。

因时间有限,就简单以tcp SynFlood这种攻击方式为例。

其原理是:

tcp连接有一个队列,当服务器收到靠前次握手包的时候,就会产生一个连接信息放到这个半连接队列里边 syn_backlog ,当服务器收到第三次握手的时候就会从半连接队列查询对应的连接信息,将其移动到另一个已经完成连接的队列 tcp backlog。但是如果攻击者一直发起靠前次握手包syn报文,不发送第三次握手包来完成连接,那么就会导致服务器的半连接队列被撑爆,导致拒绝服务。

如下图所示:

而实现的技术是依据tcp建立连接的三次握手,此攻击以多个随机的源主机地址向目的主机发送syn。攻击者只发起靠前次握手包,但是不发起第三次握手包。而在收到目的主机的syn+ack包后并不回应,目的主机就为这些源主机建立大量的连接队列,由于没有收到ack一直维护这些连接队列,造成资源的大量消耗而不能向正常的请求提供服务。与之类似的攻击方式还有ackflood、s-ackflood、finflood、rstflood、tcpflood。connect api 是会完成三次握手的,所以只能使用原始套接字来实现。

而对于发起的攻击者IP是否会被发现?只要发起DDoS攻击,服务器肯定能发现,如果IP直接写真实的源IP地址,就会导致被攻击者容易追查是哪个人发起攻击的。现在技术也随之升级,攻击者也会知道如何更好利用跳板机等技术,防御方也有更好的防攻击对策,所以在安全攻防界里有一句话叫“道高一尺魔高一丈”。如果源地址是随机的,好处就是让服务器返回第二次握手报文的时候丢给了一个未知机器,该机器即使存活,也不会回第三次握手了。

netwox工具就是一个典型的例子。里面也有很多方法,在此不过多介绍,毕竟这方面说太多就易触碰底线问题了,点到为止即可。

SynFlood攻击的如何防护?

我列三点,当然不止,大佬们有更好的方法可以通过 评论方式一起交流下,谢谢。

1、通过扩大半连接队列的长度来达到防护手段:

这种防护方式真的治标不治本,队列再大也可以将其撑破比如通过这一命令设置:

echo 4096 > /proc/sys/net/ipv4/tcp_max_syn_backlog

2、通过来减少服务器syn+ack的重传次数,提高半连接队列的清理频率:

比如通过这条命令:

echo 4 > /proc/sys/net/ipv4/tcp_synack_retries

3、通过设置 tcp_syncookies:

这个方法虽然能够根本解决问题,但最后也会延伸其他攻击方式。

在靠前次握手,服务器肯定要回第二次握手syn+ack报文 ,服务器在这个报文中放一些信息,该信息只有服务器能够识别,而第三次握手过来的是ack报文,服务器要从这个报文里边解析出之前留下的信息,来确定这个第三次握手包是合法的,就完成连接。直接废弃半连接队列,也就可以不存在半连接队列被撑破的情况。

根据上面所说的,会延伸另一种其他攻击方式的问题,这也是一个缺陷,因为每次第三次握手报文过来,要做额外的运算验证这个报文是否合法的,是一件非常损耗CPU资源的。

这么一来,虽然解决了前面一个问题,后一问题又发生,类似拆东墙补西墙的做法,毕竟可以一直发送第三次握手报文,从而来造成服务器花费大量的CPU资源去做验证,一样会造成DDoS。

这种方法可以通过这条命令来打开:

echo 1 >  /proc/sys/net/ipv4/tcp_syncookies

总结:

对于上面所介绍Web扫描和DDoS攻击部分问题,更多围绕介绍点出发,没具体说明怎么去操作,毕竟这块更侧重于防御,而不是攻击。在防御上或者有更加先进的方法很欢迎讨论评论。最后还是那句话:技术是学来或用来用在对的事情之上的,遵守法律法规,做到合理合法,踏踏实实地做一个白帽子,共同维护一个良好的网络环境。

什么是ddos攻击 怎么防御?