Articles of mod security

反向代理和客户端IP后面的mod_security

client -> haproxy -> mod_security boxes -> backends 问题:在“RPAFproxy_ips”中,mod_security框在haproxy的ip中使用mod_rpaf。 Apache日志logging显示客户端真实IP,但mod_security仍然报告haproxys IP,如下所示。 客户端ip在mod_sec框的apache日志中find x.93.129.90 – – [14/Oct/2015:08:35:56 +0200] "GET /MYTEST HTTP/1.1" 301 524 "-" "curl/7.15.5 (x86_64-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5" Mod_security报告代理ip(客户端x.21.107.165) ==> /var/log/apache2/site.se_error.log <== [Wed Oct 14 08:36:12.584500 2015] [:error] [pid 10264:tid 139895758558976] [client x.21.107.165] ModSecurity: Access denied with code 403 (phase 2). Pattern match "\\\\balert\\\\b[^a-zA-Z0-9_]{0,}?\\\\(" […]

security2_module for apache with owsap modsecurity crs基本规则是导致“禁止您没有权限访问/在此服务器上”

我使用owasp mod安全基本规则将security2模块安装到了我的apache服务器上,在httpd.conf中添加了以下几行代码: <IfModule security2_module> Include crs/owasp-modsecurity-crs/modsecurity_crs_10_setup.conf Include crs/owasp-modsecurity-crs/base_rules/*.conf </IfModule> 当我想通过http访问我的服务器时,我收到消息:“禁止您没有权限访问/在此服务器上”。 从modsec_audit.log中可以看出,mod安全性正在考虑将Cookie Token作为mysql注入攻击。 我如何设置一个规则来为这个TOKEN COOKIE例外? 这是modsec_audit.log –9e6b1648-A– [10/Jan/2016:11:22:07 +0200] VpIiv7zUnOQAAH8eXJcAAAAC 109.100.151.192 36756 188.212.156.228 80 –9e6b1648-B– GET /favicon.ico HTTP/1.1 Connection: keep-alive User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/45.0.2454.85 Chrome/45.0.2454.85 Safari/537.36 Accept: */* Accept-Encoding: gzip, deflate, sdch Accept-Language: en-US,en;q=0.8,de;q=0.6 Cookie: auto_truck=665mbggj7l46n6cc51625k0a45; TOKEN=9b9a0c249ace9029708ad3809063a288957b7759s%3A40%3A%22616d62d429eb4661476349e50ef9481f578a9776%22%3B –9e6b1648-F– HTTP/1.1 […]

mod_security:什么是行动审计日志?

我正在摆弄mod_security来为特定的URIloggingPOST请求的有效载荷。 正如在这个回应https://serverfault.com/a/729079/292993中提到的一个类似的问题mod_security的AuditEngine的工作原理是这样的: 它也将login到AuditEngine,具体取决于您的SecAuditEngine值设置为: 如果将SecAuditEngine设置为On,则将所有内容都logging到审计日志中,而不需要上述规则。 这会快速填充日志文件,因此不推荐使用。 如果您将SecAuditEngine设置为RelevantOnly,那么只会将日志logging到审计引擎以获取某些返回码(由您的SecAuditLogRelevantStatus定义)。 这通常只对错误(5xx)或访问被拒绝(4xx – 尽pipe通常没有404)来完成。 由于您不拒绝访问(大概不会希望!),这不会被logging到审计日志。 如果SecAuditEngine设置为Off,则永远不会将其logging到审计日志中。 通常最好将SecAuditEngine设置为RelevantOnly(我怀疑这是你已经拥有的)。 正确的方法是使用ctl action给出的其他规则: SecRule REQUEST_METHOD "POST" "id:22222224,phase:2,ctl:auditEngine=On,log,pass" 这会强制AuditEngine处于发送请求的状态 – 即使请求成功,通常不会被logging。 记住这一点,如果我必须使用ctl来根据请求级别打开AuditEngine以将某些内容logging到审计日志,那么操作auditlog有什么意义?

mod_security:如何为特定的URIloggingPOST请求?

