Fastly 次世代 (Signal Sciences) WAF について


# はじめに
Fastly の次世代 WAF (以降 NG-WAF)は CDN などの Edge Cloud Platform を提供する Fastly が2020年に買収した Signal Sciences 社のソリューションをベースとしたマルチクラウド環境に対応した統合型の Web アプリケーションファイアウォール (WAF) ソリューションです。

本記事では Fastly NG-WAF の特徴やアーキテクチャ、導入方法についてご紹介します。



# Fastly NG-WAF の特徴
Fastly NG-WAF には以下の様な特徴があります。

- CDN やクラウド環境に縛られない豊富な導入オプション
- 独自の攻撃検知の仕組みで誤検知が少なくルールチューニングがほぼ不要
- 直感的に管理可能なダッシュボード機能

これらの特徴により従来の WAF の課題であった複数環境で運用されているシステムの保護や、導入後のルールチューニングのために運用に工数が掛かるといった点を解決したソリューションとなっています。

また、いわゆる OWASP Top 10 に該当する SQLi や XSS といったような攻撃だけでなく、カスタムルールや高度なレートリミット機能を使用することでアカウントテイクオーバーや Bot による過剰なアクセスなどにも対応することが出来るようになっています。


# アーキテクチャ
Fastly NG-WAF は導入方式にもよりますが主に以下の3つのコンポーネントから構成されます。

- モジュール
- エージェント
- クラウドエンジン

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128569/ac02a377-d78c-afd4-7d1d-ae0bc12e44ad.png)

**モジュール**
モジュールは Web サーバーやアプリケーションにプラグインとしてインストールします。
クライアントからのリクエストを受け、エージェントにリクエスト情報を転送します。

**エージェント**
エージェントはアプリケーション実行環境にインストールします。
モジュールから受け取ったリクエストを確認し、ブロック/許可/シグナルを付与等の判断を行い、判断結果をモジュールに返却します。

エージェントにはもうひとつの役割があります。後述のクラウドエンジンと約30秒ごとに非同期に通信を行い、リクエストを処理した結果のデータを送信します。また、クラウドエンジン側から送られてきた新しいルールなどの情報も受け取ります。

**クラウドエンジン**
クラウドエンジンはエージェントから送られてきたデータや攻撃に関する情報の確認、エージェントへのルールの追加や設定変更などを行います。クラウドエンジンには Web UI または API を通じてアクセスします。
複数の異なるロケーションのエージェントから送られてきた情報を集約・転送することで、分散したアプリケーション環境においても各エージェントに共通の情報を提供します。
また、Slack や Datadog など外部ツールとの連携の設定も行う事が出来ます。

このアーキテクチャによるポイントとしては以下のような点があります。

- **迅速な処理**
攻撃の検知やブロックなどの判断はアプリケーション環境にインストールされたエージェントが行います。処理はローカル環境で完結するため、追加されるレイテンシーを通常 1-2ms 程度と最小限に抑えることが出来ます。

- **フェールセーフ**
モジュールがエージェントから規定時間内にレスポンスを受け取れない場合、検査を中止してリクエストの処理が継続されます。タイムアウト値は変更可能ですがデフォルトでは100msです。

-  **単一の管理コンソール**
すべてのエージェントは単一のクラウドエンジンで管理されます。このため複数のアプリケーションや複数のクラウドや異なるロケーションに展開されたアプリケーションも単一の Web UI からまとめて管理することが出来ます。




# 導入オプション

続いて Fastly 次世代 WAF の導入オプションについてご紹介します。代表的な導入オプションとしては以下のようなものがあります。

