ModSecurity3 + OWASP CRS
OWASP CRS(CoreRuleSet)
1、简介
OWASP® CRS 是一组通用攻击检测规则,可与 ModSecurity 或兼容的 Web 应用程序防火墙一起使用。 CRS 旨在保护 Web 应用程序免受各种攻击(包括 OWASP 十大攻击),并尽量减少误报。 CRS 提供针对许多常见攻击类别的保护。
2、说明
2.1自带的规则集
规则组名称
说明
REQUEST-911-METHOD-ENFORCEMENT
锁定方法(PUT、PATCH)
REQUEST-913-SCANNER-DETECTION
防范端口和环境扫描程序
REQUEST-920-PROTOCOL-ENFORCEMENT
防范协议和编码问题
REQUEST-921-PROTOCOL-ATTACK
防范标头注入、请求走私和响应拆分
REQUEST-930-APPLICATION-ATTACK-LFI
防范文件和路径攻击
REQUEST-931-APPLICATION-ATTACK-RFI
防范远程文件包含 (RFI) 攻击
REQUEST-932-APPLICATION-ATTACK-RCE
防范远程代码执行攻击
REQUEST-933-APPLICATION-ATTACK-PHP
防范 PHP 注入攻击
REQUEST-941-APPLICATION-ATTACK-XSS
防范跨站点脚本攻击
REQUEST-942-APPLICATION-ATTACK-SQLI
防范 SQL 注入攻击
REQUEST-943-APPLICATION-ATTACK-SESSION-FIXATION
防范会话固定攻击
REQUEST-944-APPLICATION-ATTACK-JAVA
防范 JAVA 攻击
2.2请求处理阶段
-
请求头阶段
Apache完成读取请求头(post-read-request阶段)后立即处理此阶段中的规则。在这个时候还没有读取请求体,所以这个时候对所有请求参数并不是都可用。如果需要提前运行规则(在Apache对请求执行某些操作之前),在请求体读取之前执行某些操作,您需确定是否应该缓存请求体,或者决定如何将规则置于此阶段(例如,是否将其解析为XML)。
-
请求体阶段
请求体阶段是通用的输入分析阶段,大多数面向应用程序的规则都放在这里。在这个阶段是可以收到所有的请求参数,当然这个前提是请求主体是已经读取的。在此阶段ModSecurity支持请求正文阶段的三种编码类型:
-
application/x-www-form-urlencoded 用于传输表单数据
-
multipart/form-data 用于文件上传
-
text/xml 用于传递XML数据
-
响应头阶段
此阶段发生在响应头被发送回客户端之前。如果要在此之前检查响应,以及是否要使用响应头来决定是否要缓存响应体,可以讲将规则配置为此阶段。需要注意的是,某些响应状态码(例如404)由于在Apache请求周期的早期处理,因此此类访问是无法触发ModSecurity的规则。此外,还有一些响应头由Apache在稍后的挂钩(例如日期,服务器和连接)中添加,ModSecurity也无法触发或检查。这应该在代理设置中或阶段5(日志记录)中进行配置。
-
响应体阶段
响应体阶段是通用输出分析阶段。此时的响应体是应该要已经被缓存的,然后运行规则检查响应体。在此阶段,可以检查出站HTML来判断是否有信息泄露,是否包含错误消息或是失败的身份验证文本。
-
记录阶段
该阶段在日志记录发生之前运行。进入此阶段的规则只会影响日志记录的执行方式。此阶段可用于检查Apache记录的错误消息。但是不能在此阶段拒绝/阻断连接,因为已经太晚了。此阶段还允许检查在阶段3或者阶段4期间不可用的其他响应头。需要注意的是,在这个阶段不要将拒绝/阻断操作继承到规则中,因为这样本身是一个配置的错误。
2.3严重等级对应异常分数
严重程度
默认异常分数
CRITICAL
5
ERROR
4
WARNING
3
NOTICE
2
3、ModSecurity安装配置集成CRS规则
在安装成功ModSecurity之后,使用SecRemoteRules指令,将远程规则文件添加到modsecurity.conf文件中即可,如下所示:
Include /usr/local/nginx/conf/modsecurity/crs-setup.conf
SecRemoteRules some-key https://rules.modsecurity.cn/rules/customize.conf
Include /usr/local/nginx/conf/modsecurity/rules/*.conf
上述规则表示,将OWASP的规则放置在本地,然后远程服务器放置了一个customize.conf的规则文件,文件中主要放置一些更新比较频繁的自定义规则,此时请注意!之所以将加载远程规则的语句放置在第二位,是因为首先要加载OWASP规则的默认配置,即crs-setup.conf。
some-key意味着可以定义一个key值,远程服务器可以根据key值,来判断要返回哪些规则内容,或是否返回规则内容,当然,随便定义一个key值,远程服务器不进行任何判断也可以。
也可以直接将OWASP的所有规则全部放置在远程服务器当中,然后通过以下方式进行加载(内容需复制到modsecurity.conf末尾):
SecRemoteRules 123 https://rules.modsecurity.cn/crs-setup.conf
SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-901-INITIALIZATION.conf
SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-903.9001-DRUPAL-EXCLUSION-RULES.conf