Azure Web Application Firewallとは何ですか?

完了

ここでは、Azure Web Application Firewall の基本について説明します。 この概要は、Azure Web Application Firewall が Contoso の全体的なネットワーク セキュリティ戦略に追加するのに役立つツールであるかどうかを評価するのに役立ちます。

Azure Web アプリケーション ファイアウォールの概要

悪意のあるユーザーが Web アプリを気にしない可能性があります。 ただし、テストでは、ボットまたは悪意のあるアクターが、デプロイから数分以内に新しい Web アプリの弱点を調査することを示しています。 Web 上にアプリを配置する場合は、脅威アクターがアプリの脆弱性をほぼ即座にテストすると仮定します。 このようなプローブは、アプリの有効期間中も継続すると想定することもできます。

Web アプリのほとんどの悪意のあるテストでは、1 つ以上の一般的な脆弱性が存在するかどうかが確認されます。 検出された場合、脅威アクターはこれらの脆弱性を使用して、次のような攻撃を実行する可能性があります。

  • SQL インジェクション
  • クロスサイト スクリプティング
  • ローカルファイルとリモートファイルインクルード
  • HTTP/HTTPS フラッディング
  • 悪意のあるボット攻撃

Web アプリ開発サイクルの一般的なタスクには、最も一般的なセキュリティ ホールを閉じるコードの記述が含まれます。 セキュリティ コードを記述するには、時間、専門知識、テストが必要です。

Azure Web Application Firewall は、Azure でホストされる Web アプリの一元的な保護を提供する Azure サービスです。 Azure Web Application Firewall は、SQL インジェクションやクロスサイト スクリプティングなどの一般的な脅威から Web アプリを保護します。

Azure Web アプリケーション ファイアウォールを使用した Azure 仮想ネットワークの図。ボットと脅威は Web アプリからブロックされます。正当な要求が許可されます。

Azure Web アプリケーション ファイアウォールは数分でデプロイできます。 Web アプリは、1 行のセキュリティ コードを記述することなく、既知の脅威からすぐに強力な保護を受けます。

Azure Web Application Firewall の主な機能

Azure Web Application Firewall の評価に役立つ重要な機能の一部を次に示します。

  • 管理ルール: Microsoft のセキュリティ チームは、Azure Web Application Firewall が一般的な悪用を検出して防止するために使用する規則を作成、管理、更新します。 ルールが変更された場合、またはルール セット (次の説明を参照) が変更された場合、Microsoft は Azure Web Application Firewall を自動的かつシームレスに更新します。

    Azure Web Application Firewall によって提供されるマネージド ルールを変更または削除することはできません。 ただし、特定のルールが環境に問題がある場合 (たとえば、Web アプリへの正当なトラフィックがブロックされる)、除外を作成したり、ルールまたはルール セットを無効にしたりできます。 既定の動作を上書きするカスタム ルールを作成することもできます。

  • ボット ルール: ボット ルールは、適切なボットを識別し、不適切なボットから保護します。 不適切なボットは、Microsoft 脅威インテリジェンスに基づいて検出されます。

  • カスタム ルール: Azure Web Application Firewall によって提供されるマネージド ルールが Web アプリケーションに対する特定の脅威をカバーしていない場合は、カスタムルールを作成できます。

  • モード: Azure Web アプリケーション ファイアウォールは、2 つのモードのいずれかで動作できます。 検出モードではルールに違反する要求のみがログに記録され、防止モードではルールに違反する要求のログとブロックの両方が行われます。

  • 除外リスト: 要求をチェックするときに特定の属性を無視するように Azure Web アプリケーション ファイアウォールを構成できます。

  • ポリシー: 一連のマネージド ルール、カスタム ルール、除外、およびその他の Azure Web アプリケーション ファイアウォール設定を、Azure Web アプリケーション ファイアウォール ポリシーと呼ばれる 1 つの要素に結合できます。 その後、管理とメンテナンスを容易にするために、そのポリシーを複数の Web アプリに適用できます。

  • 要求サイズの制限: 小さすぎる要求または大きすぎる要求にフラグを設定するように Azure Web アプリケーション ファイアウォールを構成できます。

  • アラート: Azure Web Application Firewall は Azure Monitor と統合されます。 この統合により、WAF (Web アプリケーション ファイアウォール) が脅威を検出したときに、ほぼリアルタイムのアラートが提供されます。

Azure Web Application Firewall によって防止される一般的な攻撃

次の表では、Azure Web Application Firewall が保護に役立つ悪意のある脅威の最も一般的な種類について説明します。

