bukaleyang / zhongkui-waf

WAF based on lua-nginx-module.
Apache License 2.0
166 stars 42 forks source link

关于webshell拦截日志 #25

Closed xxddpac closed 1 year ago

xxddpac commented 1 year ago

@bukaleyang

当前匹配拦截日志 {"request_uri":"\/api\/v1\/rule","user_agent":"PostmanRuntime\/7.28.3","hit_rule":"file-ext","action":"REDIRECT", "request_data":"sh","request_protocol":"HTTP\/1.1","attack_type":"file-ext","geoip_country":"中国","geoip_province":"上海","geoip_city":"上海","attack_time":"2023-08-18 14:10:47","http_method":"POST","server":"x.x.x.x","remote_addr":"x.x.x.x"}

其中request_data只记录了上传文件的后缀,如果request_data记录整个请求体是否会更好点?

{"request_data":"Content-Disposition: form-data; name=\"openresty\"; filename=\"run.sh\"","user_agent":"PostmanRuntime\/7.28.3", "hit_rule":"file-ext","action":"REDIRECT","request_protocol":"HTTP\/1.1","request_uri":"\/api\/v1\/rule","attack_type":"file-ext", "geoip_country":"中国","geoip_province":"上海","geoip_city":"上海","attack_time":"2023-08-18 14:26:56","http_method":"POST","server":"x.x.x.x","remote_addr":"x.x.x.x"}

bukaleyang commented 1 year ago

request_data可能改成hit_data更合适一点,记录的是命中规则的请求数据,记录完整的请求体也不是不可以,但请求体通常比较长,日志文件会比较大,如果不是json格式日志,那日志文件就更没法看了。

xxddpac commented 1 year ago

是的,我是觉得详细的日志对后续分析溯源还是有用的,尤其是开启了监控模式。 这块还是交给用户自己去决定,将详细日志直接写进es或kafka也行

bukaleyang commented 1 year ago

是的,我是觉得详细的日志对后续分析溯源还是有用的,尤其是开启了监控模式。 这块还是交给用户自己去决定,将详细日志直接写进es或kafka也行

我觉得可以,你开发下提交吧,加个request_body,request_data本来是想记录命中规则的具体内容,可以考虑改为hit_data,加个开关,并且只能在json格式下有用,如果开启请求体检查,那请求体检查模块已经读取了请求体,所以要注意下性能和效率,尽可能只读取一次。

xxddpac commented 1 year ago

关于isEvilReqBody()模块里面的isEvilFile isEvilBody两个方法当前都是将request_body传入日志(json是否开启都记录),只有isBlackFileExt将文件后缀名传过去,所以这里修改下isBlackFileExt方法和上面统一是不是好一点,也不用新增修改日志字段了

bukaleyang commented 1 year ago

如果关了请求体检查,其他检查模块就记录不到请求体了。 恶意header比如 referer也是有记录的,header内容不包含在请求体中。如果其他模块也要记录请求体,还是要专门加一个request_body来记录请求体,跟命中的恶意header内容区分开来。如果其他模块不记录请求体,那request_data就够了,请求体也记录这个字段。

xxddpac commented 1 year ago

request_data是够用了,所有的模块命中规则request_data记录的都挺详细,目前只有上传文件命中时request_data只记录了恶意文件后缀名,这块我提个pr优化下,你看看是否可以合并