2、DDoS攻击原理:攻击分类、常见手法与流量特征

大家好,我是老周。今天我们来聊聊DDoS攻击的原理。说实话,搞BGP防御这么多年,我见过太多被DDoS打趴下的案例了。你想想看,一个好好的业务,突然流量暴涨,服务器直接挂掉,那种感觉,嗯,真的很糟糕。

DDoS攻击,全称是分布式拒绝服务攻击。说白了,就是攻击者控制大量“肉鸡”(被感染的设备),同时向目标发起请求,把目标资源耗尽。我刚开始接触这行时,总觉得DDoS离自己很远,直到有一次帮朋友排查故障,才发现——原来攻击就在身边。

核心要点:DDoS攻击的本质是“资源耗尽”。不管是带宽、CPU、内存还是连接数,只要有一项被打满,服务就挂了。

DDoS攻击分类与防御体系 DDoS攻击 网络层攻击 传输层攻击 应用层攻击 UDP Flood ICMP Flood SYN Flood ACK Flood HTTP Flood DNS Query BGP防御:流量清洗 + 黑洞路由 + 边界过滤

2.1 DDoS攻击分类

我个人习惯把DDoS攻击分成三大类。为什么这么分?因为不同层次的攻击,防御手段完全不同。你想想看,网络层的攻击用BGP黑洞路由就能搞定,但应用层的攻击,嗯,就得靠WAF了。

攻击层次 典型攻击 目标资源 防御难度
网络层(L3) UDP Flood、ICMP Flood 带宽
传输层(L4) SYN Flood、ACK Flood 连接表
应用层(L7) HTTP Flood、慢速攻击 CPU/数据库

我的经验:很多新手只关注带宽型攻击,其实应用层攻击更隐蔽。我曾经遇到一个客户,带宽只用了200M,但服务器CPU直接100%,查了半天才发现是HTTP Flood。

2.2 常见攻击手法详解

2.2.1 SYN Flood

SYN Flood,这是最经典的攻击手法之一。原理很简单:攻击者伪造源IP,向服务器发送大量SYN包,但不完成三次握手。服务器会为每个半连接分配资源,直到连接表被填满。

为什么会这样?因为TCP协议设计时,服务器收到SYN后必须回复SYN-ACK并等待ACK。如果等不到,这个连接就卡在那里。我见过最夸张的一次,一台服务器被打了5分钟,连接表直接爆了,连ssh都登不上去。

# 模拟SYN Flood攻击(仅用于学习)
# 使用hping3工具
hping3 -S -p 80 --flood --rand-source 192.168.1.100

# 参数说明:
# -S: SYN标志
# -p 80: 目标端口
# --flood: 快速发送
# --rand-source: 随机源IP

避坑指南:我曾经在测试环境用hping3做实验,结果忘了加--rand-source,直接把公司内网打瘫了。切记:生产环境千万别乱试!

SYN Flood的流量特征:

  • 同一源IP发送大量SYN包,但无后续ACK
  • 服务器SYN_RECV状态连接数暴增
  • 正常用户连接超时或拒绝
  • 网络流量可能不大,但CPU和内存飙升

2.2.2 UDP Flood

UDP Flood,说白了就是拿UDP包砸你。UDP是无连接的,攻击者随便伪造个源IP,往目标端口发大量UDP包就行。服务器收到后,如果端口没开,会回复ICMP不可达;如果端口开了,就得处理数据。

我记得有一次,客户说他们的DNS服务器突然挂了。我一看流量图,UDP流量从正常50Mbps飙到了5Gbps。嗯,典型的UDP Flood。这种攻击最烦人的地方在于,它直接打带宽,你带宽不够就完蛋。

# UDP Flood模拟
hping3 -2 -p 53 --flood --rand-source 192.168.1.100

# -2: UDP模式
# -p 53: 目标端口(DNS常用)

UDP Flood的流量特征:

  • 大量UDP包,源IP随机
  • 目标端口可能是随机端口或固定端口
  • 带宽占用极高
  • 如果目标端口未开放,会有大量ICMP不可达包返回

2.2.3 HTTP Flood

HTTP Flood,这是应用层攻击的代表。攻击者模拟正常用户,发送大量HTTP GET或POST请求。你想想看,正常用户一秒发一个请求,攻击者一秒发一万个,服务器哪受得了?

这种攻击最难防御,因为流量看起来都是正常的HTTP请求。我遇到过最狡猾的一次,攻击者用了真实的浏览器指纹,还带了cookie,WAF根本识别不出来。最后只能靠BGP引流到清洗中心,用行为分析来过滤。

# HTTP Flood模拟(使用wrk工具)
wrk -t 100 -c 1000 -d 60s http://target.com/index.php

# -t: 线程数
# -c: 连接数
# -d: 持续时间

关键区别:SYN Flood打的是连接表,UDP Flood打的是带宽,HTTP Flood打的是应用层处理能力。三种攻击的防御思路完全不同。

HTTP Flood的流量特征:

  • 大量HTTP GET/POST请求,URL可能相同或随机
  • User-Agent可能相同(攻击工具默认)或随机
  • 请求间隔极短,无正常浏览行为
  • 服务器CPU、数据库连接数飙升
  • 日志中出现大量404或500错误

2.3 攻击流量特征总结

说了这么多,我们来总结一下。我个人判断DDoS攻击时,主要看三个指标:

指标 正常情况 被攻击时
带宽使用率 稳定在30%-60% 突然飙到90%以上
连接数 平稳波动 SYN_RECV或TIME_WAIT暴增
CPU使用率 正常范围 突然100%,且无法下降
错误率 低于1% 大量超时、连接拒绝

我的习惯:我会在服务器上部署一个简单的监控脚本,每5秒检查一次连接数和CPU。一旦发现异常,立刻触发BGP引流。别等业务挂了再处理,那时候就晚了。

嗯,关于DDoS攻击的原理和分类,今天就聊到这里。记住一句话:知己知彼,百战不殆。只有理解了攻击是怎么打的,才能设计出有效的防御方案。下一节我们会深入BGP层面的防御策略,到时候再细聊。


公众号:蓝海资料掘金营,微信deep3321