DoS与DDoS

人亦有言进退维谷 2018-04-12

“攻击”和“入侵”的含义:

“入侵”是指在非授权的情况下,试图存取信息、处理信息以使系统不可靠、不可用的故意行为。网络上的入侵通常是利用目标系统的漏洞、bug、缺陷而发起的一种行动,它的目的是获得、修改某些信息、资料或者数据。

“攻击”在网络安全技术中是指对目标网络发起的,以目标被破坏、停止服务等为目的的行为。

“DoS”是Denial of Service,拒绝服务的缩写。所谓的拒绝服务是当前网络攻击手段中最常见的一种。它故意攻击网络协议的缺陷或直接通过某种手段耗尽被攻击对象的资源,目的是让目标计算机或网络无法提供正常的服务或资源访问,使目标系统服务停止响应甚至崩溃,而最值得注意的是,攻击者在此攻击中并不入侵目标服务器或目标网络设备,单纯利用网络缺陷或者暴力消耗即可达到目的。

从原理上来说,无论攻击者的攻击目标(服务器、计算机或网络服务)的处理速度多快、内存容量多大、网络带宽的速度多快都无法避免这种攻击带来的后果。任何资源都有一个极限,所以攻击者总能找到一个方法使请求的值大于该极限值,导致所提供的服务资源耗尽。

从技术分类的角度上来说,最常见的DoS攻击有对计算机网络的带宽攻击和连通性攻击。带宽攻击指以极大的通信量冲击网络,使得所有可用网络资源都被消耗殆尽,最后导致合法用户的请求无法通过。连通性攻击指用大量的连接请求冲击服务器或计算机,使得所有可用的操作系统资源都被消耗殆尽,最终计算机无法再处理合法用户的请求。

在网络还不发达的时候,单一的DoS攻击一般是采用一对一的方式,也就是攻击者直接利用自己的计算机或者设备,对攻击目标发起DoS攻击。当攻击目标处在硬件性能低下、网络连接情况不好等情况的时候,一对一的DoS攻击效果是非常明显的,很有可能直接一个攻击者就搞定一个网站或者一个服务器,让它拒绝服务。

随着计算机和网络技术的发展,硬件设备的处理性能加速度增长,成本也变得非常低廉,网络的快速发展更是让带宽、出入口节点宽度等大大的提升,这让传统的DoS攻击很难凑效。

举个例子来说:假使20年以前,攻击者利用自己的计算机对一个目标服务器发起DoS攻击,他通过编写程序,实现多线程数据发送,每秒给服务器发送5000个数据包(示例数据,没有实质意义),服务器一会就无法正常访问了;但是换到今天,就算攻击者的计算机使用顶级的个人计算机硬件,用最好的配置发起DoS攻击,如果采用传统的攻击方法的话,每秒给服务器发送20000个数据包(示例数据,没有实质意义),但是服务器每秒已经可以轻松的处理20000000个数据包了,这样的攻击根本就达不到想要的拒绝服务效果。

随着这样情况的出现,攻击者研究出了新的攻击手段,也就是DDoS。

DDoS是在传统的DoS攻击基础之上产生的一种新的攻击方式,即Distributed Denial Of Service,分布式拒绝服务攻击。

如果说计算机与网络的处理能力比以往加大了10倍的话(示例数据,没有实质意义),那攻击者使用10台计算机同时进行攻击呢?也就达到了可以让目标拒绝服务的目的。简单来说,DDoS就是利用更多的计算机来发起攻击。

就技术实现方式来分析,分布式拒绝服务攻击就是攻击者利用入侵手段,控制几百台,或者成千上万台计算机(一般被控制的计算机叫做傀儡主机,或者口头被网络安全相关人员称为“肉鸡”),然后在这些计算机上安装大量的DDoS程序。这些程序接受来自攻击者的控制命令,攻击者同时启动全部傀儡主机向目标服务器发起拒绝服务攻击,形成一个DoS攻击群,猛烈的攻击目标,这样能极为暴力的将原本处理能力很强的目标服务器攻陷。

DDoS与DoS的最大区别是数量级的关系,DoS相对于DDoS来说就像是一个个体,而DDoS是无数DoS的集合。另一方面,DDoS攻击方式较为自动化,攻击者可以把他的程序安装到网络中的多台机器上,所采用的这种攻击方式很难被攻击对象察觉,直到攻击者发下统一的攻击命令,这些机器才同时发起进攻。可以说DDoS攻击是由黑客集中控制发动的一组DoS攻击的集合,现在这种方式被认为是最有效的攻击形式,并且非常难以抵挡。

经典DoS攻击类型

死亡之 ping

“ping of death”又称“死亡之 ping”,之所以第一个首先列举它,是因为很久以前,被网络媒体夸大的轰轰烈烈的“中美黑客大战”上,主要的攻击方式就是他。其实死亡之ping是利用的ICMP。现在微软系列操作系统中的命令行中都有ping存在,ping程序实际就是使用的ICMP。本来在正常的情况下,TCP/IP的RFC文档中对包的最大尺寸都有严格限制规定,许多操作系统的TCP/IP协议栈都规定ICMP 包大小为64KB,且在对包的标题头进行读取之后,要根据该标题头里包含的信息来为有效载荷生成缓冲区。但是“Ping of Death”故意产生畸形的测试Ping包,加载的尺寸超过64KB的上限,使未采取保护措施的网络系统出现内存分配错误,导致TCP/IP协议栈崩溃,最终达到目标拒绝服务的目的。

泪滴

