Amazon Web Services ブログ

AWS Network Firewall 柔軟なルールエンジンのハンズオンウォークスルー (Part 2)

本記事は Hands-on walkthrough of the AWS Network Firewall flexible rules engine – Part 2 を翻訳したものです。

このブログ記事は、AWS Network Firewall 柔軟なルールエンジンのハンズオンウォークスルー (Part 1) のPart 2です。AWS Network Firewall は、柔軟なルールエンジンを提供するマネージドサービスであり、きめ細かいポリシーを適用するためのファイアウォールルールを記述することができます。Part 1では、ルールの書き方や、ステートレス検査とアクション順に評価を実施するステートフル検査ではルールエンジンの処理方法が異なることをお伝えしました。

今回のブログでは、ルールの評価順序として、最近追加された機能である厳格(Strict)方式を使用した場合に、ステートフルのルールがどのように評価されるかに焦点を当てます。この機能により、1つまたは複数のデフォルトアクションを設定することができます。この機能を使用してルールグループを作成したり更新する方法を示し、この機能が役立つシナリオを紹介します。

さらに、このブログを読んだ後は、Proofpoint の Emerging Threats OPEN ルールセットなど、コミュニティから最新の Suricata ルールを取得する自動化されたサーバーレスソリューションを導入できるようになります。このようなソリューションを Amazon Web Services(AWS)環境に導入すると、Proofpoint(旧Emerging Threats)から最新の侵入検知システム(IDS)のルールセットを取得し、Network Firewall のルールグループを常に更新できるため、全体的なセキュリティの状態がシームレスに強化されます。オプションでそれらを侵入防止システム(IPS)として使用することもできます。また、これらのルールセットをアップデートするための更新間隔を選択することができます(デフォルトの更新間隔は6時間です)。ルールグループのセットは侵入防止システム(IPS)モードに変換することが可能です。最後に、AWS マネジメントコンソールで Network Firewall のさまざまなカテゴリのルールを詳細に確認することができるようになります。

Network Firewallでは、ステートフルルールグループはどのように評価されますか

Network Firewall では、ステートフルルールグループを評価する順序として、アクション順に評価する方式と厳格(Strict)な順序で評価する方式の2つがあります。ルールグループで指定する評価順序の設定は、それらが属するファイアウォールポリシーにおいて指定されている評価順序の設定と一致する必要があります。

ステートレス検査における評価方式では、フロー内の個々のパケットすべてがポリシー内の各ルールに対して評価されます。ルールは、割り当てられた優先度に基づいて順番に処理され、番号が最も小さいルールが最初に評価されます。アクション順の評価を使用するステートフル検査では、ルールエンジンは最初に pass のアクションを設定しているルールを評価し、次に drop、そして alert の順で処理を実施します。エンジンは、一致するルールが見つかると、ルールの処理を停止します。ファイアウォールは、ルールグループに表示されるルールの順序を考慮して評価を実施します。また、ルールに優先度が割り当てられている場合には、それも考慮します。デフォルトのルール評価の順序については、Part 1に詳細が記載されています。

ファイアウォールポリシーが厳格な順序を使用するように設定されている場合、Network Firewall では、ステートフルルールグループに対して厳格なルールの評価順序を手動で設定するオプションが使用できるようになりました。このオプション設定を使用すると、ルールグループは、番号の小さいルールから優先的に評価され、各ルールグループのルールは、定義されている順序で処理されます。また、厳格なルール順序を設定している場合には、Network Firewall が drop alldrop establishedalert allalert established のどれをデフォルトアクションとして実行するか選択することも可能です。

ルールの評価順序として厳格(Strict)が適しているお客様シナリオ

アクション順に評価をするルールグループの構成は、IDS のユースケースには適していますが、必要なものだけを許可し、それ以外は拒否する(デフォルト拒否の)セキュリティベストプラクティスに従ってファイアウォールを導入するユースケースには障害となる可能性があります。デフォルトのアクション順の評価を使用しても、このベストプラクティスを実現することはできません。しかし、厳格な順序で評価する機能を使えば、ステートフルルールに優先順位をつけたり、5-tuple と Suricata ルールを同時に実行できるファイアウォールポリシーを作成することができます。厳格なルール順序を使用することで、最初に特定のアクションを持つきめ細かいルールのブロックを配置し、次に特定のアクションを持つ粗いルールセットを配置し、最後にデフォルトのドロップアクションを設定することができます。その例を次の図1に示します。

Figure 1: An example snippet of a Network Firewall firewall policy with strict rule order

図1: 厳格なルール順序を持つ Network Firewall ファイアウォールポリシーの一部分の例

