洪水猛兽攻击之另一种DDOS协议攻击 SSL 详解

📅 2026/7/4 9:14:25 👁️ 阅读次数 📝 编程学习
洪水猛兽攻击之另一种DDOS协议攻击 SSL 详解

目录

SSL原理

SSL-Exhaustion(SSL 耗尽)攻击详解

1. SSL-Exhaustion 攻击的原理

2. SSL-Exhaustion 主要攻击手法

(1) SSL Renegotiation 攻击

(2) SSL Flooding(SSL 洪水攻击)

(3) SSL Handshake Starvation(SSL 握手阻塞攻击)

3. SSL-Exhaustion 的检测方法

(1) 服务器 CPU 负载监控

(2) 监控 SSL 连接数

(3) 使用 Wireshark 抓包分析

4. 如何防御 SSL-Exhaustion 攻击

✅ 使用负载均衡

✅ 启用 DDoS 保护

✅ 限制 SSL 并发连接

✅ 启用 SSL Session Resumption

5. 总结

6. 结论

SSL压力攻击工具

1. Slowloris(SSL 版)

2. hping3(模拟 SSL 洪水攻击)

3. THC-SSL-DOS(SSL 资源耗尽攻击模拟)

4. OpenSSL s_time(测试 SSL/TLS 握手性能)

5. Siege(SSL 压力测试)

6. LOIC(Low Orbit Ion Cannon,模拟 SSL 流量洪水攻击)

总结:不同 SSL 压测工具的对比

防御建议

结论

详细的服务器安全加固方案

🔹 第一部分:服务器 SSL/TLS 安全配置

✅ 1. 禁用不安全的 SSL/TLS 版本

✅ 2. 使用强加密套件

✅ 3. 启用 OCSP Stapling(减少 SSL 证书验证延迟)

✅ 4. 启用 HSTS(防止 SSL 降级攻击)

🔹 第二部分:防止 SSL/TLS 攻击

✅ 1. 防止 SSL 洪水攻击(SSL-Exhaustion)

✅ 2. 防止 TLS 重新协商攻击

✅ 3. 防止 Slowloris SSL 攻击

✅ 4. 使用 WAF 防止 HTTPS DDoS

🔹 第三部分:入侵检测与日志分析

✅ 1. 监控 SSL 连接(实时检测异常请求)

✅ 2. Fail2Ban 自动封禁恶意 IP

🔹 第四部分:应急响应(发现攻击后的处理)

✅ 1. 发现 SSL 攻击时,快速封锁恶意 IP

✅ 2. 临时限制 HTTPS 连接速率

📌 结论


SSL原理

SSL-Exhaustion(SSL 耗尽)攻击详解

SSL-Exhaustion 攻击(也称为TLS 资源耗尽攻击)是一种拒绝服务(DoS)攻击,攻击者通过消耗服务器的 SSL/TLS 资源,使其无法响应合法用户的请求。


1. SSL-Exhaustion 攻击的原理

SSL/TLS 连接的建立需要较高的计算资源,服务器必须执行以下操作:

  1. 密钥交换(如 RSA 或 ECDH)
  2. 对称密钥加密协商
  3. 计算加密哈希值

相比之下,客户端的计算消耗要小很多。因此,攻击者可以利用这一点,通过大量建立 SSL/TLS 连接来耗尽服务器的 CPU、内存或连接数,导致服务器崩溃或拒绝合法请求。


2. SSL-Exhaustion 主要攻击手法

(1) SSL Renegotiation 攻击

原理:

  • SSL/TLS 允许会话重新协商(Renegotiation),以便客户端在现有的 SSL 连接上请求更强的加密。
  • 重新协商需要服务器执行大量计算(如 RSA 计算)。
  • 攻击者可以建立 SSL 连接后,不断请求重新协商,导致服务器 CPU 资源被耗尽。

