迷彩 潜伏 隐蔽 伪装
分类: 网络与安全
2015-04-23 10:23:21
原文地址:DOS/DDOS汇总 作者:cjxqhhh
(本文根据网上资料与笔者自身理解进行整理而来,仅供学习,切勿用于非法用途。如无意中侵犯了您的权益,请及时联系我,谢谢。)
本文结构如下:
一、常见DOS/DDOS类型
1、原理
2、现象、特点检测
3、防范
二、一些新型DOS/DDOS
三、总结
附、防火墙抗DOS/DDOS原理及算法
1、原理:
要了解Syn flood攻击,我们首先要对TCP协议中建立连接的三次握手过程有一定的了解。简单来说,TCP三次握手过程如下图所示:客户端发送SYN包给服务器(第一次握手),服务器收到SYN包后对客户端发送SYN+ACK包(第二次握手), 最后客户端发送ACK包给服务器(第三次握手)。
该攻击以多个随机的(伪造的)源主机地址向目的主机发送SYN包,而在收到目的主机的SYN ACK后并不回应,这样,目的主机就为这些源主机建立了大量的连接队列,而且由于没有收到ACK一直维护着这些队列,造成了资源的大量消耗而不能向正常请求提供服务。这是现在最流行的攻击之一。
2、现象、特点检测:
a. 网站出现无法访问的情况。
b. 使用wireshark等抓包工具,会发现大量的syn包
3、防范:
a. 缩短SYN Timeout时间,由于SYN Flood攻击的效果取决于服务器上保持的SYN半连接数,这个值等于SYN攻击的频度 乘上 SYN Timeout,所以通过缩短从接收到SYN报文到确定这个报文无效并丢弃改连接的时间,例如设置为20秒以下(过低的SYN Timeout设置可能会影响客户的正常访问),可以成倍的降低服务器的负荷。(仅在攻击规模不大的情况下有效)
b. 设置SYN Cookie,就是给每一个请求连接的IP地址分配一个Cookie,如果短时间内连续受到某个IP的重复SYN报文,就认定是受到了攻击,以后从这个IP地址来的包会被一概丢弃。(攻击者的IP通常是伪造的,仅在攻击规模不大的情况下有效。)
c. SYN Flood程序有两种攻击方式,基于IP的和基于域名的,前者是攻击者自己进行域名解析并将IP地址传递给攻击程序,后者是攻击程序自动进行域名解析,但是它们有一点是相同的,就是一旦攻击开始,将不会再进行域名解析,我们的切入点正是这里:假设一台服务器在受到SYN Flood攻击后迅速更换自己的IP地址,那么攻击者仍在不断攻击的只是一个空的IP地址,并没有任何主机,而防御方只要将DNS解析更改到新的IP地址就能在一定的时间内(取决于DNS的刷新时间)恢复用户通过域名进行的正常访问。为了迷惑攻击者,我们甚至可以放置一台“牺牲”服务器让攻击者满足于攻击的“效果”(由于DNS缓冲的原因,只要攻击者的浏览器不重起,他访问的仍然是原先的IP地址)。虽然说攻击者也能不断去进行DNS请求从而打破这种“退让”策略,但是一来这样增加了攻击者的成本,二来过多的DNS请求可以帮助我们追查攻击者的真正踪迹(DNS请求不同于SYN攻击,是需要返回数据的,所以很难进行IP伪装)。
d. 对于Win2000系统,还可以通过修改注册表降低SYN Flood的危害,在注册表中作如下改动:
首先,打开regedit,找到HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters
增加一个SynAttackProtect的键值,类型为REG_DWORD,取值范围是0-2,这个值决定了系统受到SYN攻击时采取的保护措施,包括减少系统SYN+ACK的重试的次数等,默认值是0(没有任何保护措施),推荐设置是2;
增加一个TcpMaxHalfOpen的键值,类型为REG_DWORD,取值范围是100-0xFFFF,这个值是系统允许同时打开的半连接,默认情况下WIN2K PRO和SERVER是100,ADVANCED SERVER是500,这个值很难确定,取决于服务器TCP负荷的状况和可能受到的攻击强度,具体的值需要经过试验才能决定。
增加一个TcpMaxHalfOpenRetried的键值,类型为REG_DWORD,取值范围是80-0xFFFF,默认情况下WIN2K PRO和SERVER是80,ADVANCED SERVER是400,这个值决定了在什么情况下系统会打开SYN攻击保护。
1、原理:
Smurf攻击是以最初发动这种攻击的程序名“Smurf”来命名的。这种攻击方法结合使用了IP欺骗和ICMP回复方法使大量网络传输充斥目标系统,引起目标系统拒绝为正常系统进行服务。
首先,攻击者将源地址未造成受害者的地址,然后向某一网络(反弹网络)的广播地址发送大量的ICMP包来淹没受害主机。同时,反弹网络自身的性能也可能收到影响。
2、现象、特点检测:
a. 对网络进行监控和统计发现,若出现Smurf攻击,则会出现大量的echo报文.由于存在echo应答风暴,此时,echo报文在所有报文中所占的比例大大增加。且这些报文的原地址大多来自某几个网段。所以,如出现这种情况,就可能遭到了Smurf攻击。
b. 报文丢失率和重传率的上升,由于echo风暴造成网络负载过重,会出现大量报文丢失和报文重传现象。所以,若有明显的报文丢失率和重传率上升现象,就有可能遭到了Smurf攻击。
c. 常出现意外的连接重置的现象,在受到Smurf攻击时,由于网络重载,会使其它的网络连接出现意外的中断或重置的现象。如反复出现意外的中断或重置,也可能受到了Smurf攻击。
3、防范:
a. 避免站内主机成为攻击者
网络应在与子网相连的一边对欺骗IP包进行过滤。比如在路由器端可以增加一个功能,通过向某一ICMP包的源IP发送一个确认包来判断此包是否是欺骗的IP包,保证内部网络中发出的所有传输信息都具有合法的源地址。
b. 避免成为Smurf攻击的中间媒介,即避免成为“反弹网络”
有2种选择以阻塞Smurf攻击的中间媒介。第一种方法是在路由器端加以配置,拒绝接收带有广播地址的ICMP应答请求包,防止这些分组到达自己的网络。如果不能阻塞所有入站echo请求,用户就需要禁止路由器把网络广播地址映射成为LAN广播地址。制止了这个映射过程,自己的系统就不会再收到这些echo请求。如果使用Cisco路由器,制止网络广播映射成为LAN广播的方法是在LAN接口的配置模式中输入命令:no ip directed-broadcast,如下图:
c. 跟踪Smurf攻击
跟踪Smurf攻击是困难的,但如果有ISP的合作,对其进行跟踪也是可能的。在前面的Smurf攻击原理中,已介绍了ICMP应答请求包的源IP是经过伪装的将要被攻击的主机IP,所以要从ICMP的源IP是无法跟踪Smurf攻击的发起者的。可以在ACL(Access control layer)记录下ICMP信息包的MAC地址,通过MAC地址来跟踪Smurf攻击。
1、原理:
用一个特别打造的SYN包,它的原地址和目标地址都被设置成某一个服务器地址。此举将导致接受服务器向它自己的地址发送SYN-ACK消息,结果这个地址又发回ACK消息并创建一个空连接。被攻击的服务器每接收一个这样的连接都将保留,直到超时,对Land攻击反应不同,许多UNIX实现将崩溃,NT变的极其缓慢(大约持续5分钟)。
2、现象、特点检测:
a. 检测收到的数据包的源地址和目的地址是否相同。
3、防范:
a. 适当配置防火墙设备或过滤路由器的过滤规则就可以防止这种攻击行为(一般是丢弃该数据包),并对这种攻击进行审计(记录事件发生的时间,源主机和目标主机的MAC地址和IP地址)。
1、原理:
向被害主机发送大于65507字节(在网络传输时会分片,到达目的地时重组后数据段大于65507字节)的ICMP包,该恶意包经过重组后有可能造成未打补丁的系统崩溃。
2、防范:
打补丁、禁止ICMP包通过网络安全设备。
1、原理:
Teardrop攻击是基于UDP的病态分片数据包的攻击方法,其工作原理是向被攻击者发送多个分片的IP包(IP分片数据包中包括该分片数据包属于哪个数据包以及在数据包中的位置等信息),某些操作系统收到含有重叠偏移的伪造分片数据包时将会出现系统崩溃、重启等现象。利用UDP包重组时重叠偏移(假设数据包中第二片IP包的偏移量小于第一片结束的位移,而且算上第二片IP包的Data,也未超过第一片的尾部,这就是重叠现象)的漏洞对系统主机发动拒绝服务攻击,最终导致主机菪掉;对于Windows系统会导致蓝屏死机,并显示STOP 0x0000000A错误。
2、防范:
a. 对接收到的分片数据包进行分析,计算数据包的片偏移量(Offset)是否有误。
b. 添加系统补丁程序,丢弃收到的病态分片数据包并对这种攻击进行审计。尽可能采用最新的操作系统,或者在防火墙上设置分段重组功能,由防火墙先接收到同一原包中的所有拆分数据包,然后完成重组工作,而不是直接转发。因为防火墙上可以设置当出现重叠字段时所采用的规则。
1、原理:
Connection Flood是典型的并且非常的有效的利用小流量冲击大带宽网络服务的攻击方式,这种攻击方式目前已经越来越猖獗。这种攻击的原理是利用真实的IP地址向服务器发起大量的连接,并且建立连接之后很长时间不释放,占用服务器的资源,造成服务器服务器上残余连接(WAIT状态)过多,效率降低,甚至资源耗尽,无法响应其他客户所发起的连接。
其中一种攻击方法是每秒钟向服务器发起大量的连接请求,这类似于固定源IP的SYN Flood攻击,不同的是采用了真实的源IP地址。通常这可以在防火墙上限制每个源IP地址每秒钟的连接数来达到防护目的。但现在已有工具采用慢速连接的方式,也即几秒钟才和服务器建立一个连接,连接建立成功之后并不释放并定时发送垃圾数据包给服务器使连接得以长时间保持。这样一个IP地址就可以和服务器建立成百上千的连接,而服务器可以承受的连接数是有限的,这就达到了拒绝服务的效果。
2、现象、特点检测:
a. 使用netstat –an命令查看网络连接状态,发现来自同一IP的大量连接
3、防范:
a. 主动清除残余连接。?
b. 对恶意连接的IP进行封禁。?
c. 限制每个源IP的连接数。?
d. 可以对特定的URL进行防护。?
e. 反查Proxy后面发起HTTP Get Flood的源。
1、原理:
CC主要是用来攻击页面的。大家都有这样的经历,就是在访问论坛时,如果这个论坛比较大,访问的人比较多,打开页面的速度会比较慢,访问的人越多,论坛的页面越多,数据库就越大,被访问的频率也越高,占用的系统资源也就相当可观。
一个静态页面不需要服务器多少资源,甚至可以说直接从内存中读出来发给你就可以了,但是论坛就不一样了,我看一个帖子,系统需要到数据库中判断我是否有读读帖子的权限,如果有,就读出帖子里面的内容,显示出来——这里至少访问了2次数据库,如果数据库的数据容量有200MB大小,系统很可能就要在这200MB大小的数据空间搜索一遍,这需要多少的CPU资源和时间?如果我是查找一个关键字,那么时间更加可观,因为前面的搜索可以限定在一个很小的范围内,比如用户权限只查用户表,帖子内容只查帖子表,而且查到就可以马上停止查询,而搜索肯定会对所有的数据进行一次判断,消耗的时间是相当的大。
CC攻击目前主要有两种模式:代理模式、僵尸网络模式。
代理模式通过操作代理服务器进行攻击。
僵尸网络模式通过获取大量僵尸节点(通过黑市购买等各种手段)进行攻击。
2、现象、特点检测:
a. 出现网站无法访问的现象
b. 发现大量对某一耗时操作页面的请求(如查询等)
3、防范:
a. 一般来说,CC攻击是针对域名的(也有针对IP的)。取消域名绑定后,针对域名的攻击就失效了。但同时,网站也就只能通过IP进行访问了,为正常用户带来了很大的不便,所以不太实用。
b. 封IP,CC攻击中的IP都是真实的且大多数情况下不会变化。通过分析网站日志,很容易分辨出哪个IP是CC攻击的,因为CC攻击毕竟是通过程序来抓取网页,与普通浏览者的特性区别还是很大的,例如普通浏览者访问一个网页,必定会连续抓取网页的HTML文件、CSS文件、JS文件和图片等一系列相关文件,而CC攻击者仅仅只会抓取一个URL地址的文件,不会抓取其他类型的文件,其User Agent也大部分和普通浏览者不同,这就可以在服务器上很容易分辨出哪些访问者是CC攻击了,既然可以判断出攻击者的IP,那么预防措施就很简单,只需要批量将这些IP屏蔽,即可达到防范CC攻击的目的。当然,若攻击IP范围很广的话,最好就要通过脚本来自动判断并封禁了。
c. 限制每个IP的连接数
d. 限制来自代理的访问,一般的代理都会在HTTP头中带X_FORWARDED_FOR字段,可以此为依据判断一个访问是否来自代理。
e. CC攻击的有效性在于攻击方不接受服务器回应的数据,其发送完请求后就主动断开连接,因此要确认连接是否是CC,服务器端不立即执行URL请求命令,而是简单的返回一个页面转向的回应,回应中包含新的URL请求地址,如果是正常访问,客户端会主动再次连接到转向页面,对用户来说是透明的;而对于CC攻击者,由于不接收回应数据,因此就不会重新连接,服务器也就不需要进行查询操作。(转自%B9%A5%BB%F7%B7%C0%D3%F9&qid=9e85414e0001cdc4&p1=4)
f. 更改默认端口80。
1、原理:
顾名思义,UDP DNS Query Flood攻击采用的方法是向被攻击的服务器发送大量的域名解析请求,通常请求解析的域名是随机生成或者是网络世界上根本不存在的域名,被攻击的DNS 服务器在接收到域名解析请求的时候首先会在服务器上查找是否有对应的缓存,如果查找不到并且该域名无法直接由服务器解析的时候,DNS 服务器会向其上层DNS服务器递归查询域名信息。域名解析的过程给服务器带来了很大的负载,每秒钟域名解析请求超过一定的数量就会造成DNS服务器解析域名超时。
目前攻击手段主要有三种:
a. 利用发包程序向DNS服务器发送不带任何负载的NULL数据包。由于数据包本身不符合协议规定,服务器在收到报文的时候将直接丢弃。因此这种攻击方式除非攻击流量比较大,否则不会有明显的效果。
b. 利用程序构造DNS解析请求固定的域名,由于DNS服务器在解析请求的时候会在系统cache存放上一次解析的结果,这种攻击方式也需要较大的流量。
c. 向DNS服务器发起解析请求随机的、不存在的域名;这样DNS服务器就需要进行频繁的字符串匹配,由于在本地无法查到对应的结果,服务器必须使用递归查询向上层域名服务器提交解析请求,引起连锁反应。
其中第三种的危害是最大的。
UDP DNS Query Flood攻击实质上是UDP Flood的一种,但是由于DNS服务器的不可替代的关键作用,一旦服务器瘫痪,影响一般都很大。
根据微软的统计数据,一台DNS服务器所能承受的动态域名查询的上限是每秒钟9000个请求。而我们知道,在一台P3的PC机上可以轻易地构造出每秒钟几万个域名解析请求,足以使一台硬件配置极高的DNS服务器瘫痪,由此可见DNS 服务器的脆弱性。同时需要注意的是,蠕虫扩散也会带来大量的域名解析请求。
2、现象、特点检测:
a. 发现大量不带负载的请求数据包(对应第一种攻击手段)
b. 发现对同一域名的大量异常请求(对应第二种攻击手段)
c. 发现大量频度低甚至奇怪的域名解析请求(对应第三种攻击手段)
3、防范:
a. 根据域名-IP自学习结果主动回应,减轻服务器负载(使用 DNS Cache)?
b. 对突然发起大量频度较低的域名解析请求的源 IP 地址进行带宽限制?
c. 在攻击发生时降低很少发起域名解析请求的源 IP 地址的优先级?
d. 限制每个源 IP 地址每秒的域名解析请求次
该类型攻击通常利用某些协议的漏洞(流量放大,即返回包的大小远远大于请求包或返回多个包),将源IP设置为受害者IP后,向存在该类漏洞的服务器发送大量请求,导致受害主机无法响应。这类攻击主要是通过UDP协议来进行的(虽然某些基于TCP的服务也有可能被利用,但是少见得多),所以可以通过端口过滤(封掉某些特定的UDP端口)来起到一定的防护作用。
NTP攻击:
1、原理:
该攻击利用NTP服务器的monlist功能,NTP 服务器响应 monlist 后就会返回与 NTP 服务器进行过时间同步的最后 600 个客户端的 IP,响应包按照每 6 个 IP 进行分割,最多会有100个响应包,能使流量放大接近600倍。
2、防范:
a. 如果不是必须的话,禁用NTP服务。
b. 确实要使用NTP服务的话,只要将NTP的版本升级到4.2.7及以上即可,在4.2.7及以上版本中已经修复了该漏洞。
SSDP攻击:
1、原理:
SSDP协议(简单服务发现协议)是UPnP协议(通用即插即用协议)中的一部分,该攻击基于SSDP协议利用一些智能设备进行反射式攻击,攻击带宽放大倍数最高可达75倍。并且由于UPnP设备的庞大数量,这一攻击带来的危害可想而知。该攻击能使流量放大约30倍。
目前来说,要完全消除DOS/DDOS攻击是不可能的,还是以积极防御为主。而防范方法总的来说不外乎以下几个方面:
1、禁用不需要的协议和端口(高放大系数的协议,如SSDP协议、NTP协议等,利用Inexpress、Express、Forwarding等工具)。
2、花费大量费用买更高的带宽,并进行流量均衡、负载均衡。
3、使用专业的DOS/DDOS防火墙设备。
4、考虑使用缓存服务器提供尽可能多的静态内容,还要快速用静态资源取代动态资源并确保检测系统正常运行。
5、定期扫描漏洞并修补。
6、利用CDN(全称是Content Delivery Network,即内容分发网络)。
7、把网站做成静态页面,大量事实证明,把网站尽可能做成静态页面,不仅能大大提高抗攻击能力,而且还给黑客入侵带来不少麻烦,至少到现在为止关于HTML的溢出还每出现,看看吧!新浪、搜狐、网易等门户网站主要都是静态页面,若你非需要动态脚本调用,那就把它弄到另外一台单独主机去,免的遭受攻击时连累主服务器,当然,适当放一些不做数据库调用脚本还是可以的,此外,最好在需要调用数据库的脚本中拒绝使用代理的访问,因为经验表明使用代理访问你网站的80%属于恶意行为。
8、做好取证工作,通过Netstat –n –p tcp >resault.txt记录目前所有TCP连接状态是必要的,如果有嗅探器,或者TcpDump之类的工具,记录TCP SYN报文的所有细节也有助于以后追查和防御,需要记录的字段有:源地址、IP首部中的标识、TCP首部中的序列号、TTL值等,这些信息虽然很可能是攻击者伪造的,但是用来分析攻击者的心理状态和攻击程序也不无帮助。特别是TTL值,如果大量的攻击包似乎来自不同的IP但是TTL值却相同,我们往往能推断出攻击者与我们之间的路由器距离,至少也可以通过过滤特定TTL值的报文降低被攻击系统的负荷(在这种情况下TTL值与攻击报文不同的用户就可以恢复正常访问)。
针对SYN Flood,防火墙通常有三种防护方式:SYN网关、被动式SYN网关和SYN中继。
SYN网关:
防火墙收到客户端的SYN包时,直接转发给服务器;防火墙收到服务器的SYN/ACK包后,一方面将SYN/ACK包转发给客户端,另一方面以客户端的名义给服务器回送一个ACK包,完成TCP的三次握手,让服务器端由半连接状态进入连接状态。当客户端真正的ACK包到达时,有数据则转发给服务器,否则丢弃该包。由于服务器能承受连接状态要比半连接状态高得多,所以这种方法能有效地减轻对服务器的攻击。
被动式SYN网关:
设置防火墙的SYN请求超时参数,让它远小于服务器的超时期限。防火墙负责转发客户端发往服务器的SYN包,服务器发往客户端的SYN/ACK包、以及客户端发往服务器的ACK包。这样,如果客户端在防火墙计时器到期时还没发送ACK包,防火墙则往服务器发送RST包,以使服务器从队列中删去该半连接。由于防火墙的超时参数远小于服务器的超时期限,因此这样能有效防止SYN Flood攻击。
SYN中继:
防火墙在收到客户端的SYN包后,并不向服务器转发而是记录该状态信息然后主动给客户端回送SYN/ACK包,如果收到客户端的ACK包,表明是正常访问,由防火墙向服务器发送SYN包并完成三次握手。这样由防火墙做为代理来实现客户端和服务器端的连接,可以完全过滤不可用连接发往服务器。