web-dev-qa-db-ja.com

ModSecurityで特定のサイトのPOSTペイロードをログに記録するためにどのルールを使用できますか?

特定のWebサイトのPOSTペイロードを検査する必要があります(サーバーはかなりビジーで、サーバー全体のPOSTロギングをオンにしません)。

サーバーはLiteSpeed5.0.7です。 SecRequestBodyAccessは「オン」に設定されています。

最初に一連のルールを試してみました。最初のルールはフェーズ1で、目的のホストのリクエストのみに一致しますが、POSTペイロードはフェーズ2であり、2つの異なるフェーズでチェーンを作成することはできないと思います。

それから私はこれを使おうとしました:

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

ただし、modsec_audit.logには何も記録されていません。

私は何か間違ったことをしていますか、それともModSecとのLiteSpeedの互換性に関連していますか?

最後に、このルールを使用して、すべてのリクエストに対してPOST:SecRule REQUEST_METHOD "POST" "id:22222224、phase:2、ctl:auditEngine = On、log、pass"を記録しようとしました。

リクエストはログに記録されますが、リクエストの本文はログに記録されません(-C-- modsec監査でグループsiが欠落しています)。

2
Andy B

この質問と同様: mod_securityにすべてをログに記録させる方法POSTデータ?

2つの異なるフェーズで2つのルールをチェーンすることはできませんが、フェーズ2はすべてのフェーズ1情報にアクセスできるため、この方法でこれを行う場合は、これをフェーズ2に移動してください。

あなたが与えたこのルール:

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

ちょっと無意味です。これにより、POSTリクエストが受信されたが、POST本文がない)が(メインログに)記録されます。

また、 SecAuditEngine 値が次のように設定されているかどうかに応じて、AuditEngineにログを記録します。

  1. SecAuditEngineがOnに設定されている場合、すべてが監査ログに記録され、上記のルールは必要ありません。これによりログファイルがすぐにいっぱいになるため、お勧めしません。
  2. SecAuditEngineをRelevantOnlyに設定している場合は、ここにもログが記録されます。
  3. SecAuditEngineがOffに設定されている場合、監査ログに記録されることはありません。

通常、SecAuditEngineをRelevantOnlyに設定するのが最善です(これはあなたがすでに持っているものだと思います)が、設定されていない場合、本文はAuditLogに記録されない可能性があります

おそらく、それを行うためのより良い方法は、 ctl アクションを使用して指定した他のルールを使用することです。

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

これにより、AuditLogがOffに設定されている場合でも、ポストリクエストに対してAuditEngineが強制的にオンになります。これにより、このルールを実行したこともログに記録されますが、実際には必要ではないか、役に立たないため、「log」を「nolog」に変更します。リクエストは引き続きログに記録されますが(auditEngineがyesに設定されているため)、その変更を行うこのルールはログに記録されません。ところで、ctlを使用すると、これはこのリクエストにのみ影響するため、AuditEngineは次のリクエストのためにリセットされます。

あなたが言うように、これはあなたがCの部分を持っていないことを除いてうまくいくようです。これは SecAuditLogParts で設定されます。デフォルトではこれには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
Barry Pollard

次のことを確認してください。

  1. 持ってる SecRequestBodyAccess On

  2. 「log」の代わりに「auditlog」を使用してみてください

  3. カスタム定義のSecAuditLogPartsがある場合は、リクエスト本文が含まれていることを確認してください

1
gryzli