zoukankan      html  css  js  c++  java
  • 拒绝服务攻击

    拒绝服务攻击

        Dos攻击试图通过完全地阻碍或阻碍服务器所提供的一些正常服务来破坏服务的可用性。攻击尝试耗尽一些与服务相关的重要系统资源。例如,一个对Web服务器发起的洪泛攻击,攻击者发起相当多的虚假请求,使得服务器几乎不可能及时地响应来自用户的正常请求。

    拒绝服务攻击

    拒绝服务攻击简介

        拒绝服务(Denial-of-Service, Dos)攻击是一种针对某些服务可用性的攻击。从计算机和通信安全的角度,Dos攻击一般攻击目标系统的网络服务,通过攻击网络连接来实现。这种针对服务可用性的攻击不同于传统意义上的不可抗力的攻击,它是通过造成IT基础设施的损害或毁坏而导致服务能力的丧失。

        NIST计算机安全事故处理指南(NIST Computer Security Incident Handling Guide)中对Dos攻击给出的定义如下:

        拒绝服务(Dos)是一种耗尽CPU,内存,带宽以及磁盘空间等系统资源,来阻止或削弱对网络,系统或应用程序的授权使用的行为。

        由上述定义可知,可作为Dos攻击对象的资源有下面几类:

        网络带宽

        系统资源

        应用资源

        网络带宽与连接服务器和英特网的网络链路的容量相关。对于大部分机构来说,网络带宽指的是连接到其网络服务供应商(Internet Service Provider,ISP)的链路容量。

    通常这个连接的容量抵御ISP路由器内部以及ISP路由器之间的链路容量。这就意味着可能会发生的情况:经过具有高容量的链路到达ISP路由器的通信量要高于机构的链路的通信量。在这种情况下,ISP路由器只能发送链路所能承载的最大流量,对于超出的流量必须丢弃。在正常网络运行环境下,正常用户的超负荷访问,同样会使得服务器网络繁忙。那么这些正常用户当中就会随机地有一部分不能够得到服务器的响应。对于一个已经超负荷的TCP/IP网络连接来说,服务器不可用也是在预料之中。但在Dos攻击的情况下,攻击直接地或间接地制造大量的恶意流量发往目标服务器。这种攻击流量相比任何的合法流量来说是压倒性的,从而有效地拒绝了合法用户对服务器的访问。    

        针对系统资源的Dos攻击,一般是通过过度加载或者使系统网络处理程序崩溃来实现攻击。相比于消耗网络带框的Dos攻击来说,这种攻击更胜一筹,利用特殊类型的数据包耗尽服务器上有限的可用系统资源,从而达到攻击目的。这些系统资源包接手数据包的临时缓冲区,打开连接表和类似的内存数据结构。接下来我们要讲的SYN欺骗攻击,就是这种类型的攻击,其攻击目标是服务器上的TCP连接表。

        另一种形式的针对系统资源的Dos攻击是,通过使用某些特殊数据包来触发系统的网络处理软件的缺陷,从而导致系统崩溃。如果收到这种Dos攻击,除非管理员重新启动网络处理程序(这一般通过重新启动目标系统实现),否则服务器将无法再通过网络处理程序来提供网络服务。

        针对特定应用服务程序(如Web服务器)的攻击一般使用一定数量的合法请求,而每个合法请求都会明显地消耗掉服务器上的资源,从而达到限制服务器响应其他合法用户请求的目的。例如,某Web服务器可能会提供数据库查询服务。如果能够构造出一个巨大的,高代价的查询请求,那么攻击者就能够向服务器提出大量的这类查询请求。这样就限制Web服务器响应其他合法用户的查询请求。另一种攻击方法是通过构造出一个能触发服务器程序出错的查询请求,最终导致服务器程序崩溃。这就是说,除非重新启动,否者服务器将不再能够响应用户的请求。

        Dos攻击同样可以按照攻击主机(即产生流向目标系统的流量的主机)的数量来区分。最初,攻击者仅控制使用一台或少数几台源系统。对于任何攻击,都要针对服务器的网络处理代码或某个应用的缺陷向服务器发送数据包。通常地,需要采用分布式或者放大的DoS攻击使多个系统同时产生很高的通信流量。

    经典的拒绝拒绝服务攻击

        对于一个机构,最简单的经典DoS攻击就是洪泛攻击(flooding attack)。洪泛攻击的目标就是占据所有目标机构的网络连接的容量。如果攻击者能够访问具有大容量网络连接的系统,那么这个系统可能会产生比目标连接容量大得多的通信流量。这导致该链路出现拥塞,致使其他有效流量基本上被丢弃。

    源地址欺骗

        在很多类型的DoS攻击中,所使用数据包的一个共同特征是采用伪造的源地址,也就是所谓的源地址欺骗。只要拥有访问计算机系统上网络处理程序的充分权限,攻击者就能够很容易地制造出具有伪造源地址的数据包(实际上,其他属性正常)。这往往是通过许多操作系统上的原始套接字接口(raw socket inferface)来实现。操作系统设计者是为了进行了某些自定义的网络测试或网络协议的研究而将原始套接字接口引入的,并不是用于正常的网络操作。

    SYN欺骗

        除了基本的洪泛攻击,另一种常见的经典DoS攻击是SYN欺骗攻击。SYN欺骗攻击通过造成服务器上用于管理TCP连接的连接表溢出,从而攻击网络服务器响应TCP连接请求的能力。这意味着以后的合法用户的TCP连接请求将得不到服务器响应,拒绝其访问服务。SYN欺骗攻击是针对系统资源的DoS攻击,具体地说就是针对操作系统上网络处理程序的攻击。

        在网络流量方面,SYN欺骗攻击和及基本的洪泛攻击有明显地差别。SYN攻击所形成的网络流量相对比较小,更不会接近于服务器相连的链路的最大容量。只要能够使得TCP连接表被填满就可以。这就意味着攻击者不必像洪泛攻击那样访问大容量的网络连接。

        利用单一主机的洪泛攻击和SYN欺骗攻击可能是DoS攻击最常见的两种早期形式。洪泛攻击具有明显地限制,需要使用许多主机才能增加其有效性。

    洪泛攻击

        根据攻击所使用的网络协议不同,洪泛攻击可以划分为不同类型。不管何种类型的洪泛攻击,其目的大都是使到服务器的链路超负荷。洪泛攻击的目的也可以是使服务器处理和响应网络流量的能力超负荷。洪泛攻击利用大量的恶意数据包(相比于合法网络流量是压倒性的)来充斥服务器的整个网络链接。由于这种网络拥塞,在到达目标服务器的路径上的路由器上很多的数据包会丢弃。合法的流量很难再洪泛攻击中存活下来,因而不能访问服务器。这样,服务器对网络连接请求的响应能力急剧下降,甚至完全无法响应。

        其实,几乎任何类型的网络数据包都可以用来进行洪泛攻击。只要数据包能够被允许流过到目标系统的链路,那么它就可以消耗到目标服务器的某个链路上的所有可用流量。实际上,数据包越大,攻击的效果就越好。通常地洪泛攻击所使用的攻击数据包类型有:ICMP数据包,UDP数据包和TCP SYN数据包,甚至可用使用其他的IP数据包类型。然而,使用越不常用的数据包,攻击效果越明显,也就越容易被管理员过滤并屏蔽掉。

    ICMP洪泛

    UDP洪泛

        除了使用ICMP数据包攻击之外,攻击者还可以利用UDP数据包进行攻击。UDP数据包被发送到目标系统提供服务的端口上。攻击者通常会将UDP数据包发送给诊断回送服务,因为该服务在服务器系统上一般是默认运行的。如果服务器上开启了这项服务,那么服务器就会回应一个带有初始数据内容的UDP数据包给源地址。如果服务没有开启的话,那么这个来自攻击者的数据包将会被丢弃,并且可能会回应ICMP目的主机不可达数据包给发送者。其实,不管服务器上有没有开启这个服务,攻击者都已经达到了消耗服务器链路容量的目的。几乎任何UDP端口号都可以作为目标。所产生的响应数据包只是加重了服务器及其网络链路的负载。

        当攻击者利用单一系统进行UDP洪泛攻击时,与ICMP洪泛攻击一样,攻击者一般会使用带虚假源地址的数据包。当攻击者使用多个系统进行UDP洪泛攻击时,一般会使用受控的僵尸机的真实地址作为数据包源地址。当使用多系统时,数据反射流及识别攻击者的能力都会有所下降。

    TCP SYN洪泛

        另一种洪泛攻击就是通过发送TCP数据包给目标系统。通常这些数据包都是带有真实或虚假源地址的正常TCP连接请求,这可能很想我们再前面所讲到的SYN欺骗攻击。其实在TCP SYN洪泛攻击中,攻击的对象是数据包的总量而不是目标系统上的网络处理程序。这也是SYN欺骗攻击与TCP SYN洪泛攻击之间的区别。

        TCP SYN洪泛攻击使用TCP数据包,这些数据包由于不属于任何已知连接而被服务器拒绝。但是这时,攻击者已经成功地攻击了服务器的网络链路。

        如果攻击者采用单一主机攻击,那么这种洪泛攻击的任何变种的攻击效果会受攻击系统上所产生的网络流量的限制。而且单一的攻击系统会使得攻击更容易被跟踪。由于这些原因,一个复杂的多攻击系统TCP SYN洪泛攻击便衍生出来了。通过使用多个主机,攻击者可以显著扩大攻击的数据包数量,而且多个主机中的任何一台系统不需要有限高的性能或处于很高容量的链路。它们不是单独地行动,而是互相协调补偿的。攻击者可以通过间接地控制各个僵尸机来发起攻击,而攻击者则在一个很遥远的地方,难以被追踪和识别。使用多机系统的间接攻击包括:

        分布式拒绝服务攻击(DDoS)

        反射攻击(reflector attack)

        放大攻击(amplifier attack)

    分布式拒绝服务攻击

        认识到单机洪泛攻击的局限性并引入多机系统进行攻击,是DoS攻击工具的一个早期的重要发展。典型的多机系统都是受控的用户工作站或者PC机。攻击者通过操作系统上或者某些常用应用程序的一些熟知的漏洞来获得访问这些系统的权限,并在上面安装自己的程序。这些被入侵的主机系统就是所谓的僵尸机(zombie)。一旦僵尸机被安装上合适的后门程序,那么就会完全在攻击者的控制之下。攻击者控制的大量僵尸机组合在一起就被形成一个僵尸网络(botnet)

    反射攻击和放大攻击

        在DDoS攻击中,中间媒介是运行攻击者程序的受控系统。与DDoS攻击不同,反射攻击和放大攻击通常利用的是网络服务系统的正常功能。攻击者发送带有虚假地址的数据给某些网络服务系统上的服务。网络服务器为了响应这些数据包,会发送一个响应包给攻击包所指向的源地址,而这个地址正是攻击者想要攻击的目标系统。如果攻击者发送一定数据量的拥有同样源地址的请求包给一定数据量的提供同样服务的服务器,那么这些服务所产生的响应数据包将会几乎全部占据目标系统的网络链路。这些服务器系统实际上成为DDoS攻击的中间媒介(intermediary),而且它们对数据包的处理看上去也是正常的。这种攻击有两种基本的变种:简单反射攻击(simple reflection attack)和放大攻击(amplification attack)。

    反射攻击

        反射攻击是这种攻击的一种直接实现。攻击者将其攻击的目标系统地址作为数据包的源地址,并将这些数据包发送给中间媒介上的已知网络服务。当中间媒介响应时,大量的响应数据包会被发送给源地址所指向的目标系统。它能有效地使攻击从中间媒介反射出去(称为反射器),这也就是这种攻击被称为反射攻击的原因。

        攻击者希望,他们所利用的网络服务是一个用较小请求就可以产生较大响应数据包的服务。这样,攻击者就可以利用来自攻击系统的小流量请求数据包在中间媒介上产生大流量的响应数据包到目标系统。通常UDP服务可以达到这种目的。尽管回送请求服务不能够产生较大的响应数据包,但在早期仍是攻击的首选。任何常用的UDP服务都可以用来进行这种攻击。Chargen,NDS,SNMP或ISAKMP服务都可以产生大量响应数据包而曾被用来进行反射攻击。

    DNS放大攻击

        反射或放大攻击的另一个变种将DNS服务器作为中间媒介系统,使用了直接指向合法DNS服务器的数据包进行攻击。攻击者利用DNS协议将较小的请求数据包转化为较大的响应数据包而达到攻击效果。这种类型的放大攻击与传统利用多个主机产生大量的响应数据包的放大攻击有着明显地不同。利用标准DNS协议,一个60字节的UDP请求数据包可以很容易地生成一个512字节(传统网络上一个数据包所允许的最大字节数)的UDP响应包。而仅仅需要一个有着足够大数量的DNS记录的域名服务器就可以完成其攻击过程。

        在DNS放大攻击中,攻击者常常选择那些网络连接性能良好的DNS服务器。攻击者构造出一系列源地址为目标系统地址的DNS请求数据,并把这些数据包发送到攻击者所选择的域名服务器上。这些域名服务器在接收到这些请求包后,按照DNS协议,会发送相应数量的响应包给目标系统,这些系统在它们开来是合法的请求系统。目标系统因而被这些响应流量所洪泛。由于放大作用,攻击者只要生成中等流量的数据包就可以生成更大的,被放大的数据流,使得目标系统的网络链路超负荷。中间媒介系统上会产生明显地负载。攻击者可以选择一定数量的具有高性能、连接良好的系统实施攻击,从而保证中间媒介系统不会明显地超负荷,使得攻击可以顺利进行。

        这种攻击的更进一步变种则利用了地柜的域名服务器。DNS协议的一个基本特征是允许一个域名服务器查询大量其他域名服务器来解析客户的查询。这样做仅仅是为了满足本地用户的请求。然而,很多的DNS系统默认情况下对任何请求都支持递归查询,这种域名服务器被称为开放递归DNS服务器。攻击者可以利用这样的域名服务器进行一系列的基于DNS服务的攻击,包括DNS放大DoS攻击。在该变种中,攻击者以大量的开发递归DNS服务器为目标。攻击所用的域名不一定保存在这些服务器上,而是可以来自因特网上的任何位置。查询结果被直接发送给用虚假源地址指定的期望目标。

        对付所有基于反射机制的攻击的基本方法是防止使用虚假地址。DNS服务器的正确配置,尤其是限定仅对内部客户系统提供递归响应,可以很好地限制这类攻击的一些变种。

    拒绝服务攻击防范

    一般,抵御DDoS攻击有下面三条防线【CHAN02】:

    攻击预防和先发制人机制(攻击前):这种机制允许被攻击者能够承受攻击而不拒绝为合法客户提供服务。攻击预防技术包括执行资源消耗的策略、根据需求提供后背资源。此外,预防机制修改Internet上的系统和协议,来减少DDoS攻击的可能性。

    攻击检测和过滤(攻击时):这种机制试图在攻击一开始就将其检测出并迅速响应。这样可以使攻击对目标系统的影响最小化。检测工作包括寻找可疑的行为模式,响应措施则过滤掉某些可能是攻击的数据包。

    攻击源回溯和识别(攻击时和攻击后):试图识别攻击源,通常被作为预防未来攻击的第一步。但这种方式往往不能很快地产生结果来减轻正在发生的攻击。

        很多DoS攻击的关键性内容是使用虚假的源地址。这既可以掩盖直接或分布式DoS攻击的攻击者,也可用来将反射或放大的网络通信流量涌向目标系统。因此,根本的、长期有效的抵御DoS攻击的方法是限制主机系统发送带有虚假源地址数据包的能力。

        可以使用改进版本的TCP连接处理程序来专门抵御SYN欺骗攻击。把请求连接的关键信息加密编码并保存到coolie中,而不是保存在服务器上,然后将这个cookie作为服务器的初始序号封装在SYN-ACK响应包中发送给客户端。当合法用户返回ACK应答包时,要求在ACK应打包中包含序号加1的cookie,然后服务器根据这个cookie来重构那些曾经在TCP连接表中存储的相关信息。当然该技术一般用于防止TCP连接表溢出。其优点是三次握手成功之前,服务器上不会有内存资源消耗,而服务器有足够的理由相信数据包的源地址对应于一个正与服务器交互的真实的客户端。

        当TCP连接表溢出时,我们可以通过修改系统的TCP/IP网络处理程序来选择性地丢弃一个TCP连接表中不完全连接的表项,从而允许新的连接请求。这就是选择性丢弃或者随机丢弃。假设TCP连接请求表中的表项大部分来自攻击连接,那么被丢弃的表项将可能会对应着一个攻击数据包,因而表项的丢弃对客户端是没有影响的。如果不这样做,合法用户的连接请求尝试将无法得到服务器的响应并且只能重试。然而,这种策略确实当连接表溢出时给新连接提供了尝试机会,使其不是被立即抛弃。

        另一种抵御SYN欺骗的措施是修改TCP/IP网络处理程序中所使用的参数。这些参数包括TCP连接表的大小以及当未收到响应是删除表项的超时时间。该方法可以与限制网络连接的速率一起用来管理服务器所允许的最大连接请求率。尽管修改参数可以加大攻击者攻击的难度,但是这并不能从根本上预防攻击。

    对拒绝服务攻击的响应

        当检测到一次DoS攻击时,我们首先要做的事情是判定出这次攻击的类型,并选择一个最佳的方法来抵御这次攻击。通常这个过程应该包括:数据包的捕获,数据包的分析以及寻找常见的攻击数据包类型。该过程一般由机构人员利用合适道德网络分析工具来完成。如果机构缺乏这个过程所需要的资源或技术,那么这就需要该机构的ISP服务提供商完成捕获和分析工作。通过这样的分析,我们就可以判定出所受到的攻击的类型,并合理配置过滤器来过滤掉这些攻击数据包。以所用到的工具都需要ISP服务提供商安装到路由器上。如果攻击者对象是目标系统或应用程序的一个缺陷,而不是通过高流量的数据包造成网络阻塞,那么这种情况下就要求管理者能够及时发现这个缺陷并修复它,以便阻止将来的攻击。

  • 相关阅读:
    (山理工 1243)母牛问题(大牛生小牛,小牛生。。。。)
    Linux内核分析——第五周学习笔记
    《Linux内核设计与实现》第五章读书笔记
    day41-死锁,信号量,线程q,协程
    day40-线程相关
    day39-进程,线程相关知识
    day38-并发编程
    day37-套接字后续
    day36-socket(C/S架构)套接字
    day35-网络剩余
  • 原文地址:https://www.cnblogs.com/kexinxin/p/10147183.html
Copyright © 2011-2022 走看看