セキュリティ強化: ASP.NETのマシン キーを不正アクセスから保護する方法


マシン キーの機密保護の重要性

ASP.NETアプリケーションでは、<machineKey>要素が様々なアプリケーションレベルの機能(例えばビューステートの検証、認証、メンバーシップの認証、アンチCSRFトークンなど)を保護するのに重要となります。
このキーにより、アプリケーションによって暗号化またはハッシュ化されたデータの耐タンパー性(改ざん防止)と機密性が確保されます。これがweb.configファイルに保存されている場合、<machineKey>とweb.configファイルを保護するのに、特別な注意を払う必要があります。

マシン キーの安全な管理

漏洩したマシン キーによるリスクを軽減するには、以下のセキュリティ対策を適用してください(下記のマシン キーの「タイプ」を確認するのセクションを参照し、貴社のマシン キーの「タイプ」を確認してください)。

  1. 単一のインスタンス: Azureの自動生成マシン キーを使用する (可能な場合は推奨): 推奨される構成は、Microsoftのガイダンスに従って「AutoGenerate」を宣言し、マシン キーの自動生成を利用するものです。これにより、<machineKey>は自動生成ユーティリティを使用して自動生成され、レジストリ内にのみ保存されるようになります。
  2. スケーリングされたインスタンス: Azureのプラットフォームにより管理されたキーを使用する (可能な場合は推奨): Azureによって管理されている環境内に最近デプロイされたSitecore製品では、マシン キーをAzureが管理するよう構成されている可能性があります。この場合、Azureがrootweb.config内で管理するため、<machineKey>要素はweb.configファイル内には存在しません。
  3. スケーリングされたインスタンス: Azureのベスト プラクティスに則って保護された静的なマシン (必要な場合):
    共有された静的なマシン キーを使用している場合(一般的なシナリオとしては、非Azure管理の複数インスタンス デプロイに必要な場合など)、<machineKey>は明確にweb.configファイル内に宣言し、以下のようなプラクティスに従って、高価値なシークレットとして取り扱う必要があります。
    • web.configファイル内の<machineKey>を暗号化する。
    • マシン キーを定期的にローテーションする。
    • ソース コード管理ツール(GitHubなど)にマシン キーを含んだweb.configファイルを絶対にコミットしない。
    • web.configファイルへのアクセスをアプリケーション管理者のみに制限する。

大まかな手順: 静的なマシン キー

共有された(静的な)<machineKey>をweb.configファイル内で管理する際の大まかな手順は次の通りです。

  1. (新規または更新された)<machineKey>を作成します。
  2. MicrosoftのRSAキー コンテナーで<machineKey>を暗号化します。
    1. 重要: SXP 9.3以降には、KB1001762の一部として文書されている回避策の適用が必要となる、既知の問題があります。
  3. RSAキー コンテナーに全てのインスタンスをエクスポートします。
  4. (暗号化された)<machineKey>を全てのインスタンスにコピーします。
  5. (必要な場合)インスタンスを再起動し、セッションをリフレッシュし、<machineKey>で署名されたアクティブなRSSを含むコンテンツを再生成します。

詳細な手順: 静的なマシン キー

