Microsoft セキュリティ アドバイザリ 4092731
Azure Cloud Services マシン キー生成アルゴリズムの更新
公開日: 2018 年 5 月 8 日 |更新日: 2018 年 6 月 29 日
バージョン: 1.2
概要
Microsoft は、Azure Cloud Services のマシン キーが生成される方法で更新に関連する情報を提供するために、このセキュリティ アドバイザリをリリースしています。 このシナリオは、Azure Cloud Services Web ロールを使用しているお客様に影響を与える可能性があります。 既存のデプロイのマシン キーは、エントロピが不十分で、非推奨の暗号化アルゴリズムを使用して生成されています。
この問題に対処するために、Microsoft は、暗号化が強力な乱数生成の使用を含む、新しい Azure Cloud Services Web ロールデプロイでマシン キーを生成するために使用されるアルゴリズムの更新プログラムをリリースしました。 既存のすべての Web ロールは、再デプロイされない限り、以前に生成されたマシン キーを保持します。 特定の詳細情報が与えられると、攻撃者は非推奨のアルゴリズムによって作成されたマシン キーを推測できる可能性があります。 脆弱なマシン キーは、状況によっては、セキュリティ機能のバイパスを許可する場合があります。
このアドバイザリは、このシナリオの影響を受けるかどうか、および実行する必要があるアクション (ある場合) を特定するためのガイダンスを提供します。
影響を受けるクラウド サービス
Web ロールを使用する Azure デプロイは、この問題の影響を受けます。 唯一の例外は、CS パッケージの Web.config に独自のマシン キーを指定した場合です。 Azure Worker ロール、仮想マシン、およびその他のすべての Azure オファリングは影響を受けません。
よく寄せられる質問
1. 操作方法影響を受けるかどうかを知っていますか?
CS パッケージの Web.config に独自のマシン キーを指定した場合を除き、すべての Azure Cloud Service Web ロールがこの問題の影響を受けます。 Azure Cloud Service Worker ロール、Virtual Machines、およびその他すべての Azure オファリングは影響を受けません。
ASP.NET では、次のようないくつかの目的でマシン キーが使用されます。
- Web フォームビューステートデータの改ざん防止
- ASP.NET Web フォーム セッション Cookie の生成と検証
- CSRF 対策トークン
- machinekey.protect メソッドと machinekey.unprotect メソッドを使用した暗号化。
2. 影響を受けるアプリケーションを修正するための前提条件はありますか?
はい。廃止されたバージョンの Azure SDK for .Net で Web ロールがデプロイされた場合、拡張されたマシン キー生成アルゴリズムは使用されません。 サポートされているバージョンを参照 https://azure.microsoft.com/en-us/downloads/archive-net-downloads/ してください。 サポートされているバージョンにアップグレードするには、以前に参照されているサイトのリンクをクリックして、サポートされている SDK バージョンでプロジェクトをダウンロードして再デプロイしてください。 サポートされている SDK を使用してプロジェクトがデプロイされていることを検証したら、このアドバイザリの追加の手順に従います。
3. 影響を受けるアプリケーション操作方法修正しますか?
新しいマシン キーを生成するには、.cspkg と .cscfg を新しいクラウド サービスとして再デプロイし、ステージング スロットにワークロードをデプロイしてスワップデプロイ (VIP スワップ) を実行するか、独自のマシン キーを挿入してから、同時アップグレードを実行する必要があります。 一般的な更新プログラムの展開操作では不十分です。 次に、高レベルの軽減オプションと詳細な手順について説明します。
オプション 1: ワークロードを新しいクラウド サービスにデプロイする。 新しいクラウド サービスへのトラフィックを指すように CNAME を更新します。 古いサイトへのトラフィックがゼロになると、古いクラウド サービスを削除できます。
オプション 2: クラウド サービスをステージング スロットにデプロイし、スワップデプロイを実行します。
オプション 3: Web.config で独自のマシン キーを生成し、同時更新を実行します。 これにより、すべてのインスタンスが一度に更新されるため、アプリケーションのダウンタイムが発生します。
ダウンタイムを回避するには、オプション 1 を使用することをお勧めします。 また、マシン キーの変更中にセッションが中断される可能性があるため、使用率の低い期間中は軽減策を実行することをお勧めします。
注: オプション 1 とオプション 2 で新しいマシン キーを取得すると、アプリケーションの IP アドレスが変更されます。
4. MachineKey.Encode()/MachineKey.Protect() を使用して永続的なデータを暗号化するためにマシン キーを使用しました。 データ操作方法回復しますか?
MachineKey がデータの暗号化に使用された場合 (MachineKey.Encode()/MachineKey.Protect() を使用)、軽減手順を実行する前に、Web.config で定義されている古いマシン キーとアルゴリズムを使用してデータの暗号化を解除する必要があります (MachineKey.Decode()/MachineKey.Unprotect() をそれぞれ呼び出します)。 軽減手順が完了すると、MachineKey.Encode()/MachineKey.Protect() と MachineKey.Decode()/MachineKey.Unprotect() の呼び出しで、web.config から更新されたマシン キーとアルゴリズムが使用されます。
5. アプリケーション操作方法新しいマシン キー アルゴリズムを使用していることがわかりますか?
クラウド サービスにデプロイが 1 つしかない場合は、Azure 管理ポータルでクラウド サービスの [証明書] タブに Azure Machine Key 証明書を表示するチェックで十分です。 この証明書が存在する場合、デプロイではマシン キー アルゴリズムが使用されます。
クラウド サービス (運用とステージング) に 2 つのデプロイがある場合は、Web ロールにリモート デスクトップを配置し、IIS の構成を確認する必要があります。 マシン キー証明書が表示された場合は、新しいマシン キー アルゴリズムを使用しています。 このチェックは、デプロイごとに 1 つの Web ロールに対して行う必要があります。 VM に接続できない場合は、サポート チケット (#7 の手順) を提出してください。サポート チームは、デプロイで新しいマシン キーが使用されているかどうかを確認できます。
6. "Microsoft Azure Service Management for MachineKey" 証明書とは
これは、拡張アルゴリズムと共にマシン キーを暗号化するために使用される証明書です。
7. "Microsoft Azure Service Management for MachineKey" 証明書はだれが管理し、有効期限が切れるとどうなりますか?
この証明書は Azure によって管理されます。 この証明書は、新しいアルゴリズムを使用して新しいマシン キーを生成するために 1 回使用されるため、お客様はこの証明書の有効期限について心配する必要はありません。 有効期限が切れると影響はありません。
8. VM から証明書を削除または削除できますか?
いいえ。証明書を削除することはできません。
9. 軽減手順に関する質問がある場合は、どうすればよいですか?
標準のエスカレーション プロセスを使用して、Cloud Services のサポート ケースを送信してください。 Azure Portal でエスカレートするには、次の手順に従います。
- Azure Portal の [ヘルプとサポート ] に移動します。
- 技術的な問題の種類を選択します。
- サブスクリプションを選択し、[サービス] で Cloud Services (Web ロール/Worker ロール) サービスを選択します。
- [次へ] をクリックし、問題の種類として [MachineKey Certificate Update] を選択し、サポート チケットの詳細を入力します。
軽減策を実行するための詳細な手順
オプション 1: クラウド サービスを再デプロイします。
ポータルを使用して再デプロイを実行します。
- .cspkg と .cscfg を使用して新しいクラウド サービスを作成します。 詳細については、こちらを参照してください。
- 新しいクラウド サービスへの トラフィックを指すように CName または A レコード を更新します。
- トラフィックが新しいクラウド サービスを指している場合は、古いクラウド サービスを削除します。
PowerShell を使用して再デプロイを実行します。
.cspkg と .cscfg を使用して新しいクラウド サービスを作成します。 詳細については、こちらを参照してください。
例: New-AzureService -ServiceName "yourServiceName" -Label "MyTestService" -Location "South Central US"
.cspkg と .cscfg を使用して新しいデプロイを作成します。 詳細については、こちらを参照してください。
例: New-AzureDeployment -ServiceName "yourServiceName" -Slot "Production" -Package "YourCspkgFile.cspkg" -Configuration "YourConfigFile.cscfg"
新しいクラウド サービスへの トラフィックを指すように CName または A レコード を更新します。
トラフィックが新しいクラウド サービスを指している後に、マシン キーが更新されていない以前のクラウド サービスを削除します。 詳細については、こちらを参照してください。
例: Remove-AzureService -ServiceName "yourOldServiceName"
Rest API を使用して再デプロイを実行します。
新しいクラウド サービスを作成します。 詳細については、こちらを参照してください。
例: https://management.core.windows.net/<subscription-id>/services/hostedservices
create deployment API を使用して新しいデプロイを作成します。 .cspkg と .cscfg を見つける必要がある場合は、Get-Package API を呼び出すことができます)。
例: https://management.core.windows.net/<subscription-id>/services/hostedservices/<cloudservice-name>/deploymentslots/production
トラフィックが新しいクラウド サービスを指している後に、マシン キーが更新されていない以前のクラウド サービスを削除します。 詳細については、こちらを参照してください。
例: https://management.core.windows.net/<subscription-id>/services/hostedservices/<old-cloudservice-name>
オプション 2: デプロイをスワップします。
オプション 2 を使用するには、空のステージング スロットが必要です。 現在ステージング スロットにデプロイがある場合は、それを削除してから、次の手順に従います。
ポータルを使用してスワップ展開を実行します。
ステージング スロットに .cspkg と .cscfg をアップロードして、クラウド サービスのデプロイを更新します。 これには、マシン キーを生成するための新しい証明書が含まれます。 詳細については、こちらを参照してください。
運用スロットとステージング スロットを交換する。 詳細については、こちらを参照してください。
以前の運用デプロイでステージング スロットを削除します。 詳細はこちら
PowerShell を使用してスワップデプロイを実行します。
ステージング スロットに cspkg と cscfg をデプロイします。 詳細については、こちらを参照してください。
例: New-AzureDeployment -ServiceName "yourServiceName" -Slot "Staging" -Package "YourCspkgFile.cspkg" -Configuration "YourConfigFile.cscfg"
運用スロットとステージング スロットを交換する。 詳細については、こちらを参照してください。
例: Move-AzureDeployment -ServiceName "yourServiceName"
以前の運用デプロイでステージング スロットを削除します。
例: Remove-AzureDeployment -ServiceName "yourServiceName" -Slot "Staging"
Rest API を使用してスワップデプロイを実行します。
デプロイの作成 API を使用して、ステージング スロットに新しいデプロイを作成します。 .cspkg と .cscfg を見つける必要がある場合は、Get-Package API を呼び出すことができます)。
例: https://management.core.windows.net/<subscription-id>/services/hostedservices/<cloudservice-name>/deploymentslots/staging
スワップデプロイを使用して、運用スロットとステージング スロットを スワップします。
例: https://management.core.windows.net/<subscription-id>/services/hostedservices/<cloudservice-name>
以前の運用デプロイでステージング スロットを削除する
例: https://management.core.windows.net/<subscription-id>/services/hostedservices/<cloudservice-name>/deploymentslots/staging
オプション 3: Web.config で独自のマシン キーを生成し、同時デプロイを実行します。
PowerShell で新しいマシン キー XML 要素を生成します (付録 A を参照)。
WebConfig を新しいマシン キーで更新します。 手順を参照してください。
クラウド サービスを再パッケージ化します。
新しいマシン キーを 含む .cscfg ファイルを使用して、アップグレード配置 を実行します。 モードを同時に設定する必要があります。または、アプリケーションが異常な状態になる可能性があります。
免責情報
このアドバイザリで提供される情報は、いかなる種類の保証もなく「現状のまま」提供されます。 Microsoft は、商品性と特定の目的に対する適合性の保証を含め、明示または黙示を問わず、すべての保証を放棄します。 Microsoft Corporation またはそのサプライヤーは、Microsoft Corporation またはそのサプライヤーがこのような損害の可能性について通知された場合でも、直接的、間接的、付随的、派生的、ビジネス上の利益の損失、または特別な損害を含む一切の損害について一切の責任を負いません。 一部の州では、派生的損害または付随的損害に対する責任の除外または制限が認められていないため、前述の制限は適用されない場合があります。
リビジョン
- V1.0 (2018 年 5 月 8 日): アドバイザリが公開されました。
- V1.1 (2018 年 5 月 24 日): MachineKey.Encode()/MachineKey.Protect() を使用してデータが暗号化された後に永続的なデータを回復する方法を説明する FAQ #4 を追加しました。 これは情報の変更のみです。
- V1.2 (2018 年 6 月 29 日): Azure ゲスト OS の Azure Cloud Services への参照を変更しました