私はこれをステージングサーバーで初めて実行し、すべてを正しく実行したと思います。それにnikto2を実行するとmodsec_audit.logにエントリが表示されますが、私の人生ではmod_securityを手動でブロックすることはできません。 SQLをURLやフォームなどにドロップしましたが、403_errorまたは完全なブロックであるはずのmod_securityからのブロックではなく、一般的なユーザーフレンドリーなHTML 404ページを取得しました。
止まるのではなく、検知するだけなのか心配です。私は自分の構成を確認しましたが、攻撃を検出するだけでなく、攻撃を停止するように設定されています。このことを確認する方法についてのアイデアは実際に攻撃をブロックしていますか?誰かがテストURLを持っているか、それが実際に機能していることを私に証明することができる何かがありますか?
これに対する答えを見つけました。次のようにあなたのサイトにアクセスしてください:example.com/etc/passwd
これにより、mod_securityからインスタント403が表示され、デフォルトのログに記録されます。
デフォルトでは、エンジンはdetectingモードのみになります。
SecRuleEngine DetectionOnly
調整する必要がありますSecRuleEngine On
sed -ie 's/^\s*SecRuleEngine DetectionOnly/SecRuleEngine On/' /etc/modsecurity/modsecurity.conf
apacheを再起動します。
ブラウザで、次の例のように、そのサーバーでホストされているWebサイトにアクセスしてみます。
http://www.anywebsitefromthatserver.com/aphpfilethatdonotexist.php?something=../../etc
次に、Modsecurityログを確認すると、同様のものが表示されます(WHM/cPanelがある場合-> WHMで確認してください-> Modsecurityツールでログを確認してください)。
2017-12-14 10:28:41 www.anywebsitefromthatserver.com YOUR IP: 68.XX.XX.XX CRITICAL 404 930100: Path Traversal Attack (/../)
詳細なログは次のようになります。
Request: GET /aphpfilethatdonotexist.php?something=../../etc
Action Description: Warning.
Justification: Pattern match "(?i)(?:\\x5c|(?:%(?:c(?:0%(?:[2aq]f|5c|9v)|1%(?:[19p]c|8s|af))|2(?:5(?:c(?:0%25af|1%259c)|2f|5c)|%46|f)|(?:(?:f(?:8%8)?0%8|e)0%80%a|bg%q)f|%3(?:2(?:%(?:%6|4)6|F)|5%%63)|u(?:221[56]|002f|EFC8|F025)|1u|5c)|0x(?:2f|5c)|\\/))(?:%(?:(?:f(?:(?:c%80|8)%8)?0%8 ..." at REQUEST_URI_RAW.
同様のログが表示される場合は、Modsecurityがアクティブで機能していることを確認できます。
オンラインの「XSSテスター」または「XSSスキャナー」をGoogleで検索して、ステージングサイトでいくつかの要請された攻撃をツールに実行させることができます。このツールは、「攻撃」の結果を詳述するレポートも提供する場合があります。
次に、ログをテールして、エントリがレポートと一致するかどうか、特に日付、時刻、IPアドレスがある場合はそれを確認できます。
基本的な構成については、Rapid7ガイドをご覧ください。
https://blog.rapid7.com/2017/04/09/how-to-configure-modsecurity-with-Apache-on-ubuntu-linux/
ログエントリを生成するいくつかのテストカールがあります。ログエントリは、設定に応じて/ var/log/Apache2/accessと/var/log/Apache2/modsec_audit.logの両方に表示されます
XSSテスト
curl 'http://www.example.com/?q="><script>alert(1)</script>'
SQLインジェクション
curl "http://www.example.com/?q='1 OR 1=1"
以下のようにチェックします
$ curl -ks -o /dev/null -w '%{http_code}' "https://something.example.com/foo?username=1'%20or%20'1'%20=%20'"
403
を取得した場合、ModSecurityは期待どおりに機能しています。