摘要 分布式拒绝服务(DDoS)攻击对获取任何联机应用程序和透过公共因特网提供的服务构成严重的威胁。
这些攻击主要针对web站点、DNS服务、电子商务应用程序、VoIP 服务、联机游戏和金融服务而发动,其阻止客户访问这些应用程序,给运行这些应用程序的企业和公司造成严重的经济损失。
如今的DDoS攻击比以往更加复杂、更具破坏性。攻击者利用红色代码(CodeRed)、Netsky 和 Bagle 蠕虫变体等病毒和蠕虫,在受到攻击的机器上安装 BOT(分布式 DOS 中继工具)。这些技术让攻击者有能力使用数千台远程控制的“bot”机器来组织大规模的分布式 DoS 攻击。
如果不了解DoS攻击的技术特点,要想击退DoS攻击是不可能的。因此,本文件旨在对 IT 的弱点、DoS 攻击涉及的技术及其影响方面作尽可能详细的说明。这一点对于构建综合有效的安全基础架构来保护 IT 抵御这种死灰复燃的威胁来说是第一步。
拒绝服务攻击的历史
起源
现在已很难追溯拒绝服务攻击的起源。然而某些重大的攻击还是让我们有迹可循,而且某些古老的技术也已成为历史。
Morris蠕虫
1988年11月2日,电子世界受到第一颗逻辑炸弹的袭击。就在那一天RobertMorrisJr. 编写的弹性概念蠕虫侵入因特网。结果,连接到因特网的系统中有 15%(大约 6000个系统)都受到感染并停止运行。
这一事件最令人震惊的是编写这种蠕虫程序本来的目的并不是要破坏系统。它的目的只是要尽可能广而且尽可能快地传播。然而,由于该程序中未包含任何路由设置来阻止在本地和已经感染的系统上进行传播,因此它在每个系统上重复传播数千次,直到资源枯竭,从而对因特网造成了有史以来第一次最大规模的破坏。
SYN洪水
自从TCP出现就有了SYN 洪水。这种洪水攻击出现的直接诱因是 TCP 规范。因此,可以说 SYN 洪水是TCP 的一部分,就像电子欺骗是UDP 的一部分一样。
SYN洪水的攻击目标是TCP协议堆栈的公共漏洞,其中 TCP 协议堆栈在每次 SYN 信息包到达时便在服务器上分配内资源。SYN 洪水攻击通过断开 SYN 信息包的后续会话连接或者通过完成 TCP 协议的 3 向握手然后中止会话,来创建虚假的“请启动会话”尝试,从而欺骗系统。
拒绝服务攻击不仅易于实施而且有效且难以跟踪到真实源头,所以现在仍然受到许多因特网蓄意破坏者的青睐,他们采用这种攻击针对单一服务发出几百兆,有时甚至数千兆的SYN。
主要发展
因特网开始普及和新拒绝服务攻击技术的出现均为时不久。90年代末发明和研究过许多新的技术。其中大多数技术至今仍然有效且应用频度相当高。
死亡之Ping
1995年,首次出现基于异常的拒绝服务攻击,当时流传范围极广且属于DIY性质。这种服务的构建基础是大多数 TCP/IP 协议堆栈无法正确处理长度大于 65,635 字节的 ICMP 信息包,这次攻击让世人认识到 DoS 已经成为不可避免的事实,任何人都可以从命令行实现这种攻击:
C:>ping-l65,511
由于这次攻击,导致TCP/IP协议堆栈无法管理的异常情况激增而且越来越多。不完整的UDP 信息包、怪诞的 TCP 标记组合、含 3 个相同层 4 个相同源和目标的信息包等类似的异常情况很快接踵而至。有人说这段时间内探测出了几乎所有可能的异常情况,而诸如bo(i)nk、pepsi、land和teardrop之类的攻击工具仍然记忆犹新。
Smurf攻击
一旦对异常打上补丁后,便难以再用单信息包来破坏系统。此外,在家中作案的因特网黑客们使用的PSTN连接速度很慢(14,400到 33,600 bps),而个人计算机的性能又远不能与服务器相提并论。因此,需要找到平衡因子来改善 DoS 攻击的效果。
1998年找到了一种解决方案,这就是smurfing攻击,也就是从那时起 smurfing 攻击开始影响到网络。它是反射技术的鼻祖,其攻击依赖于防护不周的网络(当时这种网络是很普遍的)而将 ICMP 回显流量中继到目标。来自中继网络中每个系统的 ICMP 回显应答在目标机器上泛滥成灾,目标机器尝试处理接收到的每个 ICMP 信息包并查看这些信息包是否与其表中的任何入口匹配,从而让 CPU 的使用率达到非常高的程度。其中还有一个副作用是,目标 IT 基础架构的因特网链接会因这些 ICMP 应答而发生堵塞。
DdoS(分布式拒绝服务)
2000年2月 7 日和 8 日,DDoS 发动了突然袭击,这是一宗经典案例。而这也是静态防御面对积极主动的攻击时通常会产生的后果。在这次攻击行动大约一年前,某些基于 DDoS 原理的弹性概念代码已经开始可用。1999 年 10 月 bugtraq post 提供了对此源代码的链接,甚至在同年 12 月 CERT/CC 还就此发布了忠告。安装防火墙后,IT 管理员感觉他们的基础架构很安全。
然而,仅仅几分钟之内,雅虎、亚马逊、电子海湾和其他世界主要web站点就遭到攻击而瘫痪,而且在攻击持续期间一直无法从外部访问这些网站。这些网站突然收到成千上万个合法连接,不但损坏了服务器的组件,还堵塞了ISP 上行链路。
成熟期
20世纪末是大发现时期。涌现出大量新的技术,这些技术的功效也都得到了证明。但同时,停止实验而转向工业化进程的时期也来临了。
红色代码和蠕虫王(slammer)
红色代码(CodeRed)其实并不是什么新玩意。它组合使用大量已知的和广泛应用的技术。不过,红色代码是首次将这些技术组合在一起使用,并以MicrosoftIIS等流行的应用程序为攻击目标。
从而,利用一些微不足道的UNICODE漏洞,红色代码不仅影响数十万个系统,而且在这些系统上加载一种代理程序,这种代理程序的目标类似于2001 年 8 月以白宫 web 站点为假定攻击目标的 DDoS 自动代理程序。当时使用蠕虫自动传播 DDoS 代理程序的技术还十分新颖。
这种感染的范围和速度就连编写这种蠕虫的程序员自己都不清楚。他本来以为广泛传播需要3个月,实际上后来只用了一周时间。然后,便能够捕捉这种蠕虫并对其进行逆向工程设计。同时强烈要求IIS 用户应用 6 个多月前就可以使用的补丁程序。这就是红色代码良性的一面,它让人们意识到大规模的和快速的补丁程序部署解决方案的必要性。
蠕虫王(Slammer)作为第二种蠕虫保留在内存中,其在2003年1月 25 日的爆发严重影响到因特网的基础架构。这种蠕虫通过发送数十万个小型 UDP 信息包来进行传播。从而导致网络阻塞和路由器崩溃。结果,发现日期和时间的选择可作为重要的杠杆因子:格林威治标准时间星期六上午 6 点。
宽带接入和WiFi
在因特网的早期,家庭用户和SOHO族使用的因特网连接不稳定而且速度缓慢。当时Botnet 需要的资源非常庞大,而且很不可靠。Cable 和 ADSL 技术改变了这种局面。低价格、高带宽和永久的连接将宽带接入几乎普及到各个角落。对于发动大型 DoS 攻击而言,受到攻击的高校网络已不再是必要的条件。
而且,个人计算机功能的日益强大,也让用户完全利用宽带连接提供的带宽容量成为可能。实际上,计算机可以在每秒内生成150,000多个信息包。对于类似于SYN 洪水所使用的小型信息包而言,这意味着它们可以创建大约 80Mbps 的数据流量。
最后,WiFi的普及产生了大量未设防护或防护不周的网络接入点,使用这些接入点便可以因特网连接的合法用户身份来发动匿名攻击。
拒绝服务攻击的现状
技术
拒绝服务技术的创新已经基本尘埃落定,而上个世纪最后十年的发明也逐渐遥远。然而,随着宽带接入、自动化和如今家庭计算机功能的日益强大,使得对拒绝服务攻击的研究有些多余。尤其是当我们发现一些本已在90年代末销声匿迹的古老的攻击方式,(例如land ,其使用类似的源和目标 IP 地址和端口发送 UDP 信息包)这些攻击技术 现在又卷土重来时,这个结论就更加显而易见。在这一方面唯一的进步就是可以发起并行任务,从而可以通过简单的 486 处理器所无法实现的方式来显著提高攻击强度。
另一个要考虑的重点是事实上IP堆栈似乎并未正确地安装补丁程序。计算机不再会因为单一的信息包而崩溃;但是,CPU操作会为了处理这种信息包而保持高速运行。因为补丁失效期间生成的信息包是有限的,所以要实现有效的攻击并不容易。可能是技术提高得太快。不管是什么原因,这些陈旧过时的攻击方式现在又卷土重来,而且还非常有效。
使用拒绝服务
拒绝服务攻击开始可能只是为了“取乐”,对系统操作员进行某种报复或是实现各种复杂的攻击,例如对远程服务的隐形欺骗。某人因在某一信道上遭到侮辱后也经常会将IRC服务器作为攻击目标。这种情况下的网络和因特网使用是“保密的”,这些攻击对其造成的影响微乎其微。
随着时间的流逝,因特网逐渐成为一种通信渠道,hacktivism(网络激进主义)越来越流行。地理政治形势、战争、宗教问题、生态等任何动机都可能成为对公司、政治组织或甚至国家的IT基础架构发动进攻的动机。
最近的拒绝服务攻击更多的是与联机游戏有关。某些玩家对在游戏中被人杀死或丢失他们喜爱的武器不满意,因此发动拒绝服务攻击,许多服务器已经成为这种攻击的牺牲品。
但是如今使用拒绝服务的目的大多数是纯粹的敲诈勒索。越来越多的企业开始依赖他们的IT基础架构。邮件、关键数据、甚至电话都通过网络来处理。如果没有这些主要的通信渠道,大多数公司都难以在竞争中幸存。而且,因特网还是一种生产工具。例如,搜索引擎和博彩web 站点都完全依赖网络连接。
因此,随着公司直接或间接地依赖因特网,原有的敲诈信逐渐转变成数字形式。首先在短暂而非紧要的时间段内发动攻击。然后受害者就不得不支付“保护费”。
拒绝服务技术
网络协议攻击
这些攻击瞄准传输信道,并因此以IP堆栈作为攻击目标,IP堆栈是内存和 CPU 之类关键资源的进入点。
SYN洪水
SYN洪水是典型的基于概念的拒绝服务攻击,因为这种攻击完全依赖于TCP连接的建立方式。在最初的 3 向握手期间,服务器填写保存内存中会话信息的 TCB(传输控制块)表。当服务器收到来自客户机的初始 SYN 信息包时,向客户机发送回一个 SYN-ACK 信息包并在 TCB 中创建一个入口。只要服务器在等待来自客户机的最终 ACK 信息包,该连接便处于 TIME_WAIT 状态。如果最终没有收到 ACK 信息包,则将另一个 SYN-ACK 发送到客户机。最后,如果经多次重试后,客户机没有认可任何 SYN-ACK 信息包,则关闭会话并从 TCB 中刷新会话。从传输第一个 SYN-ACK 到会话关闭这段时间通常大约为 30 秒。
在这段时间内,可能会将数十万个SYN信息包发送到开放的端口且绝不会认可服务器的SYN-ACK 信息包。TCB 很快就会超过负荷,且堆栈无法再接受任何新的连接并将现有的连接断开。因为攻击者不用接收来自服务器的 SYN-ACK 信息包,所以他们可以伪造初始 SYN 信息包的源地址。这就使得跟踪攻击的真实来源更加困难。此外,因为 SYN-ACK 信息包没有发送到攻击者,所以这样还为攻击者节省了带宽。
生成这种攻击很容易,只要在命令行输入一条命令就足够了。
#hping3--rand-source–S –L 0 –p
存在的变体也很少,通常为了增加CPU的使用率会将某些异常添加到SYN 信息包。这些可能是序列号或源端口0等合法的异常。
SYN-ACK洪水
SYN-ACK洪水的作用基础是令CPU资源枯竭。从理论上讲,这种信息包是 TCP 3 向握手的第二步,而且在 TCB 中应该有对应的入口。浏览 TCB 将会使用 CPU 资源,尤其 TCB 很大时会耗用更多的 CPU 资源。因此,负荷较重时,这种对资源的使用会影响系统性能。
这也就是SYN-ACK攻击所仰仗的利器。向系统发送一个巨荷的SYN-ACK 信息包会显著增加系统 CPU 的使用率。因此,用于组织 TCB 的哈希算法和哈希表大小之选择会影响攻击的效率(请参阅“概念”和“逻辑缺陷”)。而且,因为这些 SYN-ACK 信息包不属于现有的连接,所以目标机器不得不将 RST 信息包发送到源机器,从而增加了链路上的带宽占用率。对于 SYN 洪水,攻击者为了避免接收到 RST,当然可以伪造源机器的 IP 地址,这样还可以提高攻击者的可用带宽。
这也只需要一条简单的命令就可以进行这种攻击。
一个重要因子是由第三方服务器基于反射机制而生成SYN-ACK信息包的能力。在将SYN 信息包发送到服务器的开放端口时,该服务器将 SYN-ACK 信息包发送回源机器。此时任何服务器都可能为这种攻击充当中继。发送到服务器的简单 SYN 信息包带有伪造的源,其发送到目标时生成 SYN-ACK 返回目标。这种技术让跟踪更加困难。而且,在某些情况下,还可以绕过某些防伪机制。尤其当目标和攻击者属于同一干道而且部署的 uRPF (参阅“防伪”) 距离目标机器和攻击者足够远时,更有可能避开防伪机制。
通过与SYN洪水联结还可以提高此种攻击的强度。SYN洪水在TCB 中创建入口,而TCB因此变得越来越大。由于此时浏览 TCB 所需的时间更长,所以 SYN-ACK 洪水的功效大大增加。
UDP洪水
UDP同样天生就是拒绝服务攻击的传播媒介。按照指定,在封闭端口上接收UDP信息包的服务器将无法到达 ICMP 端口的信息包发送回给源机器。ICMP 信息包的数据部分填充有原始 UDP 信息包中的至少前 64 个字节。因为没有标准限度或额度,所以很可能在封闭的端口上发送巨量的信息包。在为生成 ICMP 而进行负荷极大的必需操作时,,错误的信息包消耗了大量 CPU 资源,最终导致CPU 资源枯竭。
同样,也可以从命令行生成这种攻击。
而且,也可以通过伪造而使得ICMP信息包不会降低攻击者的带宽。
异常
异常属于特殊情况,其可以令IP堆栈出现行为错误而造成各种不同的后果,例如崩溃、冻结等等。异常可划分为两大类:非法数据和隔离异常。
非法数据是标准所不予考虑的或予以显式否定的值或内容。大于指定长度的信息包、重叠的TCP标记组合、含非空认证序列号的SYN 信息包或甚至错误的选项类型都属于基于非法数据的异常攻击。
隔离异常是基于那些堆栈不能正常处理的异常情况(即便从标准的视角看它们完全合法)。著名的“死亡之ping”就是关于巨型(但仍然合法)ICMP回显请求信息包。如果信息包带有相同的源地址、目标地址和端口,其仍然是合法的,不过对IP 协议栈有害。古老的 land 攻击最近已脱胎换骨成为 imland,而且正在破坏 IP协议栈。只有少数异常攻击仍然能够利用单一信息包击倒系统。大多数堆栈都已打上补丁程序,而且可能大多数异常都已经过测试和开发。然而,处理这种信息包仍然会占用 CPU 的不少资源。当5 年前异常攻击出现并得到补丁程序的修补时,攻击能力还受到 CPU 和带宽的限制。处理异常情况时产生的额外计算负担不太重要。如今,工作站与服务器之间的差距日益缩小,而且任何人都可以使用宽带。这种条件下可能发动巨型负荷的异常,使得目标机器的 CPU 资源枯竭。
同样,也可以从单一的命令行实现这种攻击。
#hping3--rand-source–SAFRU –L 0 –M 0 –p --flood
同样,仍然可以选择进行伪造来进行有效有效攻击。
应用程序级攻击
网络已证明易受攻击。然而网络只是全球系统中的传输部分,是中断通信的良好手段。不过,应用程序通常是实际的攻击目标,而且这些应用程序也受到无数的拒绝服务问题的袭扰。
基于会话的攻击
大多数应用程序连接是通过会话(通常经过TCP机制的标识) 来处理。同步会话的数量是影响给定应用程序性能的重要因素,因此必须限制会话的数量。如果该限制只是基于网络和传输信息(IP+TCP),那么生成拒绝服务是很容易的。一次简单的攻击便可打开 TCP 会话并让这些会话保持打开状态,从而可以迅速填满所有可用的会话槽,阻止建立任何新的会话。这种“待决”会话攻击是与 SYN 洪水等价的 7 层攻击。但是如果在第 4 层上需要有数千兆数据流量,则需要在几秒内发送数千个信息包来阻止建立任何新的会话,。
例如,很容易在web服务器上实施这种攻击。
完整和合法的会话也可以破坏应用程序,简单的F5攻击只需保持F5 键处于按下状态就可以强制完全刷新在 Internet Explorer 上加载的 web 页面。使用这种古老而简易的攻击,便会仅仅因为需要服务的 web 页面数过多而导致资源枯竭。这种会话洪水攻击还可以破坏通信信道的其他关键路径。
− 电信链接:从服务器传送到客户机的数据量可以填满与因特网的链接。这种情况下,通过该链接无法进行任何通信;针对性的拒绝服务攻击漫延至全球;
− 服务器应用程序:大量同步连接可以达到服务器处理同步会话能力的上限,这种攻击类似于“待决的”会话攻击。如果未设置上限,则处理大量会话时可能消耗绝大多数的系统资源。
− 第三方应用程序:大多数应用程序都链接到中间软件和数据库。在任一情况下,由于这些第三方应用程序在处理原始应用程序发出的巨量请求时可能遇到内部问题,因此就可能出现瓶颈。这些结果也可能是内部缺陷造成的(如下所述)。
继F5攻击技术之后,会话洪水技术便再无发展。不过,人们已发现且广泛使用平衡因子而使得这种攻击仍然是拒绝服务中一种最恶性的可能情形。
概念和逻辑缺陷
开发的应用程序是为了在正常情况下提供特定的服务,而攻击的目的就是令应用程序的行为方式出现异常。这种攻击的某些机制是通用的,但是这种攻击的大多数机制是专用于各个不同应用程序的概念和逻辑,因此想要罗列出全部有缺陷的应用程序和消灭这些缺陷的方法是不可能的。
内部
内存处理显然是可以导致拒绝服务攻击的第一内部机制。简单的“缓冲溢出”使得重写堆栈成为可能,从而让应用程序乃至整个系统都不稳定。在不同级别的应用程序通道中缺少输入检查,也使得攻击会沿着第三方应用程序传播而增加攻击的可能性。
然而,内部缺陷更加难以琢磨,更加难以修补。依赖于NFA引擎的规则表达式可能极具危险性。NFA引擎分析表达式的所有可能路径。如有一个字符令搜索失效,该引擎便会返回前一个匹配点并重试表达式的所有组合。若针对精心制作的输入而启动像通配符 * 之类极耗资源的运算符和像 (int|integer) 之类 OR 条件的组合,则会产生致命的影响。
SQL也是逻辑攻击的一种明显传播媒介,因为在大型而复杂的表格上,SQL查询可能在应用程序级生成不同的错误行为。首先遇到的缺陷就是缺少索引和数据库结构中通常使用的字符串列。如果没有正确的索引,涉及对同一个表的多个列进行筛选和排序操作的SQL 请求便会产生指数级数量的操作,这会消耗巨量的 CPU 资源并显著增加应用程序响应时间。如果搜索和排序的字段是字符串,则这些操作消耗的资源甚至会更多。
第二种缺陷与内存有关。在超大型表中,类似于“SELECT*”的请求可能产生数百万个结果。临时数据库结构和用于存储结果的应用程序结构消耗大量内存,结果可能会导致各种后果:数据交换过量、响应时间延长或整个系统拒绝服务。
另一种重要的拒绝服务攻击可以针对用于组织和搜索内存中数据的哈希函数来实施。哈希表入口是指向对象链接表的指示符。搜索操作需要两个步骤。首先,计算哈希函数以在哈希表中查找匹配的入口。然后,逐个比较列表中的对象。冲突是这种机制的第一个缺陷。如果哈希表不够大和/或哈希算法使得容易产生冲突,便可能会产生多个入口而与哈希表中相同的入口匹配。按这种方式对表格进行的任何搜索操作都将需要执行很多运算,而且消耗CPU资源,其本身很可能导致拒绝服务,或者会加强针对依赖于这种机制的某个应用程序的攻击效果。
运行模式
每个应用程序都有特定的功能和运行方式。因此要描述出所有的缺陷是不可能的。然而,某些典型和有效的示例可以对常见的无掩蔽性操作提供线索。
DHCP服务器容易遭受的攻击尽管很微小但却能快速耗尽其可用IP地址的池。前面已经分析过协议本身的缺陷(请参阅第 3 层连接攻击)。除此之外,在 DHCP 交换的第一阶段中,DHCP 服务器在没有得到来自客户机的任何确认情况下会锁定 IP 地址。令 DHCP 服务器用尽可用的 IP 地址便只是使用 chaddr 数据字段中指定的不同 MAC 地址来发送多个 DHCPDISCOVER 请求的问题。甚至不需要伪造 MAC。广播、缺少认证和“早期处理”组合起来构成拒绝服务攻击的关键因素。
另一种“先进”的攻击是基于设计不良的运行方式,这就是DNS服务器的洪水攻击。当DNS 服务器接收到对不在其缓存中的名称之解析请求,或当请求指定应答必须具有权威性时,服务器将请求发送到 TLD(顶级域名)服务器,以便获得域的 SOA(颁发机构起始)地址。一旦获得该地址,目标 DNS 服务器便向 SOA 服务器发出另一个请求以便解析该请求的名称。获得应答后,便立即将这些应答发送回给客户机。由于不需要由客户机进行认证,且客户机与服务器之间的通信是基于 UDP 协议,所以很轻易就可以将数千个请求从伪造的来源发送到服务器。可以对不同级别的攻击效率作如下区分。
− 针对不存在的域上主机之请求:这种情况下,TLD 将一个错误发送到目标 DNS 服务器,该服务器再将该错误转发到客户机。这种影响相对较低,而且需要攻击者提供大量请求。然而,很轻易就可以创建一个工具来生成这种攻击,因为任何字段(主机、域)可以是随机的,且不必是真实字段。
− 针对极少数现有域上主机之请求:这种情况下,目标服务器就每个域向 TLD 发送一个请求以获取 SOA。然后,把来自攻击者的每个请求转发到 SOA。不存在的主机会生成错误。另一方面,与现有主机有关的请求从 SOA 生成应答,这些应答是转发到源的较大信息包。这种情况下,较高的数据流量和更重要的处理可以提高攻击的效率。因为查找几个现有的域比较简单,所以这种攻击仍然相对容易实施。然而,攻击的效率主要取决于这些域的 SOA 对目标服务器发送给它们的大量请求进行处理的能力和这些域上众多主机名的可用性。
− 针对多个现有域上主机之请求。在这最后一种情况下,几乎所有发送到目标服务器的请求都会令目标服务器产生到 TLD 的请求,随后便是到 SOA 的请求和对应答的处理。这种攻击很难实施,因为它需要定义包含数千个现有域和主机的列表。然而,它特别有效,只在每秒内进行几千次请求就能使得大多数 DNS 服务器崩溃。
这种DNS的情况之出现大都是因为使用无态协议,使得攻击者可在不受影响的情况下在服务器端产生较高的数据流量和处理负荷。
对上下文和会话的处理是应用程序中另一常见的重要缺陷。在SMTP服务器对HELO 命令参数的有效性实施特定检查的情况下,由于不能对结果进行即时处理而会增强这一缺陷的影响。根据标准,只有出现 RCPT TO 命令时才可以拒收邮件。因此,建立一个会话并发出数千个 HELO 请求将会让目标服务器重复处理参数,这些参数通常位于规则的表达式上。最糟糕的情况是在执行名称解析时,因为这会添加更多的处理和数据流量。因为单条 HELO 命令约有 100 个字节,所以有可能从通过宽带接入而连接到因特网的标准 PC 对邮件服务器发动十分有效的攻击。如果一检测到异常便中断会话,则这种攻击不可能实现。
改善效率
大多数拒绝服务攻击实施起来非常简单。然而某些情况下,标准PC和宽带接入并不足以发动有效的攻击。尤其当在目标基础结构上实施群集和负载平衡之类机制时更是如此。在此情况下将会把一个单一的目标IP 地址物理链接到许多服务器,从而产生大规模攻击需求。
有两种方式能使得攻击在这种情况下有效。第一种方式是找到一些提高攻击媒介能力(信息包、会话的数量或带宽等)的平衡因子。第二种方式取决于影响通信路径上设备或资源的某些副作用。
副作用
小型信息包
最常见的副作用是需由内联网络或安全设备来处理的巨量小型信息包的影响。根据在这些设备上实施的功能,将信息包从一个接口转发到另一个接口可能需要若干操作。简单的路由器必须根据其路由表做出决策。在信息包筛选操作中,必须检查第4层标头来验证筛选器。有态检验因需要检查会话表而增加了复杂性。像逆向代理等最后一个应用程序层设备必须在第7 层处理信息包。像信息包销毁或 NAT 等某些其他操作甚至需要更多的处理,因为必须重写信息包并重新计算若干校验和。
小型信息包产生的影响很容易用数字来说明。一般来说,指定用于处理特定带宽的设备在处理64字节的信息包时几乎不能提供大于10% 声明性能的吞吐量。任何依赖于小于 100 字节信息包的攻击可能首先会令路由器和防火墙崩溃,而不仅仅是影响目标服务器。
上行链路洪水攻击
另一个常见的副作用是在到目标的路径上对链路的洪水攻击。攻击者发送的请求和信息包很少能生成足够的数据流量来填满链路。然而,来自目标的响应通常会使数据流量大大增加。基本的例子就是SYN洪水。64字节的 SYN 信息包令目标生成 3 个 SYN-ACK(原因在于重新传输尝试)。这种效果在基于应用程序的攻击中更加有效。简单的 HTTP 请求通常约有 200 字节,同时发回到客户端的数据通常大约10,000 字节。
在“一对一”的攻击中,关键是来自服务器的响应不发往攻击者,因为这种回应最终也会对攻击者的链路进行洪水攻击。这种情况下,伪造需可以且容易容易执行。基于应用程序的UDP完全适合生成这种结果。在DNS 洪水的情况下对此点进行论证特别简单(请参阅逻辑缺陷/运行方式)。无需考虑任何到 TLD 和 SOA 的请求(通过目标因特网链接而再度提高数据流量),对重要域上 MX 记录的请求为原始请求量添加了一个重要的倍增因子。
#digradware.commx
− 请求:71 个字节
− 应答:551 个字节
− 倍增因子 = 7¾
这些副作用应视为主要问题,尤其在共享的基础架构中,,针对单个服务器的攻击可能影响到依赖与原始目标相同的基础架构的数十个系统。
杠杆作用
Psh标记
PSH标记是基于协议的平衡因子,其针对任何基于TCP的攻击。当信息包被堆栈接收到时,其是与接收到的其他信息包一起存储在特定的缓冲中。一旦缓冲存满后,便发送信息包以供进一步处理。信息包的传输产生了可观的额外负担,而此处的缓冲优化了上下文更改的“成本”。PSH 标记强制堆栈释放缓冲。在像 SYN、SYN-ACK 或异常洪水或甚至应用程序层攻击等基于 TCP 的攻击情况下,攻击者在 TCP 标头中添加 PSH 标记的成本为零。另一方面,因上下文的永久性更改而显著增加服务器的额外负担。
恶意数据流量中继
在某些情况下,攻击系统的强度可能到达极限。这主要是针对在LAN上执行攻击的情况,因为在此情况下使用标准的PC 很难达到千兆的吞吐量。可以利用若干工具提供的信息包中继能力来克服这一困难。原理相对比较简单。为了消除创建信息包所需的 CPU 使用率,就需要获取随机源地址/端口、计算长度、校验和等。在发动攻击时嗅探数据流量。然后以一高倍增因子来循环中继捕获文件,以确保达到攻击资源的极限。要确保目标难以识别循环方案而只筛选出来源,原始数据包的样本必定是相对重要的。
反射
反射是将其他系统用作中继和/或放大攻击的机制。对于大多数攻击类型,可以在网络或应用程序级执行反射。前一种情况的目的是为了获取发送到目标的信息包数量的倍增因子。在第二种情况下,使用反射来获取(攻击者发送的数据)/(目标接收的数据)的最高可能比率。
smurfing攻击是网络反射攻击的最佳范例。基本上,它是以向一个广播地址发送ICMPECHO REQUEST 信息包来构成攻击,且有一个针对攻击目标的伪造来源。防护不周的网络可能允许存在这种广播 ping,使得网络上的每个系统都向目标发送回 ICMP ECHO REPLY 信息包。对中继网络的选择很重要。选择的中继网络必须明显允许存在广播 ping。而且,为了能够以很高的速率传输巨量 ICMP ECHO REPLY 信息包,选择的中继网络应能够提供较高的带宽。攻击的效率非常易于评估。在 256kbps 的 ADSL 上行链路中,可以每秒发送大约 1100 个 ICMP 信息包。假如中继网络“只有”50 个系统,则将在每秒内针对大约 10 Mbps 的总带宽发送 50,000 多个 ICMP 信息包来对目标进行洪水攻击。这种攻击很容易实现,任何人只要有一台标准 PC 机和宽带因特网接入,输入以下一条命令即可。
#hping3--icmp--spoof --flood
在应用程序层,攻击的目标是对目标应用程序进行洪水攻击,或者用中继主机所发送的数据来填满因特网链路。以上所述的基本DNS范例(请参阅副作用/上行链路洪水攻击)是基于应用程序的反射的极佳范例,其可用于攻击另一台DNS 服务器。因为应用程序依赖于无态协议,所以只要一条命令行便可轻易地将巨量响应(而请求很少)发送回给获得 UDP/53 数据流量授权的伪造的 DNS 服务器。
#dnsreflect
此外,最近越来越多的应用程序反射攻击依赖于供RTP(实时传输协议)用于信令用途的SIP(会话初始化协议)。为了互连SIP UA(用户代理)而在 SIP 服务器之间需要代理服务器,这意味着必须在 SIP INVITE 请求的标头中指定通信信道的末端。特别是在:“通过”字段标识必须与之建立通信的系统。因为没有执行任何认证且 SIP 依赖于 UDP,所以伪造很容易实现。因此,相当容易理解可能产生的杠杆作用。一个典型的 SIP INVITE 请求大约 1 KB。采用这种请求,可让服务器连续向伪造的来源发送数十个 kbps 的数据流媒体。在 256 kbps ADSL 上行链路上,便可以在每秒内创建大约 64 个这种连接,从而迅速填满目标的上行链路。
第三方
信息包生成和带宽不是攻击者在发送拒绝服务攻击时可能要面对的瓶颈问题。在处理依赖于TCP会话的应用程序时,尤其是在待决会话的情况下,由攻击堆栈来进行的处理可能成为一项限制因素。如果采用标准堆栈函数来执行这种操作,则web 服务器中心接受的会话总数极有可能高于系统能够建立的会话的最大数目。在这种情况下,待决会话攻击将没有效果,且唯一会受到攻击影响的系统将是攻击系统本身。
一种可能是,为了能够建立比预期极限数目还要多的会话,可以让第三方服务器把加工过的RST信息包发送到攻击站点。第三方是设在攻击系统的网络上,其嗅探攻击者与目标之间的数据流量。建立会话时,第三方主机不断跟踪会话信息、IP地址、端口和序列号。当 3 向握手完成时,第三方根据其保存在内存中的信息而将一个完全合法的 RST 信息包发送到攻击系统。通过这一方式,攻击系统释放连接,而目标服务器仍然将此连接视为打开。
Botnet
最后但也是最著名的杠杆作用是使用bot。其目的只是要巨量的第三方系统执行攻击。这显然可以提高由单个系统执行的单一攻击的强度,而且可以严重破坏高性能的网络和系统。使用bot时必须考虑若干参数。首先是 bot 在第三方系统上的安装方式。其次是传输命令的命令通道,最后是所执行的操作。
Bot的第一个特点是它们以系统的合法所有者的名义进行操作。这意味着它们是秘密安装并假定为是悄悄运行的。Bot在聚合数百或数千台受到攻击的主机时非常有效,这意味着其安装有赖于蠕虫或大规模黑客攻击机制。大规模黑客攻击是自动安装的基础。通过试图攻击若干漏洞的脚本来执行大规模黑客攻击。在成功的情况下,数据净荷安装代理程序。此时传播速度相对缓慢,且易于追溯botnet 的来源。出现蠕虫以后,这种技术得到了改善。在这第二个阶段,内嵌在攻击中的数据净荷安装代理程序,然后从这个新的起点自动尝试攻击其他系统。这个阶段的传播速度更快,且更难识别 botnet 的来源,这是因为必须逐步跟踪感染才能查出蠕虫的始作俑者。
支持命令通道的这种架构现在通常包含3层架构:一台或多台主控端、一个或多个代理处理程序以及若干个代理程序。主控端是启动攻击命令的发出点。代理处理程序是这种架构中最重要的部分。它们的目的是寻找可用的代理程序,并从主控端传送命令。代理程序也称为巫毒,是在受到攻击的主机上运行的进程。这些代理程序负责亲自执行攻击。
代理处理程序是网络中最灵活的部分,通常定义在架构中各个部分之间进行通信所使用的协议。关键点是代理程序和代理处理程序之间通信的方向和本质。通过代理程序建立的与代理处理程序的通信通常更加有效,这是因为防火墙更可能让从内部网络传出的数据流量通过。作为传输层的合法协议也更加有效。通过HTTP获取命令的代理程序几乎不受阻止,因为与外部web 服务器的通信通常得到公司安全策略的授权。如果使用的协议不是 HTTP,但代理处理程序依赖于 TCP 端口 80 来通信,则需要进行协议异常情况检测来阻止这种数据流。因此,通常可以阻止在非标准(HTTP、SMTP 等)端口上进行的通信,但是如果配置的防火墙不好,则阻止很困难。
最常见的代理处理程序是运行在IRC通道上的bot。主机受到攻击便会连接到特定的 IRC 通道。然后代理处理程序只需检查活动的成员来建立可用的代理程序列表。代理程序根据主控端在 IRC 上发送的命令来执行操作。这种代理处理程序可靠、灵活且易于安装设置。不过,IRC 通信常常受到防火墙的隔离,而且整个架构不够隐蔽。因此更容易被顺着来源追溯到主控端。不远的将来,使用秘密通道应视为 botnet 管理的一种趋势。
Bot执行的操作无疑是洪水。这是从逻辑上理解,因为bot的主要作用是利用巨量的第三方巫毒。从基本的 SYN 洪水到自定义和面向应用程序的洪水,几乎所有的洪水技术都已经在 botnet 上得到实施。因此,判断一个 botnet 是否良好的标准是代理程序可根据主控端发送的命令调整其行为的能力。由于各个计算机的防护机制各有不同,所以对于可以执行 SYN 洪水、异常洪水以及建立数千个合法 HTTP 会话的代理程序来说,便能够让攻击者根据对目标产生的影响来更改攻击的类型。另一个优点是可以管理能发送多个操作的单个 botnet
Flashmob
Botnet的主要缺点是它依赖的是静态源。时间一长便可能将一些危险的IP地址列入黑名单,还会通知网络管理员某些系统已经遭受攻击。要考虑到的一点就是 botnet 的寿命很有限。Flashmob 则不存在这些缺点。
这种机制的目的是令无辜的用户在无意中执行攻击操作。这种机制十分简单。攻击者建立一个web站点。在该web 站点上,某些恶意内容强迫无辜用户的浏览器发动对特定目标的攻击。这一特定目标通常是链接到目标 web 站点的数百个隐藏框架或动态代码,例如 Java 小程序或 ActiveX,这样便使其可以执行某些更高级的操作。随着家庭计算机的功能提高和一般的宽带接入,完全有可能在用户没有察觉的情况下产生重要的数据流量。对于攻击的目标服务器而言,不再能列出黑名单,因为每当一名新的用户连接到该 web 站点,这名用户的计算机便会成为新的攻击源。缺点是很难令 Web 站点有足够大的数据流量,从而不能确保对目标持续发送重要的数据流量。
结论
要消除拒绝服务的真正难点是这些攻击涉及的技术太庞杂。对SYN洪水有效的防护措施,对于防护待解决的会话攻击来说毫无助益,而对于公司网路来说,如果接入路由器因短时间内的巨量信息包而崩溃,这也不再会有任何作用。
攻击者意识到了这一点,而这也成为他们所掌握的利器。当一种攻击的功效不足时,他们立即采用其他技术。这已经成为司空见惯的现象,因此,越来越需要开发功能丰富、应变灵活的高性能安全技术。