Red Hat Training

A Red Hat training course is available for RHEL 8

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) を提供します。

手順

  1. mod_securitymod_security_crs、および httpd パッケージをインストールします。

    # yum install -y mod_security mod_security_crs httpd
  2. httpd サーバーを起動します。

    # systemctl restart httpd

検証

  1. ModSecurity Web ベースアプリケーションファイアウォールが Apache HTTPサーバーで有効になっていることを確認します。

    # httpd -M | grep security
     security2_module (shared)
  2. /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 がインストールされ、有効になっている。

手順

  1. 任意のテキストエディターで /etc/httpd/conf.d/mod_security.conf ファイルを開きます。以下はその例です。

    # vi /etc/httpd/conf.d/mod_security.conf
  2. SecRuleEngine On で始まる行の後に、次のサンプルルールを追加します。

    SecRule ARGS:data "@contains evil" "deny,status:403,msg:'param data contains evil data',id:1"

    前のルールでは、data パラメーターに evil の文字列が含まれている場合、ユーザーによるリソースの使用を禁止しています。

  3. 変更を保存し、エディターを終了します。
  4. httpd サーバーを再起動します。

    # systemctl restart httpd

検証

  1. test.html ページを作成します。

    # echo "mod_security test" > /var/www/html/test.html
  2. httpd サーバーを再起動します。

    # systemctl restart httpd
  3. HTTP リクエストの GET 変数に悪意のあるデータが含まれない test.html をリクエストします。

    $ curl http://localhost/test.html?data=good
    
    mod_security test
  4. 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>
  5. /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"]

関連情報