3. DDoS攻击原理:五种常见攻击手法深度解析
大家好,我是老周。在安全这行摸爬滚打十几年,处理过的DDoS事件少说也有上百起了。今天咱们来聊聊DDoS攻击最核心的东西——攻击原理。
你想想看,不懂原理怎么防御?就像医生不懂病理,开药全靠蒙。所以这一章,我会把五种最常见的攻击手法掰开揉碎了讲给你听。嗯,每个手法我都会结合实战经验,告诉你攻击者到底是怎么想的,我们又能怎么防。
核心认知:DDoS攻击的本质就一句话——耗尽目标资源。不管是带宽、CPU、内存还是连接数,只要让服务器忙不过来,攻击就成功了。
3.1 SYN Flood攻击原理
SYN Flood,这玩意儿可以说是DDoS界的"老炮儿"了。从90年代到现在,它依然活跃在各种攻击事件中。为什么?因为它打的是TCP协议设计上的"七寸"。
咱们先回忆一下TCP三次握手:客户端发SYN,服务器回SYN+ACK,客户端再回ACK,连接建立。对吧?
SYN Flood的攻击手法就是——只发SYN,不回ACK。攻击者伪造大量源IP,疯狂向服务器发SYN包。服务器收到后,会为每个半连接分配资源,然后等ACK。等啊等,等不到。半连接队列满了,新的正常连接就进不来了。
实战经验:我记得有一次,某电商平台大促前夜被打了。监控显示半连接数从几百飙到几十万。服务器CPU才用了20%,但用户就是打不开页面。这就是典型的SYN Flood——不耗CPU,专耗连接表。
攻击者为什么喜欢用伪造源IP?说白了,就是让你没法追踪。而且源IP随机分布,你封IP都封不过来。
| 攻击要素 | 说明 |
|---|---|
| 攻击目标 | 服务器的半连接队列(backlog队列) |
| 消耗资源 | 内存中的连接控制块(TCB) |
| 攻击特征 | 大量SYN包,无后续ACK,源IP随机 |
| 检测指标 | netstat -s 中 SYN_RECV 状态激增 |
注意:我曾经见过一个案例,运维把半连接队列调大到65535,结果攻击流量更大,直接把内存打爆了。调参数不是万能的,必须配合防火墙或专业清洗设备。
3.2 UDP Flood攻击原理
UDP Flood,说白了就是"暴力美学"。攻击者不需要什么技巧,只要带宽够大,就能把你打趴下。
UDP是无连接的协议。服务器收到UDP包后,会检查有没有对应的应用程序在监听这个端口。如果有,就把数据交给应用处理;如果没有,就回一个ICMP端口不可达。
攻击者利用的就是这个"检查"过程。大量随机端口的UDP包涌过来,服务器要逐一检查、响应,CPU和带宽就这么被耗掉了。
关键区别:SYN Flood打的是连接表,UDP Flood打的是带宽和CPU。前者是"精准打击",后者是"饱和轰炸"。
我建议你在监控系统里重点关注两个指标:入向带宽利用率和CPU的软中断占比。UDP Flood来了,这两个指标会同时飙升。
3.3 ICMP Flood攻击原理
ICMP Flood,大家可能更熟悉它的另一个名字——Ping Flood。攻击者用大量ICMP Echo Request(ping包)淹没目标。
服务器收到ping包,得回一个Echo Reply吧?这个"收包-处理-发包"的过程,消耗的是CPU和带宽。虽然单个ping包处理很快,但量大了谁也扛不住。
嗯,这里要注意:现在的服务器对ICMP Flood的免疫力比过去强多了。为什么?因为大部分系统都默认限制了ICMP的处理速率。但如果是大流量攻击,带宽先被打满,限速也没用。
避坑指南:我曾经遇到一个团队,为了防ICMP Flood,直接在防火墙上禁用了所有ICMP。结果呢?MTU发现问题排查了三天。记住,不要因噎废食。合理的做法是限速,不是禁用。
3.4 HTTP Flood攻击原理
HTTP Flood,这是应用层的攻击。攻击者模拟正常用户,发大量HTTP GET或POST请求。
你想想看,它和前面几种攻击最大的区别是什么?
前面那些攻击,包都是畸形的或者无状态的。但HTTP Flood的请求是完整的、合法的。它走完TCP三次握手,发正常的HTTP请求,服务器得正常处理——查询数据库、渲染页面、返回结果。这一套下来,CPU和内存消耗比网络层攻击大多了。
攻击者通常用僵尸网络,每个肉鸡模拟真实浏览器行为:带Cookie、带User-Agent、甚至执行JavaScript。这就让防御变得很难——你分不清哪个是真人,哪个是肉鸡。
| 攻击类型 | 特征 | 防御难点 |
|---|---|---|
| GET Flood | 大量请求相同URL | 容易被缓存防御 |
| POST Flood | 大量提交表单/登录 | 消耗数据库连接池 |
| 慢速攻击 | 慢速发送HTTP头 | 占用长连接不释放 |
实战教训:有一次,攻击者针对我们的登录接口发POST Flood。每个请求都带正确的用户名和密码,服务器得去查数据库验证。结果数据库连接池被打满了,正常用户登录不了。后来我们加了验证码和频率限制,才扛住。
3.5 DNS Amplification攻击原理
DNS Amplification,这是我个人觉得最"聪明"的攻击手法。它利用了DNS协议的一个特性——响应包比请求包大得多。
攻击者怎么做?三步走:
- 伪造源IP:把DNS请求的源IP改成受害者的IP
- 选大响应:请求"ANY"记录或大TXT记录,响应包可能比请求包大50-100倍
- 放大流量:攻击者发1Mbps的请求,打到受害者就是50-100Mbps
这就是所谓的"放大因子"。我见过最夸张的案例,攻击者用1G带宽的僵尸网络,打出了近100G的攻击流量。你想想看,这谁扛得住?
核心数据:DNS放大攻击的放大因子通常在8-100倍之间。使用EDNS0扩展机制,可以轻松达到50倍以上。
防御DNS Amplification,最有效的方法就是——源验证。配置DNS服务器只响应来自本网段的查询,或者使用响应速率限制(RRL)。另外,建议关闭递归查询,除非你的DNS服务器就是做递归的。
个人建议:如果你运维DNS服务器,一定要做三件事:1)关闭递归查询(除非必要);2)启用RRL;3)监控查询来源的分布。这三件事做好了,90%的DNS放大攻击都打不进来。
3.6 五种攻击对比总结
好了,五种攻击都讲完了。咱们做个对比,方便你记忆:
| 攻击类型 | 协议层 | 消耗资源 | 放大效果 | 防御难度 |
|---|---|---|---|---|
| SYN Flood | 传输层 | 连接表 | 无 | 中 |
| UDP Flood | 传输层 | 带宽/CPU | 无 | 低 |
| ICMP Flood | 网络层 | 带宽/CPU | 无 | 低 |
| HTTP Flood | 应用层 | CPU/内存/DB | 无 | 高 |
| DNS Amplification | 应用层 | 带宽 | 8-100倍 | 中 |
嗯,看到这个表你应该明白了——没有一种攻击是"最好"的,也没有一种防御是"万能"的。攻击者会根据目标的特点选择手法,而我们要做的就是——每种手法都懂,每种防御都会。