我可以使用 ModSecurity 中的什么规则来记录特定站点的 POST 有效负载?

我可以使用 ModSecurity 中的什么规则来记录特定站点的 POST 有效负载?

我需要检查特定网站的 POST 有效负载(服务器相当繁忙,我不会为整个服务器打开 POST 日志记录)。

服务器是 LiteSpeed 5.0.7。SecRequestBodyAccess 设置为“开启”。

首先,我尝试使用一系列规则:阶段 1 中的第一个仅匹配我所需主机的请求,但帖子有效负载处于阶段 2,而且我认为我无法在两个不同阶段创建一个链。

然后我尝试使用这个:

<VirtualHost xxxxx>
    SecRule REQUEST_METHOD "POST" "phase:2,log,id:22222223
</VirtualHost>

但它没有记录任何内容modsec_audit.log

是我做错了什么还是这与 LiteSpeed 与 ModSec 的兼容性有关?

最后我也尝试了这个规则来记录所有请求的 POST:

SecRule REQUEST_METHOD "POST" "id:22222224,phase:2,ctl:auditEngine=On,log,pass". 

它记录请求但不记录请求主体(-C-- group si missing in modsec audit)。

答案1

类似这个问题:如何让 mod_security 记录所有 POST 数据?

你是对的,你不能在两个不同的阶段链接两个规则,但是第 2 阶段可以访问第 1 阶段的所有信息,所以如果您想以这种方式执行此操作,只需将其移动到第 2 阶段。

您给出的这条规则:

SecRule REQUEST_METHOD "POST" "phase:2,log,id:22222223

有点没意义。这将记录(在主日志中)已收到 POST 请求,但没有 POST 正文。

它还将根据您的安全审计引擎值设置为:

  1. 如果您将 SecAuditEngine 设置为 On,则所有内容都会记录到审计日志中,并且不需要上述规则。这会很快填满日志文件,因此不建议这样做。
  2. 如果您将 SecAuditEngine 设置为 RelevantOnly,那么它也会记录在这里。
  3. 如果 SecAuditEngine 设置为关闭,那么它将永远不会被记录到审计日志中。

通常最好将 SecAuditEngine 设置为 RelevantOnly(我怀疑你已经这样做了),但如果没有这样设置,则主体可能不会记录到 AuditLog 中

也许更好的方法是使用你给出的另一条规则控制行动:

SecRule REQUEST_METHOD "POST" "id:22222224,phase:2,ctl:auditEngine=On,log,pass"

这会强制 AuditEngine 针对发布请求打开 - 即使 AuditLog 设置为关闭。这还会记录您已触发此规则以将其打开,这实际上不是必需或有用的,因此我将“log”更改为“nolog”。请求仍将记录(因为 auditEngine 已设置为是),但进行该更改的规则不会记录。顺便说一句,当您使用 ctl 时,这只会影响此请求,因此 AuditEngine 将重置以进行下一个请求。

正如你所说,这似乎有效,只是你没有 C 部分。这是用安全审计日志部分默认情况下,这包括 C 部分,所以猜想这意味着你一定更改了默认值?这样做有什么原因吗?

无论如何,您可以将其设置为包含 C 部分:

SecAuditLogParts ABCFHZ
SecRule REQUEST_METHOD "POST" "id:22222224,phase:2,ctl:auditEngine=On,nolog,pass"

或者,如果您只希望在触发此规则时记录 C 部分,则可以将其作为规则的一部分执行:

SecRule REQUEST_METHOD "POST" "id:22222224,phase:2,ctl:auditEngine=On,ctl:auditLogParts=ABCFHZ,nolog,pass"

另一件需要注意的事情是,POST 请求可以记录敏感数据(密码、信用卡号、社会保险号……等等)。不建议记录这些数据,而且可能违反公司政策和/或您遵循的任何标准(例如 PCI 合规性)。因此,建议设置清理规则来屏蔽这些数据。有关更多信息,请参见此处:https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#sanitiseArg

答案2

确保以下事项:

  1. SecRequestBodyAccess On

  2. 尝试使用“auditlog”而不是“log”

  3. 如果您有自定义的 SecAuditLogParts,请确保它包含请求主体

相关内容