ddos 分布式拒绝服务攻击,一种受众面非常广的攻击方式,分为很多种,笔者以全面的视角总结了时下ddos攻击的所有类型,堪称没有再更。
TCP SYN泛洪攻击(攻击目标: web服务器)
SYN攻击利用的是TCP的三次握手机制,攻击端利用伪造的IP地址向被攻击端发出请求,而被攻击端发出的响应 报文将永远发送不到目的地,那么被攻击端在等待关闭这个连接的过程中消耗了资源,如果有成千上万的这种连接,主机资源将被耗尽,从而达到攻击的目的。
打个形象的比喻:syn泛洪攻击类似于一批人去银行窗口办业务,银行人员问一些问题,他们故意扯东扯西不回答,就在窗口处耗时而已
TCP SYN泛洪发生在OSI第四层,这种方式利用TCP协议的特性,就是三次握手。攻击者发送TCP SYN,SYN是TCP三次握手中的第一个数据包,而当服务器返回ACK后,该攻击者就不对其进行再确认,那这个TCP连接就处于挂起状态,也就是所谓的半连接状态,服务器收不到再确认的话,还会重复发送ACK给攻击者。这样更加会浪费服务器的资源。攻击者就对服务器发送非常大量的这种TCP连接,由于每一个都没法完成三次握手,所以在服务器上,这些TCP连接会因为挂起状态而消耗CPU和内存,最后服务器可能死机,就无法为正常用户提供服务了。
对于SYN泛洪攻击的防范,优化主机系统设置是常用的手段。如降低SYN timeout时间,使得主机尽快释放半连接的占用;又比如采用SYN cookie设置,如果短时间内连续收到某个IP的重复SYN请求,则认为受到了该IP的攻击,丢弃来自该IP的后续请求报文。此外合理地采用防火墙等外部网络安全设施也可缓解SYN泛洪攻击。
cc攻击 (攻击目标: web服务器)
攻击者借助代理服务器生成指向受害主机的合法请求,实现DDOS和伪装就叫:CC(Challenge Collapsar)。
CC主要是用来攻击页面的。大家都有这样的经历,就是在访问论坛时,如果这个论坛比较大,访问的人比较多,打开页面的速度会比较慢,访问的人越多,论坛的页面越多,数据库压力就越大,被访问的频率也越高,占用的系统资源也就相当可观
我们可以比喻成一批人去银行存钱,他们每次只存一分钱,一直存一直存,直到银行下班为止
如何判定是否遭受了cc攻击?
1、命令行法
一般遭受CC攻击时,Web服务器会出现80端口对外关闭的现象, 因为这个端口已经被大量的垃圾数据堵塞了正常的连接被中止了。可以通过在命令行下输入命令netstat -an来查看, “SYN_RECEIVED”是TCP连接状态标志,意思是“正在处于连接的初始同步状态 ”,表明无法建立握手应答处于等待状态。这就是攻击的特征,一般情况下这样的记录一般都会有很多条,表示来自不同的代理IP的攻击。
2、批处理法
上述方法需要手工输入命令且如果Web服务器IP连接太多看起来比较费劲,可以建立一个批处理文件,通过该脚本代码确定是否存在CC攻击。
脚本筛选出当前所有的到80端口的连接。当感觉服务器异常时就可以双击运行该批处理文件,然后在打开的log.log文件中查看所有的连接。如果同一个IP有比较多的到服务器的连接,那就基本可以确定该IP正在对服务器进行CC攻击。
3、查看系统日志
Web日志一般在C:\WINDOWS\system32\LogFiles\HTTPERR目录下,该目录下用类似httperr1.log的日志文件,这个文件就是记录Web访问错误的记录。管理员可以依据日志时间属性选择相应的日志打开进行分析是否Web被CC攻击了。
默认情况下,Web日志记录的项并不是很多,可以通过ⅡS进行设置,让Web日志记录更多的项以便进行安全分析。其操作步骤是:“开始→管理工具”打开“Internet信息服务器”,展开左侧的项定位到到相应的Web站点,然后右键点击选择“属性”打开站点属性窗口,在“网站”选项卡下点击“属性”按钮,在“日志记录属性”窗口的“高级”选项卡下可以勾选相应的“扩展属性”,以便让Web日志进行记录。比如其中的“发送的字节数”、“接收的字节数”、“所用时间”这三项默认是没有选中的,但在记录判断CC攻击中是非常有用的,可以勾选。另外,如果你对安全的要求比较高,可以在“常规”选项卡下对“新日志计划”进行设置,让其“每小时”或者“每一天”进行记录。为了便于日后进行分析时好确定时间可以勾选“文件命名和创建使用当地时间”。
关于CC攻击.其防御必须采用多种方法,而这些方法本质上也是在提高服务器的并发能力。
如下:
1、服务器垂直扩展和水平扩容
资金允许的情况下,这是最简单的一种方法,本质上讲,这个方法并不是针对CC攻击的,而是提升服务本身处理并发的能力,但确实提升了对CC攻击的承载能力。垂直扩展:是指增加每台服务器的硬件能力,如升级CPU、增加内存、升级SSD固态硬盘等。水平扩容:是指通过增加提供服务的服务器来提升承载力。上述扩展和扩容可以在服务的各个层级进行,包括:应用服务器、数据库服务器和缓存服务器等等。
2、数据缓存(内存级别,不要用文件)
对于服务中具备高度共性,多用户可重用,或单用户多次可重用的数据,一旦从数据库中检索出,或通过计算得出后,最好将其放在缓存中,后续请求均可直接从缓存中取得数据,减轻数据库的检索压力和应用服务器的计算压力,并且能够快速返回结果并释放进程,从而也能缓解服务器的内存压力。要注意的是,缓存不要使用文件形式,可以使用redis、mem—cached等基于内存的nosql缓存服务,并且与应用服务器分离,单独部署在局域网内。局域网内的网络IO肯定比起磁盘IO要高。为了不使局域网成为瓶颈,千兆网络也是有必要的。
3、页面静态化
与数据缓存一样,页面数据本质上也属于数据,常见的手段是生成静态化的html页面文件,利用客户端浏览器的缓存功能或者服务端的缓存服务,以及CDN节点的缓冲服务,均可以降低服务器端的数据检索和计算压力,快速响应结果并释放连接进程。
4、用户级别的调用频率限制
不管服务是有登陆态还是没登陆态,基于session等方式都可以为客户端分配唯一的识别ID(后称作SID),服务端可以将SID存到缓存中。当客户端请求服务时,如果没有带SID(cookie中或请求参数中等),则由服务端快速分配一个并返回。可以的话,本次请求可以不返回数据,或者将分配SID独立出业务服务。当客户端请求时带了合法SID(即SID能在服务端缓存中匹配到),便可以依据SID对客户端进行频率限制。而对于SID非法的请求,则直接拒绝服务。相比根据IP进行的频率限制,根据SID的频率限制更加精准可控,可最大程度地避免误杀情况。
5、IP限制
最后,IP限制依然可以结合上述规则一起使用,但是可以将其前置至)JCb层的防火墙或负载均衡器上去做,并且可以调大限制的阈值,防止恶意访问穿透到应用服务器上,造成应用服务器压力。
UDP flood (攻击目标: 各种服务器)
利用大量UDP小包冲击DNS服务器或Radius认证服务器、流媒体视频服务器。 100k pps的UDP Flood经常将线路上的骨干设备例如防火墙打瘫,造成整个网段的瘫痪。由于UDP协议是一种无连接的服务,在UDP FLOOD攻击中,攻击者可发送大量伪造源IP地址的小UDP包。但是,由于UDP协议是无连接性的,所以只要开了一个UDP的端口提供相关服务的话,那么就可针对相关的服务进行攻击。正常应用情况下,UDP包双向流量会基本相等,而且大小和内容都是随机的,变化很大。出现UDP Flood的情况下,针对同一目标IP的UDP包在一侧大量出现,并且内容和大小都比较固定。
防御方法:判断包大小,如果是大包攻击则使用防止UDP碎片方法,根据攻击包大小设定包碎片重组大小,通常不小于1500。在极端情况下,可以考虑丢弃所有UDP碎片
攻击端口为业务端口:根据该业务UDP最大包长设置UDP最大包大小以过滤异常流量
攻击端口为非业务端口:一个是丢弃所有UDP包,可能会误伤正常业务;一个是建立UDP连接规则,要求所有去往该端口的UDP包,必须首先与TCP端口建立TCP连接。不过这种方法需要很专业的防火墙或其他防护设备支持。
Ping of Death (攻击目标: 各种服务器)
ping of death是一种畸形报文攻击,方法是由攻击者故意发送大于65535字节的ip数据包给对方。 TCP/IP的特征之一是分片;它允许单一IP包被分为几个更小的数据包。攻击者开始利用那一个功能,当他们发现一个进入使用碎片包可以将整个IP包的大小增加到ip协议允许的65536比特以上的时候。当许多操作系统收到一个特大号的ip包时候,它们不知道该做什么,因此,服务器会被冻结、宕机或重新启动。
ICMP的回送请求和应答报文通常是用来检查网路连通性,对于大多数系统而言,发送ICMP echo request 报文的命令是ping ,由于ip数据包的最大长度为65535字节。而ICMP报头位于数据报头之后,并与ip数据包封装在一起,因此ICMP数据包最大尺寸不超过65535字节利用这一规定,可以向主机发动 ping of death 攻击。ping of death 攻击 是通过在最后分段中,改变其正确的偏移量和段长度的组合,使系统在接收到全部分段并重组报文时总的长度超过了65535字节,导致内存溢出,这时主机就会出现内存分配错误而导致TCP/IP堆栈崩溃,导致死机!
防御方法:防火墙做设置
ICMP flood (攻击目标: 各种服务器)
ICMP FLOOD是一种DDOS攻击,该攻击在短时间内向目的主机发送大量ping包,消耗主机资源,主机资源耗尽后就会瘫痪或者无法提供其他服务。
ICMP是(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用
防御方法:当出现icmp flood攻击的时候,只要禁止ping就行了,icmp flood只对那些没有禁ping的电脑有效,不管黑客有多少肉机,只要禁PING,他就无可奈何了
Smurf 攻击(攻击目标为路由器,交换机,服务器)
Smurf攻击是一种病毒攻击,以最初发动这种攻击的程序“Smurf”来命名。这种攻击方法结合使用了IP欺骗和ICMP回复方法使大量网络传输充斥目标系统,引起目标系统拒绝为正常系统进行服务。
通过使用将回复地址设置成受害网络的广播地址的ICMP应答请求(ping)数据包,来淹没受害主机,最终导致该网络的所有主机都对此ICMP应答请求做出答复,导致网络阻塞。更加复杂的Smurf将源地址改为第三方的受害者,最终导致第三方崩溃。
攻击的过程是这样的:Woodlly Attacker向一个具有大量主机和因特网连接的网络的广播地址发送一个欺骗性Ping分组(echo 请求),这个目标网络被称为反弹站点,而欺骗性Ping分组的源地址就是Woodlly希望攻击的系统。
这种攻击的前提是,路由器接收到这个发送给IP广播地址(如206.121.73.255)的分组后,会认为这就是广播分组,并且把以太网广播地址FF:FF:FF:FF:FF:FF:映射过来。这样路由器因因特网上接收到该分组,会对本地网段中的所有主机进行广播。
读者肯定能够想到下面会发生什么情况。网段中的所有主机都会向欺骗性分组的IP地址发送echo响应信息。如果这是一个很大的以太网段,可以会有500个以上的主机对收到的echo请求进行回复。
由于多数系统都会尽快地处理ICMP传输信息,Woodlly Attacker把分组的源地址设置为目标系统,因此目标系统都很快就会被大量的echo信息吞没,这样轻而易举地就能够阻止该系统处理其它任何网络传输,从而引起拒绝为正常系统服务。
这种攻击不仅影响目标系统,还影响目标公司的因特网连接。如果反弹站点具有T3连接(45Mbps),而目标系统所在的公司使用的是租用线路(56Kbps),则所有进出该公司的通讯都会停止下来。
防御方法:对边界路由器的回音应答(echo reply)信息包进行过滤,然后丢弃他们,使网络避免被湮没
在cisco路由器上配置如下可以防止将包传递到广播地址上:
Router(config-if)# no ip directed-broadcast
why this command can prevent Smurf attacks?
The reason is that it prevents your network device from being a reflector in an attack.