AWS WAFを利用するにはWeb ACLを作成し、Web ACLに関連づけるルールを作成する必要があります。ルールはAWSが提供するルールとサードパーティのセキュリティベンダーが提供するルール、そして自分でルールを作成するカスタムルールがあります。
今回はAWSが提供するマネージドルールでWeb ACLの作成手順を解説します。
ステップ1
AWSコンソールからWeb ACLを管理画面を開きます。
クラウドフロントの場合はリージョンをグローバルにしてアクセスできます。
ALBやAPIゲートウェイ、AppSyncの場合はそのリソースが存在するリージョンでWeb ACLを作成する必要がありますので適切なリージョンを選択してWeb ACLの管理画面を開いてください。下のリンクは東京リージョン「ap-northeast-1」を指定してWeb ACLの管理画面を開くことができます。
AWSコンソール内からリージョンを切り替えることができます。CloudFrontを利用する時だけGlobal (CloudFront)を選択してください。
ステップ2
下の画面の赤枠のボタン「Create web ACL」をクリックしてWeb ACLを作成します。
ステップ3
Web ACLの名前ディスクリプション、メトリック名を入力しリソースタイプ、関連付けるリソースを選択します。
Web ACL名 (Name)、メトリック名 (CloudWatch metric name)の命名規則
1文字から128文字までの長さで、大文字小文字アルファベットと数字、-(ハイフン)、_(アンダースコア)の文字の組み合わせで利用できます。
リソースタイプ (Resource type)
CloudFrontかALB/APIゲートウェイ/AppSyncのようなリージョンのリソースに適用するタイプか選択します。
関連付けするリソースはすでに作成されてるもの選択できます。後からでも関連付けすることはできます。
ステップ4
Web ACLに適用するルールグループを選択します。AWSが提供するルールは下画面の赤枠「Add managed rule groups」を選択してルールを追加してください。
ステップ5
サードパーティのベンダーを含め、マネージドルールが選択できる画面からAWSを選択します。Web ACLに追加したいルールグループを「Add to web ACL」のチェックをオンにします。有料のルールグループと無償のルールグループがあります。
以下のルールが選択できますが、Bot Controlだけ有料になります。それぞれルールの概要を記載します。
Bot Control
世の中、ボットには悪いことするために利用したり無駄なトラフィックが発生して好ましくないボットがある一方、検索エンジンのクローラーの様に、Web検索のために必要なボットがあります。Bot Controlでは悪い、良いボットを認識し、そのサイトに合わせて許可するボット、拒否するボットをコントロールすることができます。
Admin protection
パッケージ製品など管理画面があるサイトがありますが、その管理画面へのアクセスを制御するためのルールになります。
Amazon IP reputation list
AWSが収集した脅威IPアドレスのリストになります。このIPでも悪いボットなど防ぐ効果はありますがより柔軟に制御したい場合は有料のBot Controlも検討できるかと思います。このルールは無償なので利用を検討する価値があります。
Anonymous IP list
Torや匿名でアクセスするためのプロキシーサービスのIPリストが提供されます。攻撃者はなるべく身元が特定されないようにするためこのようなサービスを利用するケースがあるので、登録されてるIPから接続することは怪しいアクセスとして捉えることもできるかもしれません。ただ攻撃を目的としたものではなく、プライバシー保護を目的として利用する場合もありますので、不特定対数のユーザーがアクセスするサイトでは利用するか検討した方が良いでしょう。
Core rule set
OWASPで公開されているWebサイトを狙った攻撃に対して作られたルールになります。多くのインジェクション関係の基本的なルールが含まれているため、Webサイトを保護するための基本ルールとして利用することを推奨します。
Know bad inputs
既知の攻撃でペイロードのパターンが特定できるものを集めたルールになります。
Linux operating system
ローカルファイルインクルージョンなどLinuxの環境に絞り込んだルールになります。Linuxの環境でサーバ上でWebアプリケーションを稼働している場合は検討する価値のあるルールです。
PHP application
PHPに対する脆弱性や攻撃を検知する目的で作られたルールです。
POSIX operating system
ローカルファイルインクルージョンなどPOSIX系のOS向け構成したルールでWebアプリケーションを稼働している場合、導入検討価値のあるルールです。
POSIX系のOSについては以下のURLが参考になります。
SQL database
SQLインジェクションなどSQLデータベースに対する脆弱性からアプリケーションを保護するために準備されたルールです。SQLデータベースを利用の環境では適用を推奨します。
Windows operating system
Powershellコマンドを利用したコマンドインジェクション攻撃やWindows OSに関連する脆弱性からアプリケーションを保護するために構成されたルールです。Windows OSでアプリケーションを構成している環境では適用を推奨します。
WordPress application
WordPressに関連する脆弱性に対応したルールです。WebアプリケーションをWordPressで構築している環境においては実装することを推奨します。
ステップ6
AWS WAFではルールのアクションをBlock/Allow/Countを指定することができます。
Web ACL内のルールは優先度(Priority)を設定して、優先度の高いルールから評価されます。各ルールにはルールアクションが設定されており、ルールアクションがBlock/Allowの場合はルールが一致した段階で評価を終了し、その一致したルールのアクションを実行して終了します。Blockの場合は評価対象となったリクエストがブロックされます。
Block/Allowのアクションはターミネートアクションと呼ばれます。
Countでアクションが設定されている場合、ルールの条件に一致した場合はCloudwatchメトリックでカウントされると同時に以降のルールも評価していきます。Countで一致したルール以外に一致したルールがあり、そのルールアクションがBlockの場合ブロックされ、評価が終了します。
最後までルールが一致しない場合、WAFはデフォルトアクションの動作を実施します。デフォルトアクションがAllowの場合はリクエストは許可されます。反対にデフォルトアクションがBlockの場合はリクエストがブロックされます。
ステップ5でルールを選択しましたが、下の赤枠のEditボタンをクリックするとルールグループの中でどのルールをカウントにするか更に選択することができます。「Countにすること」=「除外する」と捉えた方がわかりやすいです。
Core rule setを例にします。
すべて除外にしたい場合は「Set all rule actions to count」を有効にしてください。すべての項目がCountモードになります。
初めはルール全体をCountで運用して、ルールで検知された場合に誤検知か調査した方が良いでしょう。
その場合、ルールアクションをCountにする以外に下の赤枠「Override rule group action to count」をチェックしてルールのアクションをCountに上書きすることでルールグループ内のルールの動作をCountにすることができます。
また、このルールで検査する条件をついけたい場合、Scope-down statementを利用することで可能になります。
Statementはカスタムルールを作成する時と同じような感覚で条件を指定できます。
例えば「URI pathが/adminからスタートする場合」で条件をつけたい場合、以下のようにStatementをセットすることで条件を付け加えることができます。条件がない場合は全てのリクエストが対象になります。
ルールの設定が完了しましたら、ルール設定の画面下にある「Save rule」ボタンをクリックして保存します。
ルールが作成されるとWeb ACLのルール一覧表示される箇所に追加したルールが表示されます。
ルール作成する時に注意していただきたいのが、AWS WAFの場合、無制限にルールが作成できるのではなく制限がある点です。
上の画面でWeb ACL rule capacity unit usedという項目があり700/1500 WCUsとなっております。
各ルールの内容によってcapacity unitの大きさが変わります。今回適用したCore rule setでは700 WCUsが必要になります。これはルールグループの中で構成されるルールの数やルールの条件を設定する時のStatementの内容によって数字が変わります。また1つのWeb ACLで1500 WCUsを超えることはできませんので、ルールの選択は必要なものだけ選択しなければなりません。
ルールを選択する時にこのWCUの制限を頭にいれ、余裕をもって構成を考えてください。
最後に
今回、WebACLの作成からAWSのマネージドルールを割り当てるところまで解説しました。弊社のセキュリティクラウドサービス「CyberNEO」はWAFの設定や運用を自動化するソリューションです。自社でセキュリティ運用管理が難しい企業や簡単に導入できる方法を検討したい場合は是非ご検討いただければと思います。
また、弊社では脆弱性診断やペネトレーションテストを通してサイトが強固に保護されているか確認することも可能です。セキュリティ診断をご検討の場合、弊社ではMatrix Inspectでセキュリティ検査サービスを提供しております。是非ご検討くださいませ。