首页 应用实战正文

ModSecurity通过SecRemoteRules指令加载远程服务器上的规则

王子 应用实战 2020-05-25 7327 0

本文主要介绍如何通过SecRemoteRules指令,来加载放置在远程服务器中的规则文件。


一、应用场景

该方法适合服务器数量众多,但经常需要更新规则的运维人员。

作为景安网络产品经理,本人在通过使用ModSecurity为20万个网站进行基础防护时,由于云服务器数量巨大,每次更新规则后,都需要将新的规则文件同步到所有的服务器当中,虽然可以通过工具将规则文件进行批量自动上传,但是直接将规则放置在远程服务器当中,然后由业务服务器自动加载,更能减少运维工作量。


二、指令介绍

SecRemoteRules允许从指定的某个HTTPS站点上的文件来加载规则,语法如下:

SecRemoteRules some-key https://www.yourserver.com/plain-text-rules.txt

some-key意味着可以定义一个key值,远程服务器可以根据key值,来判断要返回哪些规则内容,或是否返回规则内容,当然,随便定义一个key值,远程服务器不进行任何判断也可以。

使用SecRemoteRules后,WEB服务在启动时,ModSecurity会访问配置的HTTPS路径来读取远程文件中的规则,而与此同时,请求头中会增加三个参数:ModSec-unique-id、ModSec-status、ModSec-key,如下所示:

