WAFって何してくれるの？をAzureベースで紹介してみた

##1.はじめに

最近サイバー攻撃による情報漏洩等の問題が増え、セキュリティ面での対応が求められています。
そんな中 webサイト に対するセキュリティ強化として WAF(Web Application Firewall) を使うのが一般的になりつつあるかと思います。

AWSやAzure等のクラウドサービスでもWAFを簡単に適応できるようになっています。

とりあえず、適応させておけばセキュリティ面でも安全だから、適応させてるよ！みたいな方や、
WAFの適応を検討中なんて方に、WAFが何をしてくれているのかということを書いていきます。


##2.WAFとは?

WAFの説明は、[Wikipedia](https://ja.wikipedia.org/wiki/Web_Application_Firewall)の説明がわかりやすかったので、以下引用します。

> Web Application Firewall（略称:WAF、ワフ）とは、ウェブアプリケーションの脆弱性を悪用した攻撃からウェブアプリケーションを保護するセキュリティ対策の一つ。WAFを導入するウェブサイト運営者は、検出パターンを設定することで、ウェブサイトとウェブサイト利用者との間の通信の内容を機械的に検査する。WAFを使用することで、以下の効果が期待できる。
脆弱性を悪用した攻撃からウェブアプリケーションを防御する。
脆弱性を悪用した攻撃を検出する。
複数のウェブアプリケーションへの攻撃をまとめて防御する。


まとめるとウェブアプリケーションを守ってくれるファイアウォールになります。
[PCI-DSS](https://www.jcdsc.org/pci_dss.php)の要件にも、WAFの導入または、アプリケーションコードの定期的な見直しがあるほどです。

一般的に言われているファイアウォールとは、OSI参照モデル(*)のレイヤーの違いがあります。
ファイアウォールは第3層と第4層のネットワーク層とトランスポート層を保護してくれているのに対して、WAFは第7層のアプリケーション層を保護します。

そのため、従来のファイアウォールでは、IPアドレスやTCP/UDPベースの保護だったのに対し、WAFでは、HTTP/HTTPS等のURLベースの保護が可能となりました。
インフラレイヤーでは対応できなかったアプリケーションレイヤーへの攻撃にも対応できるようになり、今までより高性能なファイアウォールとして使用することができます。

(*)OSI参照モデルについては、以下サイトがわかりやすかったのでご参照ください。
https://qiita.com/tatsuya4150/items/474b60beed0c04d5d999

クラウドベースのWAFだと適応難度も低く、とてもおすすめです。
一例として、Azureの ApplicationGateway というサービスを例に挙げて紹介していきます。



##3.Azure ApplicationGateway
本サービスは、アプリケーション層のロードバランサーのサービスで、WAFの機能を付与させることができます。構成イメージとしてはwebサーバの前に ApplicationGateway を配置します。構成イメージは以下の図をご参照ください([Azureドキュメント](https://docs.microsoft.com/ja-jp/azure/application-gateway/waf-overview)の図そのままです)。

![pasted image 0.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329544/ccebabee-b62b-db84-98e8-791d388c8ac5.jpeg)


そして、サイバー攻撃を検知すると、サーバへアクセスさせずに、以下画像の403エラーを返します。

※ApplicationGatewayが防止モードになっている事を前提としています。
![png;base64b3faa0d02da4ec0b.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329544/489c4707-6400-2bf4-9660-a2f28bceac1f.jpeg)


それでは、どんなサイバー攻撃に対応しているかを書いていきます。

※[AzureのApplicationGateway](https://docs.microsoft.com/ja-jp/azure/application-gateway/overview#web-application-firewall)が使用している、[OWASP CRS 3.0](https://www.owasp.org/index.php/Category:OWASP_ModSecurity_Core_Rule_Set_Project)を元に書きます。

##4.WAFが対応しているサイバー攻撃一覧

以下のサイバー攻撃からアプリケーションを保護します。
　・クロスサイトスクリプティング
　・SQLインジェクション
　・DoS攻撃
　・ポートスキャナ
　・ヘッダーインジェクション、リクエストスマグリング
　・フェイル攻撃、パス攻撃
　・リモートファイルインジェクション
　・リモートコード実行
　・PHPインジェクション
　・セッション固定攻撃
　・ブラックリストに登録されているIP、危険度の高い国からのアクセスを拒否

この中から一部を抜粋して紹介していきます。(残りは別の記事で記載します。)


###4.1.クロスサイトスクリプティング
クロスサイトスプリクティングとは、ユーザのアクセス時に表示内容が生成される「動的Webページ」の脆弱性、もしくはその脆弱性を利用した攻撃手法です。
攻撃の流れについては、以下サイトがわかりやすいのでご参照ください。
https://cybersecurity-jp.com/security-measures/18427


クロスサイトスクリプティングに対してApplicationGatewayでは、
webサイトに対してスクリプト文を送信する行為自体に403エラーを返すため、
①の罠を仕掛ける時点で403エラーを返します。

###4.2.SQLインジェクション
SQLインジェクションとは、攻撃者がサーバーに、データベースを操作するSQL文やコマンドを送り、想定外の動作をさせる攻撃手法です。
攻撃の流れについては、以下サイトがわかりやすいのでご参照ください。
https://academy.gmocloud.com/advance/20150608/700


SQLインジェクションに対してApplicationGatewayでは、
webサイトにSQL文を送信する行為自体に403エラーを返すため、
①のSQL文を送信する時点で403エラーを返します。

###4.3.DoS攻撃
DoS攻撃とは、攻撃者がターゲットのWebサイトやサーバに対し大量のトラフィックを送り、
サービスの提供を不能な状態にする攻撃手法です。

攻撃の流れについては、以下サイトがわかりやすいのでご参照ください。
また、DDoS攻撃についても記載されています。
https://cybersecurity-jp.com/security-measures/18262


DoS攻撃に対してApplicationGatewayでは、
過剰な負荷が生じた時点でサーバへのアクセスはさせずに、403エラーを返します。


##5.まとめ
Azure ApplicationGatewayをベースにWAFについてまとめました。
WAFがやってくれていることを知らずに適応させようとすると予想以上に値段が高く、
躊躇するかと思います(私も最初は正直「必要ないのでは？」と思ってました)。
しかし、実際に対応内容を知ると、むしろ安いくらいなのでは？なんて思います。
~~(コードレビューの工数を考えるととても安いです。)~~


以下サイトに実際に使用されているルールが記載されているため、調査等を行う際はご活用ください。
・Core Rule Set Inventory
https://www.netnea.com/cms/core-rule-set-inventory/