次の方法で共有


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

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

Note

コマンドレットを使用して HTTP セキュリティ応答ヘッダー (CORS ヘッダーを除く) をカスタマイズする機能: Get-AdfsResponseHeadersSet-AdfsResponseHeaders が AD FS 2016 にバックポートされました。 You can add the functionality to your AD FS 2016 by installing KB4493473 and KB4507459.

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

Note

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

Scenarios

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

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

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

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

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

The ResponseHeaders attribute in the screenshot identifies the security headers included by AD FS in every HTTP response. AD FS sends the response headers only if ResponseHeadersEnabled is set to True (default value). この値を False に設定すると、AD FS が HTTP 応答にセキュリティ ヘッダーを含めないようにすることができます。 ただし、この設定は推奨されません。 You can set ResponseHeaders to False with the following command:

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 customization

By default, the header is enabled and max-age is set to one year; however, administrators can modify the max-age (lowering max-age value isn't recommended) or enable HSTS for subdomains through the Set-AdfsResponseHeaders cmdlet.

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

Example:

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

By default, the header is included in the ResponseHeaders attribute; however, administrators can remove the header through the Set-AdfsResponseHeaders cmdlet.

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

X-Frame-Options

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

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

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

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

X-Frame-Options customization

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

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

Example:

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

By default, the header is included in the ResponseHeaders attribute; however, administrators can remove the header through the Set-AdfsResponseHeaders cmdlet.

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

X-XSS-Protection

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

  • 0 disables XSS filtering. Not recommended.
  • 1 enables XSS filtering. XSS 攻撃が検出されると、ブラウザーによってページがサニタイズされます。
  • 1; mode=block enables XSS filtering. XSS 攻撃が検出された場合、ブラウザーはページのレンダリングを防ぎます。 この設定は既定で推奨される設定です。

X-XSS-Protection customization

By default, the header is set to 1; mode=block;. ただし、管理者は、 Set-AdfsResponseHeaders コマンドレットを使用して値を変更できます。

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

Example:

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

By default, the header is included in the ResponseHeaders attribute; however, admins can remove the header through the Set-AdfsResponseHeaders cmdlet.

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 ヘッダーを識別します。

    Note

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

  3. AD FS は、ヘッダーに含まれる Web API の配信元が、AD FS で構成された信頼された配信元に一覧表示されていることを確認します。 For more information on how to modify trusted origins, see CORS Customization. その後、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 customization

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

Set-AdfsResponseHeaders -EnableCORS $true

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

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

Note

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

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

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

CSP customization

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

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

The default-src directive is used to modify -src directives without listing each directive explicitly. たとえば、次の例では、ポリシー 1 はポリシー 2 と同じです。

Policy 1

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

Policy 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 を使用すると、コンテンツ作成者はドキュメントに小さなファイルをインラインで埋め込むことができます。 使用は推奨されません。

Note

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

Custom headers

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

Next