次の方法で共有


AD FS 2019 を使用して HTTP セキュリティ応答ヘッダーをカスタマイズする

Active Directory フェデレーション サービス (AD FS) 2019 では、AD FS によって送信される HTTP セキュリティ応答ヘッダーをカスタマイズする機能が追加されています。 これらのツールは、管理者が一般的なセキュリティの脆弱性から保護し、ブラウザー ベースの保護メカニズムの最新の進歩を活用するのに役立ちます。 この機能は、 Get-AdfsResponseHeadersSet-AdfsResponseHeadersという 2 つの新しいコマンドレットの導入に由来します。

コマンドレットを使用して HTTP セキュリティ応答ヘッダー (CORS ヘッダーを除く) をカスタマイズする機能: Get-AdfsResponseHeadersSet-AdfsResponseHeaders が AD FS 2016 にバックポートされました。 KB4493473とKB4507459をインストールすることで、AD FS 2016 に機能を追加できます。

この記事では、AD FS 2019 によって送信されるヘッダーをカスタマイズする方法を示すために一般的に使用されるセキュリティ応答ヘッダーについて説明します。

この記事では、AD FS 2019 がインストールされていることを前提としています。

シナリオ

次のシナリオでは、管理者がセキュリティ ヘッダーをカスタマイズする必要がある可能性があることを示します。

  • 管理者が HTTP Strict-Transport-Security (HSTS) を有効にして、ハッキングされる可能性があるパブリック Wifi アクセス ポイントから HTTP を使用して Web アプリにアクセスする可能性があるユーザーを保護しました。 HSTS は、HTTPS 暗号化を介してすべての接続を強制します。 サブドメインに対して HSTS を有効にすることで、セキュリティをさらに強化したいと考えています。
  • 管理者は、Web ページがクリックジャックされないように保護するために X-Frame-Options 応答ヘッダーを構成しました。 X-Frame-Options では、iFrame 内の Web ページをレンダリングできなくなります。 ただし、配信元 (ドメイン) が異なるアプリケーションのデータ (iFrame) を表示する新しいビジネス要件により、ヘッダー値をカスタマイズする必要があります。
  • 管理者が X-XSS-Protection を有効にして、ブラウザーがクロス スクリプティング攻撃を検出した場合にページをサニタイズしてブロックしました。 X-XSS-Protection は、クロス スクリプティング攻撃を防ぎます。 ただし、サニタイズ後にページを読み込むには、ヘッダーをカスタマイズする必要があります。
  • 管理者は クロス オリジン リソース共有 (CORS) を有効にする必要があります。また、AD FS で配信元 (ドメイン) を設定して、シングル ページ アプリケーションが別のドメインを使用して Web API にアクセスできるようにする必要があります。
  • 管理者が コンテンツ セキュリティ ポリシー (CSP) ヘッダーを有効にして、クロスドメイン要求を禁止することでクロスサイト スクリプティングとデータインジェクション攻撃を防ぎます。 ただし、新しいビジネス要件により、Web ページが任意の配信元から画像を読み込み、メディアを信頼できるプロバイダーに制限できるようにヘッダーをカスタマイズする必要があります。

HTTP セキュリティ応答ヘッダー

AD FS には、Web ブラウザーで送信された送信 HTTP 応答に応答ヘッダーが含まれています。 次のスクリーンショットに示すように、 Get-AdfsResponseHeaders コマンドレットを使用してヘッダーを一覧表示できます。

Get-AdfsResponseHeaders からの PowerShell 出力を示すスクリーンショット。

スクリーンショットの ResponseHeaders 属性は、すべての HTTP 応答に AD FS によって含まれるセキュリティ ヘッダーを識別します。 AD FS は、 ResponseHeadersEnabledTrue (既定値) に設定されている場合にのみ応答ヘッダーを送信します。 この値を False に設定すると、AD FS が HTTP 応答にセキュリティ ヘッダーを含めないようにすることができます。 ただし、この設定は推奨されません。 ResponseHeadersFalseに設定するには、次のコマンドを使用します。

Set-AdfsResponseHeaders -EnableResponseHeaders $false

HTTP Strict-Transport-Security (HSTS)

HTTP Strict-Transport-Security (HSTS) は Web セキュリティ ポリシー メカニズムであり、HTTP エンドポイントと HTTPS エンドポイントの両方を持つサービスに対するプロトコル ダウングレード攻撃と Cookie ハイジャックを軽減するのに役立ちます。 これにより、Web サーバーは、Web ブラウザーまたはその他の準拠しているユーザー エージェントが、HTTPS を使用してのみ対話し、HTTP プロトコルを使用しない必要があることを宣言できます。