共有された(静的な)マシン キーを管理する際の詳細な手順は次の通りです。

  1. (新規または更新された)<machineKey>の作成:
    新しい<machineKey>を安全な方法で作成します。詳細な指示につきましては、以下のMicrosoftの公式ドキュメントをご参照ください。
    How to generate a <machineKey> element

  2. MicrosoftのRSAキー コンテナーによる<machineKey>の暗号化:
    web.config fileファイルの<machineKey>セクションを暗号化すると、ファイル システムにおける機密キーが平文で漏洩しないよう防止することにより、保護レイヤーが追加されます。IISはaspnet_regiis.exeツールを使用した構成セクションの暗号化をサポートしています。

    詳細な指示につきましては、以下のMicrosoftの公式ドキュメントをご参照ください。
    To encrypt the connectionStrings and machineKey sections of the Web.config file

    ※重要:

    • SXP 9.3以降には、KB1001762の一部として文書されている回避策の適用が必要となる、既知の問題があります。
    • 重要: 必ずaspnet_regiis.exeツールの最も新しいバージョンを使用してください。現在、以下の場所に配置されています。
      C:\Windows\Microsoft.NET\Framework64\v4.0.30319 フォルダー

  3. RSAキー コンテナーへの全てのインスタンスのエクスポート:
    この手順により、複数のインスタンス間で負荷分散した際に、新しく作成され暗号化された<machineKey>で保護された全てのアイテムが、適切に処理されることが保証されます。
    詳細な指示につきましては、以下のMicrosoftの公式ドキュメントをご参照ください。
    Walkthrough: Creating and Exporting an RSA Key Container

  4. (暗号化された)<machineKey>の全てのインスタンスへのコピー:
    <machineKey>要素が暗号化されているため、ここで全ての関連するサーバー インスタンスのweb.configにコピーすることができます。

  5. (必要な場合)インスタンスの再起動、セッションのリフレッシュ、<machineKey>で署名されたアクティブなRSSを含むコンテンツの再生成
    Sitecore環境における<machineKey>のローテーションとは何か、またどのように処理するべきかを理解するため、以下の節で新しいキーの影響の詳細をご参照ください。

  6. ベスト プラクティス: マシン キーの定期的なローテーション
    キーのローテーションにより、仮にキーが侵害されたとしても、キーが悪用される可能性を制限することができます。ローテーションのプラクティスは、インターネットに公開された環境や、厳格なコンプライアンス要件が求められる環境で特に重要です。なお、キーのローテーションとは、定期的に新しいマシン キーを作成して配布するプラクティスのことです。

マシン キーの作成とローテーションの際の考慮事項

静的な<machineKey>をSitecore製品環境内でローテーションするには、以下のMicrosoftの公式セキュリティ ブログに掲載されている標準的なASP.NETアプリケーションの指示に従ってください。
Recommendations

Sitecore製品環境内でのキーのローテーションが安全かつスムーズに行われるようにするため、以下の一般的な推奨事項に従っていただくことをお薦めいたします。

追加の考慮事項

キーのローテーション後に、古いマシン キーは有効でなくなることにご留意ください。これは、(古いマシン キーで暗号化された)ビューステートを伴う進行中のセッションはエラーとなり、再認証が必要となることを意味します。この理由により、全てのアクティブなセッションをローテーションの前に終了すること、およびキーのローテーションは製品の非繁忙時間帯に実施していただくことをお薦めいたします。

ユーザーが経験する可能性のあるエラーのタイプおよび対応の例として、以下のものがあります。

<machineKey>のローテーション前にインスタンスをシャット ダウン・静止させ、セッションを終了させていた場合、影響は以下のもののみとなります。

マシン キーが外部に漏洩した場合

技術的に見てより発生しにくいケースとなりますが、自動生成されAzureで管理されているマシン キーも漏洩の対象となる可能性があります。そのため、貴社環境全体にわたって不審もしくは異常な挙動を監視するよう警戒することが必要となります。

貴社マシン キーの侵害が疑われる場合は、Microsoftによる推奨事項を貴社環境に応じて採用していただくことをお薦めいたします。

Microsoftの記事では、次のように記載されています。
マシン キーが漏洩した場合、全てのマシン キーのローテーションを開始する必要があります。万が一暴露されたキーの悪用に成功した場合、マシン キーのローテーションだけでは脅威アクターや、その他の悪用成功後の活動によって構築される可能性のあるバックドアや永続的な攻撃手法に対して充分に対処できるとは言えず、更なる調査が必要となる可能性があります。

マシン キーの「タイプ」を確認する

貴社デプロイで使用されているマシン キーの「タイプ」を確認するには、<SITECORE_ROOT>\web.configファイルを確認してください。

自動生成されたmachineKeyキー

自動生成キーが使用されている場合、以下と同様の値を持つ<machineKey>が現れます。

  <machineKey
    decryptionKey="AutoGenerate"
    validationKey="AutoGenerate,IsolateApps" />

Azureによる管理

Azureの水平スケーリングを使用している場合、<machineKey>はAzureによって管理され、<machineKey>要素はweb.configファイルからは「欠落」します。このシナリオでは、マシン キー管理はプラットフォーム管理の一環としてAzureが対応します。

