オープンソースの WAF(ModSecurity)について
WAF とは
WAF は、ウェブアプリケーションの脆弱性を悪用した攻撃などからウェブアプリケーションを保護するソフトウェア、またはハードウェアです。
WAF を使用することで以下の効果を期待できます。
- 脆弱性を悪用した攻撃からウェブアプリケーションを防御する。
- 脆弱性を悪用した攻撃を検出する
- 複数のウェブアプリケーションへの攻撃をまとめて防御する
また WAF は、検出パターンに基づき通信の中身を機械的に検査するため、実際に人の目で見る場合と異なる判定が生じる場合があります。この判定結果により、ウェブアプリケーションの脆弱性を悪用した攻撃などの悪意ある通信を遮断できない場合や、利用者がウェブサイトを閲覧する正常な通信を遮断してしまう場合があるため、導入時に考慮する必要があります。
出典:Web Application Firewall (WAF) 読本 改訂第2
ModSecurity とは
TrustWave 社が GPLv2 ライセンスのもと提供しているオープンソースの WAF です。
IPA で導入・運用を継続している実績があります。
出典: オープンソース WAF「ModSecurity」導入事例 ~ IPA はこう考えた ~
ModSecurity 構築例
本例では、以下の環境でテストします。
また、本環境で対応する脆弱性は以下の 2 つのみとします。
- XSS(クロスサイト・スクリプティング)
- SQL インジェクション
Apache リバースプロキシ設定
以下をコメントアウト
[root@hostname ~]# vi /etc/httpd/conf/httpd.conf LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so
以下を最終行に追加
[root@hostname ~]# vi /etc/httpd/conf/httpd.conf ProxyRequests Off ProxyPass /WebGoat http://10.1.23.253/WebGoat ProxyPassReverse /WebGoat http://10.1.23.253/WebGoat # 上記のように設定すると、例えば、 10.1.12.252/WebGoat のリクエストを http://10.1.23.253/WebGoat へ転送します。
ModSecurity インストール事前準備
EPEL リポジトリ追加
yum install epel-release
リポジトリ設定
[root@hostname ~]# vi /etc/yum.repos.d/epel.repo # コメントイン baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch # コメントアウト #mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch # コメントイン baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch/debug # コメントアウト #mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-6&arch=$basearch # コメントイン baseurl=http://download.fedoraproject.org/pub/epel/6/SRPMS # コメントアウト #mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-source-6&arch=$basearch
ModSecurity インストール
ModSecurity と CRS をインストール
[root@hostname ~]# yum --enablerepo=epel install -y mod_security mod_security_crs [root@hostname ~]# service httpd restart
XSS と SQL インジェクションのルールのみ適用
[root@hostname ~]# vi /etc/httpd/conf.d/mod_security.conf # コメントアウト # Include modsecurity.d/activated_rules/*.conf # 10~11 行目追加 Include modsecurity.d/activated_rules/modsecurity_crs_41_xss_attacks.conf Include modsecurity.d/activated_rules/modsecurity_crs_41_sql_injection_attacks.conf
Apache 再起動
[root@hostname ~]# /etc/rc.d/init.d/httpd restart
WAF のテスト
ModSecurity 無効時
OWASP ZAP の動的スキャンを行うと、SQL インジェクションの脆弱性が見つかります。
※OWSAP ZAP については、こちらをご参照ください。
ModSecurity 有効時
SQL インジェクションの脆弱性が検出されなくなりました。
リアルタイムで診断状況を確認すると、ステータスコードが「Forbidden」となっていることが確認できます。
参考: ModSecurity 無効化
一時的に無効化した場合は、以下の設定をします。
[root@hostname ~]# vi /etc/httpd/conf.d/mod_security.conf # コメントアウト #SecRuleEngine On # 追加 SecRuleEngine Off
Apache 再起動
[root@hostname ~]# /etc/rc.d/init.d/httpd restart
参考書籍
以上