Web 認証トラフィックのすべての AD FS エンドポイントは、HTTPS 経由でのみ開かれます。 その結果、AD FS は、HTTP Strict Transport Security ポリシー メカニズムによって提供される脅威を効果的に軽減します。 既定では、HTTP にはリスナーがないため、HTTP へのダウングレードはありません。 ヘッダーは、次のパラメーターを設定することでカスタマイズできます。

  • max-age=<有効期限>。 有効期限 (秒単位) は、HTTPS を使用してのみサイトにアクセスする期間を指定します。 既定値と推奨値は 31536000 秒 (1 年) です。
  • includeSubDomains。 このパラメーターは省略可です。 指定した場合、HSTS ルールはすべてのサブドメインにも適用されます。

HSTS のカスタマイズ

既定では、ヘッダーは有効になっており、max-ageは 1 年に設定されています。ただし、管理者はmax-age コマンドレットを使用して、を変更したり (最長有効期間の値を下げることは推奨されません)、サブドメインに対して HSTS を有効にしたりできます。

Set-AdfsResponseHeaders -SetHeaderName "Strict-Transport-Security" -SetHeaderValue "max-age=<seconds>; includeSubDomains"

例:

Set-AdfsResponseHeaders -SetHeaderName "Strict-Transport-Security" -SetHeaderValue "max-age=31536000; includeSubDomains"

既定では、ヘッダーは ResponseHeaders 属性に含まれています。ただし、管理者は、 Set-AdfsResponseHeaders コマンドレットを使用してヘッダーを削除できます。

Set-AdfsResponseHeaders -RemoveHeaders "Strict-Transport-Security"

X-Frame-Options

AD FS では、既定では、対話型サインインの実行時に外部アプリケーションで iFrame を使用することはできません。 この構成により、特定のスタイルのフィッシング攻撃が防止されます。 非対話型サインインは、以前のセッション レベルのセキュリティが確立されているため、iFrame 経由で実行できます。

ただし、まれなケースでは、iFrame 対応の対話型 AD FS サインイン ページを必要とする特定のアプリケーションを信頼する場合があります。 この目的には、 X-Frame-Options ヘッダーが使用されます。

