【网络安全】让ModSecurity和核心规则集 增强 访问网关
介绍
ModSecurity是一种流行的开源工具,最初设计为Apache HTTP服务器的模块,用于保护Web应用程序。它是一个Web应用程序防火墙(WAF),主要用于实时Web应用程序监视,日志记录和访问控制。
为何选择ModSecurity
ModSecurity有两个主要方面,可以在Access Gateway中非常有效地利用。首先,ModSecurity的核心是允许管理员实时访问HTTP流,并具有解析它的能力。这对于实时安全监控至关重要。第二个方面是它允许对外部各方的行为进行持续的安全评估,以及系统本身在后台的行为。它是第一道防线,可以在被利用之前检测到许多异常和安全漏洞的痕迹。
在本文中,ModSecurity被部署为Apache模块,因此嵌入到Access Gateway中。因此,Access Gateway的资源由ModSecurity共享。更多细节将在本文的后面部分中介绍。
这篇文章是什么
本文详细介绍了以下几个方面:
- 如何在Access Gateway上启用ModSecurity
- 安装Open Web Application Security项目的核心规则集
- 配置ModSecurity详细/监控模式
- 对性能的影响
规则和核心规则集(CRS)3.x
ModSecurity是一个需要规则的引擎。规则使其成为一个非常强大且通用的引擎,可将HTTP请求和响应控制到字节级别。为了充分利用其功能,ModSecurity提供了一种平台,一种规则配置语言,称为“SecRules”,用于基于规则对HTTP通信进行实时监控,记录和过滤。
ModSecurity最常用于使用开放式Web应用程序安全项目(OWASP)核心规则集(CRS)提供针对一般漏洞类的保护。这是一套用ModSecurity的SecRules语言编写的开源规则。 CRS旨在保护Web应用程序免受各种攻击,包括OWASP十大攻击,并且只需最少的虚假警报。核心规则集提供针对许多常见攻击类别的保护,包括:
- SQL注入(SQLi)
- 跨站点脚本(XSS)
- 本地文件包含(LFI)
- 远程文件包含(RFI)
- 远程执行代码(RCE)
- PHP代码注入
- HTTP协议违规
- HTTPoxy
- Shellshock
- 会话固定
如何安装ModSecurity和CRS
ModSecurity tarball具有ModSecurity Apache模块Ver 2.9.2和OWASP的Core Rule Set Ver 3.0.2。
请按照下面提到的步骤启用带有CRS的ModSecurity模块:
- 下载附加的tarball并将其复制到/ etc / opt / novell / apache2 / conf /
# cp ModSecurity.tar.gz /etc/opt/novell/apache2/conf/ # cd /etc/opt/novell/apache2/conf/
- 解压缩tarball。
#tar -zxvf ModSecurity.tar.gz
- 在/ etc / opt / novell / apache2 / conf /下将有一个新目录ModSecurity。在/ etc / opt / novell / apache2 / conf /下复制两个新目录,如下所示:
# cp -r ModSecurity/modsec.d /etc/opt/novell/apache2/conf/ # cp -r ModSecurity/owasp-modsecurity-crs-3.0.2 /etc/opt/novell/apache2/conf/
- 创建符号链接。
#ln -s owasp-modsecurity-crs-3.0.2 crs
- 删除未使用的文件和文件夹
#rm -r ModSecurity ModSecurity.tar.gz
- 将modSecurity模块复制到相应的Apache目录。
对于NAM 4.4.3
#cp ModSecurity / 4.4.3 / mod_security2.so / opt / novell / apache2 / libexec /
对于NAM 4.4.2
#cp ModSecurity / 4.4.2 / mod_security2.so / opt / novell / apache2 / libexec /
- 打开/etc/opt/novell/apache2/conf/httpd.conf。
在httpd.conf文件的LoadModule部分的开头添加以下行。
LoadModule security2_module libexec / mod_security2.so
取消注释同一部分中提供的以下行。
LoadModule unique_id_module libexec / mod_unique_id.so
- 将以下设置添加到AG Global Advanced Option。
<IfModule security2_module> SecRuleEngine Off Include /etc/opt/novell/apache2/conf/modsec.d/modsecurity-base.conf Include /etc/opt/novell/apache2/conf/modsec.d/crs.conf </IfModule>
- 将以下设置添加到代理服务的高级选项,以启用具有详细模式的ModSecurity Rule Engine。
<IfModule security2_module> SecRuleEngine DetectionOnly </IfModule>
有一些配置/指令对于ModSecurity和CRS按预期一起工作至关重要,而不会产生任何意外情况。
以下部分介绍了一些设置及其用法,并提供了详细说明。 ModSecurity和CRS的README和conf文件也可用于参考。
高级配置或设置
在生产环境中启用ModSecurity时,始终存在一些风险和影响。存在误报的可能性,阻止合法用户访问资源,性能下降等。当ModSecurity部署为破坏模式时,机会很高。
以下是一些通用和推荐的设置,这些设置使ModSecurity不那么冒犯,并且永远不会阻止任何请求。
它是详细的模式,其中为检测到的任何安全威胁创建单独的日志。
还有一些设置可以衡量对性能和其他服务器资源的影响。
在上述安装步骤中复制的配置文件(crs-setup.conf和modsecurity-base.conf在路径/ etc / opt / novell / apache2 / conf /中可用)已启用以下设置。
详细模式
设置ModSecurity规则引擎来处理规则但从不执行任何破坏性操作(阻止,拒绝,丢弃,允许,代理和重定向)是通过以下方式完成的:
SecRuleEngine DetectionOnly
注意:管理员可以将其设置为开启,并在第一轮测试和性能影响分析后使用其他设置,如异常阈值,采样百分比等。
ModSecurity生成的日志使用以下方式转储到新文件:
SecDebugLog / var / log / novell-apache2 / modsec_log
调试日志数据的详细程度如下所示
SecDebugLogLevel 3
级别1-3的消息始终复制到Apache错误日志。因此,管理员可以使用级别0作为生产性能中的默认日志级别非常关键。话虽如此,最好使用的值是3,因为在详细模式下ModSecurity,分析与ModSecurity相关的警告和错误将更容易。
异常得分
具有异常评分模式的CRS是默认和推荐模式,因为它提供最准确的日志信息,并在设置阻止策略时提供最大的灵活性。在此模式下,每个匹配规则都会增加“异常分数”。 CRS中的每个规则都具有关联的严重性级别。这些是每个严重性级别的默认评分点。如果规则匹配,这些设置将用于增加异常分数。这些分数是累积的。因此,请求可以达到多个规则。
在异常模式下,还有一个阻止阈值级别。这是到达入站请求或出站响应被阻止时的级别。阻止评估规则应用破坏性操作,理想情况下返回错误403.通常的做法是启动具有提升的异常评分阈值(> 100)的新CRS安装,然后随着您对设置的信心增长而降低限制。
当前异常模式阻止入站请求的阈值级别设置为500,因为该想法不是在测试阶段阻止请求。如果请求达到500,那么请求或配置错误确实很糟糕。以下是当前设置:
SecAction "id:900100, phase:1, nolog, pass, t:none, setvar:tx.critical_anomaly_score=5, \ setvar:tx.error_anomaly_score=4, setvar:tx.warning_anomaly_score=3, \ setvar:tx.notice_anomaly_score=2" SecAction "id:900110, phase:1, nolog, pass, t:none, setvar:tx.inbound_anomaly_score_threshold=500, \ setvar:tx.outbound_anomaly_score_threshold=500"
注意:仅当SecRuleEngine设置设置为On时,具有破坏性操作的异常设置才有效
偏执狂水平
偏执等级(PL)设置允许管理员选择所需的规则检查级别。随着每个偏执级别的增加,CRS启用了额外的规则,为您提供更高级别的安全性。然而,较高的偏执水平也增加了由于误报(误报)阻止某些合法流量的可能性。偏执级别为1是默认值。在此级别中,启用了大多数核心规则。 PL1建议初学者,涵盖许多不同站点和应用程序的安装,以及具有标准安全要求的设置。在PL1,误报是非常罕见的。这是默认设置
SecAction "id:900000, phase:1, nolog, pass, t:none, setvar:tx.paranoia_level=1"
采样
将核心规则集添加到现有生产站点可能会导致误报,意外性能问题以及其他不良副作用。首先通过仅为有限数量的请求启用CRS来测试水是有益的,然后在解决问题后增加信心,提高发送到规则集的请求的比率。通过以下设置调整汇集到核心规则中的请求百分比。
SecAction "id:900400, phase:1, pass, nolog, setvar:tx.sampling_percentage=25"
因此,只有四分之一的总流量将通过CRS。
允许的HTTP方法
目前,几乎所有的HTTP方法都允许如下。
SecAction "id:900200, phase:1, nolog, pass, t:none, setvar:'tx.allowed_methods=GET HEAD POST OPTIONS PUT PATCH DELETE CHECKOUT COPY DELETE LOCK MERGE MKACTIVITY MKCOL MOVE PROPFIND PROPPATCH PUT UNLOCK'"
Protocol version
允许的HTTP版本是HTTP / 1.0 HTTP / 1.1 HTTP / 2 HTTP / 2.0
SecAction "id:900230, phase:1, nolog, pass, t:none, setvar:'tx.allowed_http_versions=HTTP/1.0 HTTP/1.1 HTTP/2 HTTP/2.0'"
禁止的文件扩展名
为了防止意外暴露开发/配置文件,以限制访问以下扩展。
SecAction "id:900240, phase:1, nolog, pass, t:none, setvar:'tx.restricted_extensions=.asa/ .asax/ .ascx/ .axd/ .backup/ .bak/ .bat/ .cdx/ .cer/ .cfg/ .cmd/ .com/ .config/ .conf/ .cs/ .csproj/ .csr/ .dat/ .db/ .dbf/ .dll/ .dos/ .htr/ .htw/ .ida/ .idc/ .idq/ .inc/ .ini/ .key/ .licx/ .lnk/ .log/ .mdb/ .old/ .pass/ .pdb/ .pol/ .printer/ .pwd/ .resources/ .resx/ .sql/ .sys/ .vb/ .vbs/ .vbproj/ .vsdisco/ .webinfo/ .xsd/ .xsx/'"
文件系统配置
需要ModSecurity来存储本地文件系统下的临时文件和一些持久数据。使用以下指令将当前设置设置为/ tmp。但是,/ tmp不太理想,建议指定私有的位置。
SecTmpDir /tmp/ SecDataDir /tmp/
如何分析ModSecurity日志文件
以下是ModSecurity使用CRS检测到任何威胁时生成的一些日志样本:
[himmagapp.novell.com/sid#562e6c2e9140][rid#7fae48014ef0][/bajesh/HIMDEEP/modsec/aaa.html][2] Warning. detected XSS using libinjection. [file "/etc/opt/novell/apache2/conf/crs/rules/REQUEST-941-APPLICATION-ATTACK-XSS.conf"] [line "64"] [id "941100"] [rev "2"] [msg "XSS Attack Detected via libinjection"] [data "Matched Data: via found within ARGS_NAMES:<SCRIPT>alert(\x5cxe2\x5cx80\x5cx9cCookie\x5cxe2\x5cx80\x5cx9d document.cookie)</SCRIPT>: <SCRIPT>alert(\x22Cookie\x22 document.cookie)</SCRIPT>"] [severity "CRITICAL"] [ver "OWASP_CRS/3.0.0"] [maturity "1"] [accuracy "9"] [tag "Default-Action2-ModSec"] [tag "application-multi"] [tag "language-multi"] [tag "platform-multi"] [tag "attack-xss"] [tag "OWASP_CRS/WEB_ATTACK/XSS"] [tag "WASCTC/WASC-8"] [tag "WASCTC/WASC-22"] [tag "OWASP_TOP_10/A3"] [tag "OWASP_AppSensor/IE1"] [tag "CAPEC-242"]
[himmagapp.novell.com/sid#562e6c2e9140][rid#7fae48014ef0][/bajesh/HIMDEEP/modsec/aaa.html][2] Warning. Matched phrase "document.cookie" at ARGS_NAMES:<SCRIPT>alert(\xe2\x80\x9cCookie\xe2\x80\x9d document.cookie)</SCRIPT>. [file "/etc/opt/novell/apache2/conf/crs/rules/REQUEST-941-APPLICATION-ATTACK-XSS.conf"] [line "303"] [id "941180"] [rev "2"] [msg "Node-Validator Blacklist Keywords"] [data "Matched Data: document.cookie found within ARGS_NAMES:<SCRIPT>alert(\x5cxe2\x5cx80\x5cx9cCookie\x5cxe2\x5cx80\x5cx9d document.cookie)</SCRIPT>: <script>alert(\x22cookie\x22 document.cookie)</script>"] [severity "CRITICAL"] [ver "OWASP_CRS/3.0.0"] [maturity "1"] [accuracy "8"] [tag "Default-Action2-ModSec"] [tag "application-multi"] [tag "language-multi"] [tag "platform-multi"] [tag "attack-xss"] [tag "OWASP_CRS/WEB_ATTACK/XSS"] [tag "WASCTC/WASC-8"] [tag "WASCTC/WASC-22"] [tag "OWASP_TOP_10/A3"] [tag "OWASP_AppSensor/IE1"] [tag "CAPEC-242"]
[himmagapp.novell.com/sid#562e6c2e9140][rid#7fae48014ef0][/bajesh/HIMDEEP/modsec/aaa.html][2] Warning. Matched phrase "bin/bash" at ARGS:exec. [file "/etc/opt/novell/apache2/conf/crs/rules/REQUEST-932-APPLICATION-ATTACK-RCE.conf"] [line "448"] [id "932160"] [rev "1"] [msg "Remote Command Execution: Unix Shell Code Found"] [data "Matched Data: bin/bash found within ARGS:exec: /bin/bash"] [severity "CRITICAL"] [ver "OWASP_CRS/3.0.0"] [maturity "1"] [accuracy "8"] [tag "Default-Action2-ModSec"] [tag "application-multi"] [tag "language-shell"] [tag "platform-unix"] [tag "attack-rce"] [tag "OWASP_CRS/WEB_ATTACK/COMMAND_INJECTION"] [tag "WASCTC/WASC-31"] [tag "OWASP_TOP_10/A1"] [tag "PCI/6.5.2"]
[himmagapp.novell.com/sid#562e6c2e9140][rid#7fae4401f9c0][/bajesh/HIMDEEP/modsec/aaa.html][1] Access denied with code 400 (phase 2). Operator GE matched 5 at TX:anomaly_score. [file "/etc/opt/novell/apache2/conf/crs/rules/REQUEST-949-BLOCKING-EVALUATION.conf"] [line "57"] [id "949110"] [msg "Inbound Anomaly Score Exceeded (Total Score: 5)"] [severity "CRITICAL"] [tag "Default-Action2-ModSec"] [tag "application-multi"] [tag "language-multi"] [tag "platform-multi"] [tag "attack-generic”]
[himmagapp.novell.com/sid#562e6c2e9140][rid#7fae48004980][/bajesh/HIMDEEP/modsec/testpost.php][2] Warning. detected SQLi using libinjection with fingerprint 's&sos' [file "/etc/opt/novell/apache2/conf/crs/rules/REQUEST-942-APPLICATION-ATTACK-SQLI.conf"] [line "68"] [id "942100"] [rev "1"] [msg "SQL Injection Attack Detected via libinjection"] [data "Matched Data: s&sos found within ARGS:username: 1' or '1' = '1"] [severity "CRITICAL"] [ver "OWASP_CRS/3.0.0"] [maturity "1"] [accuracy "8"] [tag "Default-Action2-ModSec"] [tag "application-multi"] [tag "language-multi"] [tag "platform-multi"] [tag "attack-sqli"] [tag "OWASP_CRS/WEB_ATTACK/SQL_INJECTION"] [tag "WASCTC/WASC-19"] [tag "OWASP_TOP_10/A1"] [tag "OWASP_AppSensor/CIE1"] [tag "PCI/6.5.2"]
如上所示,当ModSecurity使用CRS检测到任何威胁时,具有各种信息的消息将附加到SecDebugLog指令设置的日志文件中。
分析这些日志并搜索特定字符串可以让管理员了解服务器所经历的各种攻击和严重性级别。作为第一步,以下是可在调试日志文件中查找的字符串列表:
- URL编码滥用攻击尝试
- 空主机头
- 通过有效负载的HTTP标头注入攻击(检测到CR / LF)
- 远程命令执行:Windows命令注入
- 请求丢失主机标头
- XSS过滤器 - 类别4:Javascript URI向量
- 寻找基本的sql注入。 mysql,oracle等的常见攻击字符串。
- 策略不允许请求内容类型
- PHP注入攻击:找到高风险的PHP函数名称
- 远程命令执行:Windows命令注入
- 策略不允许使用方法
- 无效的HTTP请求行
- 通过libinjection检测到SQL注入攻击
- 策略不允许HTTP协议版本
- 远程命令执行:Unix命令注入
- NoScript XSS InjectionChecker:属性注入
- IE XSS过滤器 - 检测到攻击。
- 带有正文内容的GET或HEAD请求。
- 远程命令执行:直接Unix命令执行
- PHP注入攻击:找到变量
- PHP注入攻击:发现高风险的PHP函数调用
- 节点验证器黑名单关键字
- 请求中的字符无效(空字符)
- 远程命令执行:找到Unix Shell代码
- 可能的远程文件包含(RFI)攻击:常见的RFI易受攻击的参数名称
- 路径遍历攻击(/../)
- URL文件扩展名受策略限制
- 操作系统文件访问尝试
- XSS过滤器 - 类别1:脚本标记向量
- 通过libinjection检测到XSS攻击
- NoScript XSS InjectionChecker:HTML注入
- 路径遍历攻击(/../)
- 可能的远程文件包含(RFI)攻击:使用带有尾随问题的URL有效负载...
- 找到与安全扫描器关联的请求文件名/参数
性能影响
启用ModSecurity肯定会对Access Gateway的以下区域产生影响:
- CPU使用率
- 内存使用情况
- 响应时间
管理员可以使用上面提到的可用指令和设置(采样,异常阈值scor,e等),并评估ModSecurity对Access Gateway性能的影响。主要影响是内存使用情况,因此建议增加RAM的大小。由于CRS有大约200条规则,如果可用内存不足,Access Gateway可以成功处理的同时连接数将减少。对CPU的影响介于(1% - 5%)之间。
下一步是什么
- 绩效基准
- 启用对个别攻击的检测。对于例如XSS,SQLi,Brute-Force等
- Geo-IP黑名单,HTTP指纹识别,
- 处理误报。
- 还有很多...
References
- ModSecurity 2.5 by Magnus Mischel
- ModSecurity Handbook by Feistyduck.com
- https://coreruleset.org/
- https://github.com/SpiderLabs/ModSecurity/wiki
- https://www.netnea.com
本文:http://pub.intelligentx.net/power-access-gateway-modsecurity-and-core-rule-set
讨论:请加入知识星球或者小红圈【首席架构师圈】
- 267 次浏览