从“慢速”到“瘫痪”:深入剖析Slowloris DoS攻击的运作机制与防御策略

张开发
2026/4/19 19:17:44 15 分钟阅读

分享文章

从“慢速”到“瘫痪”:深入剖析Slowloris DoS攻击的运作机制与防御策略
1. Slowloris攻击当慢动作变成致命武器想象一下这样的场景一家网红餐厅突然涌入50个顾客每个人占着一张桌子只点一杯柠檬水服务员每次催促他们就再加一根吸管。这些顾客既不离开也不正经点餐最终导致餐厅无法接待正常客人——这就是Slowloris攻击的生动写照。这种诞生于2009年的攻击方式至今仍是Web服务器最头疼的慢性毒药。与传统DoS攻击的狂轰滥炸不同Slowloris走的是细水长流路线。它不需要僵尸网络或超大流量仅需一台普通电脑就能让服务器慢性窒息。我曾在测试环境中用树莓派成功瘫痪过配置不当的Nginx服务器整个过程带宽消耗还不到1Mbps。这种攻击之所以隐蔽是因为它完全遵守HTTP协议规则就像用合法手段玩赖皮游戏。2. 解剖攻击链条Slowloris如何温柔杀死服务器2.1 HTTP协议的阿喀琉斯之踵Slowloris攻击的精妙之处在于它抓住了HTTP协议的三个特性持久连接Keep-Alive现代服务器默认保持连接开放以便复用请求头分段传输允许客户端分批次发送请求头超时等待机制服务器会耐心等待完整请求攻击者就像个协议律师严格遵循规则却恶意利用规则。我通过Wireshark抓包发现正常请求通常在500ms内完成头传输而Slowloris会把这个过程延长到30秒以上。2.2 攻击四部曲详解连接初始化建立标准HTTP连接发送不完整的请求头# 典型攻击代码片段 import socket s socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((target_ip, 80)) s.send(GET / HTTP/1.1\r\n.encode()) s.send(Host: {}\r\n.format(target_host).encode()) # 故意不发送结束标记\r\n\r\n连接维持定期发送无意义头字段保持活跃while True: s.send(X-a: b\r\n.encode()) # 每15秒发送垃圾头 time.sleep(15) # 精确控制发送间隔资源耗尽数百个这样的连接会占满服务器工作线程雪崩效应新连接被拒绝服务完全瘫痪在Apache的测试中仅150个这样的连接就能让服务器响应时间从200ms飙升到60秒以上。这种指数级性能下降曲线正是Slowloris的可怕之处。3. 现代变种与检测难点3.1 攻击技术的进化树原始Slowloris已被多数WAF识别但衍生出了更隐蔽的变种低速POST攻击缓慢发送POST请求体慢读攻击建立连接后以极慢速度读取响应异步攻击混合使用不同速率和模式的连接去年我协助排查的一起事故中攻击者采用随机间隔5-30秒发送头字段成功绕过了基于固定阈值的防护系统。这种飘忽不定的攻击模式让传统基于规则的检测完全失效。3.2 流量特征指纹通过分析攻击流量可以识别这些关键特征超长头传输时间30秒的请求头传输异常头字段大量无意义的X-*头心跳模式精确的定时数据包低带宽高连接数单IP维持大量半开连接下表对比了正常流量与Slowloris流量的区别特征项正常流量Slowloris流量连接持续时间2秒30分钟请求头大小200-800字节持续增长包间隔随机固定周期带宽占用突发性持续低流量4. 构建立体防御体系4.1 服务器层加固Apache专项配置# 限制最小接收速率 Timeout 30 ReceiveBufferSize 1024 LimitRequestFields 50 LimitRequestFieldSize 2048 # 启用mod_reqtimeout IfModule mod_reqtimeout.c RequestReadTimeout header10-20,MinRate500 RequestReadTimeout body30,MinRate500 /IfModuleNginx防护方案# 限制连接处理速度 client_body_timeout 10s; client_header_timeout 10s; keepalive_timeout 5s 5s; # 限制单个IP连接数 limit_conn_zone $binary_remote_addr zoneconn_limit:10m; limit_conn conn_limit 20;4.2 网络层过滤策略速率限制规则# iptables示例限制新建连接速率 iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 50 -j DROP iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --set iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 60 --hitcount 20 -j DROP深度包检测识别异常慢速连接模式4.3 云防护方案实战以AWS WAF为例的防护配置要点启用速率限制规则每个IP每5分钟不超过100个请求配置慢速请求规则检测传输时间超过10秒的请求设置异常连接数检测单个IP超过50个活跃连接时触发在Azure的部署中建议结合Application Gateway的Web应用防火墙WAF与网络监控器形成双层防护。实际测试显示这种架构能拦截99%的Slowloris变种攻击。5. 攻防演练实战记录去年在某金融客户的红队演练中我们尝试了改良版Slowloris攻击。通过以下步骤突破了初始防线使用200个云函数实例分散来源IP每个实例建立10个连接随机间隔5-25秒发送心跳混合正常请求流量避免特征匹配动态调整攻击节奏避开速率限制最终迫使客户升级了防护方案采用以下组合拳才彻底防御F5 BIG-IP的Advanced WAF模块基于机器学习的异常连接检测全流量镜像分析系统这次经历让我深刻认识到防御Slowloris不是配置几个参数就能搞定的事需要持续监控和策略调整。现在我的安全团队每月都会用自研的Slowloris测试工具扫描客户系统提前发现防护漏洞。

更多文章