★★★ Twitterやってます。フォローして頂けると嬉しいです(*^^*) ★★★
スポンサーリンク
この記事にはプロモーションが含まれていることがあります

API呼び出しで403エラー(AWS WAF編)

IT
スポンサーリンク

API呼び出しで403エラー(AWS WAF編)

事象

ある日、Webアプリケーションの開発中、何の問題もなくAPI呼び出しして正常応答だったのに突然エラーになってしまいました。

プログラムも特に直近修正していないし、なぜ?

ちなみにAPIからの応答は、403: Forbidden

403ということは、なにか権限不足?

一通り権限のチェックをしてみたけれど特に怪しいところも変なところもない。なんなんだ?

いろいろ調べた結果、タイトルで既にネタバレしていますが、インフラチームが追加したWAF(Web Application Firewall)が通信内容をチェックしてブロックしていたのでした。

ちゃんと動いてたんだ~(^^;)

確認方法

AWSマネジメントコンソールからWAFの設定画面を開き、WebACLsをクリックします。

右側のプルダウンから該当するルールセットを選択します。どのルールで引っかかっているか分からないと思うので一通り確認します。

今回はこのAWSManagedRulesCommonRuleSetというAWSが予め用意している一般的なルールセットで引っかかってました。

WAFで検知したリクエストのうちサンプリングしたものが表示されます。

  1. Meric name:WAFのルールセット名
  2. Source IP:リクエスト送信元IPアドレス
  3. URI:検知したリクエスト
  4. Rlue inside route group:ルールセット内に定義されているルール詳細
  5. Action:WAFがどう処理したか
  6. Time:検知時刻

Action(⑤)がBLOCKになっているので、APIに飛ばしたリクエストがブロックされてしまっています。ちなみにURI(③)をクリックすると更にリクエスト内容の詳細が確認できます。

今回はGeneric_RFI_BODYというルールに引っかかってブロックされてしまいました。公式ドキュメントによると、

IPv4 アドレスを含む URL を埋め込むことにより、ウェブアプリケーションの RFI (リモートファイルインクルージョン) を悪用しようとする試行に対してリクエストボディを検査します。例としては、http://https://ftp://ftps://file:// などのパターンがあり、悪用の試みに IPv4 ホストヘッダーが含まれています。

ベースラインルールグループ コアルールセット (CRS) マネージドルールグループ

ということでどうやらリクエストにIPアドレスが含まれていたのでブロックしたみたいです。

マネージドルールを使うと簡単な設定で一般的に危ないリクエストをこのように弾いてくれますので便利な反面、今回のようにシステムが想定外の動作をしてしまう可能性もあります。

目的に機能を実現するにはこのルールを変更しなければならない時もあります。そんな時は、WAFのルールを一部変更することでブロックしないようにすることができます。

基本的には安易にブロック解除はしない方がよいですが、もしブロックを解除する時は、本当に問題ないかアーキテクチャやプログラム上にセキュリティホールとなり得るものがないか慎重に検証してからにしましょう。

リモートファイルインクルージョンは、PHP5.2未満を使用しているシステムで生じるセキュリティ脅威であるため、それ以外であれば問題ないようです
(参考:日経XTECH)。

WAFの設定を変更

ブロックされていたリクエストを通過させて問題ことの確認が取れたら、WAFで通過できるよう設定を変更します。

WAFの画面で該当するルールセットを選択しEditボタンをクリックします。

このようにルールセットに定義されている各ルールについて、どう処理するか細かく設定できます。

今回は、RFI_BODYがブロックされてしまっていたので、これを通過(Allow)に変更して設定を保存すれば設定変更完了です。

各ルールは設定を変更できます。ルールについて詳しく知りたい場合は公式ドキュメントをご覧ください。

設定変更結果の確認

ブロックされたリクエストを再度送ってみましょう。

おお、今度は通過!設定変更がうまくいきました。これでエラーはもう出ないはずです。

スポンサーリンク

まとめ

このように開発中には起きなかった問題がインフラ設定によって発生することもありますので、ブログラムコードに問題が見つからない場合はインフラの設定を確認してみましょう。あっさり解決するかもしれません。

  • WAFのマネージドルールを使うと簡単にWebアプリケーションへの攻撃を防ぐことができる
  • どんなルールがあるのか確認しておく必要がある
  • 遅くてもシステム開発の総合テストぐらいからセットしておくと安全
  • ルールを変更する場合はセキュリティ的に問題がないか慎重に検討してから行う

それにしてもロードバランサーAPI Gatewayにアタッチすればすぐにセキュリティの強化ができるWAFは便利ですよね。

おすすめ書籍の紹介コーナー

AWSは機能が多岐にわたり存在し、初心者が足を踏み入れるとほぼ100%迷います。まずはこの教科書で全体を広く浅く知ることが重要です。

AWSを使うメリットとして迅速なサービス運用環境の構築が求められます。失敗できない本番環境を構築する前に読んでおきたい一冊です。

そしていよいよAWS認定試験に挑戦したくなった場合は、こちらで徹底的に学習しましょう。これからはAWSです。

コメント

タイトルとURLをコピーしました