静的machineKeyキー

静的なマシン キーがある場合、例えば以下のような正確なキー値を持つ<machineKey>要素が存在します(以下は説明のために創作された、単なるキーの例であることにご注意ください)。

     <machineKey decryptionKey="D94AB5..."
      validationKey="90F219..." ... />

このシナリオでは、貴社または貴社の運用パートナー(デプロイ モデルによっては、SitecoreのMCPチームが含まれる場合があります)がマシン キーのライフサイクル管理(安全な作成、継続的な保護、必要に応じてローテーションを含む)を担当します。

Sitecore製品とマシン キー

様々なデプロイ、プロビジョニング、および現在進行中のマシン キー管理シナリオに関して追加の情報を必要とするお客様向けに、以下の情報をご提供しています。

Experience Platform

SitecoreのXM、XPまたはXC(一般的にはSitecore Experience Platformとして知られています)向けのデプロイ ツールを使用する場合、以下のようになります。

複数インスタンスで、かつ全てのインスタンスで共有された静的なマシン キーを構成する必要がある環境の場合、詳細につきましてはSitecoreの「複数のContent Deliveryインスタンスを構成する」ドキュメントの手順6を参照してください。
マシン キーを含む環境の構成および管理は、お客様(または運用パートナー)の担当となります。

Managed Cloud Standard

Managed Cloud Standardの場合、Sitecoreはお客様用の環境をプロビジョニングし、運用管理をお客様ならびに運用パートナー様に引き渡します。

  1. 単一インスタンス モード (コンテナーまたはPaaS):
    1. <自動生成されたマシン キー>とともにプロビジョニングされます(<web.config>にはマシン キーは保存されません)。
  2. 複数インスタンス モード:
    1. <web.config>内に静的なマシン キーを持つコンテナーがプロビジョニングされます。
      1. もしくは、マシン キーをKeyVaultに保管し、K8シークレットを使用してインジェクトすることで保護することができます。これにより、実行時にKeyVaultに保存されたマシンキーが<web.config>にインジェクトされます(マシン キーの値は<web.config>に保存・保持されることはありません)。
    2. Azure App Services(別名PaaS)は、Azureの管理するマシン キー(<web.config>外で管理)とともにプロビジョニングされます。
      1. もしくは、マシン キーを環境変数としてAppSettingsに保管することで保護することができます。これにより、実行時にKeyVaultに保存されたマシンキーが<web.config>にインジェクトされます(マシン キーの値は<web.config>に保存・保持されることはありません)。

Managed Cloud Premium

Managed Cloud Premiumの場合、Sitecoreはお客様用の環境をプロビジョニングし、MCPチームがお客様に代わってマシン キーの運用管理を担当します。

  1. 単一インスタンス モード (コンテナーまたはPaaS):
    1. <自動生成されたマシン キー>とともにプロビジョニングされます(<web.config>にはマシン キーは保存されません)。
  2. 複数インスタンス モード:
    1. <web.config>内に静的な<マシン キー>を持つコンテナーがプロビジョニングされます。
      1. もしくは、マシン キーをKeyVaultに保管し、K8シークレットを使用してインジェクトすることで保護することができます。これにより、実行時にKeyVaultに保存されたマシンキーが<web.config>にインジェクトされます(マシン キーの値は<web.config>に保存・保持されることはありません)。
    2. Azure App Services(別名PaaS)では、お客様は以下のいずれかを選択してプロビジョニングできます。
      1. CDロール用に複数のApp Serviceをプロビジョニングする場合: 静的なマシン キーを持つ<web.config>とともにプロビジョニングされます。
      2. CDロール用に単一のApp Serviceと複数のインスタンスをプロビジョニングする場合: Azureにより管理されるマシン キーとともにプロビジョニングされます。マシン キーの値は<web.config>に保存・保持されることはありません。
      3. もしくは、マシン キーを環境変数としてAppSettingsに保管することで保護することができます。これにより、実行時にKeyVaultに保存されたマシンキーが<web.config>にインジェクトされます(マシン キーの値は<web.config>に保存・保持されることはありません)。