攻击方法:

  1. 建立一个 SSL 连接(合法握手)。
  2. 发送ClientHello,请求重新协商(不断重复)。
  3. 服务器必须执行大量计算来处理每次重新协商。

防御措施:禁用 SSL/TLS 重新协商(除非绝对必要)。

  • OpenSSL禁用重新协商:
    SSL_OP_NO_RENEGOTIATION
  • Nginx配置:
    ssl_session_tickets off;

(2) SSL Flooding(SSL 洪水攻击)

原理:

  • 攻击者通过僵尸网络或脚本,短时间内发起大量 SSL 连接请求,服务器需要花费大量 CPU 资源进行计算。
  • 攻击成本低:攻击者只需要发送大量ClientHello,而服务器需要进行完整的握手计算。

攻击方法:

  1. 发送大量ClientHello数据包,伪造新的 TLS 连接请求。
  2. 服务器不断执行握手计算,CPU 资源耗尽。

防御措施:使用 SSL Session Caching,减少重复计算:

  • 在 Nginx 启用:
    ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m;

限制并发连接数

  • 在 Apache 限制:
    SSLStrictSNIVHostCheck on
  • 在 Nginx 限制:
    limit_conn_zone $binary_remote_addr zone=ssl_limit:10m; limit_conn ssl_limit 10;

(3) SSL Handshake Starvation(SSL 握手阻塞攻击)

原理:

  • 攻击者建立大量半开的 SSL 连接,但不完成握手,服务器会一直等待,导致资源耗尽。
  • 类似 SYN Flood 攻击,但针对 SSL/TLS 连接。

攻击方法:

  1. 发送ClientHello不完成握手
  2. 服务器进入等待状态,占用线程和内存资源。
  3. 服务器最终达到最大连接数,拒绝合法用户。

防御措施:使用 TCP SYN Cookie防止半开连接:

  • 在 Linux 开启:
    sysctl -w net.ipv4.tcp_syncookies=1

限制 SSL 握手超时时间

  • 在 Nginx:
    ssl_handshake_timeout 10s;

3. SSL-Exhaustion 的检测方法

你可以使用以下方法检测 SSL 耗尽攻击:

(1) 服务器 CPU 负载监控

  • 使用htoptop查看 CPU 是否异常升高:
    htop top

(2) 监控 SSL 连接数

  • 使用netstat查看大量SYN_RECVESTABLISHED状态的连接:
    netstat -an | grep :443 | wc -l

(3) 使用 Wireshark 抓包分析

  • 过滤tls.handshake.type == 1观察异常的ClientHello数量。

4. 如何防御 SSL-Exhaustion 攻击

使用负载均衡

  • 使用Nginx、HAProxy来分流 SSL 负载。
  • 例如在Nginx中:
    worker_processes auto; ssl_stapling on;

启用 DDoS 保护

  • 使用Cloudflare、AWS WAF 或 Akamai 等防护服务。

限制 SSL 并发连接

  • Linux 防火墙限制连接速率:
    iptables -A INPUT -p tcp --dport 443 -m connlimit --connlimit-above 10 -j DROP

启用 SSL Session Resumption

  • 允许客户端复用 SSL 会话,减少服务器计算:
    ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m;

5. 总结

攻击手法原理影响防御方法
SSL Renegotiation反复请求 SSL 重新协商高 CPU 负载禁用 SSL 重新协商
SSL Flooding发送大量ClientHello请求服务器崩溃限制 SSL 连接数
SSL Handshake Starvation建立大量 SSL 连接但不完成握手服务器线程耗尽限制握手超时

6. 结论

  • SSL-Exhaustion 攻击主要利用 SSL/TLS 连接计算量大的特点来耗尽服务器资源
  • 防御手段包括:禁用 SSL 重新协商、使用缓存、限制连接速率、启用负载均衡等。
  • 通过iptables、Nginx、Cloudflare等工具可以有效缓解 SSL 资源耗尽攻击。

SSL压力攻击工具

