SYN-ACK洪水的作用基础是令CPU资源枯竭。从理论上讲,这种信息包是 TCP 3 向握手的第二步,而且在 TCB 中应该有对应的入口。浏览 TCB 将会使用 CPU 资源,尤其 TCB 很大时会耗用更多的 CPU 资源。因此,负荷较重时,这种对资源的使用会影响系统性能。
这也就是SYN-ACK攻击所仰仗的利器。向系统发送一个巨荷的SYN-ACK 信息包会显著增加系统 CPU 的使用率。因此,用于组织 TCB 的哈希算法和哈希表大小之选择会影响攻击的效率(请参阅“概念”和“逻辑缺陷”)。而且,因为这些 SYN-ACK 信息包不属于现有的连接,所以目标机器不得不将 RST 信息包发送到源机器,从而增加了链路上的带宽占用率。对于 SYN 洪水,攻击者为了避免接收到 RST,当然可以伪造源机器的 IP 地址,这样还可以提高攻击者的可用带宽。
隔离异常是基于那些堆栈不能正常处理的异常情况(即便从标准的视角看它们完全合法)。著名的“死亡之ping”就是关于巨型(但仍然合法)ICMP回显请求信息包。如果信息包带有相同的源地址、目标地址和端口,其仍然是合法的,不过对IP 协议栈有害。古老的 land 攻击最近已脱胎换骨成为 imland,而且正在破坏 IP协议栈。只有少数异常攻击仍然能够利用单一信息包击倒系统。大多数堆栈都已打上补丁程序,而且可能大多数异常都已经过测试和开发。然而,处理这种信息包仍然会占用 CPU 的不少资源。当5 年前异常攻击出现并得到补丁程序的修补时,攻击能力还受到 CPU 和带宽的限制。处理异常情况时产生的额外计算负担不太重要。如今,工作站与服务器之间的差距日益缩小,而且任何人都可以使用宽带。这种条件下可能发动巨型负荷的异常,使得目标机器的 CPU 资源枯竭。
然而,内部缺陷更加难以琢磨,更加难以修补。依赖于NFA引擎的规则表达式可能极具危险性。NFA引擎分析表达式的所有可能路径。如有一个字符令搜索失效,该引擎便会返回前一个匹配点并重试表达式的所有组合。若针对精心制作的输入而启动像通配符 * 之类极耗资源的运算符和像 (int integer) 之类 OR 条件的组合,则会产生致命的影响。
SQL也是逻辑攻击的一种明显传播媒介,因为在大型而复杂的表格上,SQL查询可能在应用程序级生成不同的错误行为。首先遇到的缺陷就是缺少索引和数据库结构中通常使用的字符串列。如果没有正确的索引,涉及对同一个表的多个列进行筛选和排序操作的SQL 请求便会产生指数级数量的操作,这会消耗巨量的 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 服务器崩溃。