标题：分布式拒绝服务攻击
简介
分布式拒绝服务攻击英文缩写即"Ddos"。DdoS的攻击方式有很多种，最基本的DoS攻击就是利用合理的服务请求来占用过多的服务资源，从而使合法用户无法得到服务的响应。DdoS攻击手段是在传统的DoS攻击基础之上产生的一类攻击方式。单一的DoS攻击一般是采用一对一方式的，当攻击目标CPU速度低、内存小或者网络带宽小等等各项性能指标不高它的效果是明显的。随着计算机与网络技术的发展，计算机的处理能力迅速增长，内存大大增加，同时也出现了千兆级别的网络，这使得DoS攻击的困难程度加大了-目标对恶意攻击包的"消化能力"加强了不少，例如你的攻击软件每秒钟可以发送3,000个攻击包，但我的主机与网络带宽每秒钟可以处理10,000个攻击包，这样一来攻击就不会产生什么效果。
这时候分布式的拒绝服务攻击手段（DDoS）就应运而生了。你理解了DoS攻击的话，它的原理就很简单。如果说计算机与网络的处理能力加大了10倍，  将军DDOS用一台攻击机来攻击不再能起作用的话，攻击者使用10台攻击机同时攻击呢？用100台呢？DDoS就是利用更多的傀儡机（肉鸡）来发起进攻，以比从前更大的规模来进攻受害者。
高速广泛连接的网络给大家带来了方便，也为DDoS攻击创造了极为有利的条件。在低速网络时代时，黑客占领攻击用的傀儡机时，总是会优先考虑离目标网络距离近的机器，因为经过路由器的跳数少，效果好。而现在电信骨干节点之间的连接都是以G为级别的，大城市之间更可以达到2.5G的连接，这使得攻击可以从更远的地方或者其他城市发起，攻击者的傀儡机位置可以在分布在更大的范围，选择起来更灵活了。[1]
攻击方式
  DDOS攻击示意图DDoS攻击通过大量合法的请求占用大量网络资源，以达到瘫痪网络的目的。 这种攻击方式可分为以下几种：
通过使网络过载来干扰甚至阻断正常的网络通讯；
通过向服务器提交大量请求，使服务器超负荷；
阻断某一用户访问服务器；
阻断某服务与特定系统或个人的通讯。
SYN floodSYN flood是一种黑客通过向服务端发送虚假的包以欺骗服务器的做法。具体说，就是将包中的原IP地址设置为不存在或不合法的值。服务器一旦接受到该包便会返回接受请求包，但实际上这个包永远返回不到来源处的计算机。这种做法使服务器必需开启自己的监听端口不断等待，也就浪费了系统各方面的资源。LAND attack这种攻击方式与SYN floods类似，不过在LAND attack攻击包中的原地址和目标地址都是攻击对象的IP。这种攻击会导致被攻击的机器死循环，最终耗尽资源而死机。ICMP floodsICMPfloods是通过向未良好设置的路由器发送广播信息占用系统资源的做法。Application与前面叙说的攻击方式不同，Application level floods主要是针对应用软件层的，也就是高于OSI的。它同样是以大量消耗系统资源为目的，通过向IIS这样的网络服务程序提出无节制的资源申请来迫害正常的网络服务。
攻击现象
被攻击主机上有大量等待的TCP连接
网络中充斥着大量的无用的数据包，
源地址为假 制造高流量无用数据，造成网络拥塞，使受害主机无法正常和外界通讯
利用受害主机提供的传输协议上的缺陷反复高速的发出特定的服务请求，使主机无法处理所有正常请求
严重时会造成系统死机