如果你想进行合法的 SSL/TLS 压力测试,可以使用以下工具:


1. Slowloris(SSL 版)

原理

  • 通过发送不完整的 HTTP 请求,保持连接不断开,使服务器的连接池耗尽。
  • 适用于Apache、Nginx等 Web 服务器的测试。

安装方法(Python 版本):

git clone https://github.com/gkbrk/slowloris.git cd slowloris python3 slowloris.py -h

SSL 测试示例(针对 HTTPS 服务器):

python3 slowloris.py -s 100 -v -https https://target.com

🔹-s 100:同时发送 100 个并发请求。
🔹-v:启用详细模式。
🔹-https:对 HTTPS 服务器进行测试。


2. hping3(模拟 SSL 洪水攻击)

原理

  • 发送大量 TCP SYN 数据包,模拟 SSL 连接洪水攻击。

安装方法(Linux):

sudo apt install hping3

测试示例(向 443 端口发送大量 SYN 包):

hping3 -S -p 443 --flood target.com

🔹-S:发送 SYN 数据包。
🔹-p 443:目标端口为 HTTPS(443)。
🔹--flood:快速发送大量数据包。


3. THC-SSL-DOS(SSL 资源耗尽攻击模拟)

原理

  • 通过大量 SSL/TLS 握手请求,占用服务器 CPU 资源。

安装方法(Linux):

git clone https://github.com/vanhauser-thc/thc-ssl-dos.git cd thc-ssl-dos make

测试示例(模拟 SSL 握手攻击):

./thc-ssl-dos -t target.com -p 443

🔹-t target.com:目标网站。
🔹-p 443:攻击 HTTPS 端口(443)。


4. OpenSSL s_time(测试 SSL/TLS 握手性能)

原理

  • 通过 OpenSSL 自带工具,测量服务器处理 SSL 连接的性能,评估其承受能力。

测试示例(模拟 1000 次 SSL 连接):

openssl s_time -connect target.com:443 -new -time 30

🔹-new:每次建立新连接。
🔹-time 30:测试持续 30 秒。


5. Siege(SSL 压力测试)

原理

  • 通过多线程方式对 HTTPS 服务器发送大量并发请求,测试其吞吐能力。

安装方法

sudo apt install siege

测试示例(模拟 50 个并发用户请求):

siege -c 50 -d 1 -t 30S https://target.com

🔹-c 50:50 个并发用户。
🔹-d 1:每个请求间隔 1 秒。
🔹-t 30S:测试 30 秒。


6. LOIC(Low Orbit Ion Cannon,模拟 SSL 流量洪水攻击)

⚠️ 警告:LOIC 主要用于 DDoS 压力测试,可能导致服务器崩溃,请仅在授权环境下使用。

安装方法(Windows):

  1. 下载 LOIC:GitHub
  2. 运行LOIC.exe
  3. 输入目标 HTTPS 地址,设置请求方式为TCP,端口443,点击IMMA CHARGIN MAH LAZER开始测试。

总结:不同 SSL 压测工具的对比

工具名称攻击方式适用场景合法性
Slowloris慢速 HTTP 连接测试服务器的连接处理能力✅ 适用于 Web 压测
hping3TCP SYN 洪水模拟 DDoS 攻击⚠️ 仅限合法测试
THC-SSL-DOSSSL 握手资源耗尽测试服务器 CPU 负载⚠️ 需获得授权
OpenSSL s_timeSSL 连接性能测试评估 SSL 服务器性能✅ 合法测试
SiegeHTTPS 并发请求负载测试✅ 适用于 Web 压测
LOICSSL 洪水攻击DDoS 模拟⚠️ 可能违法

防御建议

如果你的目标是保护服务器免受 SSL 攻击,可以采取以下措施: ✅限制 SSL 连接速率(iptables):

iptables -A INPUT -p tcp --dport 443 -m connlimit --connlimit-above 10 -j DROP

开启 SYN Cookie防止握手耗尽:

