Preciso inspecionar a carga útil do POST para um site específico (o servidor está bastante ocupado e eu não ativaria o log do POST para todo o servidor).
O servidor é LiteSpeed 5.0.7. SecRequestBodyAccess está definido como "Ativado".
Primeiro tentei com uma cadeia de regras: a primeira na fase:1 para corresponder apenas às solicitações do host desejado, mas a carga útil posterior está na fase:2 e não acho que possa fazer uma cadeia em 2 fases diferentes.
Então tentei usar isso:
<VirtualHost xxxxx>
SecRule REQUEST_METHOD "POST" "phase:2,log,id:22222223
</VirtualHost>
Mas não está gravando nada em modsec_audit.log
.
Estou fazendo algo errado ou está relacionado à compatibilidade do LiteSpeed com ModSec?
No final, também tentei esta regra para registrar POST para todas as solicitações:
SecRule REQUEST_METHOD "POST" "id:22222224,phase:2,ctl:auditEngine=On,log,pass".
Ele registra a solicitação, mas não o corpo da solicitação ( -C-- group si missing in modsec audit
).
Responder1
Semelhante a esta pergunta:Como fazer com que o mod_security registre todos os dados do POST?
Você está certo, não pode encadear duas regras em duas fases diferentes; no entanto, a fase 2 tem acesso a todas as informações da fase 1, portanto, basta mover para a fase 2 se quiser fazer isso dessa maneira.
Esta regra que você deu:
SecRule REQUEST_METHOD "POST" "phase:2,log,id:22222223
É meio inútil. Isso registrará (no log principal) que uma solicitação POST foi recebida, mas sem o corpo do POST.
Ele também registrará no AuditEngine dependendo do seuSecAuditEngineo valor está definido como:
- Se você tiver o SecAuditEngine definido como Ativado, tudo será registrado no log de auditoria e a regra acima não será necessária. Isso preenche os arquivos de log rapidamente, por isso não é recomendado.
- Se você tiver o SecAuditEngine definido como RelevantOnly, ele também será registrado aqui.
- Se SecAuditEngine estiver definido como Desativado, ele nunca será registrado no log de auditoria.
Geralmente é melhor ter o SecAuditEngine definido como RelevantOnly (o que eu suspeito ser o que você já tem), mas se não estiver definido assim, o corpo pode não estar registrado no AuditLog
Talvez a melhor maneira de fazer isso seja com aquela outra regra que você deu usandoctlAção:
SecRule REQUEST_METHOD "POST" "id:22222224,phase:2,ctl:auditEngine=On,log,pass"
Isso força o AuditEngine a estar ativado para solicitações de postagem - mesmo se o AuditLog estiver definido como Desativado. Isso também registrará que você acionou esta regra para ativá-la, o que não é realmente necessário ou útil, então eu mudaria o "log" para "nolog". A solicitação ainda será registrada (já que auditEngine foi definido como sim), mas esta regra que faz essa alteração não. A propósito, quando você usa ctl, isso afeta apenas esta solicitação, portanto o AuditEngine será redefinido para a próxima solicitação.
Como você afirma, isso parece funcionar, exceto que você não tem a parte C. Isto é definido comSecAuditLogParts. Por padrão, isso inclui partes C, então acho que isso significa que você deve ter alterado o padrão? Houve alguma razão para isso?
De qualquer forma, você pode definir isso para incluir partes C:
SecAuditLogParts ABCFHZ
SecRule REQUEST_METHOD "POST" "id:22222224,phase:2,ctl:auditEngine=On,nolog,pass"
Ou, se você quiser apenas partes C registradas quando esta regra for acionada, você pode fazer isso como parte da regra:
SecRule REQUEST_METHOD "POST" "id:22222224,phase:2,ctl:auditEngine=On,ctl:auditLogParts=ABCFHZ,nolog,pass"
A outra coisa a ter em conta é que as solicitações POST podem registrar dados confidenciais (senhas, números de cartão de crédito, números de segurança social... Etc). Registrar isso não é aconselhável e também pode violar a política da empresa e/ou quaisquer padrões que você esteja seguindo (por exemplo, conformidade com PCI). Portanto, é recomendável configurar regras de sanitização para mascarar esses dados. Veja aqui para mais informações:https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#sanitiseArg
Responder2
Certifique-se do seguinte:
Ter
SecRequestBodyAccess On
Tente usar “auditlog” em vez de “log”
Se você tiver SecAuditLogParts definido de forma personalizada, certifique-se de incluir o corpo da solicitação