AWS WAFとは?
AWS WAF(Web Application Firewall)は、Webアプリケーションを不正アクセスや攻撃から保護するためのサービスです。AWS WAFを利用することで、SQLインジェクションやクロスサイトスクリプティング(XSS)などの一般的なWeb攻撃を防ぐことができます。AWS WAFは、Amazon CloudFrontやALBと統合でき、世界中どこからのアクセスであっても効果的に保護することができます。
AWS WAFにはマネージドルールと呼ばれる事前に構築されたセキュリティルールのセットがあります。これらのルールは、一般的な攻撃に対応するためにAWSから提供されています。
マネージドルールを利用することで、ユーザーは複雑な脅威対策を自身で一から設計する必要がなく、セキュリティの専門知識がないユーザーでも容易に高度な保護を実現できます。これらのルールは自動的更新されるため、新たに発見された脅威や攻撃手法に対しても、ユーザーがWAFを管理することなく、最新の脅威保護を行うことができます。
WAF全般についての詳細は次の記事で解説しています。
WordPressを保護する設定
前述した通り、AWS WAFにはマネージドルールがあり、細かな設定をしなくても一般的な攻撃に対応できます。
嬉しいことにWordPressについてはAWSから個別でマネージドルールが提供されています。
WordPressサイトを保護するために有効にした方が良いルールは4つあります。
- AWSManagedRulesCommonRuleSet
-
OWASP Top 10 などのリスクが高い脆弱性を保護するルールです。全てのWAFのユースケースで有効にすることが推奨されています。
- AWSManagedRulesPHPRuleSet
-
PHPに関連する脆弱性から保護をするルールです。 WordPressはPHPで実装されているため、有効にします。
- AWSManagedRulesSQLiRuleSet
-
SQLインジェクション攻撃などのデータベースの悪用に関連する攻撃から保護するルールです。 WordPressでは、記事内容の保存などでMySQLが利用されるため、有効にします。
- AWSManagedRulesWordPressRuleSet
-
WordPress固有の脆弱性から保護します。 AWSManagedRulesPHPRuleSetとAWSManagedRulesSQLiRuleSetも同時に有効化することが推奨されています。
上記の4つのルールよりは優先度が落ちますが、Torなどの匿名IPからのアクセスをブロックするAWSManagedRulesAnonymousIpListなども有効にしておくとより安心でしょう。 AWS WAFは、1ルール有効にするごとに+1ドル/月追加でコストがかかります。
料金については、詳しくはAWS公式ページをご覧ください。
誤検知が発生するルール
上述したルールを単純に有効化すると、管理者が記事の投稿や下書き保存をする時にAWS WAFがブロックするため、エラーが発生してしまいます。
主に次のルールで引っ掛かることになります。
- SizeRestrictions_BODY (AWSManagedRulesCommonRuleSet)
-
リクエストのサイズが8KBを超えることで発生します。 WordPressでの記事投稿時には、記事の内容がPOSTで送られるため、8KBを超過してしまいブロックされます。
- CrossSiteScripting_BODY (AWSManagedRulesCommonRuleSet)
-
こちらも記事投稿時にリクエストの中にHTMLのタグが入っていること発生します。
対処方法
対処方法はいくつかありますが、最も良い方法は自社のIPアドレスからのアクセスをWAFの対象から外すことです。
AWS WAFには、スコープダウンステートメントと呼ばれる機能があり、ルールの適用範囲を限定することができます。スコープダウンステートメントを使い、自社のIPアドレスではない時だけ、WAFのルールを適用させます。
この時、IPv6も使える環境の場合はIPv6も除外設定をする必要があります。 多くのクライアントでは、IPv6が優先されるため、IPv4だけ除外してもWAFにブロックされてしまいます。
まとめ
WprdPressをAWS WAFで保護する方法について解説しました。AWS WAFは、インフラ管理が不要でCloudFrontなどに手軽に導入できるセキュリティサービスです。
AWS WAFは手軽なサービスではあるものの、WAFを運用する際には、常に誤検知の可能性があることを理解しておくことが重要です。 本記事では、WordPressの管理者もブロックされてしまう誤検知の対処方法についても解説しました。
本記事のWAFの設定をCDKでTypescriptのコードに落とし込んだ例は次の記事で見ることができます。
また、WAFについて基礎から学びたい方はWAF入門記事をご覧ください。