Firewallのおさらい
Firewallとは・・・不正なアクセスを防ぐ壁のような役割をもったシステム
ネットワークの境界におく
ファイアウォールには、以下のような形態があります。
- パケットフィルタ(Packet Filter): 1989年に登場。パケットは送信情報の最小単位であり、パケットのヘッダーに含まれるIPアドレスやポート番号に基づいて制御を行います。(ネットワーク層やトランスポート層) ブラックリストまたはホワイトリストに基づいて通信を許可または破棄し、ログを記録します。 ただし、送信元IPアドレスのなりすましに対して脆弱です。
- サーキット(回路、経路)レベルゲートウェイ型: 2つのIP間のポート番号を記憶することにより、セッションレベルでの検査が可能です。(セッション層やトランスポート層) ハンドシェイク中に通過するデータを検査する。クライアントとホスト間のハンドウェイデバイスとして働き、内部ネットワークの隠蔽もできるため、送信元IPアドレスのなりすましを防ぐことができます。DOS攻撃やポートスキャンに有効です。その後パケットの中身の確認は行わない。
- アプリケーション層: 特定のアプリケーションやプロトコルごとに制御が可能です。パケットの中身まで確認でき、ユーザー単位や通信内容に基づいて制御ができます。プロキシファイアウォール、WAF、Webフィルタリング、IPS(侵入防止システム)、ユーザーIDごとの管理などがこの層で行われます。
わかりやすい図
https://office110.jp/security/knowledge/technology/firewall のファイアウォールの種類 の図
https://www.rworks.jp/system/system-column/sys-entry/21277/ のファイアウォールとは? の図
また、これらのファイアウォールの統合形態として、UTM(Unified Threat Management, 統合脅威管理)や次世代ファイアウォール(NGFW)が存在します。これらはオールインワンのアプライアンスで、ファイアウォール、VPN、IDS/IPS、アンチウイルス、Webフィルタリング、アンチスパムなどの機能を1台で提供します。
IDS・IPSとは・・・攻撃の手口をデータベース化したシグネチャを元に不正アクセスを通知・遮断するという仕組み
主にOSとソフトウェアの制御
- IDS(Intrusion Detection System:侵入検知システム)は悪意のあるトラフィックを検知すると、通知で知らせる
- IPS(Intrusion Prevention System:侵入防止システム)はリアルタイムで監視して、不正アクセスを検知すると、セッションを切断
https://www.rworks.jp/cloud/azure/azure-column/azure-entry/27173/ の3. Azure Firewall と NSG、WAF、IPS/IDS との違い の図がわかりやすい
AWS WAF(Web Application Firewall)について、
WAFは、Webアプリケーションの脆弱性を悪用した攻撃からwebアプリケーションを保護するためのシステムであり、条件に基づいてウェブトラフィックをフィルタリングします。OSI参照モデルのアプリケーション層の検査が可能です。
AWS WAFでは、以下の要素を使用してフィルタリング条件を管理します。
- ルール(Rule): フィルタリング条件を定義する単位です。IPアドレス、HTTPヘッダーと本文、またはカスタムURIなどを使用して条件を作成できます。例、日本のIPアドレスかつ特定のヘッダーが含まれる場合, white listのみ許可したりip setを定義してblack listとして拒否したり
- ルールグループ(Rule Group): ルールの集まりであり、自身で作成したルールグループの他に、AWSが管理するルールグループやマーケットプレイスで提供されているものも利用できます。
- アクセス制御リスト(ACL, Access Control List): リソースに関連付けるルールやルールグループの集まりです。
ルールの例 uriがv1から始まるかつ、X-Forwarded-For headerが114.175.209.232ではない場合blockする
{ "Name": "ip-limit-rule", "Priority": 0, "Action": { "Block": {} }, "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "ip-limit-rule" }, "Statement": { "AndStatement": { "Statements": [ { "ByteMatchStatement": { "FieldToMatch": { "UriPath": {} }, "PositionalConstraint": "STARTS_WITH", "SearchString": "v1", "TextTransformations": [ { "Type": "NONE", "Priority": 0 } ] } }, { "NotStatement": { "Statement": { "ByteMatchStatement": { "FieldToMatch": { "SingleHeader": { "Name": "X-Forwarded-For" } }, "PositionalConstraint": "EXACTLY", "SearchString": "114.175.209.232", "TextTransformations": [ { "Type": "NONE", "Priority": 0 } ] } } } } ] } } }
AWS WAFの「マネージドルール(Managed Rule)」を使用することにより、以下のメリットがあります。
- コスト効率が高く、メンテナンスが容易です。
- 一般的な脅威に対する一般的な保護が提供されます。 OWASP(Open Web Application Security Project)top 10
- Webアプリケーションの特性に基づいた保護が可能であり、OSやデータベースの種類に応じた対策も行えます。
- 既知の悪意のあるIPアドレスをブロックするためのIPレピュテーションリストによる保護も受けられます。
これらのルールを適用することにより、SQLインジェクション、クロスサイトスクリプティング、ディレクトリトラバーサル、OSコマンドインジェクション、ブルートフォースアタック、DDoS攻撃、バッファオーバーフローなど、さまざまな攻撃を防ぐことができます。
https://docs.aws.amazon.com/waf/latest/developerguide/aws-managed-rule-groups.html
また、Rate-basedの独自ルール(5分ごとのリクエスト回数制限)を追加することで、DDoS攻撃やブルートフォース攻撃、悪意のあるボットへの対策も行えます。
wafの動きを確かめてみる
https://domain/?password="' OR 'A' = 'A"
大量にリクエストを送った場合
正常な動作が確認ができた
https://us-east-1.console.aws.amazon.com/wafv2/homev2/web-acl/
WAFには今回は使いませんでしたが、ルールにマッチした場合のactionとして許可、拒否、カウント、CAPTCHA、チャレンジがあり、ルールグループを適用させるリクエストを制限したり(スコープダウンステートメント)、actionの上書きをしたり、labelの使用した制御など様々な機能があるのでdocmentを眺めてみると面白いと思います。
https://docs.aws.amazon.com/ja_jp/waf/latest/developerguide/waf-captcha-puzzle.html
https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html
気になった点
導入する時、正常なリクエストがblockされてしまわないか
- まずはcountモードで利用して、調整を行ってから、blockに切り替える
複数のcloudfrontに同一aclを適用した場合の料金(market placeを含まない場合)
まとめ
今回wafについて学習することで、アクセス制御やセキュリティに関する様々な文献、技術を知ることができた。
試しにwafを使った環境を作成した時、海外からのcloudfrontのipへの攻撃が多かったので地域で絞る有効性を強く感じた。 基本的なルールはAWSが管理してくれていてほぼメンテナンスフリー、低コストで利用することができるので、ぜひまだ使っていない方は使ってみることをお勧めします。
https://docs.aws.amazon.com/waf/latest/developerguide/what-is-aws-waf.html#waf-intro
https://owasp.org/www-project-top-ten/
https://www.rworks.jp/cloud/azure/azure-column/azure-entry/27173/