1.11. ModSecurity を使用した Web サーバー上の Web アプリケーションの保護
ModSecurity は、Apache、Nginx、IIS などのさまざまな Web サーバーでサポートされているオープンソースの Web アプリケーションファイアウォール (WAF) であり、Web アプリケーションのセキュリティーリスクを軽減します。ModSecurity は、サーバーを設定するためのカスタマイズ可能なルールセットを提供します。
mod_security-crs
パッケージには、クロス Web サイトスクリプティング、不正なユーザーエージェント、SQL インジェクション、トロイの木馬、セッションハイジャック、およびその他の不正使用に対するルールを含むコアルールセット (CRS) が含まれています。
1.11.1. Apache 用 ModSecurity Web ベースアプリケーションファイアウォールのデプロイ
ModSecurity をデプロイして、Web サーバー上で Web ベースアプリケーションの実行に関連するリスクを軽減するには、Apache HTTP サーバー用の mod_security
および mod_security_crs
パッケージをインストールします。mod_security_crs
パッケージは、ModSecurity Web ベースのアプリケーションファイアウォール (WAF) モジュールのコアルールセット (CRS) を提供します。
手順
mod_security
、mod_security_crs
、およびhttpd
パッケージをインストールします。# yum install -y mod_security mod_security_crs httpd
httpd
サーバーを起動します。# systemctl restart httpd
検証
ModSecurity Web ベースアプリケーションファイアウォールが Apache HTTP サーバーで有効になっていることを確認します。
# httpd -M | grep security security2_module (shared)
/etc/httpd/modsecurity.d/activated_rules/
ディレクトリーにmod_security_crs
によって提供されるルールが含まれていることを確認します。# ls /etc/httpd/modsecurity.d/activated_rules/ ... REQUEST-921-PROTOCOL-ATTACK.conf REQUEST-930-APPLICATION-ATTACK-LFI.conf ...
1.11.2. ModSecurity へのカスタムルールの追加
ModSecurity コアルールセット (CRS) に含まれるルールがシナリオに適合せず、追加の攻撃の可能性を防ぎたい場合は、カスタムルールを ModSecurity Web ベースアプリケーションファイアウォールで使用されるルールセットに追加できます。次の例は、単純なルールの追加を示しています。より複雑なルールを作成するには、ModSecurity Wiki Web サイトのリファレンスマニュアルを参照してください。
前提条件
- ModSecurity for Apache がインストールされ、有効になっている。
手順
任意のテキストエディターで
/etc/httpd/conf.d/mod_security.conf
ファイルを開きます。以下はその例です。# vi /etc/httpd/conf.d/mod_security.conf
SecRuleEngine On
で始まる行の後に、次のサンプルルールを追加します。SecRule ARGS:data "@contains evil" "deny,status:403,msg:'param data contains evil data',id:1"
前のルールでは、
data
パラメーターにevil
の文字列が含まれている場合、ユーザーによるリソースの使用を禁止しています。- 変更を保存し、エディターを終了します。
httpd
サーバーを再起動します。# systemctl restart httpd
検証
test.html
ページを作成します。# echo "mod_security test" > /var/www/html/test.html
httpd
サーバーを再起動します。# systemctl restart httpd
HTTP リクエストの
GET
変数に悪意のあるデータが含まれないtest.html
をリクエストします。$ curl http://localhost/test.html?data=good mod_security test
HTTP リクエストの
GET
変数に悪意のあるデータが含まれるtest.html
をリクエストします。$ curl localhost/test.html?data=xxxevilxxx <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>403 Forbidden</title> </head><body> <h1>Forbidden</h1> <p>You do not have permission to access this resource.</p> </body></html>
/var/log/httpd/error_log
ファイルを確認し、param data containing an evil data
メッセージでアクセスを拒否するログエントリーを見つけます。[Wed May 25 08:01:31.036297 2022] [:error] [pid 5839:tid 139874434791168] [client ::1:45658] [client ::1] ModSecurity: Access denied with code 403 (phase 2). String match "evil" at ARGS:data. [file "/etc/httpd/conf.d/mod_security.conf"] [line "4"] [id "1"] [msg "param data contains evil data"] [hostname "localhost"] [uri "/test.html"] [unique_id "Yo4amwIdsBG3yZqSzh2GuwAAAIY"]
関連情報