ModSecurityの偽陽性に対処したときのメモ。

うちのサーバではセキュリティ対策としてModSecurityを入れていて、サーバの脅威となる不正アクセスを弾いています。

かなり効果的に働いてくれているのですが、ログを見てみると、(おそらく)正当なアクセスにもかかわらずアクセスを拒否してしまう、いわゆる「偽陽性」が生じる事例が一定数あるのですね。

偽陽性が発生するルールのIDで目立つのは、うちでは以下の4つ。

OWASP ModSecurity 2.9 Core Rule Set v3.3.4 の:
  • ID : 941120
  • ID : 941310
  • ID : 942100
  • ID : 942230

これらのルールを無効にしてしまうのが、対処としては手っ取り早い。

無効にするには、
  SecRuleRemoveById 941120 941310 942100 942230
とか設定してやる。

手っ取り早いのだけれど、ログを確認すると、これらのルールが正しく不正検知している場合も多くあるので、ルール自体を完全に止めてしまうのには少し抵抗がある。

そこで更に詳しく解析してみると、どうやら

…という、2パターンがあるっぽいことを発見。

A. は、誤検知に引っかかるCookieを特定できたので、検査対象からそのCookieを外します。設定ファイルに以下を記述して Apache を再起動。

もしくは、ルールを直接編集。

  • OWASPのルールを直接編集すると、アップデートの際に変更が失われてしまいます。
  • ModSecurityの設定ファイルは、OSに依るけれど、/etc/modsecurity とか /etc/apache2/conf.d/modsec とか /etc/httpd/modsec とかにあります。「直接編集せずにインクルードファイルを使え」とか注意書きがあれば従う。インクルードファイルは、読み込む順番が決まっていたりするので注意。


そして B. への対処を検討した結果、誤検知が生じるルールを、検索窓が設置されているファイルでのみオフにするのが良かろう…という結論に。

設定したら、Apacheを再起動。

しばらく稼働させてみた結果、偽陽性によるアクセス拒否は皆無になりました。とりあえず大丈夫なようです。

ウェブサイトの使い勝手とセキュリティとのバランスを取りつつの設定作業、かなり難儀した。

カテゴリ: