iimon TECH BLOG

iimonエンジニアが得られた経験や知識を共有して世の中をイイモンにしていくためのブログです

WAFについてまとめてみる

Firewallのおさらい

Firewallとは・・・不正なアクセスを防ぐ壁のような役割をもったシステム

ネットワークの境界におく

ファイアウォールには、以下のような形態があります。

  1. パケットフィルタ(Packet Filter): 1989年に登場。パケットは送信情報の最小単位であり、パケットのヘッダーに含まれるIPアドレスやポート番号に基づいて制御を行います。(ネットワーク層トランスポート層) ブラックリストまたはホワイトリストに基づいて通信を許可または破棄し、ログを記録します。 ただし、送信元IPアドレスのなりすましに対して脆弱です。
    1. ステートフルインスペクションファイアウォール(動的パケットフィルタリングファイアウォール): 1994年に登場。内部から外部へのデータ送信をテーブルに記録し、整合性のある応答のみを許可します。動的なフィルタリングルールによって条件最低限に絞ることができるのでセキュリティが向上。 DOS攻撃には脆弱ですが、トランスポート層から始まり、現在ではアプリケーション層を含む多くのレイヤーで使用されています。AWSセキュリティグループのルールと似ている。設定が楽    
  2. サーキット(回路、経路)レベルゲートウェイ型: 2つのIP間のポート番号を記憶することにより、セッションレベルでの検査が可能です。(セッション層やトランスポート層) ハンドシェイク中に通過するデータを検査する。クライアントとホスト間のハンドウェイデバイスとして働き、内部ネットワークの隠蔽もできるため、送信元IPアドレスのなりすましを防ぐことができます。DOS攻撃やポートスキャンに有効です。その後パケットの中身の確認は行わない。
  3. アプリケーション層: 特定のアプリケーションやプロトコルごとに制御が可能です。パケットの中身まで確認でき、ユーザー単位や通信内容に基づいて制御ができます。プロキシファイアウォール、WAF、Webフィルタリング、IPS(侵入防止システム)、ユーザーIDごとの管理などがこの層で行われます。

わかりやすい図

https://office110.jp/security/knowledge/technology/firewall のファイアウォールの種類 の図

https://www.rworks.jp/system/system-column/sys-entry/21277/ファイアウォールとは? の図

また、これらのファイアウォールの統合形態として、UTM(Unified Threat Management, 統合脅威管理)や次世代ファイアウォール(NGFW)が存在します。これらはオールインワンのアプライアンスで、ファイアウォールVPN、IDS/IPS、アンチウイルス、Webフィルタリング、アンチスパムなどの機能を1台で提供します。

IDS・IPSとは・・・攻撃の手口をデータベース化したシグネチャを元に不正アクセスを通知・遮断するという仕組み

主にOSとソフトウェアの制御

  • IDS(Intrusion Detection System:侵入検知システム)は悪意のあるトラフィックを検知すると、通知で知らせる
  • IPS(Intrusion Prevention System:侵入防止システム)はリアルタイムで監視して、不正アクセスを検知すると、セッションを切断

https://www.rworks.jp/cloud/azure/azure-column/azure-entry/27173/ の3. Azure FirewallNSG、WAF、IPS/IDS との違い の図がわかりやすい

AWS WAF(Web Application Firewall)について、

WAFは、Webアプリケーションの脆弱性を悪用した攻撃からwebアプリケーションを保護するためのシステムであり、条件に基づいてウェブトラフィックをフィルタリングします。OSI参照モデルのアプリケーション層の検査が可能です。

AWS WAFでは、以下の要素を使用してフィルタリング条件を管理します。

  1. ルール(Rule): フィルタリング条件を定義する単位です。IPアドレス、HTTPヘッダーと本文、またはカスタムURIなどを使用して条件を作成できます。例、日本のIPアドレスかつ特定のヘッダーが含まれる場合, white listのみ許可したりip setを定義してblack listとして拒否したり
  2. ルールグループ(Rule Group): ルールの集まりであり、自身で作成したルールグループの他に、AWSが管理するルールグループやマーケットプレイスで提供されているものも利用できます。
  3. アクセス制御リスト(ACL, Access Control List): リソースに関連付けるルールやルールグループの集まりです。

ルールの例  uriがv1から始まるかつ、X-Forwarded-For headerが114.175.209.232ではない場合blockする

{
  "Name": "ip-limit-rule",
  "Priority": 0,
  "Action": {
    "Block": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "ip-limit-rule"
  },
  "Statement": {
    "AndStatement": {
      "Statements": [
        {
          "ByteMatchStatement": {
            "FieldToMatch": {
              "UriPath": {}
            },
            "PositionalConstraint": "STARTS_WITH",
            "SearchString": "v1",
            "TextTransformations": [
              {
                "Type": "NONE",
                "Priority": 0
              }
            ]
          }
        },
        {
          "NotStatement": {
            "Statement": {
              "ByteMatchStatement": {
                "FieldToMatch": {
                  "SingleHeader": {
                    "Name": "X-Forwarded-For"
                  }
                },
                "PositionalConstraint": "EXACTLY",
                "SearchString": "114.175.209.232",
                "TextTransformations": [
                  {
                    "Type": "NONE",
                    "Priority": 0
                  }
                ]
              }
            }
          }
        }
      ]
    }
  }
}

AWS WAFの「マネージドルール(Managed Rule)」を使用することにより、以下のメリットがあります。

  • コスト効率が高く、メンテナンスが容易です。
  • 一般的な脅威に対する一般的な保護が提供されます。 OWASP(Open Web Application Security Project)top 10
  • Webアプリケーションの特性に基づいた保護が可能であり、OSやデータベースの種類に応じた対策も行えます。
  • 既知の悪意のあるIPアドレスをブロックするためのIPレピュテーションリストによる保護も受けられます。

これらのルールを適用することにより、SQLインジェクションクロスサイトスクリプティングディレクトリトラバーサル、OSコマンドインジェクション、ブルートフォースアタック、DDoS攻撃バッファオーバーフローなど、さまざまな攻撃を防ぐことができます。

https://docs.aws.amazon.com/waf/latest/developerguide/aws-managed-rule-groups.html

また、Rate-basedの独自ルール(5分ごとのリクエスト回数制限)を追加することで、DDoS攻撃ブルートフォース攻撃、悪意のあるボットへの対策も行えます。

wafの動きを確かめてみる

sql injectionっぽいリクエストを送った場合

https://domain/?password="' OR 'A' = 'A"

大量にリクエストを送った場合

正常な動作が確認ができた

https://us-east-1.console.aws.amazon.com/wafv2/homev2/web-acl/

WAFには今回は使いませんでしたが、ルールにマッチした場合のactionとして許可、拒否、カウント、CAPTCHA、チャレンジがあり、ルールグループを適用させるリクエストを制限したり(スコープダウンステートメント)、actionの上書きをしたり、labelの使用した制御など様々な機能があるのでdocmentを眺めてみると面白いと思います。

https://docs.aws.amazon.com/ja_jp/waf/latest/developerguide/waf-captcha-puzzle.html

https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html

気になった点

導入する時、正常なリクエストがblockされてしまわないか

  • まずはcountモードで利用して、調整を行ってから、blockに切り替える

複数のcloudfrontに同一aclを適用した場合の料金(market placeを含まない場合)

  • acl, ルールは再利用しても料金は変わらない、よって2番目以降のcloudfrontはリクエスト数にのみ料金が請求される
  • blockしたrequestの例

まとめ

今回wafについて学習することで、アクセス制御やセキュリティに関する様々な文献、技術を知ることができた。

試しにwafを使った環境を作成した時、海外からのcloudfrontのipへの攻撃が多かったので地域で絞る有効性を強く感じた。 基本的なルールはAWSが管理してくれていてほぼメンテナンスフリー、低コストで利用することができるので、ぜひまだ使っていない方は使ってみることをお勧めします。

https://docs.aws.amazon.com/waf/latest/developerguide/what-is-aws-waf.html#waf-intro

https://owasp.org/www-project-top-ten/

https://www.rworks.jp/cloud/azure/azure-column/azure-entry/27173/

https://office110.jp/security/knowledge/technology/firewall