Fastly NGWAF で悪意のある IP からの攻撃に厳しめの閾値を設定

以前別の記事で[悪意があると判断された IP からの攻撃を即時ブロック](https://qiita.com/AtsushiFukuda/items/c7549787b2ed1d0b39bc) する設定を紹介しました。

この設定に問題があるわけではないのですが、攻撃や悪意のある IP を完全に正しく検知することは難しいので、即時ブロックの場合はどうしても正しいリクエストをブロックしてしまう可能性が出てきてしまいます。

これを防ぐため、即時ブロックではなく攻撃リクエストのブロックの閾値を厳しめに設定することが可能です。
こうすることで正しいリクエストがブロックされる可能性をより低くしながらサービスのセキュリティを高く維持することが可能です。

この記事では悪意ある IP からの攻撃リクエストに厳しめの閾値を設定する手順を紹介します。

# アクセス元の IP に関連するシグナル
前回の記事と同じ内容ですが、送信元の IP から付与される可能性のあるシグナルは以下の４種類あります。()はシグナル名です


- **SigSci IP(sigsci-ip)**
過去24時間以内に Fastly NGWAF を利用している他の顧客を攻撃するために利用されたと判断された IP からのアクセス。

- **Malicious IP(sans)**
米国のセキュリティ機関である SANS が定期的に発表している攻撃者IPアドレス情報に記載されていた IP からのアクセス。


- **Tor Traffic(tornode)**
Tor の Exit ノード とされている IP からのアクセス。

- **Datacenter(datacenter)**
通常の ISP からではなくデータセンターやクラウド環境の IP からのアクセス。

シグナルの詳細については以下のページに記載されています。

https://docs.fastly.com/en/ngwaf/using-system-signals

# 攻撃シグナル

Fastly の NGWAF がデフォルトで攻撃リクエストと判断するシグナルは以下の通りとなります。
- Attack Tooling
- AWS SSRF
- Backdoor
- Command Execution
- Cross-Site Scripting
- Directory Traversal
- Log4J JNDI
- SQL Injection.

各シグナルの詳細は以下のページでご確認下さい。

https://docs.fastly.com/en/ngwaf/using-system-signals#attacks

なお Fastly の NGWAF で特定の IP がブロック対象になることを IP が Flag するといいます。IP に目印をつけて要注意になるイメージです。

Flag された IP から上記の攻撃シグナルを含むリクエストが発生するとリクエストはブロックされます。
Flag された IP からでも攻撃シグナルが検知されていないリクエストに関してはブロックされず通常通りアプリケーションにアクセスが継続されます。
このため、特定の IP の背後に複数のユーザーいる場合でも正しくサービスを利用しているユーザーは問題なくサービスの利用を継続することができます。

# 怪しい IP からの攻撃リクエストに厳し目の閾値を設定

怪しい IP からの攻撃リクエストに厳し目の閾値を設定する手順は大きく分けると以下の二つになります。

- 怪しい IP からの攻撃リクエストに追加のカスタムシグナルを設定
- 作成したカスタムシグナルを利用して新しい Site Alert を作成

それぞれの手順を見てみましょう。

### 怪しい IP からの攻撃リクエストに追加のカスタムシグナルを設定

NGWAF のコンソールにログインし、設定を行いたい Site のページのダッシュボードを開きます。

画面上部のメニューから
Rules -> Site Rules -> Add site rule
の順にクリックすると以下の画面が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128569/d42fe7a6-14a5-4dd1-2a85-134ec58f4c13.png)

Type: Request のままで OK です。
Conditions: 
Field: **Signal**
Operator: **Exists where**
を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128569/fdead57a-81af-36f4-82a2-a96dc1237d18.png)

色付けされたボックスの中のフィールドを All から **Any** of the following are true に変更
**Add conditions** をクリックして以下の4つの条件を追加。

Field, Operator, Value
Signale Type, Equals, SigSci IP
Signale Type, Equals, Malicious IP
Signale Type, Equals, Tor Traffic
Signale Type, Equals, Datacenter

