小技巧:将waf部署到用户的浏览器

首先推荐一个开源WAF: https://github.com/corazawaf/coraza

该产品改造了coreruleset为coraza-coreruleset以保证适配性: https://github.com/corazawaf/coraza-coreruleset

在研究过程中我发现他有个在线网址提供给大家测试WAF防护策略: https://playground.coraza.io/

也是工作习惯了,用yakit抓了个包想看看是怎么发送到后台的,结果发现点击左上角run(就是直觉上的发送键),但是一个请求都没到后台

于是寻找到了这个页面的源码一探究竟: https://github.com/k4n5ha0/coraza-playground

看完源代码了解到这个系统将go语言写的coraza编译成了wasm文件让js调用,在浏览器内就将http请求包含的威胁判断了出来

所以我们来试一下,操作系统win10,、go1.22.2、git环境:

该waf不兼容windows请在git客户端下执行编译命令

go run mage.go build

之后通过以下命令执行

go run mage.go run

之后就可以使用浏览器访问如下图:

在代码目录中,编译生成的www目录我们可以找到编译成功的前端代码

其中app.js中就包含了调用wasm的代码如下图

 

最终设计:

1)设计系统时应要求前端使用统一的请求发送方法,前端代码应强混淆强加密

2)系统在发送请求之前应调用coraza执行请求过滤策略(也就是coraza-coreruleset中REQUEST为开头的策略),如无风险后增加一个签名后才能向后台服务器发送,服务器获取到请求后如签名不正确则丢弃该请求

3)服务器将响应包增加签名后发送给当前请求

4)前端在获取到响应包后对签名进行校验,如果签名通过则将响应包发送给coraza执行响应过滤策略(也就是coraza-coreruleset中RESPONSE为开头的策略),如果通过则视为无问题

5)上述前端的签名校验和加密策略应放到wasm之中,并且对wasm做混淆加密防止被逆向

 

谢谢

posted @ 2024-04-08 20:14  国产大熊猫~  阅读(94)  评论(0编辑  收藏  举报