この HTTP セキュリティ応答ヘッダーは、ページを <frame>/<iframe> でレンダリングできるかどうかをブラウザーに通信するために使用されます。 ヘッダーは、次のいずれかの値に設定できます。

  • 拒否。 フレーム内のページは表示されません。 この構成は既定で推奨される設定です。
  • sameorigin。 ページは、原点が Web ページの原点と同じ場合にのみフレームに表示されます。 すべての先祖も同じ原点にある場合を除き、このオプションは役に立ちません。
  • 指定されたオリジン<からのアクセス許可>。 ページは、配信元 ( https://www.".com など) がヘッダー内の特定の配信元と一致する場合にのみ、フレームに表示されます。 一部のブラウザーでは、このオプションがサポートされていない場合があります。

X-Frame-Options のカスタマイズ

既定では、ヘッダーは deny に設定されています。ただし、管理者は Set-AdfsResponseHeaders コマンドレットを使用して値を変更できます。

Set-AdfsResponseHeaders -SetHeaderName "X-Frame-Options" -SetHeaderValue "<deny/sameorigin/allow-from<specified origin>>"

例:

Set-AdfsResponseHeaders -SetHeaderName "X-Frame-Options" -SetHeaderValue "allow-from https://www.example.com"

既定では、ヘッダーは ResponseHeaders 属性に含まれています。ただし、管理者は、 Set-AdfsResponseHeaders コマンドレットを使用してヘッダーを削除できます。

Set-AdfsResponseHeaders -RemoveHeaders "X-Frame-Options"

X-XSS-Protection

この HTTP セキュリティ応答ヘッダーは、ブラウザーがクロスサイト スクリプティング (XSS) 攻撃を検出したときに Web ページの読み込みを停止するために使用されます。 この方法は XSS フィルター処理と呼ばれます。 ヘッダーは、次のいずれかの値に設定できます。

  • 0 を指定すると、XSS フィルター処理が無効になります。 お勧めしません。
  • 1 は XSS フィルタリングを有効にします。 XSS 攻撃が検出されると、ブラウザーによってページがサニタイズされます。
  • 1;mode=block は XSS フィルタリングを有効にします。 XSS 攻撃が検出された場合、ブラウザーはページのレンダリングを防ぎます。 この設定は既定で推奨される設定です。

X-XSS-Protection のカスタマイズ

既定では、ヘッダーは 1; mode=block; に設定されています。 ただし、管理者は、 Set-AdfsResponseHeaders コマンドレットを使用して値を変更できます。

Set-AdfsResponseHeaders -SetHeaderName "X-XSS-Protection" -SetHeaderValue "<0/1/1; mode=block/1; report=<reporting-uri>>"

例:

Set-AdfsResponseHeaders -SetHeaderName "X-XSS-Protection" -SetHeaderValue "1"

既定では、ヘッダーは ResponseHeaders 属性に含まれています。ただし、管理者は Set-AdfsResponseHeaders コマンドレットを使用してヘッダーを削除できます。

Set-AdfsResponseHeaders -RemoveHeaders "X-XSS-Protection"

クロスオリジンリソースシェアリング (CORS) ヘッダー

Web ブラウザーのセキュリティにより、Web ページがスクリプト内から開始されたクロスオリジン要求を行うのを防ぐことができます。 ただし、他の配信元 (ドメイン) のリソースにアクセスすることもできます。 クロス オリジン リソース共有 (CORS) はW3C 標準で、サーバーによる同一オリジン ポリシーの緩和を許可します。 CORS を使用すると、サーバーは一部のクロスオリジン要求を明示的に許可し、他の要求を拒否できます。

CORS 要求について理解を深めるために、次のシナリオでは、単一ページ アプリケーション (SPA) が別のドメインで Web API を呼び出す必要があるインスタンスについて説明します。 さらに、SPA と API の両方が AD FS 2019 で構成されており、AD FS で CORS が有効になっていることを検討してください。 AD FS では、HTTP 要求で CORS ヘッダーを識別し、ヘッダー値を検証し、応答に適切な CORS ヘッダーを含めることができます。 AD FS 2019 で CORS を有効にして構成する方法の詳細については、「 CORS カスタマイズ」セクションを参照してください。 次のサンプル フローでは、このシナリオについて説明します。

  1. ユーザーはクライアント ブラウザーを介して SPA にアクセスし、認証のために AD FS 認証エンドポイントにリダイレクトされます。 SPA は暗黙的な許可フロー用に構成されているため、認証が成功した後、要求はアクセス + ID トークンをブラウザーに返します。

  2. ユーザー認証の後、SPA に含まれるフロントエンド JavaScript によって Web API へのアクセス要求が行われます。 要求は、次のヘッダーを使用して AD FS にリダイレクトされます。

    • [オプション] - ターゲット リソースの通信オプションについて説明します。
    • 配信元 - Web API の配信元が含まれます。
    • Access-Control-Request-Method - 実際の要求が行われたときに使用される HTTP メソッド (DELETE など) を識別します。
    • Access-Control -Request-Headers - 実際の要求が行われたときに使用される HTTP ヘッダーを識別します。

    CORS 要求は、標準の HTTP 要求に似ています。 ただし、配信元ヘッダーが存在すると、受信要求が CORS 関連であることを示します。

  3. AD FS は、ヘッダーに含まれる Web API の配信元が、AD FS で構成された信頼された配信元に一覧表示されていることを確認します。 信頼できる配信元を変更する方法の詳細については、「 CORS カスタマイズ」を参照してください。 その後、AD FS は次のヘッダーで応答します。

    • Access-Control-Allow-Origin - Origin ヘッダーと同じ値。
    • Access-Control-Allow-Method - Access-Control-Request-Method ヘッダーと同じ値。
    • Access-Control-Allow-Headers - Access-Control-Request-Headers ヘッダーと同じ値。
  4. ブラウザーは、次のヘッダーを含む実際の要求を送信します。

    • HTTP メソッド (DELETE など)。
    • 配信元 – Web API の配信元が含まれます。
    • Access-Control-Allow-Headers 応答ヘッダーに含まれるすべてのヘッダー。
  5. 検証後、AD FS は、Access-Control-Allow-Origin 応答ヘッダーに Web API ドメイン (配信元) を含めることで要求を承認します。

  6. Access-Control-Allow-Origin ヘッダーを含めると、ブラウザーは要求された API を呼び出すことができます。

CORS のカスタマイズ

既定では、CORS 機能は有効になっていません。ただし、管理者は、 Set-AdfsResponseHeaders コマンドレットを使用して機能を有効にすることができます。

Set-AdfsResponseHeaders -EnableCORS $true

有効にすると、管理者は同じコマンドレットを使用して信頼できる配信元の一覧を列挙できます。 たとえば、次のコマンドでは、配信元の https&#58;//example1.comhttps&#58;//example1.comからの CORS 要求が許可されます。

Set-AdfsResponseHeaders -CORSTrustedOrigins https://example1.com,https://example2.com

管理者は、信頼できる配信元の一覧に "*" を含めることで、任意の配信元からの CORS 要求を許可できますが、この方法はセキュリティの脆弱性のため推奨されず、選択した場合は警告メッセージが表示されます。

コンテンツ セキュリティ ポリシー (CSP)

この HTTP セキュリティ応答ヘッダーは、ブラウザーが悪意のあるコンテンツを誤って実行するのを防ぐことで、クロスサイト スクリプティング、クリックジャッキング、その他のデータインジェクション攻撃を防ぐために使用されます。 コンテンツ セキュリティ ポリシー (CSP) をサポートしていないブラウザーは、CSP 応答ヘッダーを無視します。

CSP のカスタマイズ

CSP ヘッダーのカスタマイズには、ブラウザーで Web ページの読み込みが許可されるリソースを定義するセキュリティ ポリシーの変更が含まれます。 既定のセキュリティ ポリシーは次のとおりです。

Content-Security-Policy: default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' data:;

default-src ディレクティブは、各ディレクティブを明示的に一覧表示せずに -src ディレクティブを変更するために使用されます。 たとえば、次の例では、ポリシー 1 はポリシー 2 と同じです。

ポリシー 1

Set-AdfsResponseHeaders -SetHeaderName "Content-Security-Policy" -SetHeaderValue "default-src 'self'"

ポリシー 2

Set-AdfsResponseHeaders -SetHeaderName "Content-Security-Policy" -SetHeaderValue "script-src 'self'; img-src 'self'; font-src 'self';
frame-src 'self'; manifest-src 'self'; media-src 'self';"

ディレクティブが明示的にリストされている場合、指定された値は default-src に指定された値をオーバーライドします。 次の例では、img-src は値を '*' (任意のオリジンからイメージを読み込むことができます) を受け取り、他の -src ディレクティブは値を 'self' (Web ページと同じ配信元に制限) として受け取ります。

Set-AdfsResponseHeaders -SetHeaderName "Content-Security-Policy" -SetHeaderValue "default-src 'self'; img-src *"

default-src ポリシーには、次のソースを定義できます。

  • 'self' - このソースを指定すると、Web ページのオリジンからのみコンテンツが読み込まれるように制限されます。
  • 'unsafe-inline' - ポリシーでこのソースを指定すると、インライン JavaScript と CSS を使用できます。
  • 'unsafe-eval' - ポリシーでこのソースを指定すると、eval などの JavaScript メカニズムにテキストを使用できます。
  • 'none' - このソースを指定すると、どの配信元からのコンテンツも読み込みに制限されます。
  • data: - データの指定: URI を使用すると、コンテンツ作成者はドキュメントに小さなファイルをインラインで埋め込むことができます。 使用は推奨されません。

AD FS は認証プロセスで JavaScript を使用するため、既定のポリシーに "unsafe-inline" ソースと "unsafe-eval" ソースを含めることで JavaScript を有効にします。

カスタム ヘッダー

前述のセキュリティ応答ヘッダー (HSTS、CSP、X-Frame-Options、X-XSS-Protection、CORS) に加えて、AD FS 2019 では新しいヘッダーを設定できます。

たとえば、新しいヘッダー "TestHeader" と "TestHeaderValue" を値として設定できます。

Set-AdfsResponseHeaders -SetHeaderName "TestHeader" -SetHeaderValue "TestHeaderValue"

設定が完了すると、次の Fiddler スニペットに示すように、AD FS 応答で新しいヘッダーが送信されます。

Fiddler の [ヘッダー] タブにある [その他] 設定で、[TestHeader: TestHeaderValue] が強調表示されているスクリーンショット。

Web ブラウザーの互換性

次の表とリンクを使用して、各セキュリティ応答ヘッダーと互換性のある Web ブラウザーを特定します。

HTTP セキュリティ応答ヘッダー ブラウザーの互換性
HTTP Strict-Transport-Security (HSTS) HSTS ブラウザーの互換性
X-Frame-Options X-Frame-Options ブラウザーの互換性
X-XSS-Protection X-XSS-Protection ブラウザーの互換性
クロス オリジン リソース共有 (CORS) CORS ブラウザーの互換性
コンテンツ セキュリティ ポリシー (CSP) CSP ブラウザーの互換性

次へ