ModSecurity-web应用守护之神 – 作者:8lingnb

图片[1]-ModSecurity-web应用守护之神 – 作者:8lingnb-安全小百科

2020年12月,写作背景是一个宁静的夜晚,本篇文章主要是为大家带来一些开源WAF的介绍方便可以使用开源产品搭建靶机环境,增强对waf的认识,大佬们路过轻喷。

Web应用防护系统(也称:网站应用级入侵防御系统。英文:Web Application Firewall,简称: WAF,利用国际上公认的一种说法:Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。

WAF是通过检测应用层的数据来进行访问控制或者对应用进行控制,而传统防火墙对三、四层数据进行过0滤.从而进行访问控制,不对应用层数据进行分析,不过这里笔者需要友情提醒下,现在有的防火墙也是可以对应用层进行包过滤(状态防火墙),不过毕竟这不是他的本职工作。

对于企业上WAF常见的解决方案基本包括以下方面:

1 购买硬件waf
2 使用云waf
3 部署应用交付,使用内置的waf功能

4 使用开源waf
5 使用集成化软件,如360主机卫士

这次主要给大家介绍一个不错的开源WAF-ModSecurity,ModSecurity是一个开源的Web软件防火墙。它可以作为Apache Web服务器的一个模块或单独的应用程序来运行.ModSecurity的目的是为增强Web应用程序的安全性和保护Web应用程序避免遭受来自已知与未知的攻击. 类似在web应用这条高速路上设了一道关卡,负责对来往的应用数据包进行检查,并且对恶意攻击的数据包进行处理。同时该产品提供了打分机制对危险评分,当分值达到我们预设的值时,将会讲该包丢弃,设计这个主要是有些业务可能会触发报警,但是属于正常业务,所以关键的地方就是分值设定调优,设定一个理想的值。

ModSecurity处理事件分为5个阶段,分别为请求头阶段(Request-Headers)、请求头阶段(Request-Headers) 、响应头阶段(Response_Headers)、响应体阶段(Request_Body)、记录阶段(Logging) ,具体每个阶段工作原理这里不细说。这里我是把waf装在了web容器里面,如果你们公司有很多服务器,同时做了负载均衡解决高并发,可以把waf推到负载上面过滤所有网站的流量

图片[2]-ModSecurity-web应用守护之神 – 作者:8lingnb-安全小百科

下面为大家详细讲解安装过程

1 yum makecache把服务器包信息下载到本地

图片[3]-ModSecurity-web应用守护之神 – 作者:8lingnb-安全小百科

2 搜索mod_security模块相关包内容

图片[4]-ModSecurity-web应用守护之神 – 作者:8lingnb-安全小百科

3 yum -y install mod_security*一把梭直接全部安装, 或者只装1 和 3 ,1是搜索引擎,3是规则库

4 重启Apache服务,systemctl restart httpd,当重启后,我们会发现之前能进去的dvwa 现在打不开了,这 是因为waf配置所导致的 ,默认不允许ip访问  我们绑定hosts就可以了。

图片[5]-ModSecurity-web应用守护之神 – 作者:8lingnb-安全小百科

5 以下为ModSecurity相关配置文件介绍,这个是waf引擎的主要配置文件,定义waf开启或者关闭的主要配置。对于主配置文件我们需要改的不多,如下图。

图片[6]-ModSecurity-web应用守护之神 – 作者:8lingnb-安全小百科

这个是控制waf 的开关

图片[7]-ModSecurity-web应用守护之神 – 作者:8lingnb-安全小百科

处理 post  body内容  ,只有打开了才会查看body    必开开关

图片[8]-ModSecurity-web应用守护之神 – 作者:8lingnb-安全小百科

第一个是 最大处理body的数量
第二个是 当没有文件的时候最大能处理多少
第三个是 内存的占用大小
根据网站的实际情况设置

图片[9]-ModSecurity-web应用守护之神 – 作者:8lingnb-安全小百科

waf审计的日志 路径

图片[10]-ModSecurity-web应用守护之神 – 作者:8lingnb-安全小百科

6 以下这个配置文件是定义activaged_rules文件夹规则的配置文件   它比主要配置文件更细致化
vi /etc/httpd/modsecurity.d/modsecurity_crs_10_config.conf

图片[11]-ModSecurity-web应用守护之神 – 作者:8lingnb-安全小百科

7 这个文件夹内是规则文件,/etc/httpd/modsecurity.d/activated_rules,可以看出有很多web层面的相关规则。

图片[12]-ModSecurity-web应用守护之神 – 作者:8lingnb-安全小百科

8 定义规则的配置文件,不像很多waf,遇到一个铭感输入就阻断这种不讲武德的方式,modsecurity提供了两种模式,模式1 撞到一条规则直接阻断,模式2 对行为进行测算决定要不要阻断。如果想使用模式2 在模式1前面加#号注释掉  并且把模式2中的deny 改为pass 就可以。

图片[13]-ModSecurity-web应用守护之神 – 作者:8lingnb-安全小百科

9 撞到的级别算分值   分值到达指定后就阻断

图片[14]-ModSecurity-web应用守护之神 – 作者:8lingnb-安全小百科

10 出入站分值设定 分别是

135  setvar:tx.inbound_anomaly_score_level=5, \  这个定义的是进站分值
136  setvar:tx.outbound_anomaly_score_level=4, \这个定义的是出站分值

图片[15]-ModSecurity-web应用守护之神 – 作者:8lingnb-安全小百科

11 还有最关键的一步是触发这条规则默认是注释的,所以第二种模式是不会阻断的   使用第二种模式 需要把注释取消了。

图片[16]-ModSecurity-web应用守护之神 – 作者:8lingnb-安全小百科

12 还有一些对参数长度、最大字符长度、文件上传大小、定义请求方式、定义请求文件的后缀等的设定,分别如下图。

图片[17]-ModSecurity-web应用守护之神 – 作者:8lingnb-安全小百科

图片[18]-ModSecurity-web应用守护之神 – 作者:8lingnb-安全小百科

图片[19]-ModSecurity-web应用守护之神 – 作者:8lingnb-安全小百科图片[20]-ModSecurity-web应用守护之神 – 作者:8lingnb-安全小百科

13  查看日志文件,很重要,tail -f modsec_audit.log

A板块可以看出哪个时间段谁来访问我  它的ip和端口,B板块对应的是请求包、F板块  是返回包、整个H 对应的是WAF的检测日志

图片[21]-ModSecurity-web应用守护之神 – 作者:8lingnb-安全小百科图片[22]-ModSecurity-web应用守护之神 – 作者:8lingnb-安全小百科图片[23]-ModSecurity-web应用守护之神 – 作者:8lingnb-安全小百科

图片[24]-ModSecurity-web应用守护之神 – 作者:8lingnb-安全小百科

14 规则部分

第一部分:基础规则集
modsecurity_crs_20_protocol_violations.conf HTTP协议规范相关规则
modsecurity_crs_21_protocol_anomalies.conf HTTP协议规范相关规则
modsecurity_crs_23_request_limits.conf HTTP协议大小长度限制相关规则
modsecurity_crs_30_http_policy.conf HTTP协议白名单相关规则
modsecurity_crs_35_bad_robots.conf 恶意扫描器与爬虫规则
modsecurity_crs_40_generic_attacks.conf 常见的攻击例如命令执行,代码执行,注入,文件包含、敏感信息泄露、会话固定、HTTP响应拆分等相关规则
modsecurity_crs_41_sql_injection_attacks.conf SQL注入相关规则(竟然有一条MongoDB注入的规则,很全)
modsecurity_crs_41_xss_attacks.conf XSS相关规则
modsecurity_crs_42_tight_security.conf 目录遍历相关规则
modsecurity_crs_45_trojans.conf webshell相关规则
modsecurity_crs_47_common_exceptions.conf Apache异常相关规则
modsecurity_crs_49_inbound_blocking.conf 协同防御相关规则
modsecurity_crs_50_outbound.conf 检测response_body中的错误信息,警告信息,列目录信息
modsecurity_crs_59_outbound_blocking.conf 协同防御相关规则
modsecurity_crs_60_correlation.conf 协同防御相关规则
第二部分:SLR规则集
来自确定APP的PoC,不会误报,检测方法是先检查当前请求的文件路径是否出现在data文件中,若出现再进行下一步测试,否则跳过该规则集的检测
modsecurity_crs_46_slr_et_joomla_attacks.conf JOOMLA应用的各种漏洞规则
modsecurity_crs_46_slr_et_lfi_attacks.conf 各种APP的本地文件包含相关规则
modsecurity_crs_46_slr_et_phpbb_attacks.conf PHPBB应用的各种漏洞规则
modsecurity_crs_46_slr_et_rfi_attacks.conf 各种APP的远程文件包含相关规则
modsecurity_crs_46_slr_et_sqli_attacks.conf 各种APP的SQL注入相关规则
modsecurity_crs_46_slr_et_wordpress_attacks.conf WORDPRESS应用的各种漏洞规则
modsecurity_crs_46_slr_et_xss_attacks.conf 各种APP的XSS相关规则
第三部分:可选规则集
modsecurity_crs_10_ignore_static.conf 静态文件不过WAF检测的相关规则
modsecurity_crs_11_avs_traffic.conf AVS(授权的漏洞扫描器)的IP白名单规则
modsecurity_crs_13_xml_enabler.conf 请求体启用XML解析处理
modsecurity_crs_16_authentication_tracking.conf 记录登陆成功与失败的请求
modsecurity_crs_16_session_hijacking.conf 会话劫持检测
modsecurity_crs_16_username_tracking.conf 密码复杂度检测
modsecurity_crs_25_cc_known.conf CreditCard验证
modsecurity_crs_42_comment_spam.conf 垃圾评论检测
modsecurity_crs_43_csrf_protection.conf 与modsecurity_crs_16_session_hijacking.conf联合检测,使用内容注入动作append注入CSRF Token
modsecurity_crs_46_av_scanning.conf 使用外部脚本扫描病毒
modsecurity_crs_47_skip_outbound_checks.conf modsecurity_crs_10_ignore_static.conf的补充
modsecurity_crs_49_header_tagging.conf 将WAF规则命中情况配合Apache RequestHeader指令注入到请求头中,以供后续应用进一步处理
modsecurity_crs_55_application_defects.conf 安全头(X-XSS-Protection,X-FRAME-OPTIONS,X-Content-Type-Options)设置,安全Cookie设 置(Domain,httponly,secure),字符集设置等规则
modsecurity_crs_55_marketing.conf记录MSN/Google/Yahoo robot情况
第四部分:实验性规则集
modsecurity_crs_11_brute_force.conf 防御暴力破解相关规则
modsecurity_crs_11_dos_protection.conf 防DoS攻击相关规则
modsecurity_crs_11_proxy_abuse.conf 检测X-Forwarded-For是否是恶意代理IP,IP黑名单
modsecurity_crs_11_slow_dos_protection.conf Slow HTTP DoS攻击规则
modsecurity_crs_25_cc_track_pan.conf 检测响应体credit card信息
modsecurity_crs_40_http_parameter_pollution.conf 检测参数污染
modsecurity_crs_42_csp_enforcement.conf CSP安全策略设置
modsecurity_crs_48_bayes_analysis.conf 使用外部脚本采取贝叶斯分析方法分析HTTP请求,区分正常与恶意请求
modsecurity_crs_55_response_profiling.conf 使用外部脚本将响应体中的恶意内容替换为空
modsecurity_crs_56_pvi_checks.conf使用外部脚本检测 REQUEST_FILENAME是否在osvdb漏洞库中
modsecurity_crs_61_ip_forensics.conf 使用外部脚本收集IP的域名、GEO等信息
modsecurity_crs_40_appsensor_detection_point_2.0_setup.conf APPSENSOR检测设置文件
modsecurity_crs_40_appsensor_detection_point_3.0_end.conf APPSENSOR检测设置文件
modsecurity_crs_16_scanner_integration.conf 对扫描器设置IP白名单,并调用扫描器API来进行检测
modsecurity_crs_46_scanner_integration.conf
使用 modsecurity_crs_40_appsensor_detection_point_2.0_setup.conf,modsecurity_crs_40_appsensor_detection_point_3.0_end.conf 来跟踪XSS漏洞参数与SQLI漏洞参数
modsecurity_crs_40_appsensor_detection_point_2.1_request_exception.conf 使用外部脚本检测请求方法,参数个数,参数名字,参数长度,参数字符等限制
modsecurity_crs_40_appsensor_detection_point_2.9_honeytrap.conf 使用隐藏参数设置蜜罐

15 当然我们都知道,攻防重来都是一个动态的模式,对于绕waf,笔者也总结过几种方式,希望能帮到你们:

目录扫描绕过waf(修改UA为百度UA进行绕过)

大小写变种

使用sql注释

使用URL编码

使用空字节

使用嵌套

使用非标准入口点

避开自定义扫描器

sqlmap注入绕过waf一般可以使用-tamper-.py脚本绕过,可以自己写绕过规则

使用%00截断绕过,有些网站认可空字节可能会绕过

同时我们还应该考虑免杀以及webshell管理器连接流量绕过waf,上传绕waf,提权绕开waf等因素

图片[25]-ModSecurity-web应用守护之神 – 作者:8lingnb-安全小百科

总结:

对于waf我们应该定时更新规则,并且我们同时也应该关注waf是否对业务造成误伤,前期的调试磨合很重要,毕竟公司得靠业务挣钱,离开业务谈安全都是行不通的。

来源:freebuf.com 2020-12-02 20:06:49 by: 8lingnb

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论