2

mod_security 2.6.3を使用していますが、ルールの重大度レベルに基づいてシェルスクリプトを実行できるようにしたいと考えています。コアルールセット(CRS)を使用しています。これは、攻撃が検出されたときに重大度レベルを2(「クリティカル」の場合)に設定します。

重大度が十分に高い場合はいつでもスクリプトを実行したいと思います。

SecDefaultAction次のような設定を使用してみました。

SecDefaultAction "phase:2,log,deny,status:403,exec:/path/to/my/script"

ただし、「exec」アクションは「無停止」アクションであるため、クリティカルルールまたは非クリティカルルールがトリガーされているかどうかに関係なく、常に実行されます。

それぞれのクリティカルSecRuleを調べて、その横に「exec」を追加することはできますが、それは面倒です(そして反復的で醜いです)。

私は次のようなことができると思いました:

SecRule ENV:SEVERITY "@lt 4" "exec:/path/to/my/script"

しかし、どういうわけか、それは決して実行されません。おそらく、重要なルールに、ルールの処理を停止するブロックまたは拒否ステートメントがあるためです(混乱を招くと見なされているため)。

また、次のようなCRS異常スコア機能を使用してみました。

SecRule TX:ANOMALY_SCORE "@ge 4" "exec:/path/to/my/script"

しかし、それでも処理されません。私がこれをどのように行うことができるかについてのアイデアはありますか?

4

1 に答える 1

5

HIGHEST_SEVERITY変数を使用して、次のようにテストできます。

SecRule HIGHEST_SEVERITY "@le 5" "nolog,pass,exec:/path/to/your/script"

nolog,pass重大度レベルを変更したルールからの元のログメッセージを保持する追加のパラメーターに注意してください。

また、この条件を.confファイルの早い段階(たとえば、SecDefaultAction行の直後)に配置して、すべてのコンテキストに確実に含まれるようにすることをお勧めします。

これを行う別の方法は、SecDefaultActionでカスタムHTTP応答ステータスコードを使用し(たとえば、418 "I'm a teapot")、ロギングフェーズでそれに基づいて条件をトリガーすることです(デフォルトのアクションが実行された後)処理済み):

# On error, log then deny request with "418 I'm a teapot":
SecDefaultAction "phase:2,log,deny,status:418"

# On HTTP response status code 418, execute your script:
SecRule RESPONSE_STATUS "^418$" "phase:5,nolog,pass,exec:/path/to/your/script"
于 2012-02-20T20:41:28.433 に答える