web-dev-qa-db-ja.com

これら2つの正規表現がModSecurityで期待どおりに機能しないのはなぜですか?

PROBLEMRULE #1; SecRule REQUEST_URI "^/(|(.*)/)(lpt1|lpt2|lpt3|lpt4)(/|\.|\?|$)" "t:none,t:htmlEntityDecode,t:lowercase,t:removeWhitespace,block,msg:'X',id:'1000'"
PROBLEMRULE #2; SecRule REQUEST_URI "^(.*)//(.*)$" "t:none,t:removeWhitespace,block,msg:'X',id:'1001'"

// I also tried those, but no success.
SecRule REQUEST_URI "//"
SecRule REQUEST_URI "^/(.*)/(lpt1|lp...

これら2つは期待どおりに機能しません。他のルールは正常に機能しています。次のようなリクエストをブロックしたい:

// (too many slash, NOT blocked)
/////////// (too many slash, NOT blocked)
/lpt1 (Apache returns 403, NOT from modsec. Error log: "Forbidden: (web-dir)/lpt1 doesn't point to a file or directory")
/lpt1/blah (Apache returns 403, NOT from modsec. "doesn't point to a file or directory")
/somedir/lpt4.txt (Same as above)
/somedir/lpt4 (Same as above)
/somedir/////// (* SUCCESSFULLY blocked)

これらの正規表現はO.K.であると思うので、なぜmod_security2がこれらのリクエストをブロックしないのかを本当に知りたいです。 Apacheではなくmod_sec2を使用してブロックしたい。

環境:WindowsテストWebサーバー| mod_sec2 | Apache 2.4

To moderators:
Sorry for creating another question,
because my email has been hacked and I lost my password.
Please delete http://security.stackexchange.com/questions/47000/why-these-2-regexp-wont-work-as-expected
I use THIS ONE to continue question.

質問の前に:

REQUEST_URI変数には、ドメインまたはプロトコルは含まれません。そのURLの最後にさらに追加するつもりですか?

はい、知っています。 mod_sec2が "GET /////////"(上記の例に示されている)を拒否するようにします。ブラウザにアクセスした場合hxxp:// something.mysite.com////////// REQUEST_URIが "///////"になるため、id:1001を適用する必要があります。私は正しいですか?

Mod Securityによって正常にブロックされたリクエストのルールIDはログに記録されていますか?

Mod_securityルールが正常に適用された場合、Apacheのエラーログにmod_secエラーが表示されます(もちろん、ヒットID番号を含みます)。

"/ somedir/lpt4"およびその他のものは、mod_securityによるのではなく、Apacheによるブロックです。 (mod_securityからのログはありません)

LTP1?

http://www.hanselman.com/blog/NamingAFileAReservedNameInTheWindowsVistaOperatingSystem.aspx これらの醜い内部コマンドをmod_secで拒否したいので、ルール(id:1000)を作成します。

追伸「RewriteRule」は私にはオプションではありません。これを行うにはmod_sec2を使用します。

6
Krey
SecRule REQUEST_URI "^/(|(.*)/)(lpt1|lpt2|lpt3|lpt4)(/|\.|\?|$)" "t:none,t:htmlEntityDecode,t:lowercase,t:removeWhitespace,block,msg:'X',id:'1000'

これらのルールには2つの問題がある可能性があります。

  1. HTTPリクエスト変換関数、つまりt:htmlEntityDecode、t:lowercase、t:removeWhitespaceは、HTTPリクエストで使用される実際のエンコードスキームに準拠している必要があります。 Modsecurityは入力を変換し、各変換に正規表現を適用します。
  2. 破壊的なアクションとしてブロックを使用していますが、ブロックに問題があり、SecDefaultAction値がpass, deny,drop。したがって、blockは悪意のあるHTTPリクエストをブロックしていない可能性があり、blockdenyで置き換えると問題が解決する場合があります。
1
Ali Ahmad