AWSセキュリティホワイトペーパー「Use AWS WAF to Mitigate OWASP’s Top 10 Web Application Vulnerabilities」のご紹介

2017.07.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、コカコーラ大好きカジです。

AWSからNew Security Whitepaper Now Available: Use AWS WAF to Mitigate OWASP’s Top 10 Web Application Vulnerabilitiesが公開されていました。概要をご紹介します。

はじめに

ご注意:ホワイトペーパーのNotice部分に注意書きがあります。簡単に言うとこのホワイトペーパーは情報提供を目的としており、変更される可能性があります。また、ホワイトペーパーの情報についての利用は軽減するもので完全に防御できるものではありませんので自己責任でご利用をお願い致します。

OWASPとAWS WAFについて簡単に説明します。

OWASPとはOpen Web Application Security Projectの略で、セキュアなアプリケーションの開発・購入・運用を推進するために作られた、オープンなコミュニティです。 重要なインパクトのある10の脆弱性についてまとめた、「OWASP Top 10」が知られています。 世界各国のセキュリティ専門家が参加しており、各国に支部があります。なお、日本には、OWASP Japanが存在します。

AWS WAFについてはAWS再入門 – AWS WAF編を参照ください。

それではドキュメントの概要に入ります。

AWS WAFを使用して軽減する OWASPのトップ10 Webアプリケーションの脆弱性

Webアプリケーションの脆弱性の緩和

2017年4月に、OWASP Top 10が新しくリニューアルされました。 以下が一覧となります。

  • A1 インジェクション
  • A2 壊れた認証とセッション管理
  • A3 クロスサイトスクリプティング(XSS)
  • A4 ブロークン・アクセス制御(NEW)
  • A5 セキュリティの設定ミス
  • A6 機密データの露出
  • A7 不十分な攻撃からの保護(NEW)
  • A8 クロスサイトリクエストフォージェリ(CSRF)
  • A9 既知の脆弱性を持つコンポーネントを使用
  • A10 UnderprotectedのAPI(NEW)
  • Old Top 2013 A10 未確認のリダイレクトと転送

新しいA4カテゴリは、2013年のトップ10から、安全ではない直接オブジェクト参照と機能レベルアクセス制御のカテゴリを統合されたようです。 以前のA10カテゴリのUnvalidated Redirects and Forwardsは、Application Programming Interface(API)セキュリティに重点を置く新しいカテゴリに置き換えられました。 このセキュリティホワイトペーパーでは、古いA10と新しいA10の両方について記載されています。

各A1〜A10についての推奨事項について説明や、アプリケーションの脆弱性を緩和するためにAWS WAFへ実装について記載されています。(詳細についてはドキュメント内を参照ください。) 最後にホワイトペーパーに記載されている一般的な軽減策を設定するCloudFormationテンプレートのサンプルをダウンロードできます。

ダウンロード元は、https://s3.us-east-2.amazonaws.com/awswaf-owasp/owasp_10_base.ymlとなります。

Create Stackする際のパラメータは以下になります。最初は、BlockをCountに変更した上で利用した方が良いと思います。

*CloudformationでCreate Stackする際のリージョンで、どのリージョンのWAF Ruleになるかが決まりますのでご注意ください。

aws-waf-owasp10-01

CREATE_COMPLETEになった後、AWS WAFの設定を確認すると以下の画像ようにルールが設定されています。

aws-waf-owasp10-02

Create Stackで作成されるルールについての概要は以下となります。

トラフィックの悪いソース

識別された不良なトラフィックソースからの要求をブロックするための汎用IPブロックリストルール。

壊れたアクセス制御

  • 一般的なファイルシステムのパストラバーサルとローカルおよびリモートのファイルインジェクションを検出するパストラバーサルとファイルインジェクションルール (LFI / RFI)パターンを使用して疑わしいリクエストをブロックします。
  • 管理モジュールのアクセスを既知の送信元IPに限定する特権モジュールアクセス制限ルール。 テンプレートを使用して、1つのパスプレフィックスと送信元IPアドレスを設定できます。後で条件を直接変更することによって、パターンを追加することができます。

壊れた認証とセッション管理

盗難またはハイジャックされた認証資格情報を使用する不正な要求をブロックするブロックリスト JSON WebトークンまたはセッションID。

クロスサイトリクエストフォージェリー(CSRF)

CSRFを軽減するトークンの存在を強制するルール。

クロスサイトスクリプティング(XSS)

一般的なHTTP要求コンポーネントでXSS攻撃を緩和するルール。

インジェクション

一般的なHTTP要求コンポーネントのSQLインジェクション攻撃を緩和するSQLインジェクションルール。

不十分な攻撃防御

テンプレートパラメータを使用してさまざまなHTTP要求コンポーネントの最大サイズを構成し、これらの最大サイズを超える異常な要求をブロックできる、要求サイズの衛生ルール。

セキュリティの設定ミス

PHP固有のサーバー構成ミスの悪用を検出するルール。 PHPベースのアプリケーションを実行していない場合、このルールはあまり効果的ではありませんが、PHPの脆弱性を突き止める不要な自動化されたHTTPリクエストを除外することは価値があります。

既知の脆弱性を持つコンポーネントの使用

アプリケーションで使用されていないサーバーサイドインクルードコンポーネントやコンポーネント機能など、直接アクセスできない公開URLパスへのアクセスを制限するルール。

まとめ

SQLインジェクションや、XSSのルール例がありましたが、その他の設定についてもこのCloudformationのテンプレートで比較的簡単にRule作成できることがわかりました。 一部のRuleは最大サイズの制限もされるため、アプリケーションによっては影響が出ますので十分検証の上ご利用ください。