我试图设置mod_security来logging特定URI的POST请求负载,因为看起来客户网页被用作垃圾邮件中继,并且这些请求会破坏服务器端caching。 我是从这个博客文章开始的,但看起来很老旧。 它不适用于我们的环境,这是Apache 2.4和mod_security 2.8。 所以我通过这个serverfault的答案增强了这个configuration。 在相关的vhostconfiguration里,mod_security是这样configuration的: <IfModule security2_module> SecRuleEngine On SecAuditEngine RelevantOnly SecAuditLog logs/audit.log SecRequestBodyAccess On SecAuditLogParts ABCFHJKZ SecDefaultAction "phase:2,nolog,noauditlog,pass" SecRule REQUEST_METHOD "^POST$" "id:'1234',phase:2,chain,allow,ctl:auditEngine=On" SecRule REQUEST_URI "^\/en\/us\/$" </IfModule> 结果是每个POST请求都被logging到审计日志中。 但是只有到主页https://<SITE>/en/us/的POST请求应该被logging。 在我的理解,这应该通过链接到第二个SecRule匹配请求URI对给定的正则expression式。 我也试过不同版本的正则expression式,但没有成功。

Modsecurity检查不带查询参数的REQUEST_URI

目前,我正在使用Modsecurity XSS预防,但是我很难理解我可以如何限制在REQUEST_URIvariables中检查的内容。 我的例子: # # -=[ XSS Filters – Category 3 ]=- # XSS vectors making use of Javascripts URIs, eg, <p style="background:url(javascript:alert(1))"> # SecRule REQUEST_URI|ARGS "(?i)((?:=|U\s*R\s*L\s*\()\s*[^>]*\s*S\s*C\s*R\s*I\s*P\s*T\s*:|&colon;|[\s\S]allowscriptaccess[\s\S]|[\s\S]src[\s\S]|[\s\S]data:text\/html[\s\S]|[\s\S]xlink:href[\s\S]|[\s\S]base64[\s\S]|[\s\S]xmlns[\s\S]|[\s\S]xhtml[\s\S]|[\s\S]style[\s\S]|<style[^>]*>[\s\S]*?|[\s\S]@import[\s\S]|<applet[^>]*>[\s\S]*?|<meta[^>]*>[\s\S]*?|<object[^>]*>[\s\S]*?)" "id:'973338',phase:2,t:none,rev:'1',ver:'OWASP_CRS/2.2.9',maturity:'1',accuracy:'8',t:urlDecodeUni,t:htmlEntityDecode,t:jsDecode,t:cssDecode,log,capture,tag:'OWASP_CRS/WEB_ATTACK/XSS',tag:'WASCTC/WASC-8',tag:'WASCTC/WASC-22',tag:'OWASP_TOP_10/A2',tag:'OWASP_AppSensor/IE1',tag:'PCI/6.5.1',msg:'XSS Filter – Category 3: Javascript URI Vector',logdata:'Matched Data: %{TX.0} found within %{MATCHED_VAR_NAME}: %{MATCHED_VAR}',severity:'2',setvar:'tx.msg=%{rule.msg}',setvar:tx.xss_score=+%{tx.critical_anomaly_score},setvar:tx.anomaly_score=+%{tx.critical_anomaly_score},setvar:tx.%{rule.id}-OWASP_CRS/WEB_ATTACK/XSS-%{matched_var_name}=%{tx.0}" 在上面的例子中,正则expression式检查某些标签,如果find,停止请求,logging尝试,然后抛出一个403禁止。 这很好,但我有一个特定的URL,看起来像这样: /chart.php?this=haha&style=testStyle Where &style=使ModSecurity引发错误并停止请求。 同样,他们有一个规则,只是检查style= , 所以我的问题是,我怎么能改变REQUEST_URI的方式(在ModSecurity规则内),以便规则只检查之前的一切? (请求参数)。

使用ModSecurity和lua脚本阻止请求

我有networkingstream量通过ModSecuritystream动。 在ModSecurityconfiguration中,我正在调用一个Lua脚本,对请求string的参数进行一些简单的分析。 具体来说,它是检查跨站脚本的证据,如果存在一些证据,将阻止传入的stream量。 ModSecurity规则引擎configuration如下: SecRuleEngine On SecRuleScript "/path/to/lua/script/detectXSS.lua" "block" lua脚本的一个说明性例子如下: function main() — Retrieve script parameters local d = m.getvars("ARGS", { "lowercase", "htmlEntityDecode" } ); — Loop through the parameters for i = 1, #d do — Examine parameter value. if (string.find(d[i].value, "<script")) then return ("Suspected XSS in variable " .. d[i].name .. "."); end […]