sysctl -w net.ipv4.tcp_syncookies=1

使用 Cloudflare/CDN过滤恶意请求。
在 Nginx 限制 SSL 连接数

limit_conn_zone $binary_remote_addr zone=ssl_limit:10m; limit_conn ssl_limit 10;

结论

  • 你可以使用Slowloris、THC-SSL-DOS、hping3等工具进行 SSL 压测。
  • 如果你是为了测试自己服务器的承载能力,建议使用OpenSSL s_timeSiege进行合法压力测试。
  • 请勿在未经授权的情况下使用这些工具攻击他人服务器,否则可能违法!

你是想测试自己服务器的防御能力,还是学习 SSL 攻击的原理?我可以提供更详细的教程!

详细的服务器安全加固方案

这里是针对SSL/TLS 相关攻击全面服务器安全加固方案,涵盖配置优化、攻击防护、入侵检测应急响应


🔹 第一部分:服务器 SSL/TLS 安全配置

1. 禁用不安全的 SSL/TLS 版本

Nginx/Apache配置中,确保仅支持 TLS 1.2 和 1.3,禁用TLS 1.0/1.1

ssl_protocols TLSv1.2 TLSv1.3;
SSLProtocol -all +TLSv1.2 +TLSv1.3

2. 使用强加密套件

Nginx 推荐配置:

ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384'; ssl_prefer_server_ciphers on;

Apache 推荐配置:

SSLCipherSuite HIGH:!aNULL:!MD5 SSLHonorCipherOrder on

3. 启用 OCSP Stapling(减少 SSL 证书验证延迟)

ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 8.8.4.4 valid=300s;

4. 启用 HSTS(防止 SSL 降级攻击)

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

🔹 第二部分:防止 SSL/TLS 攻击

1. 防止 SSL 洪水攻击(SSL-Exhaustion)

限制 HTTPS 连接数(iptables)

iptables -A INPUT -p tcp --dport 443 -m connlimit --connlimit-above 20 -j DROP

限制 TLS 握手频率(Nginx)

limit_conn_zone $binary_remote_addr zone=ssl_limit:10m; limit_conn ssl_limit 10;

2. 防止 TLS 重新协商攻击

Nginx中禁用 TLS 重新协商:

ssl_session_cache shared:SSL:50m; ssl_session_timeout 10m;

3. 防止 Slowloris SSL 攻击

Nginx 限制请求头读取时间

client_body_timeout 10s; client_header_timeout 10s;

Apache 启用mod_reqtimeout

RequestReadTimeout header=10-20,MinRate=500 body=10,MinRate=500

4. 使用 WAF 防止 HTTPS DDoS

部署 Cloudflare / AWS Shield / Nginx ModSecurity WAF:

🔹Nginx 安装 ModSecurity

sudo apt install libnginx-mod-security2

配置规则

server { location / { ModSecurityEnabled on; ModSecurityConfig modsecurity.conf; } }

🔹 第三部分:入侵检测与日志分析

1. 监控 SSL 连接(实时检测异常请求)

查看 HTTPS 连接数

netstat -anp | grep :443

实时监控 SSL 流量

tcpdump -i eth0 port 443

2. Fail2Ban 自动封禁恶意 IP

安装Fail2Ban

sudo apt install fail2ban

配置规则(/etc/fail2ban/jail.local):

[nginx-http-auth] enabled = true filter = nginx-http-auth action = iptables-multiport[name=NoAuthFailures, port="http,https"] logpath = /var/log/nginx/error.log maxretry = 5
sudo systemctl restart fail2ban

🔹 第四部分:应急响应(发现攻击后的处理)

1. 发现 SSL 攻击时,快速封锁恶意 IP

iptables -A INPUT -s ATTACKER_IP -j DROP

2. 临时限制 HTTPS 连接速率

iptables -A INPUT -p tcp --dport 443 -m limit --limit 100/second --limit-burst 200 -j ACCEPT