Skip to content

🛡️ Useful Service: ModSecurity (WAF)

概要

ModSecurity は、オープンソースの WAF (Web Application Firewall) エンジンです。 通常、Webサーバー(NGINXやApache)にモジュールとして組み込んで使用します。 これに OWASP Core Rule Set (CRS) という標準的な攻撃検知ルールのセットを組み合わせることで、Webアプリケーションに対する主要な攻撃を自動的に検知・遮断できます。

💡 なぜ必要なのか?(導入メリット)

WordPressには脆弱性が見つかることがあり、プラグインの脆弱性も頻繁に報告されます。 WAFを導入すると、アプリケーションの修正を待たずに、プロトコルレベルで怪しい通信を遮断(Virtual Patching)できます。

防御できる主な攻撃:

  • SQLインジェクション: データベースを不正操作する攻撃。
  • クロスサイトスクリプティング (XSS): 悪意のあるスクリプトを埋め込む攻撃。
  • リモートファイルインクルード (RFI): 外部の不正ファイルを読み込ませる攻撃。
  • Botアクセス: 悪質なクローラやスキャナ。

⚙️ 仕組みとアーキテクチャ

Docker Infrastructureの構成では、リバースプロキシとして動作している NGINXコンテナ に ModSecurity モジュールを組み込みます。 すべてのリクエストはまずNGINX(ModSecurity)を通り、安全と判断されたものだけがWordPressに転送されます。

実装のポイント

  • NGINXのビルド: 公式のNGINXイメージにはModSecurityが含まれていないため、Dockerfile でソースコードからNGINXとModSecurityモジュールをコンパイルしてビルドする必要がある(難易度高)。
    • または、ModSecurity組み込み済みのコミュニティイメージを活用する。
  • ルールの設定: OWASP Core Rule Set (CRS) をダウンロードし、有効化する。
  • 検知モード: 最初は DetectionOnly(検知のみ、遮断しない)で動作確認し、誤検知がないことを確認してから On(遮断モード)にするのが一般的。

✅ 動作確認方法 (レビュー用)

  1. 正常アクセス: 普通にWordPressサイトが見られることを確認。

  2. 攻撃シミュレーション(検知テスト): ブラウザのアドレスバーに、わざとSQLインジェクションのような文字列を入力してアクセスする。

    text
    https://local.dev/?param=<script>alert(1)</script>

    または

    text
    https://local.dev/?id=1 AND 1=1
  3. ブロック確認: NGINXが 403 Forbidden エラーページを返すことを示す。 これで「WAFが攻撃を検知して遮断した」ことが証明できる。

    攻撃シミュレーションの詳細手順

    SQLインジェクション攻撃: ブラウザまたは curl で以下のURLにアクセスします。

    bash
    curl -I "https://local.dev/?id=1 AND 1=1"

    期待される結果:

    text
    HTTP/2 403 
    server: nginx
    ...

    403 Forbidden が返ってくれば成功です。

  4. ログ確認: NGINXのログファイル(modsec_audit.log等)に、「XSS Attack Detected」といった記録が残っているのを見せる。

    ログ確認コマンド例

    Dockerコンテナ内の監査ログを確認します。

    bash
    docker exec -it nginx cat /var/log/modsec_audit.log | tail -n 20

    出力の中に Message: ... [id "942100"] ... [msg "SQL Injection Attack Detected via libinjection"] といった記述があれば検知されています。

  5. OWASP Core Rule Set (CRS) について:

    Docker Infrastructureに関連するCRSの役割

    OWASP CRS は、一般的なWeb攻撃を検知するための汎用的なルールセットです。 今回は以下のルールが特に有効に機能しています:

    • REQUEST-942-APPLICATION-ATTACK-SQLI: SQLインジェクションを検知。WordPressのデータベースを守ります。
    • REQUEST-941-APPLICATION-ATTACK-XSS: クロスサイトスクリプティングを検知。ユーザーへの攻撃を防ぎます。
    • REQUEST-930-APPLICATION-ATTACK-LFI: ローカルファイルインクルージョンを防ぎ、設定ファイルの漏洩などを防ぎます。

🔗 参考リンク

Released under the MIT License.