“teardrop”,又称“泪滴”:IP数据包在网络传递时,数据包可以分成更小的片段。攻击者可以通过发送两段(或者更多)数据包来实现TearDrop攻击。第一个包的偏移量为0,长度为N,第二个包的偏移量小于N。为了合并这些数据段,TCP/IP堆栈会分配超乎寻常的巨大资源,从而造成系统资源的缺乏甚至机器的重新启动,达到攻击者需要的拒绝服务的目的。

UDP洪水

“UDP flood”又称“UDP洪水”:UDP flood最开始一般应用在针对UNIX类的服务器上,攻击者通过伪造与某一主机的Chargen服务之间的一次的 UDP 连接,回复地址指向开着Echo 服务的一台主机,通过将Chargen 和 Echo服务互指,来回传送毫无用处且占满带宽的垃圾数据,在两台主机之间生成足够多的无用数据流,这一拒绝服务攻击飞快地导致网络可用带宽耗尽

SYN洪水

“SYN flood”又称“SYN洪水”:当用户进行一次标准的TCP(Transmission Control Protocol)连接时,会有一个三次握手的过程。首先请求服务方发送一个SYN消息,服务方收到SYN后,会向请求方回送一个SYN-ACK表示确认,当请求方收到SYN-ACK后,再次向服务方发送一个ACK消息,这样下来一次TCP连接就建立成功了。

“SYN Flood”专门针对TCP协议栈在两台主机间初始化连接握手的过程进行DoS攻击,它在实现过程中只进行前2个步骤:当服务方收到请求方的SYN-ACK确认消息后,请求方由于采用源地址欺骗等手段使得服务方收不到ACK回应,于是服务方会在一定时间处于等待接收请求方ACK消息的状态。而对于某台服务器来说,可用的TCP连接是有限的,因为他们只有有限的内存缓冲区用于创建连接,如果这一缓冲区充满了虚假连接的初始信息,该服务器就会对接下来的连接停止响应,直至缓冲区里的连接企图超时。如果恶意攻击方快速连续地发送此类连接请求,该服务器可用的TCP连接队列将很快被阻塞,系统可用资源急剧减少,网络可用带宽迅速缩小,长此下去,除了少数幸运用户的请求可以插在大量虚假请求间得到应答外,服务器将无法向用户提供正常的合法服务。

这种攻击方式到今天都有很多攻击者使用

IP欺骗攻击

这种攻击利用TCP协议栈的RST来实现,使用IP欺骗迫使服务器把合法用户的连接复位,影响合法用户的连接。假设现在有一个合法用户(123. 123. 123. 123)已经同服务器建立了正常的连接,攻击者构造攻击的TCP数据,伪装自己的IP为123. 123. 123. 123,并向服务器发送一个带有RST位的TCP数据段。服务器接收到这样的数据后,认为从123. 123. 123. 123发送的连接有错误,就会清空缓冲区中已建立好的连接。这时,合法用户123. 123. 123. 123再发送合法数据,服务器就已经没有这样的连接了,该用户就被拒绝服务而只能重新开始建立新的连接。

新型DDoS攻击分类

经过升级和变化的SYN/ACK Flood攻击

这种攻击方法是经典最有效的DoS方法,从原理上来说是可以通杀各种系统的网络服务,因为它的技术核心是通过向受害主机发送大量伪造源IP和源端口的SYN或ACK 包,导致主机的缓存资源被耗尽或忙于发送回应包而造成拒绝服务。

原本单一的DoS攻击比较好防御,但是攻击者将整个攻击方式应用到了DDoS中,利用庞大的僵尸网络来发起这样的攻击,使整个攻击方式的威力得打极大的提升,是今天依然很流行的一种DDoS攻击方式

TCP全连接攻击

在很多防火墙产品开始为网络提供保护以后,出现了这种新的DDoS攻击方式,可以说它就是为了绕过或者突破常规防火墙阻挡而存在的。

一般情况下,常规防火墙大多具备过滤TearDrop、Land等传统DoS攻击的技术能力,但是他们对用户正常的TCP连接是允许通过的,也就是说对用户的正常访问不限制。但是很多网络服务程序,比如IIS、Apache等Web服务器能接受的TCP连接数是有限的,一旦有大量的TCP连接,即便是正常的,也会导致网站访问非常缓慢甚至拒绝服务无法访问。TCP全连接攻击就是通过许多僵尸主机不断地与被攻击服务器建立大量的TCP连接,直到服务器的内存等资源被耗尽而被拖跨,从而造成拒绝服务。

这种攻击的特点是可绕过一般防火墙的防护而达到攻击目的,缺点是需要找很多僵尸主机,并且由于僵尸主机的IP是暴露的,因此容易被追踪

基于脚本的DDoS攻击

基于脚本的DDoS攻击是很新的一种攻击技术,它主要针对的是ASP、JSP、PHP、CGI等脚本程序,利用脚本程序一般都需要调用Microsoft SQL Server、MySQL、Oracle等数据库的情况,利用正常的脚本功能,和服务器建立丝毫没有异常的TCP连接,不断的向脚本程序提交查询、列表等大量耗费数据库资源的请求,以攻击者极小的资源消耗,迫使服务器承受极大的运行压力,以达到拒绝服务的目的。

一般来说,用户提交一个GET或POST请求,对用户自己来说,耗费和带宽的占用是几乎可以忽略的,而服务器为处理此请求却可能要从数据库的上万条记录中去查出这个记录,这种处理过程对资源的耗费相对于用户来说是比较大的,而对于用户来说消耗却是很小的。因此攻击者只需通过代理向主机服务器大量递交查询或者消耗资源比较大的请求,只需数分钟就会把服务器资源消耗掉而导致拒绝服务。

这种攻击的特点是可以完全绕过普通的防火墙防护,轻松找一些代理或者代理服务器就可实施攻击

相关推荐