OCI WAFは、Global WAFと呼ばれるエッジポリシーと、Regional WAFのWAFポリシーという2種類のWAFを作成することができます。Global WAFは、グローバルに展開された各PoPにパブリッシュされ、静的コンテンツのキャッシュにも対応した負荷分散型、Regional WAFは、OCIのロードバランサーに直接アタッチし、OCIのサービスとの連携がより強化されたOCIネイティブ型と区別することができます。
下記のように、それぞれ機能が若干異なりますので、用途に合わせて使い分けが可能です。
ここでは、作成したDVWA(脆弱なアプリケーション)をWAFで保護するまでの設定の流れと動作について紹介します。今回は、Regional WAFを作成していきます。
※詳細な手順は、OCIチュートリアルにもありますので、こちらもあわせてご参照下さい。
ロードバランサーの作成
DVWAをバックエンドサーバーとするロード・バランサーを作成
OCIメニューから、ネットワーキング -> ロード・バランサー -> ロード・バランサーの作成
WAFポリシーの作成
OCIメニューから、アイデンティティとセキュリティ -> WEBアプリケーション・ファイアウォール -> ポリシーからWAFポリシーの作成
-
ルール・アクションで新規アクションの作成、好みのレスポンス・コードとメッセージを追加する。追加後、画面下部の保護機能の選択をクリック
-
ルールアクションと保護機能の追加が完了後に、画面下部のリクエスト保護ルールをクリックする。最終的に下記のようにリクエスト保護ルールにレコードが追加されていればOK
WAFポリシーの動作確認
ロードバランサーのIPアドレスでDVWAにアクセス
http://LoadBalancerのIP/DVWA-master/login.php
-
この手順でクロスサイト・スクリプティングとSQLインジェクションを実行する。正しくWAFが動作していれば、以下のようなリクエストをブロックしたメッセージが表示される
-
ログを確認
OCIメニューから、管理及び管理 -> ロギング -> ログから作成したWAFのログ名を選択。ブロックされたリクエストのログの詳細が分かる
Logging Analyticsとのログ連携
LoggingのログはJSONファイルとして格納されており、簡単な検索やグラフの機能を持っているがあまり可読性が良くないので、Service Connector Hub経由でLogging Analyticsにログを転送し、ログを見やすくビジュアライズする
Logging Analyticsの必要なIAMポリシーについてこちらを参照
-
監視及び管理 -> 関連サービス -> サービス・コネクター・ハブから、サービス・コネクターの作成を選択
-
監視及び管理 -> ログ・アナリティクス -> ログ・エクスプローラーにWAFのログが表示される。
LoggingのJSONフォーマットは、時間、ステータスコード、URIといったフィールドにマッピングされ、フィルターや文字検索が簡単になる
ログに含まれるIPアドレスからジオロケーション、脅威インテリジェンスを取得する
-
WAFのログにあるHost IP Addressには、アクセス元のクライアントのIPアドレスが記録されている。このIPアドレスを引用してジオロケーションや脅威分析の情報を取得するようにWAFのログ・ソースを拡張する
-
ファンクションをジオロケーション、IPアドレスをHost IP Address(Client)とマッピング、脅威インテリジェンスをチェックし、追加、変更の保存を行う
-
ソースの変更後に取得されたログ・レコードにはClient Host CountryやCity、Threat IPsという新しいフィールドが追加される
WAF用のダッシュボードをインポートする
このWeb記事で紹介されているOracleのManagementチームが作成したWAF用のダッシュボードをインポートする
#Zipファイルをダウンロードし解凍する
wget http://www.oracle.com/webfolder/technetwork/tutorials/sample_JSONs/WAFDashboards.zip
#以下3つのファイルのCOMPARTMENT_IDを自身のテナントのコンパートメントIDに置き換える
WAF_Activity_Overview.json,
WAF_Access_rule_and_Rate_limiting.json
WAF_Protection_Rules.json
sed -i 's/COMPARTMENT_ID/ocid1.compartment.oc1../g' WAF_Activity_Overview.json
sed -i 's/COMPARTMENT_ID/ocid1.compartment.oc1../g' WAF_Access_rule_and_Rate_limiting.json
sed -i 's/COMPARTMENT_ID/ocid1.compartment.oc1../g' WAF_Protection_Rules.json
#ダッシュボードをLogging Analyticsにインポート (※oci-cliが実行できるように事前設定が必要)
oci management-dashboard dashboard import --from-json file://WAF_Activity_Overview.json
oci management-dashboard dashboard import --from-json file://WAF_Access_rule_and_Rate_limiting.json
oci management-dashboard dashboard import --from-json file://WAF_Protection_Rules.json
以上がロード・バランサーにアタッチするRegional WAFの設定手順の流れでした。
今回は設定しませんでしたが、WAFポリシーの作成フローには、アクセス制御やレート制限などのポリシーも指定できるので、ポリシーを修正しながら、動作を確認するとより理解が深まるかと思います。チュートリアルにも手順があります。
また、提供されている保護ルールの一覧はこちらです。ルールは、Oracleで管理されており、ルールの更新や追加は、決まった日時ではなく非定期でCVEのリスクに応じて柔軟に行われています。
ポリシーのチューニングは運用における永遠の課題ですが、このWAFポリシーの場合、保護ルールをPHP、Weblogic、WordpressなどWAFを運用しているセキュリティ・チームがタグ付けしているので、アプリケーションの用途に合わせてタグで保護ルールを選択し、Logging Analyticdでログ分析をしながら適宜見直していく、というのも泥臭いですが確実なチューニング方法の一つかなとも思います。
次回は、Global WAFであるエッジポリシーでの設定方法を紹介します。