図1では、デフォルトのドロップアクションとして、drop establisheddrop all の2種類を選択できることが示されています。drop established を選択すると、Network Firewall は接続が確立されている状態のパケットのみをドロップします。これにより、上位層の接続に必要なレイヤー 3 と 4 の接続確立用のパケットは許可し、既に接続が確立されているパケットについてはドロップします。このため、下位層のプロトコルで実施するハンドシェーク部分を許可する追加のルールを記述する必要なく、デフォルト拒否の設定においてアプリケーション層の pass ルールを記述することができます。

drop all アクションは、すべてのパケットをドロップします。このシナリオでは、プロトコル処理が成功するためには、下位層のハンドシェイクを明示的に許可する追加のルールが必要です。ステートフルルールグループの評価順序では、Network Firewall が異なるアクションをどのように評価するのか詳細を記載しています。例に示されている追加の環境変数を設定するには、Network Firewall のステートフルルールの例および Suricata ルール変数で説明されている手順を参照してください。

Network Firewallで厳格なルール順序とデフォルトのドロップアクションを設定したステートフルルールグループを持つポリシーを設定するためのウォークスルー例

このセクションでは、厳格なルール順序を設定したファイアウォールポリシーを作成することから始めます。その後、厳格なルール順序を設定したステートフルルールグループを追加し、ステートフルルールグループ内でルールの優先度を変更することでポリシーを構築していきます。

ステップ1: 厳格なルール順序を設定したファイアウォールポリシーを作成する

厳格なルール順序を使用してポリシーのデフォルトアクションを設定することができます。これは、以下のように作成時にのみ設定が可能な項目です。

  1. コンソールにログインし、Network Firewallを導入するAWSリージョンを選択します。
  2. 検索バーからVPCサービスを選択します。
  3. 画面左側のネットワークファイアウォールの箇所で、ファイアウォールポリシーを選択します。
  4. ファイアウォールポリシーを作成をクリックします。ファイアウォールポリシーの説明に、適切な名前と説明(オプション)を入力します。Nextをクリックします。
  5. ルールグループを追加の画面で以下の操作を実施します。
    1. ステートレスデフォルトアクションを選択します。
      1. フラグメント化されたパケットの処理方法を選択で、いずれかのオプションを選択します。
      2. ステートレスデフォルトアクションのアクションを1つ選びます。
    2. ステートフルルール評価の順序とデフォルトのアクションの設定をします。
      1. ルールの順序厳格を選択します。
      2. デフォルトのアクションで厳格なルール順序で評価をする場合のデフォルトアクションを選択します。リストからドロップアクションについては1つ、アラートアクションについてはいずれかまたは両方を選択することができます。
  6. 次に、オプションのタグを追加します。例えば、「キー」には「Name」、「値」には「Firewall-Policy-Non-Production」と入力します。確認し、ファイアウォールポリシーを作成をクリックします。

ステップ2: 厳格なルール順序を設定したステートフルルールグループを作成する

  1. コンソールにログインし、Network Firewallを導入するAWSリージョンを選択します。
  2. 検索バーからVPCサービスを選択します。
  3. 画面左側のネットワークファイアウォールの箇所で、ネットワークファイアウォールのルールグループを選択します。
  4. 画面中央で、右上にあるネットワークファイアウォールのルールグループの作成をクリックします。
    1. ルールグループタイプで、ステートフルルールグループを選択します。
    2. 名前、説明、キャパシティーを入力します。
    3. ステートフルルールグループのオプションで、5-tuple または Suricata compatible IPS rulesのいずれかを選択します。これらのルールは厳格な順序で評価することができます。
    4. ステートフルルールの順序で、厳格を選択します。
    5. ルールの追加の箇所で、必要なステートフルルールを追加します。ルールの作成に関する詳細な手順は、ステートフルルールグループの作成に記載されています。
    6. 最後に、ステートフルルールグループを作成をクリックします。

ステップ3: 厳格なルール順序を設定したステートフルルールグループをファイアウォールポリシーに追加する

  1. コンソールにログインし、Network Firewallを導入するAWSリージョンを選択します。
  2. 検索バーからVPCサービスを選択します。
  3. 画面左側のネットワークファイアウォールの箇所で、ファイアウォールポリシーを選択します。
  4. ステップ1で作成したファイアウォールポリシーをクリックします。
  5. 画面中央のステートフルルールグループの箇所で、アクションからアンマネージドステートフルルールグループの追加をクリックします。
  6. ステップ 2 で作成したステートフルルールグループを選択します。次に、ステートフルルールグループを追加するをクリックします。これについては、ファイアウォールポリシーの更新で詳しく説明しています。

ステップ4: ステートフルルールグループにおいて既存ルールの優先度を変更する

  1. コンソールにログインし、Network Firewallを導入するAWSリージョンを選択します。
  2. 検索バーからVPCサービスを選択します。
  3. 画面左側のネットワークファイアウォールの箇所で、ネットワークファイアウォールのルールグループを選択します。
  4. ルールの優先度を編集するルールグループをクリックします。
  5. ルールを編集をクリックします。優先度を変更したいルールを選択し、上へ移動または下へ移動のボタンをクリックして、ルールの順番を変更します。これを図2に示します。

