目录
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 连接的建立需要较高的计算资源,服务器必须执行以下操作:
- 密钥交换(如 RSA 或 ECDH)
- 对称密钥加密协商
- 计算加密哈希值
相比之下,客户端的计算消耗要小很多。因此,攻击者可以利用这一点,通过大量建立 SSL/TLS 连接来耗尽服务器的 CPU、内存或连接数,导致服务器崩溃或拒绝合法请求。
2. SSL-Exhaustion 主要攻击手法
(1) SSL Renegotiation 攻击
原理:
- SSL/TLS 允许会话重新协商(Renegotiation),以便客户端在现有的 SSL 连接上请求更强的加密。
- 但重新协商需要服务器执行大量计算(如 RSA 计算)。
- 攻击者可以建立 SSL 连接后,不断请求重新协商,导致服务器 CPU 资源被耗尽。
攻击方法:
- 建立一个 SSL 连接(合法握手)。
- 发送
ClientHello,请求重新协商(不断重复)。 - 服务器必须执行大量计算来处理每次重新协商。
防御措施:✅禁用 SSL/TLS 重新协商(除非绝对必要)。
- 在OpenSSL禁用重新协商:
SSL_OP_NO_RENEGOTIATION - 在Nginx配置:
ssl_session_tickets off;
(2) SSL Flooding(SSL 洪水攻击)
原理:
- 攻击者通过僵尸网络或脚本,短时间内发起大量 SSL 连接请求,服务器需要花费大量 CPU 资源进行计算。
- 攻击成本低:攻击者只需要发送大量
ClientHello,而服务器需要进行完整的握手计算。
攻击方法:
- 发送大量
ClientHello数据包,伪造新的 TLS 连接请求。 - 服务器不断执行握手计算,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 连接。
攻击方法:
- 发送
ClientHello但不完成握手。 - 服务器进入等待状态,占用线程和内存资源。
- 服务器最终达到最大连接数,拒绝合法用户。
防御措施:✅使用 TCP SYN Cookie防止半开连接:
- 在 Linux 开启:
sysctl -w net.ipv4.tcp_syncookies=1
✅限制 SSL 握手超时时间:
- 在 Nginx:
ssl_handshake_timeout 10s;
3. SSL-Exhaustion 的检测方法
你可以使用以下方法检测 SSL 耗尽攻击:
(1) 服务器 CPU 负载监控
- 使用
htop或top查看 CPU 是否异常升高:htop top
(2) 监控 SSL 连接数
- 使用
netstat查看大量SYN_RECV或ESTABLISHED状态的连接: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 -hSSL 测试示例(针对 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):
- 下载 LOIC:GitHub
- 运行
LOIC.exe - 输入目标 HTTPS 地址,设置请求方式为
TCP,端口443,点击IMMA CHARGIN MAH LAZER开始测试。
总结:不同 SSL 压测工具的对比
| 工具名称 | 攻击方式 | 适用场景 | 合法性 |
|---|---|---|---|
| Slowloris | 慢速 HTTP 连接 | 测试服务器的连接处理能力 | ✅ 适用于 Web 压测 |
| hping3 | TCP SYN 洪水 | 模拟 DDoS 攻击 | ⚠️ 仅限合法测试 |
| THC-SSL-DOS | SSL 握手资源耗尽 | 测试服务器 CPU 负载 | ⚠️ 需获得授权 |
| OpenSSL s_time | SSL 连接性能测试 | 评估 SSL 服务器性能 | ✅ 合法测试 |
| Siege | HTTPS 并发请求 | 负载测试 | ✅ 适用于 Web 压测 |
| LOIC | SSL 洪水攻击 | 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_time和Siege进行合法压力测试。 - 请勿在未经授权的情况下使用这些工具攻击他人服务器,否则可能违法!
你是想测试自己服务器的防御能力,还是学习 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 = 5sudo 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