流程
DDoS并不象入侵一台主机那样简单。了解这些原理之后，你便会更加明白入侵者的意图，从此便掌握了预防的技巧。一般来说，黑客进行DDoS攻击时会经过这样的步骤：搜集资料下列情况是黑客非常关心的情报：被攻击目标主机数目、地址情况 目标主机的配置、性能 目标的带宽。
对于DDoS攻击者来说，攻击互联网上的某个站点，有一个重点就是确定到底有多少台主机在支持这个站点，一个大的网站可能有很多台主机利用负载均衡技术提供同一个网站的www服务。
如果要进行DDoS攻击的话，应该攻击哪一个地址呢？使这台机器瘫痪，但其他的主机还是能向外提供www服务，所以想让别人访问不到网站的话，要所有这些IP地址的机器都瘫掉才行。在实际的应用中，一个IP地址往往还代表着数台机器：网站维护者使用了四层或七层交换机来做负载均衡，把对一个IP地址的访问以特定的算法分配到下属的每个主机上去。这时对于DDoS攻击者来说情况就更复杂了，他面对的任务可能是让几十台主机的服务都不正常。
所以说事先搜集情报对DDoS攻击者来说是非常重要的，这关系到使用多少台傀儡机才能达到效果的问题。简单地考虑一下，在相同的条件下，攻击同一站点的2台主机需要2台傀儡机的话，攻击5台主机可能就需要5台以上的傀儡机。有人说做攻击的傀儡机越多越好，不管你有多少台主机我都用尽量多的傀儡机来攻就是了，反正傀儡机超过了时候效果更好。
但在实际过程中，有很多黑客并不进行情报的搜集而直接进行DDoS的攻击，这时候攻击的盲目性就很大了，效果如何也要靠运气。其实做黑客也象网管员一样，是不能偷懒的。一件事做得好与坏，态度最重要，水平还在其次。[1]占领黑客最感兴趣的是有下列情况的主机：链路状态好的主机 性能好的主机 安全管理水平差的主机
这一部分实际上是使用了另一大类的攻击手段：利用形攻击。这是和DDoS并列的攻击方式。简单地说，就是占领和控制被攻击的主机。取得最高的管理权限，或者至少得到一个有权限完成DDoS攻击任务的帐号。对于一个DDoS攻击者来说，准备好一定数量的傀儡机是一个必要的条件，下面说一下他是如何攻击并占领它们。
首先，黑客做的工作一般是扫描，随机地或者是有针对性地利用扫描器去发现互联网上那些有漏洞的机器，象程序的溢出漏洞、cgi、Unicode、ftp、数据库漏洞…(简直举不胜举啊)，都是黑客希望看到的扫描结果。随后就是尝试入侵了，具体的手段就不在这里多说了，感兴趣的话网上有很多关于这些内容的文章。
总之黑客现在占领了一台傀儡机了！然后他做什么呢？除了上面说过留后门擦脚印这些基本工作之外，他会把DDoS攻击用的程序上载过去，一般是利用ftp。在攻击机上，会有一个DDoS的发包程序，黑客就是利用它来向受害目标发送恶意攻击包的。实际攻击经过前2个阶段的精心准备之后，黑客就开始瞄准目标准备发射了。前面的准备做得好的话，实际攻击过程反而是比较简单的。就象图示里的那样，黑客登录到做为控制台的傀儡机，向所有的攻击机发出命令："预备~ ，瞄准~，开火!"。这时候埋伏在攻击机中的DDoS攻击程序就会响应控制台的命令，一起向受害主机以高速度发送大量的数据包，导致它死机或是无法响应正常的请求。黑客一般会以远远超出受害方处理能力的速度进行攻击，他们不会"怜香惜玉"。
老道的攻击者一边攻击，还会用各种手段来监视攻击的效果，在需要的时候进行一些调整。简单些就是开个窗口不断地ping目标主机，在能接到回应的时候就再加大一些流量或是再命令更多的傀儡机来加入攻击。[1]
关于防范
到目前为止，进行DDoS攻击的防御还是比较困难的。首先，这种攻击的特点是它利  南京大学黄皓教授做防范专题演讲用了TCP/IP协议的漏洞，除非你不用TCP/IP，才有可能完全抵御住DDoS攻击。一位资深的安全专家给了个形象的比喻：DDoS就好象有1,000个人同时给你家里打电话，这时候你的朋友还打得进来吗？
不过即使它难于防范，也不是说我们就应该逆来顺受，实际上防止DDoS并不是绝对不可行的事情。主机设置所有的主机平台都有抵御DoS的设置，总结一下，基本的有几种：
关闭不必要的服务
限制同时打开的Syn半连接数目
缩短Syn半连接的time out 时间
及时更新系统补丁设置网络设备可以从防火墙与路由器上考虑。这两个设备是到外界的接口设备，在进行防DDoS设置的同时，要注意一下这是以多大的效率牺牲为代价的，对你来说是否值得。
1.防火墙
禁止对主机的非开放服务的访问 限制同时打开的SYN最大连接数 限制特定IP地址的访问 启用防火墙的防DDoS的属性 严格限制对外开放的服务器的向外访问
第五项主要是防止自己的服务器被当做工具去害人。
2.路由器
以Cisco路由器为例
Cisco Express Forwarding（CEF） 使用 unicast reverse-path访问控制列表（ACL）过滤 设置SYN数据包流量速率 升级版本过低的ISO 为路由器建立log server
防御ddos
一. 启用 SYN 攻击保护[2]
启用 SYN 攻击保护的命名值位于此注册表项的下面：HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services。
值名称： SynAttackProtect
建议值： 2
有效值： 0 – 2
说明：使 TCP 调整 SYN-ACK 的重传。配置此值后，在遇到 SYN 攻击时，对连接超时的响应将更快速。在超过 TcpMaxHalfOpen 或 TcpMaxHalfOpenRetried 的值后，将触发 SYN 攻击保护。
设置 SYN 保护阈值　　下列值确定触发 SYN 保护的阈值。这一部分中的所有注册表项和值都位于注册表项 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services 的下面。这些注册表项和值是：
值名称： TcpMaxPortsExhausted　　建议值： 5　　有效值： 0 – 65535　　说明：指定触发 SYN 洪水攻击保护所必须超过的 TCP 连接请求数的阈值。　　　　值名称： TcpMaxHalfOpen　　建议的数值数据： 500　　有效值： 100 – 65535　　说明：在启用 SynAttackProtect 后，该值指定处于 SYN_RCVD 状态的 TCP 连接数的阈值。在超过 SynAttackProtect 后，将触发 SYN 洪水攻击保护。　　　　值名称： TcpMaxHalfOpenRetried　　建议的数值数据： 400　　有效值： 80 – 65535　　说明：在启用 SynAttackProtect 后，该值指定处于至少已发送一次重传的 SYN_RCVD 状态中的 TCP 连接数的阈值。在超过 SynAttackProtect 后，将触发 SYN 洪水攻击保护。　　
设置其他保护　　这一部分中的所有注册表项和值都位于注册表项 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services 的下面。这些注册表项和值是：
值名称： TcpMaxConnectResponseRetransmissions　　建议的数值数据： 2　　有效值： 0 – 255　　说明：控制在响应一次 SYN 请求之后、在取消重传尝试之前 SYN-ACK 的重传次数。　　　　值名称： TcpMaxDataRetransmissions　　建议的数值数据： 2　　有效值： 0 – 65535　　说明：指定在终止连接之前 TCP 重传一个数据段（不是连接请求段）的次数。　　　　值名称： EnablePMTUDiscovery　　建议的数值数据： 0　　有效值： 0, 1　　说明：将该值设置为 1（默认值）可强制 TCP 查找在通向远程主机的路径上的最大传输单元或最大数据包大小。攻击者可能将数据包强制分段，这会使堆栈不堪重负。对于不是来自本地子网的主机的连接，将该值指定为 0 可将最大传输单元强制设为 576 字节。　　　　? 值名称： KeepAliveTime　　建议的数值数据： 300000　　有效值： 80 – 4294967295　　说明：指定 TCP 尝试通过发送持续存活的数据包来验证空闲连接是否仍然未被触动的频率。　　　　? 值名称： NoNameReleaseOnDemand　　建议的数值数据： 1　　有效值： 0, 1　　说明：指定计算机在收到名称发布请求时是否发布其 NetBIOS 名称。　　
使用表 1 中汇总的值可获得最大程度的保护。
表 1：建议值
值名称 值 (REG_DWORD)　　SynAttackProtect　　2　　　　TcpMaxPortsExhausted　　1　　　　TcpMaxHalfOpen　　500　　　　TcpMaxHalfOpenRetried　　400　　　　TcpMaxConnectResponseRetransmissions　　2　　　　TcpMaxDataRetransmissions　　2　　　　EnablePMTUDiscovery　　0　　　　KeepAliveTime　　300000（5 分钟）　　　　NoNameReleaseOnDemand　　1
二. 抵御 ICMP 攻击
这一部分的命名值都位于注册表项 HKLM\System\CurrentControlSet\Services\AFD\Parameters 的下面
值： EnableICMPRedirect　　建议的数值数据： 0　　有效值：0（禁用），1（启用）　　说明：通过将此注册表值修改为 0，能够在收到 ICMP 重定向数据包时禁止创建高成本的主机路由。
使用表 2 中汇总的值可以获得最大程度的保护：
表 2：建议值
值名称 值 (REG_DWORD)　　EnableICMPRedirect　　0　　
三. 抵御 SNMP 攻击
这一部分的命名值位于注册表项 HKLM\System\CurrentControlSet\Services\Tcpip\Parameters 的下面。
值： EnableDeadGWDetect　　建议的数值数据： 0　　有效值：0（禁用），1（启用）　　说明：禁止攻击者强制切换到备用网关
使用表 3 中汇总的值可以获得最大程度的保护：
表 3：建议值
值名称 值 (REG_DWORD)　　EnableDeadGWDetect　　0　　
四. AFD.SYS 保护
下面的注册表项指定内核模式驱动程序 Afd.sys 的参数。Afd.sys 用于支持 Windows Sockets 应用程序。这一部分的所有注册表项和值都位于注册表项 HKLM\System\CurrentControlSet\Services\AFD\Parameters 的下面。这些注册表项和值是：
值 EnableDynamicBacklog　　建议的数值数据： 1　　有效值：0（禁用），1（启用）　　说明：指定 AFD.SYS 功能，以有效处理大量的 SYN_RCVD 连接。有关详细信息，请参阅“Internet Server Unavailable Because of Malicious SYN Attacks”，　　　　值名称： MinimumDynamicBacklog　　建议的数值数据： 20　　有效值： 0 – 4294967295　　说明：指定在侦听的终结点上所允许的最小空闲连接数。如果空闲连接的数目低于该值，线程将被排队，以创建更多的空闲连接　　　　值名称：MaximumDynamicBacklog　　建议的数值数据： 20000　　有效值： 0 – 4294967295　　说明：指定空闲连接以及处于 SYN_RCVD 状态的连接的最大总数。　　　　值名称： DynamicBacklogGrowthDelta　　建议的数值数据： 10　　有效值： 0 – 4294967295　　默认情况下是否出现：否　　说明：指定在需要增加连接时将要创建的空闲连接数。　　
使用表 4 中汇总的值可以获得最大程度的保护。
表 4：建议值
值名称 值 (REG_DWORD)　　EnableDynamicBacklog　　1　　　　MinimumDynamicBacklog　　20　　　　MaximumDynamicBacklog　　20000　　　　DynamicBacklogGrowthDelta　　10　　
其他保护
这一部分的所有注册表项和值都位于注册表项 HKLM\System\CurrentControlSet\Services\Tcpip\Parameters 的下面。
保护屏蔽的网络细节　　网络地址转换 (NAT) 用于将网络与传入连接屏蔽开来。攻击者可能规避此屏蔽，以便使用 IP 源路由来确定网络拓扑。
值： DisableIPSourceRouting　　建议的数值数据： 1　　有效值：0（转发所有数据包），1（不转发源路由数据包），2（丢弃所有传入的源路由数据包）。　　说明：禁用 IP 源路由，后者允许发送者确认数据报在网络中应采用的路由。
避免接受数据包片段　　处理数据包片段可以是高成本的。虽然拒绝服务很少来自外围网络内，但此设置能防止处理数据包片段。
值： EnableFragmentChecking　　建议的数值数据： 1　　有效值：0（禁用），1（启用）　　说明：禁止 IP 堆栈接受数据包片段。
切勿转发去往多台主机的数据包　　多播数据包可能被多台主机响应，从而导致响应淹没网络。
值： EnableMulticastForwarding　　建议的数值数据： 0　　有效范围：0 (false)，1 (true)　　说明：路由服务使用此参数来控制是否转发 IP 多播。此参数由路由和远程访问服务创建。
只有防火墙可以在网络间转发数据包　　多主机服务器切勿在它所连接的网络之间转发数据包。明显的例外是防火墙。
值： IPEnableRouter　　建议的数值数据： 0　　有效范围：0 (false)，1 (true)　　说明：将此参数设置为 1 (true) 会使系统在它所连接的网络之间路由 IP 数据包。
屏蔽网络拓扑结构细节　　可以使用 ICMP 数据包请求主机的子网掩码。只泄漏此信息是无害的；但是，可以利用多台主机的响应来了解内部网络的情况。
值： EnableAddrMaskReply　　建议的数值数据： 0　　有效范围：0 (false)，1 (true)　　说明：此参数控制计算机是否响应 ICMP 地址屏蔽请求。
使用表 5 中汇总的值可以获得最大程度的保护。
表 5：建议值
值名称 值 (REG_DWORD)　　DisableIPSourceRouting　　1　　　　EnableFragmentChecking　　1　　　　EnableMulticastForwarding　　0　　　　IPEnableRouter　　0　　　　EnableAddrMaskReply　　0　　　　缺陷
在测试这些值的变化时，请参照在产品中所期望的网络流量进行测试。这些设置会修改被认为正常并偏离了测试默认值的项目的阈值。一些阈值可能由于范围太小而无法在客户端的连接速度剧烈变化时可靠地支持客户端。