通过基于时间的侧信道攻击识别WAF规则
字数 1623 2025-08-25 22:58:20
基于时间的侧信道攻击识别WAF规则 - 技术文档
1. 侧信道攻击概述
侧信道攻击是指通过从计算机系统组成中搜集的信息进行的攻击,而非针对系统实现算法本身的弱点。这类攻击通常利用业务逻辑错误设计来提取本不应被公开的敏感信息。
基于时间的侧信道攻击专注于观察CPU处理数据的时间差异,通过测量不同操作的计算时间来推断系统内部信息。
2. WAF基础
Web应用防火墙(WAF)用于检测和阻止对易受攻击Web应用程序的攻击,主要通过正则表达式区分正常和恶意请求。
WAF部署方式
- 反向代理:客户端直接连接WAF,WAF拦截并转发请求
- 服务器部署:
- 作为插件安装
- 作为开发引入到代码中
- 带外形式:通过监控端口获取流量镜像
- 云部署:类似于反向代理,但部署在云提供商内部
3. WAF规则识别的必要性
识别WAF规则可帮助:
- 发现WAF规则中的漏洞
- 调整攻击方式以绕过检测
- 进一步发现Web应用漏洞
4. 传统WAF指纹识别方法
传统方法通过以下特征识别WAF:
- WAF拦截信息(响应页面、HTTP头字段、403状态码)
- Web错误信息(被WAF自定义页面覆盖的错误)
- 正常响应(可能已被WAF修改)
主要缺点:无法准确区分被阻断和被转发的请求,因为响应页面可能相同。
5. 基于时间的攻击原理
核心思想
- 被阻断的请求响应时间 < 被转发的请求响应时间
- 时间差等于应用逻辑处理时间
基本假设
WAF检测到恶意请求后会立即阻断并返回错误,而非修改后转发。
6. 攻击方法
6.1 两阶段攻击模型
学习阶段
-
发送正常和恶意请求各100个,间隔2秒
-
记录响应时间:
- 阻断请求时间集合:Tn = {t1, t2, ..., tn}
- 转发请求时间集合:Tn' = {t1', t2', ..., tn'}
-
计算阈值:
- 阻断标记阈值:tα = max(Tn) + δ
- 转发阈值:tω = min(Tn') - δ
- 最终边界值:tβ = (tα + tω)/2
(δ为网络因素导致的微小位移常量)
攻击阶段
- 构造多种混淆变种payload,例如:
<script>alert()</script> <scr<script>ipt>alert()</scr</script>ipt> <scri%00pt>alert()</scri%00pt> - 发送请求并记录响应时间
- 根据tβ判断请求是被阻断还是转发
6.2 实验结果
- 反向代理部署:准确率96.4%,最小时间差53.2ms
- 插件部署服务器:准确率相似,时间差58.8ms
7. 方法缺陷及解决方案
7.1 主要缺陷
- 需要发送大量请求
- 网络噪声影响测量稳定性
- WAF可能封禁攻击者IP
7.2 解决方案
- 合理时间窗口:在封IP前完成测试
- IP轮换:更换IP继续攻击
- 请求延迟:学习阶段设置请求间隔
- 放大攻击向量:
- 选择响应内容最大的URL路径(增加CPU负载)
- 结合DoS技术(大体积查询、Hash碰撞攻击)
- 使用CSRF攻击隐藏攻击者身份
7.3 CSRF攻击示例代码
<script>
var test = document.getElementById('test');
var start = new Date();
test.onerror = function() {
var end = new Date();
alert("Total time: " + (end - start));
}
test.src = "http://sitename.tld/path?" + parameter + "=" + payload;
</script>
8. 结论
基于时间的侧信道攻击可有效识别WAF规则,准确率达95%以上。该方法突出了:
- 时间测量在侧信道攻击中的有效性
- WAF规则严格性的必要性
- 通过技术组合可克服网络噪声和IP封禁问题
9. 实践建议
- 实施攻击前充分进行学习阶段测量
- 针对不同WAF部署方式调整攻击参数
- 结合多种技术(如CSRF)提高攻击成功率
- 注意法律和道德边界,仅用于授权测试
10. 扩展阅读
- WAFW00F工具: https://github.com/enablesecurity/wafw00f
- WAFNinja工具: https://github.com/khalilbijjou/wafninja
- HashDoS攻击: https://cryptanalysis.eu/blog/2011/12/28/effective-dos-attacks-against-web-application-plattforms-hashdos/
- Shadow Daemon WAF: https://github.com/zecure/shadowd