Modsecurityredirect规则:将威胁用户发送回引用者

考虑下面的SecRule,它从一个被执行的lua脚本获取一个feed: SecRule &TX:SQLI "@eq 1" "id:'129793',phase:2,t:none,redirect:http://www.example.com/failed.html,msg:'SQLi Injection Payload Found'" 如果在请求参数中findtx.sqli则会填充tx.sqlivariables,并将用户redirect到特定网页: http://www.example.com/failed.html : http://www.example.com/failed.html 。 这个过程运作良好。 不过,我想将用户redirect到referrer地址,或者直接刷新页面或将其发送回上一页。 例如,这可能涉及使用referrer值填充redirect地址。 ModSecurity可以执行这个吗?

2个CentOS 7服务器上的Mod_Security。 不同的日志格式

我在2台CentOS 7服务器上安装了mod_security 。 Bot得到这个configuration: SecAuditEngine RelevantOnly SecAuditLogRelevantStatus "^(?:5|4(?!04))" SecAuditLogParts ABIFHZ SecAuditLogType Concurrent SecAuditLog /var/log/modsec_audit.log SecAuditLogStorageDir /var/log/modsecurity/audit SecAuditLogDirMode "default" SecAuditLogFileMode "default" 但在server a的日志看起来像这样: example.com 134.249.53.xx – – [10/Aug/2016:22:07:26 +0200] "POST /wp-login.php HTTP/1.0" 200 1598 "-" "-" V6uJflxhoyWp4zhOzImhlAAAAQ4 "-" /20160810/20160810-2207/20160810-220726-V6uJflxhoyWp4zhOzImhlAAAAQ4 0 1546 md5:ea867817aed5ba17597f6e71b96920b9 在server b ,日志看起来像这样: [modsecurity] [client 37.115.191.xx] [domain example.org] [403] [/apache/20160810/20160810-1923/20160810-192353-V6tjKYO6c3SIxYXHutIdrwAAAFY] [file "/etc/httpd/conf/modsecurity.d/rules/comodo/09_Bruteforce_Bruteforce.conf"] [line "58"] […]

ModSecurity 2.9和Apache 2.4.3上的IP范围白名单

我尝试在Mod Security的白名单上添加Google Ip范围 我使用Cpanel + Apache 2.4 + ModSecurity 2.9.0 + OWASP规则 在几个职位我select这个conf SecRule REMOTE_ADDR "@ipMatch XX.XX.XX.XX,66.249.64.0/19" "phase:1,nolog,allow,ctl:ruleEngine=Off" 但失败只有在添加一个id:规则的情况下才有效 SecRule REMOTE_ADDR "@ipMatch XX.XX.XX.XX,66.249.64.0/19" "phase:1,id:'981033',t:none,nolog,pass,ctl:ruleEngine=Off"

在生产中testing新的ModSecurity规则 – 只有一些规则适用于DetectionOnly

我正在修改现有的ModSecurity规则集,我想知道如何处理向生产系统添加新(主要)未经testing的规则的过程。 目前,我们确实有一小部分活跃的规则显然是不够的。 我想从OWASP规则集中添加新的规则,而不会停用已经激活的规则,但是由于误报,不会冒失去太多stream量的风险。 这是什么一般程序? 如何更新生产系统上的ModSecurity规则? 我认为为新规定build立足够的testing场景是不可能的(或非常耗时),我希望将这些规则暴露给“实时stream量”以获得可靠的印象。 我基本上需要的是将新规则设置为“DetectionOnly”,而其他人仍然活跃,并应导致实际阻止检测到的stream量。 这可以用ModSecurity完成吗? (另外请注意,我们在“TraditionalMode”中使用ModSecurity,AnomalyScoringMode中的一个有限的可能性可能是将新规则的AnonmalyScore设置为0) 谢谢!