🐧

AWS WAF マネージドルールに嫌われて画像がアップロード出来なかったお話

2023/10/19に公開

AWS WAF マネージドルールに嫌われて画像がアップロード出来なかったお話

はじめに

初めまして。アイディオットDX開発部、インフラ担当の小野です。
今回はAWS WAFのマネージドルールを適用した際に、画像がアップロード出来なくなった時の対処法について紹介します。

前提

  • AWSのマネージドルールを適用していること
  • ALB配下にWebサーバを配置していることと(そして画像はS3に格納される)
  • そのALBに対してAWS WAFを設定するものとする

AWS WAFとは

AWSが提供するWAF(Web Application Firewall)です。(いつかAKAMAI-WAFも記事にしたい)
SQLインジェクションやXSSなどのWebアプリケーション(7層)に対する攻撃から対象のリソースを保護します。
今回は省略しますが3・4層も保護するためAWS Shieldというサービスと併用されることが殆どかと思います。

[レイヤー&保護]
logo
また、2023年10月現在、私が確認した限り以下のサービスに対してAWS WAFを設定することが出来ます。

  • Application Load Balancer ←今回はコレ
  • Cloud Front
  • API Gateway
  • AppSync GraphQL API
  • Cognito user pool
  • App Runner service
  • Verified Access

マネージドルールとは

あらかじめAWS側で用意されている、一般的なWebアプリケーション攻撃に対応するルールのセットです。
※独自のルールの設定には高い専門知識や管理が必要であり、マネージドルールやサードパーティ製のルールを購入し適用することをおすすめします。

今回適用したマネージドルールは以下

  • Core rule set
一般に Web アプリケーションに適用されるルールが含まれています。
これにより、OWASP の出版物や一般的な Common Vulnerabilities and Exposures( CVE )に
記載されているものを含む、広範な脆弱性の悪用に対する保護が提供されます。
  • Known Bad Inputs
無効であることがわかっており、脆弱性の悪用または発見に関連付けられている要求パターンを
ブロックできるルールが含まれています。
これにより、悪意のある攻撃者が脆弱なアプリケーションを発見するリスクを減らすことができます。
  • SQL Database
SQL インジェクション攻撃など、SQL データベースの悪用に関連する要求パターンを
ブロックできるルールが含まれています。
これにより、不正なクエリのリモート注入を防ぐことができます。
  • Amazon IP reputation list
このグループには、Amazon 脅威インテリジェンスに基づくルールが含まれます。
これは、ボットやその他の脅威に関連するソースをブロックする場合に役立ちます。
  • Linux operating system
  • PHP application

構成図イメージ

ALBに適用されているWAFのルールに基づいて通信が許可/拒否されます。

イメージ画像参考サイト
logo

画像がアップロードできない!

前置きが長くなりましたが本題です。
いざ構築してしばらくたつと、開発側から以下のような連絡が

画像をアップロードしたら、AWSの403ページに表示されてしまう!ぴえん

調査してみると、AWS WAFによってブロックされていました。
AWSManagedRulesCommonRuleSetというマネージドルール(Core rule set)の中の
SizeRestrictions_BODYという項目が原因だそう。
調べてみると8キロバイト以上はブロックする仕様だそうです。(それはさすがに厳しいですね・・w)

logo

よって、AWSManagedRulesCommonRuleSet内の該当の項目をスルーするように設定。

logo

これで上限8キロバイトという、画像のアップロードが必須な当PJ震撼の保護項目が解除されました。
(実際に○バイトまではOKのようにしたい場合はカスタムでWAFのルールを設定できる高度な技術者になる必要がありそうですね)

まとめ

アプリケーションをDDoS攻撃から保護するためには必須のWAF
マネージドルールは非常に設定しやすく、一般的な攻撃からはほぼ守ってもらえる点も魅力的です。
しかし、マネージドルールがゆえに、中身の設定がブラックボックスになっており詳細まではわかりにくいのが実態です。
なので、設定をしたら実際に動作を検証しながら上記で紹介したように保護を解除する項目などを設定していくことが必要ですね。
それでは、よりWAFライフを。

あとがき

AI・データ利活用をリードし、世界にインパクトを与えるプロダクトを開発しませんか?

アイディオットでは、今後の事業拡大及びプロダクト開発を担っていただけるエンジニアチームの強化を行っております。
さらに会社の成長を加速させるため、フロントエンドエンジニア、バックエンドエンジニア、インフラエンジニアのメンバーを募集しております!
日本を代表する企業様へ自社プロダクトを活用した、新規事業コンサルティング、開発にご興味のある方はお気軽にご連絡ください。

【リクルートページ】
https://aidiot.jp/recruit/
【募集ポジション一覧】
https://open.talentio.com/r/1/c/aidiot/homes/3925
【採用についてのお問合せ先】
株式会社アイディオット 採用担当:大島
メールアドレス:recruit@aidiot.jp

今回の記事で一部画像をお借りした参考サイト

Discussion