Fastly NGWAF の リクエストサーチ機能の使い方

Web アプリケーションを保護する上で、攻撃の兆候をいち早く捉え、詳細なログ分析を行うことは非常に重要です。Fastly の NGWAF (Next-Generation Web Application Firewall) は、強力な防御機能に加えて、リクエストサーチ機能という、詳細なログ分析を可能にするツールを提供しています。

機能の詳細はオフィシャルドキュメント [Searching for requests
](https://www.fastly.com/documentation/guides/next-gen-waf/reference/searching-for-requests/) でも英語で説明されていますが、この記事ではリクエストサーチ機能の概要、基本的な使い方、そして活用方法を紹介します。

# NGWAF リクエストサーチ機能とは？
NGWAF リクエストサーチ機能は、NGWAF が記録したリクエストのログを対象に、様々な条件で検索をかけ、特定の攻撃パターンや異常なアクセスを特定するための機能です。

従来の WAF のログ分析と比較して、NGWAF のリクエストサーチ機能は、より詳細な情報と柔軟な検索オプションを提供します。これにより、攻撃の全体像を把握し、より効果的な防御策を講じることが可能になります。

NGWAF リクエストサーチ機能を使用することで、以下のようなことが可能になります。

- 特定の攻撃パターンの検索: SQL インジェクション、XSS (クロスサイトスクリプティング) などの攻撃パターンを、ルール ID やシグナルに基づいて検索できます

- 特定のクライアントからのアクセス追跡: IP アドレスや User-Agent を指定して、特定のクライアントからのリクエストを追跡できます

- 特定のリクエストの詳細な分析: リクエストヘッダー、ボディ、レスポンスコードなど、詳細なリクエスト情報を確認できます

- 時間範囲を指定した分析: 特定の時間範囲に発生したリクエストを絞り込んで分析できます

- 複数の条件を組み合わせた複雑な検索: 複数の検索条件を組み合わせることで、より高度な分析が可能です

# リクエストサーチ画面へのアクセス
NGWAF リクエストサーチ機能は、NGWAF のコントロールパネルから以下の手順でアクセスします。

NGWAF コントロールパネルにログイン後、対象のサイトのダッシュボードを表示し、メニューバーから `Requests` を選択します。
その他、表示されているグラフや各種ページの `View requests` リンクをクリックすることでも Request ページに推移できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128569/4c24cd99-1960-4433-a03f-53266ed4b905.png)



# Requests フィルタの使い方

以下が Requests ページです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128569/ed63f7fe-6281-4557-9b1f-3d7a048d62d9.png)

この入力フィールドに各種フィルタ情報を入力し、Search ボタンをクリックすることで対象のリクエスト情報のみを絞り込んでリスト表示することが出来ます。

リスト表示されたリクエストをクリックすることで、個別のリクエストの詳細を確認することも可能です。

フィルタには時間やシグナル、それらを比較演算子などを利用して柔軟に設定することが可能です。


:::note info
異なる Key を併用した検索（`from:-1h path:/foo` 、 `from:-1h path:/foo tag:SQLI`など）は AND 検索となり、すべての条件が合致したリクエストのみが結果に表示されます。

同じ Key の複数指定（`path:/foo path:/bar`、`tag:SQLI tag:XSS tag:CMDEXE` など）は OR 検索となり、いずれかの条件に合致したリクエスト情報が表示されます。

同じ Key でも `-` フィルタを利用すると別の Key 扱いとなり OR ではなく AND になります
:::

利用可能なフィルタなどの詳細は [Searching for requests](https://docs.fastly.com/en/ngwaf/searching-for-requests) をご参照下さい。


# フィルタの作成

それでは実際にフィルタを入力してリクエストを検索してみます。フィルタの入力は自分でフィルタを作成して入力する方法と、準備されたリストから選択する方法があります。


## リストから選択
サーチボックスの右上に以下のリストボックスが設置されています。検索したい時間やシグナル,レスポンスコードを選択することで、選択した項目が検索フィールドに追加されます。

Time - 検索対象の時間
Attack signals - 攻撃シグナル
Anomaly signals - アノーマルシグナル
Bot detections signals - Bot 検知によるシグナル
Response codes - レスポンスコード

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128569/50d49eea-714d-4040-8c3f-a91a144005f6.png)

