AWS WAFについて調べる

## WAFとは
Web Application Firewall(WAF)の略。
Webアプリケーションの脆弱性に対しての攻撃(例えばSQLインジェクション攻撃とか)から、アプリケーションを保護するセキュリティ対策として利用される技術・製品のことで、
攻撃や脆弱性を感知した場合には、リクエストをブロックする

### AWS WAFドキュメント
https://docs.aws.amazon.com/ja_jp/waf/latest/developerguide/waf-chapter.html

## Fierwallとの違いは
IPアドレスやポート番号で通信を許可/拒否するものではないという点。
AWSでいうとセキュリティグループがFirewallにあたる。
Firewallでは悪意のあるアクセスなのかまでは判断することができない。

## 導入箇所
ALB・CloudFront・API Gatewayに割り当てて利用する

## AWS WAFの攻撃範囲
![スクリーンショット 2022-12-31 17.20.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346005/677e3e3e-6326-85ca-b46c-081aa2c74f65.png)
※Aws BlackBelt Onlineセミナーから引用


## AWS WAFの用語
- WebACL
    - 1つのWAFの設定の塊
    - CloudFront・ALB・API Gatewayに割り当てる単位
    - 1つのリソースに対して1つのWebACLのみ、割り当てることができる
    - 複数のリソースに対して同じWebACLを割り当てることができる
    - 複数のルール/ルールグループを内包する
    - WebACLキャパシティユニット(WCU)が1500まで
        - ルールごとの重みの合計値のこと
- ルール
    - リクエストに対する条件のまとまり
    - ルールごとにWCUが設定されている
- ルールグループ
    - ルールをまとめたもの
    - 事前に定義可能
- アクション
    - リクエストをルールに照らし合わせた結果をどう扱うかの設定
    - Count(カウント)・Allow(許可)・Block(ブロック)がある
        - Count
            - AWS WAF はリクエストをカウントしますが、リクエストを許可するかブロックするかは決定しません。このアクションにより、AWS WAF がウェブ ACL の残りのルールの処理を継続します。リクエストにカスタムヘッダーを挿入し、他のルールが照合できるラベルを追加できます。
        - Allow
            - AWS WAF では、処理と応答のためにリクエストを AWS リソースに転送できます。このアクションにより、リクエストのウェブ ACL 評価が終了します。保護されたリソースに転送する前に、カスタムヘッダーをリクエストに挿入できます。
        - Block
            - AWS WAF はリクエストをブロックします。このアクションにより、リクエストのウェブ ACL 評価が終了します。デフォルトでは、AWS リソースは HTTP 403 (Forbidden) ステータスコードで応答しますが、応答をカスタマイズできます。AWS WAF がリクエストをブロックする場合、ブロックアクション設定は、保護されたリソースがクライアントに送り返す応答を決定します。
    - ルール毎にアクションがあり、全てのルールに当たらなければWebACLに設定された　DefaultActionに沿って処理される



## AWS WAFで作成できるルール
- IP制限
    - 管理系ページへのアクセス制限
        - 特定path以下へのアクセスは特定アドレス(拠点とか)からのみ許可する
    - ブラックリスト
        - 特定のIPアドレスをブロックする
- レートベースのルール
    - 5分間で閾値を超える同一アドレスからのアクセスがあった場合に、ブラックリストに追加する。
    - 一定時間経過するとブラックリストから解除する
- 特定の脆弱性に関するルール
    - XSS(クロスサイトスクリプティング)やSQLインジェクションなどWebアプリケーションの脆弱性に関するルールを作成する
- 悪意のあるHttpリクエストかを確認するルール
    - httpヘッダーがIPアドレスかを確認したり
    - httpリクエストの長さを確認したり

## AWS Managed Rules for AWS WAFの種類
### ベースラインルールグループ
様々な既知の脅威に対する一般的なルールを提供する
これらのルールグループのうち１つ以上を選択して、対象のアプリケーションを保護するためのベールラインとなるルールを設定
- Core rule set
    - OWASP Top10の脅威に基づく、一般的なウェブアプリケーションに適用可能な防御ルール
- Admin protection
    - 公開されている管理ページへの外部アクセスをブロックするためのルール
- Known bad inputs
    - 無効であることがわかっており、脆弱性の悪用またわ探索に関するリクエストパターンをブロックするルール

### ユースケース別のルールグループ
ユースケールに合わせた追加の保護対策を提供
保護対象のオペレーティングシステムやミドルウェア、アプリケーションによって、適切なルールを選択する
- SQL database
    - SQLインジェクション攻撃など、SQLデータベースの悪用に関するリクエストパターンをブロックするルール
- Linux operating system
    - Linux固有のローカルファイルインクルージョン(LFI)攻撃など、Linux固有の脆弱性の悪用に関するリクエストパターンをブロックするルール
- PHP application
    - 安全でないPHP関数のインジェクションなど、PHPに固有の脆弱性の悪用に関するリクエストパターンをブロックするルール
- WordPress application
    - WordPressサイト特有の脆弱性の悪用に関するリクエストパターンをブロックするルール
- POSIX operationg system
    - POSIXおよびPOSIXと同様のオペレーティングシステムに固有の脆弱性の悪用(ローカルファイルインクルージョン(LFI)攻撃など)に関連するリクエストパターンをブロックするルール
- Windowns operation system
    - PowerShellコマンドのリモート実行など、Windows固有の脆弱性の悪用に関連するリクエストパターンをブロックするルール
 
### IPレピテーションルールグループ
ここの攻撃の種類に対するルールではなく、よく踏み台などにされるIP元リストを提供しており、それらIPに基づいてリクエストをブロックする
- Amazon IP requtation list
    - botやその他の脅威に関連づけられているIPアドレスをブロックするルール。Amazon内部の脅威インテリジェンスにもどずくルールによって脅威IPが収集されている。
- Anonymous IP list
    - VPN、プロキシ、Torノード、ホスティングプロバイダーなどのビューワーIDの難読化を許可するサービスからのリクエストをブロックするルール

### Bot Controlルールグループ(有償)
ボットと判断されるリクエストを検知し、それに基づいたアクションを行う
- botに特化したマネージドルールを提供
- リクエストによってbotの種別を表すラベルを追加
    - ラベル内にbotの種類と特徴(シグナル)を表す情報を付与
- AWS WAFを利用する全てのユーザーは、Bot Controlのルールグループを有効にせずとも、一定の可視性が得られる
    - Bot Controlルールを利用した場合の効果を事前に取得し、利用の可否を決めることができる。

### Account Takeover Preventionルールグループ(有償)
ログインページに対する不正なアクセスから保護するためのルールグループ
- 盗まれた認証情報を利用したログイン試行を可視化及び制御
    - クレデンシャルフタッフィング攻撃
    - ブルートフォース攻撃
    - その他の異常のログイン試行
- POSTされたデータを盗まれたクレデンシャルのデータベースと照合
- アプリケーション統合SDKの利用で検知能力を向上(オプション)
    - Javascript、iOS/Android SDK

## 参考記事
https://dev.classmethod.jp/articles/aws-relearning2019-aws-waf/

https://dev.classmethod.jp/articles/fully-understood-aws-waf-v2/

https://youtu.be/4KbCJAjiA3A