脅威 説明
クロスサイト スクリプティング 脅威アクターは、Web アプリケーションを使用して、悪意のあるコードを別のユーザーの Web ブラウザーに送信します。 ブラウザーによってコードが実行され、スクリプトはユーザーのセッション データ、Cookie、およびその他の機密情報にアクセスできるようになります。
ローカル ファイル インクルージョン 攻撃者は、サーバーによる include ステートメントの処理の脆弱性を悪用します。ほとんどの場合、PHP スクリプトで発生します。 スクリプトの include ステートメントに特別に構成されたテキストを渡すことで、攻撃者はサーバー上にローカルに存在するファイルを含めることができます。 攻撃者は機密情報にアクセスし、サーバー コマンドを実行できる可能性があります。
PHP インジェクション 攻撃者は、サーバーをだまして PHP コマンドを実行するように特別に構成されたテキストを挿入します。 これらのコマンドにより、攻撃者はローカルまたはリモートの PHP コードを実行できます。 攻撃者は機密データにアクセスし、サーバー上でコマンドを実行できる可能性があります。
プロトコル攻撃 攻撃者は、特別に構成されたテキストを HTTP/HTTPS 要求ヘッダーに挿入します。 ヘッダーに挿入された特定のテキストに応じて、攻撃者はサーバーを悪用して機密データを表示したり、コードを実行したりすることができます。
リモート コマンド実行 攻撃者はサーバーを悪用して、サーバーのオペレーティング システムに関連付けられているコマンドを実行します。 たとえば UNIX システムでは、攻撃者がサーバーを ls 実行してディレクトリの一覧を取得する可能性があります。
リモート ファイル インクルージョン ローカル ファイルインクルードと同じですが、攻撃者は、リモート ファイル (攻撃者が制御するリモート サーバー上のファイル) をスクリプトの include ステートメントに渡す特別に構成されたテキストをサーバーに送信する点を除きます。
セッション固定 攻撃者は Web アプリの脆弱性を悪用し、攻撃者が有効なセッション ID を取得できるようにします。 攻撃者はユーザーを悪用して、その ID で新しいセッションを認証します。 その後、攻撃者はこのユーザー検証セッションをハイジャックします。
SQL インジェクション Web フォーム フィールドでは、攻撃者は、サーバーを悪用して SQL コマンドを実行するように特別に構成されたテキストを挿入 (または "挿入") します。 これらのコマンドを使用すると、攻撃者は機密データへのアクセス、データの挿入、更新、削除、または SQL 操作の実行を行うことができます。

前の表に示されているすべての悪用は、サーバーが受信した入力を信頼する場合にのみ可能です。 これらの悪用だけをチェックしてサニタイズするコードを記述するのは難しく、時間がかかります。 前の表では、Web アプリが直面する可能性のある悪用のごく一部のみを表しています。 Azure Web Application Firewall は、これらの攻撃などを防ぐために設計されています。

入力の無害化

最新の Web アプリが直面する脅威はさまざまで洗練されています。 ただし、ほとんどの場合、悪用される可能性がある理由は、Web アプリが受信した入力を暗黙的に信頼することです。

たとえば、承認された Web アプリ ユーザーがユーザーのアカウントにサインインできるようにする Web フォームがあるとします。 フォームは、次の 3 つの要素で構成されます。

  • [ユーザー名] テキスト ボックス
  • [パスワード] テキスト ボックス
  • [サインイン] ボタン

承認されたユーザーがフォームに入力し 、[サインイン] を選択すると、Web アプリ スクリプトによってユーザー名とパスワードが変数に格納されます。 これらの変数には、それぞれ userNameuserPassword という名前が付けられているとします。 その後、スクリプトは次のステートメントを実行します。

sql = "SELECT * FROM users WHERE username='" + userName + "' AND password='" + userPassword + "'"

たとえば、ユーザー名が support で、パスワードが 1234ABCDされている場合、 sql 変数の値は次のようになります。

SELECT * FROM users WHERE username='support' AND password='1234ABCD'

Web アプリは、この SQL ステートメントを実行します。 クエリからレコードが返された場合、Web アプリはユーザーをサインインさせます。

次に、攻撃者が admin'--] フィールドに入力し、[パスワード] フィールドを空白のままにしたとします。 この場合、結果として得られる SQL ステートメントを次に示します。

SELECT * FROM users WHERE username='admin'--' AND password=''

多くの SQL システムでは、二重ダッシュ (--) によってコメントの先頭がマークされます。 --後はすべて無視されるため、前のステートメントは次のコードと同じです。

SELECT * FROM users WHERE username='admin'

adminという名前のユーザーがいると仮定すると、このコマンドは攻撃者を管理者ユーザーとしてサインインさせます。重大な侵害です。

Azure Web Application Firewall で承認されたサインインを許可し、承認されていないサインインを拒否する 2 回のサインイン試行を示すネットワーク図。

前の例は、 SQL インジェクションと呼ばれる悪用のインスタンスです。 攻撃者は、すべての入力を信頼する Web アプリで SQL インジェクションやその他の悪用を利用できます。

Azure Web Application Firewall は、Web アプリとそのユーザー入力の間に非信頼の障壁を作成します。 Azure Web Application Firewall では、すべての入力が悪意のある可能性があると想定されているため、その入力 はサニタイズされます

入力をサニタイズすることの意味は、コンテキストによって異なります。 たとえば、入力をサニタイズすると、SQL コメント インジケーターなどの明らかに危険なテキスト要素が削除される可能性があります。 ただし、サニタイズが行われると、結果は Web アプリまたはそのバックエンド データに害を与える可能性のない入力になります。