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

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

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

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

まず、ルールのチェーンを試しました。最初のルールはフェーズ 1 で、目的のホストのリクエストのみに一致しますが、ポスト ペイロードはフェーズ 2 にあり、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 つの異なるフェーズで 2 つのルールを連鎖させることはできないというのは正しいのですが、フェーズ 2 はフェーズ 1 のすべての情報にアクセスできるため、この方法で実行したい場合は、これをフェーズ 2 に移動するだけです。

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

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

あまり意味がありません。これにより、POST 要求が受信されたが POST 本文がないことが (メイン ログに) 記録されます。

また、AuditEngineにログを記録します。セキュリティ監査エンジン値は次のように設定されます:

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

通常は、SecAuditEngine を RelevantOnly に設定するのが最適です (すでに設定されていると思われます)。ただし、そのように設定されていない場合は、本文が AuditLog に記録されない可能性があります。

おそらく、それを実行するより良い方法は、あなたが与えた他のルールを使用することです制御アクション:

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

これにより、AuditLog が Off に設定されている場合でも、POST リクエストに対して AuditEngine が強制的にオンになります。また、このルールを実行して有効にしたことを記録しますが、これは実際には必要でも有用でもありません。そのため、「log」を「nolog」に変更します。リクエストは引き続き記録されます (auditEngine が yes に設定されているため) が、その変更を行うこのルールは記録されません。ちなみに、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. 「log」の代わりに「auditlog」を使用してみてください

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

関連情報