13rep - Azure WAF-Application Gateway

# 書いてる人と愉快な脳筋たち
@[tweet Sir Yes Sir](https://twitter.com/MarcyWorkOut/status/1194193258928164864)

# 参考記事元
- [https://docs.microsoft.com/ja-jp/azure/web-application-firewall/ag/ag-overview](https://docs.microsoft.com/ja-jp/azure/web-application-firewall/ag/ag-overview)

# 内容
- 参考記事元のWAF Application Gatewayを設定しアクセスの簡易監視まで

# Azure WAF
- 一般的な脆弱性やその悪用から Web アプリケーションを一元的に保護する Web アプリケーション ファイアウォール (WAF) を提供
- Web アプリケーション ファイアウォールを一元化することで、セキュリティの管理がはるかに簡単になる
- WAF を使用すると、アプリケーション管理者にとっては脅威や侵入に対する保護がより確実になります。

# StandardとWAF違い
- WAFの機能がついているかいないかだけ WAF V2の設定が基本
- 容量の種類は自動スケーリング
    - スパイクアクセスなどがあった時に自動でインスタンスを増やす
![](https://storage.googleapis.com/zenn-user-upload/165exa05qxly6ovoyu9033jb2802)


# Applicaiton Gatewayのコンポーネント要素
- フロントエンドIP
- リスナー
-  ルール
-  バックエンドプール
-  HTTP設定
-  正常性プローブ
-  書き換え（Rewrite)

### [Azure Application Gateway 構成の概要](https://docs.microsoft.com/ja-jp/azure/application-gateway/configuration-overview#http-settings)

- フロントエンドIP
    - フロントエンドIPはApplicaiton Gateway作成時に一緒の作成したPublic IP Addressがデフォルトでバインドされています。

### バックエンドプール(振り分けされるサイトの設定)
    - IPアドレスまたはホスト名
    - 仮想マシン
    - VMSS
    - AppService
        - App ServiceはApplication Gatewayが作成された同一リージョン内に存在するApp Serviceの中から選択することができます。

### [正常性プローブ(正常性監視の概要)](https://docs.microsoft.com/ja-jp/azure/application-gateway/application-gateway-probe-overview)
![一覧](https://docs.microsoft.com/ja-jp/azure/application-gateway/media/application-gateway-probe-overview/appgatewayprobe.png)
- バックエンドプールにあるすべてのリソースに対して正常性確認を行うもの
- **プローブの機能により正常性が確認とれないリソースに関しては自動的にバックエンドプールから外し、正常性が確認取れたらバックエンドプールに戻します。**
![](https://storage.googleapis.com/zenn-user-upload/b3xmq8iht5wr4kmoyrch3scnw7rv)


### HTTP設定
![](https://storage.googleapis.com/zenn-user-upload/sdsa0qbk335xekuu8s3r8q7goceo)
- HTTP設定ではバックエンドプールに贈られる要求の設定を行います
- #### ハマりやすいポイント
    - バックエンドパスのオーバライドは、設定には何も設定する値がない場合は必ず **「/」** を入力するようにしてください
> 画面にあるインフォメーションにも記載がありますが「/」を入力しないとURLパスベースでルールを設定した時に、URLが想定外の上書きにより正常にルーティングされなくなります。

### ルール
- ルールはApplicaiton Gatewayの中で一番肝となる設定
- #### ルールによってリスナーのルーティング規則やバックエンドプールへの振り分け、HTTP設定による制限をすべて紐づけることになります。

#### Basicとパスベース
- **Basic**
    - 基本的なルーティングの設定
- **パスベース**
    - パスベースはURLパスでルーティングを行う設定
    - Basicより少し複雑な設定
```
例）
例えばHTTP(80)のHTTPS(443)リダイレクトを設定する場合なんかはBasicを利用して作成します。  
80のリスナーにアクセスがきたら443のリスナーに301リダイレクトするようにルールを設定することができます。
```
- URLパスベースの場合はパスに応じてバックエンドプールとHTTP設定を紐づける必要があるため設定方法の難易度は若干高めになります。

# WAF対策編
- WAFの機能を一時的にOFFにしたい場合はファイヤーウォールの状態を無効にします。
- モードは検出か防止の2種類があります。
    -  **「検出」** は不正なアクセスを検出するがスルーします。
    -  **「防止」** を選べば不正なアクセスが来た場合にそのリクエストをブロックします。
- 除外設定では検出・防止にひっかかるリクエストを部分的に許可することができます。
![](https://storage.googleapis.com/zenn-user-upload/634fy78l6vunyumvqyyxqe7mul47)

- グローバルパラメータの設定ではファイルのアップロードを除くリクエストの全体的な要求サイズを制限します。
    -  **8k~128kの中で選択でき、初期値として最大サイズが設定されています。**

### [URL:Web アプリケーション ファイアウォール要求サイズ制限と除外リスト](https://docs.microsoft.com/ja-jp/azure/application-gateway/application-gateway-waf-configuration)

![](https://storage.googleapis.com/zenn-user-upload/qkasv5cvzv05n2c0o693fau2kptk)

- WAFのルールではルールセット
    - OWASP3.0
    - OWASP2.9
> ## OWASP - Open Web Applicaiton Security Project
>OWASP コミュニティのNPO団体の意
>この団体が策定したセキュリティルールに準拠しますというのがルールセット
> ### [OWASPについては参照](https://www.owasp.org/index.php/Japan)
- 基本的な設定はすでにされているため特に弄る必要があるところは少ない
- リクエスト情報の容量制約にだけ気をつけておけばハマることは少ない
    - **防止機能をオンにしている場合は通信の構成によってリクエストをブロックされることがあるので注意**
- クロスサイトスクリプティングやSQLインジェクションのみを対応したいということであればルールの詳細構成でその項目だけをオンにする必要があります。


### Azure ペネトレーションテスト
- マイクロソフトが提唱しているルールに準拠して行うようにしてください。
    - [URL:Penetration Testing Rules of Engagement](https://www.microsoft.com/en-us/msrc/pentest-rules-of-engagement?rtc=1)


# WAF対策~監視編
- WAFの監視方法についてはLog Analiticsを利用することで簡単に設定
### 手順
- Log Analiticsの作成をしてからApplicaiton Gatewayの診断設定を構築。
- Log Analiticsの設定を行って情報の可視化を行います。
    - AzureのすべてのサービスからLog Analiticsを選択して作成。
    ![](https://storage.googleapis.com/zenn-user-upload/70s9m5nbovx978av2f9ashhnq5ph)

- AppGateway 診断設定移動し下記で設定
![](https://storage.googleapis.com/zenn-user-upload/xmigw04614hop6m2kh7oyre8k68i)
- ストレージアカウントは任意のものに設定
- Log Analiticsへの送信では先ほど作成したワークススペースを選択します。
- リテンション期間は任意の日数
    - 0を入れれば永続的にログが保管される。
- #### 診断設定を行ったら次にLog Analitics側の設定を行います。先ほど作成したワークスペースに移動。
![](https://storage.googleapis.com/zenn-user-upload/b0uxiyqip2osbtu2a4ej4pocfkrg)

### OMSの設定
- ワークスペースの概要へ移動
- 追加ボタンを押下しMarketPlace画面に移動して検索テキストボックスに「Applicaiton Gateway Analitics」と入力します。
![](https://storage.googleapis.com/zenn-user-upload/3uy84gi005grkq5406h2lki0z21t)
- 作成ボタンを押す
    - Application Gateway Analiticsをワークスペースに追加
![](https://storage.googleapis.com/zenn-user-upload/cpfz4reawikpigoxx172nsfpvv5o)

- WAFの集計情報がないので個別で作成する必要があります。
    - 上記メニューの「Logs」からカスタムログの作成を行います。(ログを開く)
- WAFの検知情報を取得するためにカスタムログを作成します。ここではKustoというQueryを利用して情報の収集を行います。
- クエリフィールドに次のKustoクエリを入力して実行
- 前提としてペネトレーションテストを実施した後とします。
    - でないとログ情報がないためです。
![](https://storage.googleapis.com/zenn-user-upload/yijxbxurldjhphblogpg0yh7ap3j)

![](https://storage.googleapis.com/zenn-user-upload/76d34qg97falv8vlzyvdmubxiuvm)