为了保护我们的WHMCS安装(一个基于PHP的计费系统)免受某些更明显的SQL注入攻击,试图将我们易受攻击的可能性降到最小,和我们发现它(在这一点上我们部署IP ACL或新的mod_security规则适当,并修补程序时可用) 问题是,我已经从WHT中得到了一些规则,这些规则在纸上看起来不错,当我testing它们时,mod_security 似乎在做这件事 – 恶意客户端被分stream到403,但是POST数据似乎仍然在达到PHP脚本,因为数据库内容正在改变。 PHP正在运行suPHP; 从谷歌search我不清楚,如果这是一个可能的问题的原因 – 我无法想象这是一个不寻常的configuration。 在我看来,可能的原因是,尽pipemod_security被设置为拒绝,它仍然会生成中间响应主体(这可以通过Etypes下的日志logging来certificate),这当然包括提交我想要停止的数据首先提交! 但是,即使将SecResponseBodyAccess设置为Off,也不会停止正在提交的数据 – 说实话,我不会无理地期待在请求阶段触发的拒绝/拒绝规则,以防止尝试生成响应正文。 任何人都可以阐明这一点? 在这个版本的mod_security中是否有一个错误(似乎不太可能是我第一个注意到的),我select的规则是否有缺陷(可能),还是在我的configuration中最可能存在一个愚蠢的错误? 这是一个Debian Squeeze系统; 可能相关的包: ii apache2 2.2.16-6+squeeze11 Apache HTTP Server metapackage ii libapache2-mod-suphp 0.7.1-1 Apache2 module to run php scripts with the owner permissions ii libapache2-modsecurity 2.6.6-6~bpo60+1 Tighten web applications security for Apache /etc/apache2/mods-enabled/modsecurity.load LoadFile /usr/lib/libxml2.so.2 LoadModule security2_module /usr/lib/apache2/modules/mod_security2.so /etc/apache2/mods-enabled/modsecurity.conf […]
通常的看法是,置身于可信networking(如Exchange)内部的内部应用程序,只要它们暴露于Internet,就应该是反向代理服务器。 Microsoftbuild议使用UAG / TMG,因为它具有一些内置的安全function。 mod_security在apache反向代理场景中有类似的作用。 但是,我发现使用反向代理的安装非常多,但是这个额外的安全层没有被使用。 为什么在这种情况下甚至打扰了反向代理? 如果你不使用一些L7逻辑来减轻攻击,那么添加代理层与直接暴露应用程序的好处是什么?
我目前在Ubuntu Trusty上使用ModSecurity 2.7和Apache 2.4.7。 我想使用Apache的LogFormat和CustomLog指令,以便我可以包含一个字段,指示ModSecurity是否决定允许请求继续执行还是阻止请求。 我还想包含一个字段,指示允许的请求是否触发了任何仅限警告的ModSecurity规则。 我不关心这是否需要两个不同的领域,或只是一个,只要信息出现在每个Apache日志行上。 有文档build议我可以使用mod_log_config和%{…}M语法在Apache日志中包含ModSecurityvariables,但我不知道哪些variables会给我必要的信息。 我明确地试图维护SecAuditEngine RelevantOnly并且不要求每个请求的完整审计日志。 我也希望避免使用mod_unique_id或类似的做交叉日志关联的需要。 这可能吗。 怎么样?
我是ModSecurity的新手,在服务器上工作得很好,但我想控制它logging事物的方式。 例如,因为我正在解决我的网站,以便白名单或更正php编码问题,以便我可以有一个干净的modsec_audit.log当一切正常工作,我碰到以下内容。 每当我通过basic或者htdigestauthentication请求一个受密码保护的url时,ModSecurity将它logging在modsec_audit.log ,如下所示: htdigestauthentication: –838e7b1b-A– [17/Nov/2013:19:13:51 +0200] Uoj5T8CoAWQAABfMVE0AAAAA xxx.xxx.xxx.xxx XXXXX xxx.xxx.xxx.xxx XXXXX –838e7b1b-B– GET / HTTP/1.1 Host: XXX.XXX.com:XXXX User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:25.0) Gecko/20100101 Firefox/25.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip, deflate DNT: 1 Connection: keep-alive –838e7b1b-F– HTTP/1.1 401 Authorization Required WWW-Authenticate: Digest realm="Members Only", nonce="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", algorithm=MD5, qop="auth" Vary: Accept-Encoding Content-Encoding: gzip […]
我目前有一个CentOS系统成功地将相关的mod_security动作logging到审计日志文件中。 以下是我的configuration: <IfModule mod_security2.c> SecRuleEngine On SecAuditEngine RelevantOnly SecAuditLog /var/log/httpd/modsec_audit.log SecDebugLog /var/log/httpd/modsec_debug.log SecDebugLogLevel 0 SecRequestBodyAccess On SecDataDir /tmp SecTmpDir /tmp SecPcreMatchLimit 250000 SecPcreMatchLimitRecursion 250000 </IfModule> 这会logging所有由于SecAuditEngine RelevantOnly设置而导致mod_security拦截/阻止请求的SecAuditEngine RelevantOnly 。 但是,我希望它另外logging提交给服务器的所有POST数据(不pipe状态)。 我可以通过设置SecAuditEngine On来实现这一点,但是这会logging所有的GET和POST数据,这是过分的。 我基本上想省略所有的GET数据,除非请求被截获。 任何人都可以build议如何做到这一点?
我看了官方网站的文档,find起点有点难。 有没有一个免费的综合指南,很容易理解的人从来没有处理mod_security?
我有一个REST风格的Web服务,它接受一个POST请求给没有实体的资源,例如一个空的POST请求。 默认的modsecurityconfiguration要求所有的POST请求都有一个Content-Length: # Require Content-Length to be provided with every POST request SecFilterSelective REQUEST_METHOD "^POST$" chain SecFilterSelective HTTP_Content-Length "^$" modsecurity控制台将此报告为PROTOCOL_VIOLATION / EVASION。 不过,在阅读HTTP / 1.1 RFC时 ,我并不认为这是真的。 一个服务器被允许要求Content-Length(返回400或411),但是我没有看到任何说服务器必须(或推荐它应该)以这种方式行事的事情。 这可能因浏览器而异,但是,在没有实体主体的情况下发出POST请求的Flash客户端不会发送请求标头。 当你“curl-XPOST …”的时候也不会curl。 由于这些原因,并且因为我认为modsecurity规则是对HTTP规范的误解,所以我正在考虑在我们的configuration中解决对POST请求的Content-Length头的需求。 有谁知道是否有一个具体的利用这个规则是为了解决? 众多谷歌search,我只发现这是股票modsecurityconfiguration的一部分的参考。
如何为特定的目录禁用modsecurity。 我在phpMyAdmin中遇到由基于规则的modsecurity跳闸引起的错误。 我有以下文件设置: # /etc/httpd/modsecurity.d/modsecurity_crs_15_customrules.conf <LocationMatch "^/phpMA/"> SecRuleEngine Off </LocationMatch> # /etc/httpd/modsecurity.d/modsecurity_crs_60.custom.conf <LocationMatch '^/phpMA/*'> SecRuleRemoveById 950004 SecRuleRemoveById 950005 SecRuleRemoveById 950006 SecRuleRemoveById 960010 SecRuleRemoveById 960012 </LocationMatch> 从我能find的第一个文件应该禁用它,但它仍然旅行,所以我试图添加它跳到60文件的规则ID,但它仍然抱怨。 我在CentOS 5.3上运行以下软件包: mod_security的-2.5.0-jason.2 的httpd-2.2.8-jason.3 MOD-PHP5,Apache2的-的Zend-CE-5.2.10-65
就在每个请求上,我得到以下错误: Rule execution error – PCRE limits exceeded (-8): (null). 经过一堆Googlesearch之后,唯一的解决scheme似乎是 a)在你的httpd.conf中添加以下内容 SecPcreMatchLimit 150000 SecPcreMatchLimitRecursion 150000 b)将以下内容添加到您的php.ini中 pcre.backtrack_limit = 10000000 pcre.recursion_limit = 10000000 c)使用用-disable-pcre-match-limit选项编译的版本。 我正在运行以下内容: Apache / 2.5.12 ModSecurity( http://www.modsecurity.org/ )。 Apache / 2.2.16(Debian)PHP / 5.3.3-7 + squeeze8与Suhosin-Patch mod_ssl / 2.2.16 OpenSSL / 0.9.8 对于ModSec我的规则,我使用OWASP ModSecurity核心规则集版本(CRS)2.2.3版本,这是本文的最新版本。 我的httpd.conf基本上包含: <IfModule security2_module> SecUploadDir /var/asl/data/suspicious SecDataDir /var/asl/data/msa SecTmpDir /tmp […]
在ModSecurity中, PCRE limits exceeded错误。 我知道我可以通过设置规则来解决这个问题,例如: SecPcreMatchLimit 150000 SecPcreMatchLimitRecursion 150000 但是,这些规则究竟在做什么呢? PCRE限制recursion设置为150,000是什么意思? 我可以通过设置这么高的安全漏洞? recursion和limit是什么意思? 我知道这里有文档,但是文档实际上并没有告诉我发生了什么,它只是告诉我如何处理这些指令。