- [モジュール/エージェント インストール型](https://docs.fastly.com/signalsciences/install-guides/other-modules/modules-overview/)

- [Cloud WAF](https://docs.fastly.com/signalsciences/install-guides/cloud-waf/cloud-waf-intro/)

- [Edge Deployment](https://docs.fastly.com/signalsciences/install-guides/edge/edge-deployment/)


### モジュール/エージェント インストール型
一番一般的かつ推奨される導入オプションです。モジュールとエージェントをアプリケーションが設置されている環境にインストールします。

NGINX, Apache, IIS などの Web サーバーや Java などのプログラム言語用のモジュールや Kubernates などのコンテナ環境にインストールするオプションなど様々なインストールオプションが用意されています。

インストールの手順と利用可能なオプションは以下のページをご参照下さい。

https://docs.fastly.com/signalsciences/install-guides/#module-agent-installation-process

### リバースプロキシモード

Web サーバーやアプリケーション環境にモジュールをインストールする事が難しい場合、エージェントを[リバースプロキシモード](https://docs.fastly.com/signalsciences/install-guides/reverse-proxy/) で走らせる事が出来ます。この場合モジュールのインストールは必要ありません。リクエストはエージェントを経由してWeb/アプリケーションサーバーに到達します。オリジン環境にインストールするオプションのため Core 型の一種と言えます。


### Edge Deployment
Fastly の Edge Cloud Platform 上に NG-WAF を実装します。Fastly の CDN を利用することが前提となりますが、オリジンなどの環境にエージェントなどのインストールは不要となります。

### Cloud WAF
*Cloud WAF は Edge Deployment がリリースされるまでは唯一のエージェントインストールが不要なオプションとして利用されていました。Edge Deployment がリリースされた現在は特に理由がない限り利用はあまりお勧めしません。*

Cloud WAF では Cloud 環境上にお客様専用の WAF インスタンスを準備します。
Web/アプリケーション環境にエージェントやモジュールのインストールは必要ありません。 ただしすべてのリクエストは指定リージョンのクラウドを経由してからオリジンに到達します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128569/93eb825c-cd23-53c4-4f86-b00d2adbc922.png)

対象ドメインの DNS レコードを Cloud WAF インスタンスに接続するためのドメインに CNAME します。リクエストは Cloud WAF 上で処理されてからアプリケーションに接続します。




# 独自の攻撃検知の仕組み
### SmartParse
Fastly NG-WAF では SmartParse と呼ばれる独自の仕組みで攻撃の可能性のあるリクエストを検知します。

正規表現のパターンマッチの手法に依存する従来の WAF では誤検知や正当なトラフィックのブロックを防ぐための長期的なルールチューニングが必要でした。

SmartParse では各リクエストのコンテキストと実行方法を評価し、リクエストに悪質または異常なペイロードが無いか判断します。SmartParse により、チューニングの必要がほぼ無くなり、実装後すぐに脅威の検出を開始できます

SQLi や XSS によるインジェクション攻撃では、信頼できないデータがコマンドやクエリの一部としてインタプリタに送信されます。SmartParse はリクエストパラメーターを分析して、コードが実際に実行可能かどうかを判断し、その結果をトークン化します。トークン化されたリクエスト表現は、実行時に分析され、SQLi やXSS をはじめとする OWASP Top 10 のインジェクション攻撃を含む攻撃を検出します。この方法は、シグネチャベースの検出アプローチと比較すると誤検出率が非常に低く、はるかに高速です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128569/6618a640-65c2-bcb3-64ed-9e5678ad8585.png)

正規表現に依存し誤検知の多さからブロックモードで利用されることの少ない従来の WAF に対し、Fastly NG-WAF では90%以上のユーザーがフルブロックモードで利用しています。

### カスタムルール
Fastly NG-WAF では、SQLi や XSS といった OWASP Top 10 攻撃の検出やブロックだけでなく、カスタムルールを作成することでその他の攻撃も検出することが出来ます。ルールを使用して Web アプリケーションやビジネスロジック固有のしきい値、レート制限、自動ブロック、アラートトリガーを NG-WAF のコンソールで設定できます。

また、ルールで脆弱性パッチを適用し、アプリケーションと同じ権限で実行されるライブラリ、フレームワーク、その他のソフトウェアモジュールなど、旧式になったコンポーネントや危険にさらされたコンポーネントに対処することもできます。個々のサイトのルール (サイトルール)だけでなく、複数のサイトで横断的に利用可能なグローバルなルール (コープルール) も作成できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128569/01572d91-f474-ee38-a3e9-6526750cc5fa.png)


# ブロックの条件

Fastly NG-WAF は正規表現 (regex) にマッチングする受信リクエストを即座にブロックするという従来のアプローチではなく、SmartParseによる検出、時間ベースのしきい値、リクエストとレスポンスに関する異常検出データを組み合わせた情報に基づいてブロックの実施を判断します。

具体的には特定の IP から一定期間内に閾値を超える攻撃が検出されると、その IP は一定期間（デフォルトでは24時間)ブロック対象なります。この IP がブロック対象となることを Flag されると言います。

なおリクエストがブロックされるのは Flag された IP からのリクエストに攻撃のシグナルが検知された場合のみです。
Flag されている IP でも攻撃シグナルが検知されていていないリクエストはブロックされずに処理が継続されます。
これは特定の IP の背後に複数のユーザーが存在し、一人の悪意あるユーザーの行動で他のユーザーがサービスを利用できなくなることを防ぐためです。

また、受信リクエストに攻撃シグナルが含まれている場合、[プライバシーに関連する情報を除いた](https://docs.fastly.com/signalsciences/how-it-works/redactions/)リクエストの情報が Cloud Engine に送信されます。

Cloud Engine は 独自の Network Learning Exchange(NLX) を通じて、他の顧客のエージェントを含むデプロイされたすべてのエージェントから攻撃データを収集しています。

カスタマイズ可能なしきい値に基づき、潜在的な攻撃者から十分な悪意ある行為が確認されると、そのユーザーにブロックのフラグを立てます。このメソッドにより高精度な検出が可能となり、さまざまな攻撃に関するより広いコンテキストが提供されます。


---

この記事では Fastly NG-WAF の特徴やアーキテクチャ、導入方法といった導入を検討する際に知っておくべき内容をまとめました。導入後の運用については別の記事にまとめてみたいと思います。