Sitecore MCPチームが静的なマシン キーのローテーションを担当します。お客様と連携し、お客様のご要望もしくは必要に応じて、ローテーションを遂行します。

XM Cloud (SaaS)

XM Cloud (SaaS)はSitecoreにより管理されています。Sitecoreは必要に応じて、XMCloud (SaaS)環境におけるマシンキーの管理(ローテーションを含む)を担当します。

よくある質問と回答

このKB記事のリンクはいつ公開されますか?

セキュリティ情報の公開の一部として、このKB記事を2025年9月3日ごろに公開することを予定しています。

このKB記事のリンクを他者と共有してもよいですか?

これらの指示は現在機密扱いであり、関連する通知メールの受信者に制限されておりますのでご了承ください。

このリストを他者と共有してもよいですか?

全てのお客様に対応する時間的猶予を持っていただくため、セキュリティ情報が公開されるまでの間、本件リンクは非公開の機密情報として取り扱っていただく必要がございます。これは、全てのSitecoreのお客様が確実に保護されるようにするための措置です。

セキュリティー侵害を受けたか確認するにはどうすればよいですか?

Microsoftのアナウンスにおいて、貴社マシン キーが漏洩しているか、および貴社環境が侵害を受けているかの調査に役立つ一連の手順とチェック方法が提供されています。
また、Sitecoreではお客様にキーをローテーションしていただくこと、および定期的にキーのローテーションを実施していただくことをお薦めいたします。

自社のマシン キーが公開されているか確認する方法はありますか?

Microsoftのアナウンスをご参照いただき、記載されている指示に従ってください。

Microsoftは、Github レポジトリにおいて、暴露されていることが確認されたマシン キーのハッシュ値の一覧を提供しており、また提供されているスクリプトを使用して貴社環境のマシン キーを確認していただくことを推奨しています。

なお、Microsoftのリストには全ての暴露されたキーが含まれていない可能性があるため、このリストは(100%)信頼できるリストや網羅的なリストとみなすべきでない点にご留意ください。
Sitecoreでは、お客様のキーをローテーションしていただくこと、また定期的にキーのローテーションを実施していただくことをお薦めいたします。

自社のキーが漏洩したと考えられる場合、どうすればよいですか?

Microsoftのアナウンスをご参照いただき、記載されている指示に従ってください。

以下は、上記のMicrosoftのアナウンスからの引用です。
マシン キーが漏洩した場合、全てのマシン キーのローテーションを開始する必要があります。万が一暴露されたキーの悪用に成功した場合、マシン キーのローテーションだけでは脅威アクターや、その他の悪用成功後の活動によって構築される可能性のあるバックドアや永続的な攻撃手法に対して充分に対処できるとは言えないため、更なる調査が必要となる可能性があります。

Sitecoreでは、お客様のキーをローテーションしていただくこと、また定期的にキーのローテーションを実施していただくことをお薦めいたします。

Sitecoreの指示に従ってデプロイしたことがありますが、それでも脆弱性の影響を受けますか?

2017年より前にデプロイされたSitecore Experience Platformバージョン9.0を使用されている場合で、かつSitecoreのドキュメントのそのリリースに含まれているサンプルの静的キーを使用していた場合、貴社のキーは公開されているキーということになります。
不審な活動がないか貴社環境をご確認いただき、早急にマシン キーをローテーションしていただくことをお薦めいたします。

自社環境にランタイム保護機能がない場合、どうすればよいですか?

適切なEDR(Endpoint Detection and Response)またはMicrosoft Defenderなどの次世代型のアンチウイルス テクノロジーを貴社環境にデプロイし、EDRからのアラートのモニタリングとそれに対しての対応を貴社の全体的なセキュリティ運用規律にて策定していただくことを強くお薦めいたします。

Microsoft Defenderを自社のManaged Cloudアカウントに追加するにはどうすればよいですか?

Managed Cloudのお客様であれば、どなたでもAzure Defenderをデプロイしていただくことができます。
ただし、SOCサービスの提供につきましては、自社リソースもしくは自社のセキュリティ サービス プロバイダーをご利用いただき、お客様自身で担当していただく必要があります。

更なる詳細につきましては、以下の記事をご参照ください。
KB1003617
KB1003366