WAF每条规则都会配置动作,对命中规则的请求进行对应的处理。
每个WAF产品对动作定义不大一样。
-
ModSecurity定义了allow, block, deny, drop, pass, pause, proxy, redirect。
-
allow: 命中了某条规则后,不需要对请求/响应应用其它规则,直接让请求通过。这个可以用于白名单。
-
block: 并不是一个真正的动作,它的行为取决于配置的默认动作,如果默认动作更新,使用block的规则行为也随即改变。在安全响应方面,它可用于批量进行规则作为更新。
-
deny: 中断规则处理,拦截请求/响应。在客户端的角度来说,这个动作会返回4xx或5xx的状态码(取决于规则定义status),但并没有中断当前的连接
-
drop: 对当前tcp连接进行关闭操作,它和deny的不同是:deny之后,客户端仍然可以提交请求,但使用drop后,客户端只有重新连接才可以访问。这个动作可以节省后端服务的连接数
-
pass: 命中某条规则继续匹配下一条规则。可用于对请求进行精细地过滤,但会对响应速度有较大影响。
-
pause: 命中某条规则,对当前事务暂停指定的毫秒。一般用于防止登录爆破。如果遭受DDOS攻击,会恶化整个web服务的响应速度
-
proxy: 把命中规则的请求转发到另外一个web服务去。这个功能类似反向代理。由于它对客户端完全来说,完全是无感知,可以用它导向请求到蜜罐系统。这个动作是一个非常优秀的动作。
-
redirect: 当规则被命中,它会返回一个重定向,指示浏览器访问另外一个url。它和proxy的区别是,它对客户端是感知。可用于配置新上线接口或屏蔽某些有问题的接口。
-
Naxsi定义了accept, block, drop。
-
accept: 对应ModSecurity的allow, 一旦命中立马放行
-
block: 对应ModSecurity的deny
-
drop: 对应ModSecurity的drop
-
华为云WAF定义了allow, deny, , redirect
-
accept: 对应ModSecurity的allow, 一旦命中立马放行
-
deny: 对应ModSecurity的deny, 默认返回418
-
redirect: 对应Modsecurity的redirect
-
openrestyl lua WAF定义了allow, deny,drop, redirect
-
accept: 对应ModSecurity的allow, 一旦命中立马放行
-
deny: 对应ModSecurity的deny, 默认返回403
-
drop: 对应ModSecurity的drop
-
redirect: 对应Modsecurity的redirect
其中华为云WAF和openresty lua WAF,在实现pass动作,都是通过规则组来实现。
对于动作配置方面,有这样的建议:
-
在功能开发方面,drop最好能够先返回一个状态码再停止掉整个连接,drop, deny状态码尽量可以通过规则配置。
-
在配置规则时,对于drop, deny的状态码,每条规则或规则组都返回不同的状态码。
这样做的好处是:
-
有效隐藏WAF的特征,让攻击者无法确认是否有WAF存在
-
当出现规则误拦截时,可以根据返回码快速定位是哪条规则误拦截。这是从无数次背锅感悟出来的血的教训
暗号:fguy6
原文始发于微信公众号(debugeeker):WAF专题5 -- WAF动作
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论