Webサーバは常にリスクにさらされています。日々進化する攻撃手段に対して、一つずつ個人で対応することは難しいでしょう。
ただし、Oracle Web Application Firewall(WAF)を使用することで、簡単にサーバに対する攻撃から保護することができます。
今回は、WAFの仕組みと、実際に構築して機能検証した結果について紹介します。
Oracle Web Application Firewall(WAF)とは
オラクルでは、Oracle Web Application Firewall(WAF)を下記の様に定義しています。
Oracle Cloud Infrastructure Web Application Firewall(WAF)は、ロード・バランサやWebアプリケーション・ドメイン名などの強制ポイントにアタッチされているリージョンベースおよびエッジの強制サービスです。WAFは、悪意のある不要なインターネット・トラフィックからアプリケーションを保護します。WAFは、インターネット接続エンドポイントを保護することにより、顧客のアプリケーションに対する一貫性のあるルール適用を実現できます。
引用元:https://docs.oracle.com/ja-jp/iaas/Content/WAF/Concepts/overview.htm
一言で表すと、Oracle Cloud Infrastructure(OCI)の内外にあるWebアプリケーションを攻撃から保護することができるセキュリティサービスです。
まずは、WAFの基本概念を4つ紹介します。
- アクセス制御
アクセス制御には、リクエストおよびレスポンス制御が含まれます。 - ファイアウォール
ファイアウォール・リソースは、WAFポリシーと強制ポイント(ロード・バランサなど)の間の論理リンクです。 - ネットワーク・アドレス・リスト
ネットワーク・アドレス・リストは、WAFポリシーによって使用される個々のパブリックIPアドレスおよびCIDR IP範囲またはプライベートIPアドレスのコレクションです。 - 保護ルール
保護ルールは、トラフィックが記録されるか、許可されるか、ブロックされるかを決定するために使用される保護機能のセットです。
Oracle Web Application Firewall(WAF)の仕組み
WAFは攻撃のパターンをマッチングさせることで対応します。そのため、WAFを使用する際は通信を許可するもの、ブロックするものの検知ルールを事前に設定する必要があります。
方式としてはホワイトリスト方式とブラックリスト方式の2パターンとなります。
- ホワイトリスト方式(あらかじめ定義しておいたパターンに該当する通信を許可する方式)
メリットとしては、定義されていないものに関しては通信をブロックするため、新たな攻撃のパターンでもブロックしてくれるという点が挙げられるでしょう。
デメリットとしては、接続したい通信を毎回許可する必要があり、作業が増えるという点があります。 - ブラックリスト方式(あらかじめ定義しておいた不正パターンに該当する通信をブロックする方式)
メリットとしては、接続したい通信をブロックすることがない点が挙げられます。
デメリットとしては、攻撃に対しての被害は抑えられるものの、新しい攻撃を通してしまう点があります。
また、WAFはクラウドベースで500を超えるルール・セットをサポートしており、これらのルールを使用してアプリケーションを悪意のある攻撃から保護します。
悪意のある攻撃には様々な種類の攻撃が存在します。
その中でも代表的な3つの攻撃についてご紹介します。
- SQLインジェクション
SQL文を経由し、ユーザーから提供されるデータを使用するアプリケーションを悪用することにより、データベースに不正にアクセスし制限付きデータを表示または操作します。 - クロスサイト・スクリプティング
動的に生成されるWebページを利用するセキュリティ攻撃です。資格証明が盗まれ、それらの情報が攻撃者に送信される場合もあります。 - HTMLインジェクション
HTMLを動的に生成する際に、ユーザーからのデータをそのままHTMLとして表示してしまい、攻撃が実行されてしまうものです。
WAFで対応可能な攻撃は、日々更新されているため安心してお使いいただくことが可能です。
Oracle Web Application Firewall(WAF)の構築
WAFを構築する上での事前条件として、4つ準備しておきましょう。
- コンピュート・インスタンスの作成が完了していること
- コンピュート・インスタンスにApache HTTPサーバをインストールし、インターネットから参照できること
- 外部公開用のドメインを取得済みであること
- Oracle Cloud DNSサービスを利用すること
1. 事前に作成していたインスタンスのパブリックIPアドレスを確認する。
コンソール上ハンバーガーメニューより、コンピュート>インスタンス>インスタンス名から、詳細を確認します。
確認したIPアドレスはWAF設定時に必要になるため、コピーしておきましょう。
2. WAFポリシーの構築
以下の手順で、「名前」、「アコンパートメント」、「プライマリ・ドメイン」、「オリジン名」、「URI」を設定していきましょう。
2.1 コンソール上ハンバーガーメニューより、アイデンティティとセキュリティ>Webアプリケーション・ファイアウォールをクリックします。
Web Application Firewallの左リソースメニューよりポリシーを選択し、「Create WAF policy」ボタンをクリックします。
2.2 基本情報に任意の名前、ポリシーを配置したいコンパートメント、任意のオリジン名、事前に確認してコピーしておいたパブリックIPを記載し、画面左下の「エッジ・ポリシーの作成」をクリックします。
2.3 作成されたWAFポリシーの詳細画面にある、CNAMEターゲットを確認し、コピーしておきます。
3. DNSへCNAMEレコードを追加
3.1 コンソール上ハンバーガーメニューより、ネットワーキング>DNS管理>ゾーン>リソースのレコードを選択し画面より、「レコードの追加」を選択します。
3.2 レコード型に「CNAME」、「名前」に任意の名前、「CNAME」にWAFポリシーを作成した際にコピーしておいたCNAMEターゲットを記載し、画面下部の「送信」をクリックします(TTLは任意の時間を設定しましょう。)
3.3 追加されたレコードを選択、「変更の公開」をクリックし、「Created」から「Unmodified」へと状態を変更します。
これで、作成したドメインが公開されました。
4. 保護ルールの追加
4.1 コンソール上ハンバーガーメニューより、アイデンティティとセキュリティ>Webアプリケーション・ファイアウォールを選択し先ほど作成したWAFポリシーを選択し、左エッジ・ポリシーより「アクセス制御」を選択します。
4.2「アクセス・ルールの追加」をクリックし、「名前」、「条件」を任意のものにし、「アクセス・ルール追加」をします。
4.3 作成したルールがこちらです。
Oracle Web Application Firewall(WAF)の機能検証
作成したWAFが実際に機能しているか試してみます。
疑似的に攻撃を行い、WAFが保護してくれるかを確認してみましょう。
今回作成したルールの一つについて、ルールに当てはまる場合の接続(接続できない)と、当てはまらない場合の接続(接続できる)を試してみます。
アクセス・ルール
条件: IPアドレスは"××.××.××.××"ではありません
レスポンス・コード:403
1. ルールに当てはまり、接続できないパターン
まず、接続できないパターンです。先ほど作成したドメインに設定外のIPアドレスから接続してみます。
WAFがしっかり動いてくれていますね。
2. ルールに当てはまらず、接続できるパターン
繋がりました!
おわりに
WAFを用いることで、簡単にサーバに対する攻撃から保護することができるようになりました。インターネットに接続するWebアプリケーションを安全に運用するために必要になってくるでしょう。
また、OCIを利用する上で便利な機能なため、利用することが常識化してくるでしょう。
今後、WAFの需要はますます増え、対応できることが求められます。本記事を読んで、WAFの導入をご検討されている方は、是非システムエグゼにご相談ください。
- カテゴリ:
- エンジニアリング
- キーワード:
- WAF