Figure 2: Modify the order of the rules within a stateful rule groups

図2:ステートフルルールグループ内のルール順序の変更

注:

  • ルールの順序は、ネットワークファイアウォールポリシーまたはルールグループの作成時のみ、厳格な順序に設定することができます。ルールの順序は、既存のオブジェクトについては厳格な順序で評価する方式に変更することはできません。
  • 厳格な順序のルールグループは厳格な順序のポリシーにだけ関連付けることができ、デフォルトの順序を設定しているルールグループはデフォルトの順序のポリシーにだけ関連付けることができます。互換性のないルールグループを関連付けようとすると、検証例外が発生します。
  • 現在、厳格な順序を使用したドメインリストタイプのルールグループの作成はサポートされていません。そのため、ドメインリストと厳格な順序のポリシーを関連付けることはできません。ただし、5-tupleとSuricata互換のルールはサポートされています。

Suricataのルールを取得する自動化されたサーバーレスソリューション

より高度なネットワークファイアウォールルールを簡素化し、維持するために、自動化されたサーバーレスソリューションについて見てみましょう。このソリューションでは、スケジュールで実行される Amazon CloudWatch Events ルールを使用しています。このルールでは AWS Lambda 関数を呼び出し、Proofpoint の Emerging Threats OPEN ルールセットから最新の Suricata ルールを取得して、Amazon Simple Storage Service (Amazon S3) バケットに抽出します。S3バケットにファイルが到着すると、別の Lambda 関数が呼び出され、Suricata ルールを解析し、Network Firewall と互換性のあるルールグループを作成します。これは、次の図3に示されています。このソリューションは、デプロイを複雑にしないために、AWS Serverless Application Model (AWS SAM)パッケージとして開発されました。AWS SAM は、AWS 上でサーバーレスアプリケーションを構築するために使用できるオープンソースのフレームワークです。このソリューションのデプロイ手順は、GitHub のこのコードリポジトリで確認できます。

Figure 3: Network Firewall Suricata rule ingestion workflow

図3:Network FirewallでのSuricataルール取り込みのワークフロー

Suricata IDS のカテゴリに基づき、複数のルールグループが作成されます。このソリューションでは、ユースケースに応じて、特定のルールグループを選択的に IPS モードに変更することができます。これは、ルールセット内のデフォルトアクションを alert から drop に変更することで実現します。変更されたステートフルルールグループは、アクティブなファイアウォールポリシーに関連付けることができます。Proofpoint の Emerging Threats OPEN ルールセットのすべてのカテゴリを組み込むセキュリティ要件がある場合には、ルールグループのクォータを増やす必要があるかもしれません。このソリューションで作成される各種 IPS カテゴリのルールグループの例を図4のスクリーンショットに示します。カテゴリごとにルールグループを設定することは、ベースとなるシグネチャが既にグループ化され、Proofpoint によって管理されているため、IPS ルールを定義する方法として好ましいと言えます。

Figure 4: Rule groups created by the solution based on Suricata IPS categories

図4: Suricata IPS カテゴリに基づいて作成されたルールグループ

このソリューションでは、CloudWatch のログを使用して、Network Firewall のルールグループにうまく変換されなかった Suricata のルールセットをトラブルシューティングする方法が提供されています。
最終的なルールセットと破棄されたルールは、さらなる分析のためにS3バケットに保存されます。これを図5に示します。

Figure 5: Amazon S3 folder structure for storing final applied and discarded rulesets

図5:最終的に適用されたルールセットと破棄されたルールセットを格納するためのAmazon S3フォルダ構造

まとめ

AWS Network Firewall は、さまざまなユースケースでトラフィックを大規模に検査することができます。AWS がリソースのデプロイ、パッチ管理、十分なパフォーマンスの確保といった手間のかかる作業を行うため、セキュリティチームは運用負担を減らし、より戦略的な取り組みに集中することができます。この投稿では、厳格なルール順序とデフォルトのドロップを設定した Network Firewall 構成のサンプルを取り上げました。そして、厳格なルール順序とデフォルトのドロップを設定したステートフルルールグループでは、ルールエンジンがどのようにルールを評価するのかを紹介しました。その後、ルールグループのベースライン確立に役立つ、Proofpoint の Emerging Threats OPEN ルールセットを使用した自動化されたサーバーレスソリューションを提供しました。この記事がお役に立つことを願っています。また、Network Firewall に追加されたこれらの最新機能がどのように利用されているか、ご報告をお待ちしています。

翻訳は Security Specialist TAM の飯島 卓也が担当しました。原文はこちらです。