GET /plain-text-rules.txt HTTP/1.1
User-Agent: modesecurity
Host: www.yourserver.com
Accept: */*
ModSec-unique-id: e781ee72979d16cd91ed89c716dc087f195d7cb8
ModSec-status: 2.9.3,(null),1.5.2/1.5.2,8.43/8.43 2019-02-23,Lua 5.1,2.9.9,e781ee72979d16cd91ed89c716dc087f195d7cb8
ModSec-key: MkIe2c8pIK8AI2g5mXipvl4x

其中,ModSec-key的值就是定义的key值,在实际中我将其设置为了MkIe2c8pIK8AI2g5mXipvl4x。


四、用法步骤

远程服务器需要搭建一套简单的WEB环境,Nginx、Apache、IIS或其他WEB服务均可,然后开启HTTPS访问,SSL证书申请阿里云的免费证书即可。

image.png


然后,在安装成功ModSecurity之后,使用SecRemoteRules指令,将远程规则文件添加到modsecurity.conf文件中即可,如下所示:

Include /usr/local/nginx/conf/modsecurity/crs-setup.conf
SecRemoteRules 123 https://rules.modsecurity.cn/rules/customize.conf
Include /usr/local/nginx/conf/modsecurity/rules/*.conf

上述规则表示,将OWASP的规则放置在本地,然后远程服务器放置了一个customize.conf的规则文件,文件中主要放置一些更新比较频繁的自定义规则,此时请注意!之所以将加载远程规则的语句放置在第二位,是因为首先要加载OWASP规则的默认配置,即crs-setup.conf。


当然,我们也可以直接将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
SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-903.9002-WORDPRESS-EXCLUSION-RULES.conf
SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-903.9003-NEXTCLOUD-EXCLUSION-RULES.conf
SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-903.9004-DOKUWIKI-EXCLUSION-RULES.conf
SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-903.9005-CPANEL-EXCLUSION-RULES.conf
SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-903.9006-XENFORO-EXCLUSION-RULES.conf
SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-905-COMMON-EXCEPTIONS.conf
SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-910-IP-REPUTATION.conf
SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-911-METHOD-ENFORCEMENT.conf
SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-912-DOS-PROTECTION.conf
SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-913-SCANNER-DETECTION.conf
SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-920-PROTOCOL-ENFORCEMENT.conf
SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-921-PROTOCOL-ATTACK.conf
SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-930-APPLICATION-ATTACK-LFI.conf
SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-931-APPLICATION-ATTACK-RFI.conf
SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-932-APPLICATION-ATTACK-RCE.conf
SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-933-APPLICATION-ATTACK-PHP.conf
SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-934-APPLICATION-ATTACK-NODEJS.conf
SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-941-APPLICATION-ATTACK-XSS.conf
SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-942-APPLICATION-ATTACK-SQLI.conf
SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-943-APPLICATION-ATTACK-SESSION-FIXATION.conf
SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-944-APPLICATION-ATTACK-JAVA.conf
SecRemoteRules 123 https://rules.modsecurity.cn/rules/REQUEST-949-BLOCKING-EVALUATION.conf
SecRemoteRules 123 https://rules.modsecurity.cn/rules/RESPONSE-950-DATA-LEAKAGES.conf
SecRemoteRules 123 https://rules.modsecurity.cn/rules/RESPONSE-951-DATA-LEAKAGES-SQL.conf
SecRemoteRules 123 https://rules.modsecurity.cn/rules/RESPONSE-952-DATA-LEAKAGES-JAVA.conf
SecRemoteRules 123 https://rules.modsecurity.cn/rules/RESPONSE-953-DATA-LEAKAGES-PHP.conf
SecRemoteRules 123 https://rules.modsecurity.cn/rules/RESPONSE-954-DATA-LEAKAGES-IIS.conf
SecRemoteRules 123 https://rules.modsecurity.cn/rules/RESPONSE-959-BLOCKING-EVALUATION.conf
SecRemoteRules 123 https://rules.modsecurity.cn/rules/RESPONSE-980-CORRELATION.conf
SecRemoteRules 123 https://rules.modsecurity.cn/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf


但此时请注意,由于OWASP规则中除了规则文件外,还有一些后缀为.data的数据文件,如下所示:

image.png


如果上述数据文件也放置在了远程服务器中,那么引用这些数据的规则(通过pmFromFile指令进行引用),也需要把路径改为远程服务器的路径,如REQUEST-913-SCANNER-DETECTION.conf文件中ID为913100的规则,原内容如下:

SecRule REQUEST_HEADERS:User-Agent "@pmFromFile scanners-user-agents.data" \
    "id:913100,\
    phase:2,\
    block,\
    capture,\
    t:none,t:lowercase,\
    msg:'Found User-Agent associated with security scanner',\
    logdata:'Matched Data: %{TX.0} found within %{MATCHED_VAR_NAME}: %{MATCHED_VAR}',\
    tag:'application-multi',\
    tag:'language-multi',\
    tag:'platform-multi',\
    tag:'attack-reputation-scanner',\
    tag:'paranoia-level/1',\
    tag:'OWASP_CRS',\
    tag:'OWASP_CRS/AUTOMATION/SECURITY_SCANNER',\
    tag:'WASCTC/WASC-21',\
    tag:'OWASP_TOP_10/A7',\
    tag:'PCI/6.5.10',\
    ver:'OWASP_CRS/3.2.0',\
    severity:'CRITICAL',\
    setvar:'tx.anomaly_score_pl1=+%{tx.critical_anomaly_score}',\
    setvar:'ip.reput_block_flag=1',\
    setvar:'ip.reput_block_reason=%{rule.msg}',\
    expirevar:'ip.reput_block_flag=%{tx.reput_block_duration}'"


此时就需要修改scanners-user-agents.data数据文件的路径,即“@pmFromFile scanners-user-agents.data”,需要改成“@pmFromFile https://rules.modsecurity.cn/rules/scanners-user-agents.data”,个人建议,如果不会编写脚本进行批量替换的话,可以使用Notepad++,通过Ctrl+H,将"pmFromFile "(注意,包含后面的空格),替换为“pmFromFile https://你的域名/文件夹名/”。


五、其他补充

1、目前只有ModSecurity V3版本支持配置多个SecRemoteRules指令,其他版本只能配置一条SecRemoteRules指令,也就是说,如果使用的不是ModSecurity V3版本,所有规则都需要放置在一个文件中,且规则必须一行一个,不能像OWASP规则那样,一条规则可以通过"\"来拆分成多行;

2、经本人测试发现,ModSecurity 2.9.3无法使用SecRemoteRules指令,ModSecurity 2.9.2在与Apache搭配使用时可使用SecRemoteRules指令。

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。