上記のフィルタは指定した期間における、指定されたシグナルをもつリクエストに絞ってリクエストの情報がリスト表示されます。


## 時間の指定
`from` と `until` を使用して検索対象とする期間を指定することが出来ます。

**from** : `from:-5h` 現在から遡る検索期間を指定。指定がない場合は `-6h`
**until** : `from:-5h until:-4h` from と併用して利用 

`until` の指定がない場合は現在時刻までが検索対象となります。
`from` も `until` も指定がない場合は、デフォルトの値として検索時点から過去6時間 (`from:-6h`)のリクエストが検索対象となります。

また、一度の検索で検索可能な期間は最大 7日分になります。

`h` 時間、`m` 分、 `d` 日などのの相対的な時間の指定のほかに、日の指定は `YYYYMMDD` が利用可能です。時間まで指定したい場合は Unix Time を利用して指定する必要があります。

YYYYMMDD での指定例（UTC時間)
`from:20141031 (until now)`
`from:20141031 until:20141225`

Unix UTC Seconds での指定例

`from:141384000 (until now)`
`from:141384000 until:1413844691`

これらを組み合わせて利用することも可能です。
`from:20141031 until:-1h`


## 演算子指定
`<key><operator><value>` の形を指定することで、指定した Key の Value を絞り込んで検索することが出来ます。

代表的な指定方法としては以下のようなものがあります。

**key:value** : Key が Value のもの
**-key:value** or **key!=value** : Key が Value のもの以外
**key:>value** : Key が value の値より大きい
**key:<value** : Key が value の値より小さい
**key:~value** : value の文字列（単語）が Key に含まれる	

### Key
Key としてよく使われるものは以下のようなものがあります

**tag** : シグナル `tag:SQLI` は tag(シグナル)が SQLI
**country** : 国 `country:RU` はアクセス元の国 country が RU（ロシア)
**httpcode** : `httpcode:406` 返却された HTTP のレスポンスコード
**ip** : `ip:xx.xx.xx.xxx` クライアントの IP アドレス
**path** :  `path:/dir/index.html` リクエストされたパス
**payload** :  `payload:"/.env"` signal の payload に指定された文字列("/.env") を含むリクエスト

などがあります。すべての演算子や Key のリストは [こちら](https://docs.fastly.com/en/ngwaf/searching-for-requests#keys) をご参照下さい。





# フィルタのサンプル

いくつか実際のフィルタ文字列の例を見てみます。

例: `from:-6h tag:http404 tag:datacenter`
過去6時間に記録されたリクエストの中から `http404`または `datacenter`シグナルのどちらかを持つリクエストの情報を表示します。


例: `from:-6h tag:http404 -tag:datacenter`
Key の頭に `-` つけると、そのタグを持つものを結果から省いて表示することができます。
過去6時間に記録されたリクエストの中から `http404`をもつ、かつ `datacenter`シグナルを持たないリクエストの情報を表示します。

例: `from:-1d tag:nullbyte tag:impostor tag:noua tag:notutf8 -tag:blocked`

`tag:nullbyte tag:impostor tag:noua tag:notutf8` のいずれかを持ち、tab:blocked でないリクエストの情報を表示します。


# リクエストサーチ機能の活用例
攻撃の根本原因の特定: リクエストサーチ機能を使って、攻撃の詳細な情報を分析することで、攻撃の根本原因を特定し、より効果的な対策を講じることができます。

- 誤検知の分析: 正常なリクエストが誤ってブロックされた場合、リクエストサーチ機能を使って、そのリクエストの詳細を分析し、ルールを調整することで、誤検知を減らすことができます
　
- 攻撃の傾向分析: リクエストサーチ機能を使って、過去の攻撃ログを分析することで、攻撃の傾向を把握し、将来の攻撃に備えることができます
　
- 監査証跡の確保: リクエストサーチ機能で得られたログは、セキュリティ監査の証跡としても活用できます。


# まとめ
NGWAF リクエストサーチ機能は、Web アプリケーションのセキュリティを強化するための非常に強力なツールです。Keys (キー) と Operators (演算子) を理解し、使いこなすことで、より効率的かつ効果的なログ分析が可能になります。ぜひ、NGWAF リクエストサーチ機能を活用し、あなたの Web アプリケーションをより安全に保ってください！