基本概念
我们常在网上看见各种黑客,也听过ddos攻击,那么其到底是什么呢?又是如何攻击你的电脑的呢?
要想了解ddos,首先要知道dos。
dos:全名dos denialof service(拒绝服务),即通过恶意流量占用网络服务的资源让它应接不暇从而拒绝正常流量的一种网络攻击方式。
ddos:在dos之前加了一个Distributed(分布式),所以叫作 Distributed denial of service(分布式拒绝服务),是由多台设备组成网络对目标发起dos攻击。也可以理解成群殴。
这里由多台设备组成的网络称为 僵尸网络,其中的每个设备就是一个僵尸。
现在不管是dos还是ddos,一般都用ddos指代。
黑客发起ddos攻击需要依靠僵尸网络,而僵尸网络又包含大量的设备,那么黑客哪里去搞来这么多的设备呢?
如何获取僵尸网络
- 黑客通过利用木马,蠕虫,后门等恶意程序感染大量正常设备形成僵尸网络。
- 花钱买僵尸网络。
有了僵尸网络,那么就可以发起ddos攻击了,有以下这么几种典型的方式:
DDos攻击方式
下图是一个计算机网络体系结构的部分,我们知道,一次通信过程是需要经过多层的,而几乎经过每一层的时候都有被ddos攻击的机会。
1. 攻击带宽资源
ICMP flood
我们向一台服务器发送大量的IP协议数据包,每个数据包都会占用一部分带宽,大量数据包就会把带宽占满,使其无法处理正常数据,从而达到攻击效果。
例如ping工具就可以实现。ping工具产生的是ICMP协议包(作为IP协议包中的一个补充,本质还是一个IP包),故这种攻击方式也称为ICMP洪水。
UDP flood
同样的思路,我们可以通过传输层的UDP协议包,来发起一次UDP洪水攻击。
但这两种攻击方式都有一个大问题:攻击者给对方发送攻击数据时,会暴露攻击者的ip地址,从而被对方封禁,导致无法再次攻击对方。
怎么解决呢? 伪造ip。
我们可以用伪造的ip地址去攻击对方,这样就算对方发现了ip,由于其是伪造的,对方将其封禁也造成不了影响,下次换个新的伪造ip继续攻击即可。
那么既然可以伪造发件人ip,那同样也可以伪造收件人ip。于是,产生了一种新的攻击方式------反射攻击。
反射攻击
攻击者把数据的发件地址改为攻击目标的ip,把收件地址改为互联网上大量的第三方机器(反射器)。
攻击者发送这些数据,第三方收到后,会把回信全部发给发件地址指向的攻击目标ip,从而达到攻击。
类似于把别人的电话号码挂在网上,导致机主被不明真相的推销员给呼死。
反射攻击也能够很好的隐藏攻击者的真实ip。
反射攻击已经很厉害了,但人们在此基础上又发明了一种把攻击流量放大以达到更强攻击效果的手段------放大攻击。
放大攻击
DNS服务器是一种用来把域名解析成ip地址的服务器,其有一个很大的特性:对其发起的DNS请求, 其返回的数据量往往要大于请求的数据量。
利用这个特性,我们可以将攻击目标的ip作为发件ip,DNS服务器ip作为收信ip,这样当攻击者对DNS服务器发送数据时,DNS服务器会响应数据量超大的数据到攻击目标ip上,让反射攻击的效果放大,从而击溃对方。
以上几种方式都是攻击对方的带宽资源,那么我们还可以攻击对方的连接资源。
2. 攻击连接资源
TCP flood
服务器之间的tcp连接通常由一个连接表来维护,而这个连接表的大小是有限的,攻击者可以通过对攻击目标不断建立tcp连接,使其连接表爆满,从而无法响应后续的正常tcp连接请求。这种方式称为tcp洪水攻击。
那么还是回到那个问题,攻击者为了避免自己拥有的ip被对方封禁,所以需要用伪造ip来攻击对方。
但在tcp协议中,由于三次握手机制的存在,每次攻击者发起的握手都需要对方回信,若攻击者使用伪造ip发起握手,则对方的回信也是发给伪造ip,而不是发给攻击者,那么攻击者也就无法进行第三次握手,tcp连接也就无法建立,无法进行tcp洪水攻击。
那么就没辙了吗?不,我们可以在三次握手本身做文章,比如虚晃一枪的syn flood。
SYN flood
TCP三次握手:
建立连接时,客户端先发送一个带有 SYN 标志的数据包请求建立连接;服务器收到后回应一个同时带有 SYN 和 ACK 标志的数据包表示同意;最后客户端再发送一个 ACK 包确认,连接正式建立。
攻击者对攻击目标发送握手请求(syn),然后不进行回复,这样对方就会考虑到发送方是否因为网络故障而不回复,于是触发tcp超时重传机制,对发送方连续发生多次syn。
但其实这种方式更像是在攻击我们,因为我们攻击了目标一次,目标还击了我们10次。杀敌一千自损一万。
我们不妨以反射攻击的思路出发,根据这种方式,我们能进行反射攻击:向反射器发送syn,把发件地址伪造成攻击目标的ip,这样大量的syn+ack数据就会从反射器涌入攻击目标。
但由于这种方式由于没有且无法建立tcp连接,所以归根到底还是在攻击网络带宽,而不是攻击连接。
RST flood
TCP四次挥手:
断开连接时,主动方先发送一个 FIN 包表示要断开;被动方回一个 ACK 表示收到;然后被动方也发送一个 FIN 包表示同意断开;主动方再发一个 ACK 确认后,连接正式关闭。
tcp协议中,一般用4次挥手来结束连接。但为了防止出现异常,一方可以发送一个RST数据来强制切断连接。
据此,攻击者可以通过伪造大量ip作为发信人对攻击目标发送RST数据,当伪造的ip恰好匹配上某个正常用户的ip时,那么这个正常用户就会与攻击目标强制断开连接。
这种攻击方式其实更针对用户,而不是攻击目标服务器。
3. 攻击内部资源(计算和IO)
HTTPflood
http请求作为用户直接发起的涉及具体业务的请求,其可以触发攻击目标进行数据库查询等别的IO操作,这会对攻击目标的内部资源带来消耗。
但http flood存在弊端:无法伪造ip地址。因为http协议是基于tcp协议的,只要是三次握手,必是无法伪造ip。
以上几种攻击方式只是ddos攻击中典型的一部分,还有非常多更厉害的攻击方式,这里就不一一举例了。
在了解完攻击方式之后,我们再来说说如何进行防御。
如何防御?
1. 过滤伪造ip
网络设备ip过滤
我们每个设备都是通过路由接入互联网服务提供商(ISP)的,所以可以让路由检测ip,把源地址ip不属于本路由所在网段的数据都过滤掉即可。这样试图伪造ip的流量就无法发到我们这里。
分布式过滤
在庞大的互联网中,不同的网段通过路由将彼此连接。
一个数据要从设备甲发送到设备乙,他的源ip可以伪造成丙,但是它所经过的真实线路不可能造假成丙到乙。若路由能够通过ip地址和路径的逻辑检测出这种矛盾,那么就可以过滤掉这样的流量,从而消灭伪造的ip。
流量清洗
顾名思义,就是在服务器前加一台流量清洗设备,用于清洗服务器收到的数据,排除异常数据。
对于syn flood来说,攻击者会用大量的伪造ip将syn数据发给攻击对象,但由于有了清洗设备,所以大量的syn会先打到清洗设备上,清洗设备会先正常打回syn+ack,然后判断是否有回复,若有,则说明该syn没问题,则将syn发给服务器。若没有,则说明该syn的源ip是伪造的,是一个攻击数据,那么也就不对其进行处理了。
对于http flood来说,攻击者会发送大量的http请求,这些请求会先打在清洗设备上,清洗设备会判断这些请求的源ip,若是安全的ip则放行,反之拦截。
那么清洗设备是如何判断该ip是否安全的呢?
- 清洗设备厂商通过多年的经验和数据积累,维护了一个ip信用库。不在该库内的ip就会被视为恶意ip。
- 恶意流量是通过程序自动发出,而不是人类的操作,那么利用算法对流量进行模式识别就可以判断。
以上就是进行防御的几种典型方式。
最后,ddos是一种历史悠久且破坏力巨大的攻击手段,时至今日仍无法被彻底解决。对于普通人,我们能做的只有做好防护,保持警惕。
原文链接: 【DDoS技术鉴赏】https://www.bilibili.com/video/BV1KQ4y117nq?vd_source=e71ee870b86c6ff48d5e69ffe46559c6
我只是根据原文内容进行的二次创作,推荐大家去看原文。