4つの条件の追加が完了すると以下のようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128569/11c69182-fe7d-16df-9f2a-b796b8a3ed09.png)

続いてボックスの外の `Add condition` をクリックします。
先ほどと同様に Field に Signal を選択し All から **Any** of the following are true に変更します。

その下の Field も先ほど同様に `Signal Type`, `Equals` から利用可能な Attack Signals をすべて add condition から追加します。設定が完了すると以下の画面のようになります。

All of と Any of が間違いがちなので正しく設定されているか再度確認しましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128569/c3443fdd-def0-728d-216a-9daa274ab3c1.png)




さらに以下のフィールドを設定します。
Action type: **Add Signal**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128569/ac00391f-bd1b-6d5b-8de6-1cce2d026d73.png)

Add site signal からカスタムシグナルを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128569/8a137d0d-51ab-cde7-c3b1-9e9391a8502d.png)
Signal Name: 例） Attack from suspicious IP
Description: 例） Attack traffic from suspicious IPs

`Create site signal` をクリック

**Request logging**: Sampled
**Status**: Enabled
**Description**: 適当に記載（例: 疑わしいIPからの攻撃リクエストにカスタムシグナルを追加, Add custom signal to the attack traffic from Suspicious IPs)

`Create site rule` をクリック

以上でカスタムシグナルの追加設定は完了です。必要に応じて日本以外からのアクセスなどの条件を追加することも考えて良いでしょう。

### 作成したカスタムシグナルを利用して新しい Site Alert を作成
続いて作成したカスタムシグナルを利用して Site Alert を設定します。

ちなみに Site Alert というのは指定した条件で IP をフラッグ（ブロック対象に追加）する機能です。

では Site Alert の設定手順について説明します。

対象の Site のページのダッシュボードの画面上部のメニューから

Rules -> Site Alerts

をクリックします。以下の Site Alerts 画面が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128569/475a5072-ea12-786b-f64b-085f99c3392d.png)

`Add site alert` をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128569/404cb180-b393-7c8e-d709-95150ecbc105.png)


**Long name**: 適当な名前を入力(例: Suspicious requests)
**Signal**: 先ほど作成したカスタムシグナルを選択
**Threshold**: 閾値の設定
**Interval**: 計算を行うインターバル。1min, 10min, 60min から選択
厳しめの設定であれば 1分間や10分間に2や３の閾値を設定するのが一つの目安になると思います。

**When an IP hits the threshold**: 閾値を超えた場合の挙動を設定します。ブロック対象とする場合は`Flag IP and block all subsequent requests tagged with attack signals from that IP` を選択して下さい。

**Take action for**: アクションを継続する（今回の場合はブロック対象とする）期間を設定します。デフォルトの1日、もしくは必要に応じてカスタムで時間を設定して下さい。設定可能な最大値は86400秒(1日)です。

**Notifications**: 特定のIPが閾値を超えた（Flag された）場合に通知を受け取りたい場合はここをチェックして下さい。

**Status**: 設定を有効化するために `Enable` します。

必要な情報を入力したら `Save alert` して保存します。

以下のように Site Alert 画面に作成した設定が Enable のステータスで表示されていることを確認できれば設定は完了です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128569/c5f34eb4-53b7-5462-e1e6-a26122c15415.png)


# まとめ

この記事では怪しい IP からのリクエストに対して閾値を設定することで、高いセキュリティレベルを保持しながら正しいリクエストはできる限りブロックしない設定について説明しました。

ご紹介したルールはあくまでも一般的に使われることの多い汎用的なものですが、ユーザーの分布やアクセス傾向に合わせて自由にカスタマイズしてサービスにあった設定を行うことをお勧めします。

この他の Fastly NGWAF での設定のベストプラクティスについては以下のページなども参考にしてみて下さい。
https://www.fastly.com/jp/blog/10-pro-tips-for-getting-the-most-out-of-your-next-gen-waf