DoS是利用网络协议缺陷,或者暴力攻击的方式,耗尽服务器资源,让目标计算机或网络无法提供正常的服务或资源访问(服务资源包括网络带宽,文件系统空间容量,开放的进程或者允许的连接等)。
实现DoS有很多种方式,下面列举个人目前能理解的几种 ...>_<...
1. SYN Flood(SYN 泛洪)
1.1 攻击原理:
1.2 防御方法(从网上搜集而来,没有做过实验):
- 防火墙:采用TCP代理和源探测两种方式。
- 增加TCP backlog队列:修改应用的listen()函数调用,或者操作系统内核参数SOMAXCONN。
- SYN缓存:用一个HASH表空间存放将被分配给TCB的数据的一个子集,当握手完成的ACK接收到之后,这些数据将被复制到一个完整的TCB中,超出存活时间的HASH值将会回收。
- SYN Cookies:在TCP服务器收到TCP SYN包并返回TCP SYN+ACK包时,不分配一个专门的数据区,而是根据这个SYN包计算出一个cookie值,在收到TCP ACK包时,TCP服务器再根据那个cookie值检查这个TCP ACK包的合法性。如果合法,再分配专门的数据区进行处理未来的TCP连接(Linux可通过配置内核参数来实现)。
2. UDP Flood(UDP 泛洪)
2.1 攻击原理:
短时间内向特定目标不断发送 UDP 报文,致使目标系统负担过重而无法处理正常的报文请求或响应。
2.2 防御方法(从网上搜集而来,没有做过实验):
防火墙防御UDP Flood攻击主要有两种方式:限流和指纹学习
3. ICMP Flood(ICMP 泛洪)
3.1 攻击原理:
ICMP协议是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。如果攻击者向目标主机发送大量的ICMP ECHO报文,将产生ICMP泛洪。目标主机会将大量的时间和资源用于处理ICMP ECHO报文,而无法处理正常的请求或响应。
3.2 攻击种类:
- 死亡之ping:
在早期的阶段,路由器对包的最大尺寸都有限制,许多操作系统对TCP/IP栈的实现在ICMP包上都是规定64KB,并且在对包的标题头进行读取之后,要根据该标题头里包含的信息来为有效载荷生成缓冲区,当加载的尺寸超过64K上限时,就会出现内存分配错误,导致TCP/IP堆栈崩溃,致使接受方当机(现在基本不会出现)。
- Smurf攻击:回复地址设置成受害网络的广播地址并发送ICMP应答请求(ping)数据包,一旦广播出去,就会被广播域内的所有主机回应,导致网络阻塞。也可将源地址改为被攻击主机,把这些包都回应给被攻击主机,导致被攻击主机崩溃(前提:攻击主机处理能力和带宽要大于被攻击主机)。
3.3 防御方法(从网上搜集而来,没有做过实验):
- 关闭路由器广播功能
- 禁止网络上所有计算机对目标地址为广播地址的ICMP包响应
- 为路由器或防火墙配置包过滤规则
4. Slow HTTP DoS
4.1 攻击原理:
HTTP协议默认在接收到全部信息之后才会开始处理,Slow HTTP DoS利用这个特点使服务器开启大量连接并一直处于等待状态,当建立的连接占满连接池之后,服务器资源耗尽,DoS攻击达到目的(这种比较好重现,有专门的工具,下篇详细写下)。
4.2 防御方法(从网上搜集而来,没有做过实验):
- 对Web服务器做相应配置,设置合适的header和body的发送时间及频率(apache,ngnix,IIS都有相应设置)
- 设置单个IP的最大连接数
如需转载,请注明出处,这是对他人劳动成果的尊重~