目录

七层协议攻防实战从HTTP慢速攻击到DNS隧道检测

七层协议攻防实战:从HTTP慢速攻击到DNS隧道检测

一、七层协议攻击类型与特征

攻击类型协议特征
HTTP慢速攻击HTTP低速率发送不完整请求
DNS隧道DNS异常长域名、高频率TXT查询
API滥用攻击HTTP高频调用关键接口(如短信发送)
WebSocket洪水WebSocket海量小消息耗尽服务器资源

二、HTTP协议深度防护

1. 慢速攻击防御(Nginx配置)
http {  
    # 限制请求头和体的读取时间  
    client_header_timeout 10s;  
    client_body_timeout 10s;  

    # 限制请求速率  
    limit_req_zone $binary_remote_addr zone=api_limit:10m rate=100r/s;  

    server {  
        location / {  
            limit_req zone=api_limit burst=200;  
            # 限制最小传输速率(100字节/秒)  
            client_body_in_file_only on;  
            client_body_temp_path /dev/shm/;  
            client_max_body_size 1m;  
            limit_rate_after 1k;  
            limit_rate 100;  
        }  
    }  
}  
2. 请求特征过滤(OpenResty Lua脚本)
location /api {  
    access_by_lua_block {  
        local headers = ngx.req.get_headers()  
        -- 拦截无User-Agent请求  
        if not headers["User-Agent"] then  
            ngx.exit(ngx.HTTP_FORBIDDEN)  
        end  
        -- 拦截非常规HTTP方法  
        local method = ngx.req.get_method()  
        if not ({GET=true, POST=true})[method] then  
            ngx.exit(ngx.HTTP_NOT_ALLOWED)  
        end  
    }  
}  

三、DNS协议定制防护

1. DNS隧道检测(Python深度学习)
import tensorflow as tf  
import numpy as np  

# 特征:域名长度、熵值、子域名数量  
model = tf.keras.Sequential([  
    tf.keras.layers.Dense(64, activation='relu', input_shape=(3,)),  
    tf.keras.layers.Dense(1, activation='sigmoid')  
])  

def predict_dns_tunnel(domain):  
    features = [  
        len(domain),  
        entropy(domain),  
        domain.count('.')  
    ]  
    return model.predict(np.array([features]))[0] > 0.9  

def entropy(s):  
    p, lns = tf.unique(tf.strings.bytes_split(s))  
    return -tf.reduce_sum(p * tf.math.log(p))  
2. DNS查询限频(Bind配置)
options {  
    rate-limit {  
        responses-per-second 50;  
        window 5;  
        qps-scale 100;  
    };  
};  

zone "example.com" {  
    type master;  
    file "db.example.com";  
    # 限制单个客户端查询频率  
    rate-limit {  
        responses-per-second 10;  
        window 3;  
    };  
};  

四、WebSocket协议防护

1. 消息频率限制(Node.js示例)
const WebSocket = require('ws');  
const wss = new WebSocket.Server({ port: 8080 });  

wss.on('connection', (ws) => {  
    let messageCount = 0;  
    setInterval(() => messageCount = 0, 1000);  // 每秒重置计数  

    ws.on('message', (data) => {  
        if (++messageCount > 100) {  
            ws.close(1008, '消息频率超限');  
            return;  
        }  
        // 正常处理消息  
    });  
});  
2. 协议头校验(Go语言实现)
func handleWebSocket(w http.ResponseWriter, r *http.Request) {  
    // 校验Origin头  
    if r.Header.Get("Origin") != "https://example.com" {  
        http.Error(w, "Invalid Origin", http.StatusForbidden)  
        return  
    }  

    // 校验协议版本  
    if !strings.Contains(r.Header.Get("Sec-WebSocket-Version"), "13") {  
        http.Error(w, "Unsupported Version", http.StatusUpgradeRequired)  
        return  
    }  

    // 升级连接...  
}  

五、防御工具链与监控体系

  1. 应用层防火墙
    • ModSecurity(自定义规则示例):

      SecRule REQUEST_URI "@contains /api/send_sms" \  
        "id:1001,phase:2,deny,log,msg:'SMS API滥用'"  
  2. 日志分析平台
    • ELK Stack(检测异常请求模式)
    • Grafana(可视化实时QPS)
  3. 云WAF集成
    • AWS WAF(速率限制规则)
    • Cloudflare Workers(边缘JS挑战)

六、防御效果验证方法

  1. 压力测试工具

    # 模拟HTTP慢速攻击  
    slowhttptest -c 1000 -u https://example.com -r 10  
    # 发送畸形WebSocket帧  
    wsdump.py --fragment 1000 ws://example.com  
  2. 防御验证指标

    • 攻击期间CPU占用率 < 70%
    • 正常请求成功率 > 99.9%
    • 攻击IP自动封禁时间 < 5秒