Поделиться через


Советы по безопасности Майкрософт 4092731

Обновление алгоритма создания ключей компьютера в Azure Облачные службы

Опубликовано: 8 мая 2018 г. | Обновлено 29 июня 2018 г.

Версия: 1.2

Краткий обзор

Корпорация Майкрософт выпускает эти рекомендации по безопасности, чтобы предоставить сведения, связанные с обновлением, так как ключи компьютера создаются для Azure Облачные службы. Этот сценарий может повлиять на клиентов, использующих веб-роли Azure Облачные службы. Ключи компьютера в существующих развертываниях были созданы с недостаточной энтропией и использованием устаревших алгоритмов шифрования.

Чтобы устранить эту проблему, корпорация Майкрософт выпустила обновление алгоритма, используемого для создания ключей компьютеров в новых развертываниях веб-роли Azure Облачные службы, включая использование криптографически сильного случайного создания чисел. Все существующие веб-роли будут хранить свои ранее созданные ключи компьютера, если не будут развернуты повторно. Учитывая некоторые подробные сведения, злоумышленник может угадать ключи компьютера, созданные нерекомендуемым алгоритмом. Уязвимые ключи компьютера могут в некоторых случаях разрешить обход функций безопасности.

Эти рекомендации предоставляют клиентам рекомендации по выявлению того, влияют ли они на этот сценарий и какие действия, если таковые имеются, они должны предпринять.

Затронутые облачные службы

Развертывания Azure, использующие веб-роли, влияют на эту проблему. Единственным исключением является предоставление собственного ключа компьютера в файле Web.config в пакете CS. Роли рабочей роли Azure, Виртуальные машины и все другие предложения Azure не затрагиваются.

Часто задаваемые вопросы

1. Разделы справки знать, пострадал ли я?

Все веб-роли облачной службы Azure влияют на эту проблему, за исключением случаев, если вы предоставили собственные ключи компьютера в конфигурации Web.config в пакете CS. Роли рабочей роли облачной службы Azure, Виртуальные машины и все другие предложения Azure не затрагиваются.

ASP.NET использует ключи компьютера для нескольких целей, в том числе:

  • Защита от изменения данных представления веб-формы
  • Создание и проверка файлов cookie ASP.NET сеанса веб-формы
  • Маркеры защиты от CSRF
  • Шифрование с помощью методов machinekey.protect и machinekey.unprotect.

2. Существуют ли необходимые условия для исправления затронутого приложения?

Да, если веб-роль была развернута с устаревшей версией пакета SDK Azure для .Net, он не будет использовать расширенный алгоритм создания ключей компьютера. Дополнительные сведения о поддерживаемых версиях см. в справочнике https://azure.microsoft.com/en-us/downloads/archive-net-downloads/ . Чтобы обновить поддерживаемую версию, щелкните ссылку на ранее упоминаемом сайте, чтобы скачать и повторно развернуть проект с поддерживаемой версией пакета SDK. Убедившись, что проект развернут с помощью поддерживаемого пакета SDK, выполните дополнительные действия, описанные в этом руководстве.

3. Разделы справки исправить затронутое приложение?

Чтобы создать новые ключи компьютера, необходимо повторно развернуть CSPKG и CSCFG в качестве новой облачной службы, развернуть рабочую нагрузку в промежуточном слоте и выполнить развертывание буфера (виртуальный ip-адрес) или внедрить собственные ключи компьютера, а затем выполнить одновременное обновление. Типичная операция развертывания обновлений не будет достаточной. Ниже описаны варианты устранения рисков высокого уровня и подробные действия.

Вариант 1. Развертывание рабочей нагрузки в новой облачной службе. Обновите CNAME, чтобы указать трафик на новую облачную службу. Когда нулевой трафик перейдет на старый сайт, можно удалить старую облачную службу.

Вариант 2. Разверните облачную службу в промежуточном слоте и выполните развертывание буфера.

Вариант 3. Создайте собственные ключи компьютера в Web.config и выполните одновременное обновление. Это приведет к обновлению всех экземпляров одновременно и, следовательно, приведет к простою приложения.

Рекомендуется использовать вариант 1 , чтобы избежать простоя. Мы также рекомендуем выполнить устранение рисков во время низких периодов использования, так как сеансы могут быть нарушены во время изменения ключей компьютера.

Примечание. IP-адрес приложения изменится после получения новых ключей компьютера с параметром 1 и вариантом 2.

4. Я использовал ключ компьютера для шифрования постоянных данных с помощью MachineKey.Encode()/MachineKey.Protect(). Разделы справки восстановить данные?

Если machineKey использовался для шифрования данных (с помощью MachineKey.Encode()/MachineKey.Protect(), старый ключ компьютера и алгоритмы, определенные в веб-конфигурации, должны использоваться для расшифровки данных (путем вызова MachineKey.Decode()/MachineKey.Unprotect() соответственно перед выполнением действий по устранению рисков. После завершения действий по устранению рисков все вызовы MachineKey.Encode()/MachineKey.Protect() и MachineKey.Decode()/MachineKey.Unprotect() будут использовать обновленный ключ компьютера и алгоритмы из web.config.

5. Разделы справки знать, что мое приложение использует новый алгоритм ключа компьютера?

Если у вас есть только одно развертывание в облачной службе, проверка, чтобы просмотреть сертификат ключа компьютера Azure на вкладке "Сертификат" облачной службы на портале управления Azure будет достаточно. Если этот сертификат присутствует, развертывание использует алгоритм ключа компьютера.

Если у вас есть два развертывания в облачной службе (рабочей и промежуточной среде), вам потребуется удаленный рабочий стол в веб-ролях и просмотреть конфигурацию IIS. Если вы видите сертификат ключа компьютера, вы используете новый алгоритм ключа компьютера. Это необходимо сделать проверка для одной веб-роли в каждом развертывании. Если вы не можете подключиться к виртуальной машине, отправьте запрос в службу поддержки (инструкции в #7) и нашу службу поддержки может помочь подтвердить, используют ли развертывания новый ключ компьютера.

Azure Certificates

6. Что такое сертификат "Управление службами Microsoft Azure для MachineKey"?

Это сертификат, используемый для шифрования ключей компьютера вместе с расширенным алгоритмом.

7. Кто управляет сертификатом "Управление службами Microsoft Azure для MachineKey" и что происходит при истечении срока действия?

Azure управляет этим сертификатом. Клиентам не нужно беспокоиться о дате окончания срока действия этого сертификата, так как он используется один раз для создания новых ключей компьютера с помощью нового алгоритма. Дата окончания срока действия не приведет к возникновению каких-либо последствий.

8. Можно ли удалить или удалить сертификат из виртуальной машины?

Нет, сертификат нельзя удалить.

9. Если у меня есть вопросы о шагах по устранению рисков, что можно сделать?

Отправьте обращение в службу поддержки в Облачные службы с помощью стандартного процесса эскалации. Чтобы выполнить эскалацию на портале Azure, выполните следующие действия.

  1. Перейдите в раздел "Справка и поддержка " на портале Azure.
  2. Выберите тип технической проблемы.
  3. Выберите подписку и выберите службу Облачные службы (веб-роли или рабочие роли) в службах.
  4. Нажмите кнопку "Далее ", выберите "Обновление сертификата MachineKey" в качестве типа проблемы, а затем заполните сведения о запросе в службу поддержки.

Подробные шаги по устранению рисков

Вариант 1. Повторное развертывание облачной службы.

  1. Выполните повторное развертывание с помощью портала:

    1. Создайте облачную службу с помощью CSPKG и CSCFG. Дополнительные сведения см. здесь.
    2. Обновите запись CName или A, чтобы указать трафик на новую облачную службу.
    3. Удалите старую облачную службу после того, как трафик указывает на новую облачную службу.
  2. Выполните повторное развертывание с помощью PowerShell:

    1. Создайте облачную службу с помощью CSPKG и CSCFG. Дополнительные сведения см. здесь.

      Пример: New-AzureService -ServiceName "yourServiceName" -Label "MyTestService" -Location "South Central US"

    2. Создайте новое развертывание с помощью CSPKG и CSCFG. Дополнительные сведения см. здесь.

      Пример: New-AzureDeployment -ServiceName "yourServiceName" -Slot "Production" -Package "YourCspkgFile.cspkg" -Configuration "YourConfigFile.cscfg"

    3. Обновите запись CName или A, чтобы указать трафик на новую облачную службу.

    4. Удалите предыдущую облачную службу, которая не имеет обновленных ключей компьютера после того, как трафик указывает на новую облачную службу. Дополнительные сведения см. здесь.

      Пример: Remove-AzureService -ServiceName "yourOldServiceName"

  3. Выполните повторное развертывание с помощью REST API:

    1. Создайте облачную службу. Дополнительные сведения см. здесь.

      Пример: https://management.core.windows.net/<subscription-id>/services/hostedservices

    2. Создайте новое развертывание с помощью API создания развертывания. Если вам нужно найти CSPKG и CSCFG, можно вызвать API Get-Package).

      Пример: https://management.core.windows.net/<subscription-id>/services/hostedservices/<cloudservice-name>/deploymentslots/production

    3. Удалите предыдущую облачную службу, которая не имеет обновленных ключей компьютера после того, как трафик указывает на новую облачную службу. Дополнительные сведения см. здесь.

      Пример: https://management.core.windows.net/<subscription-id>/services/hostedservices/<old-cloudservice-name>

Вариант 2. Переключение развертывания.

Для использования варианта 2 требуется пустой промежуточный слот. Если у вас есть развертывание в промежуточном слоте, его можно удалить, а затем выполнить следующие действия.

  1. Выполните развертывание переключения с помощью портала:

    1. Обновите развертывание облачной службы, отправив CSPKG и CSCFG в промежуточный слот. Этот сертификат будет содержать новый сертификат для создания ключей компьютера. Дополнительные сведения см. здесь.

    2. Переключитесь между промежуточным и рабочим слотами. Дополнительные сведения см. здесь.

    3. Удалите промежуточный слот с предыдущим рабочим развертыванием. Дополнительные сведения см. здесь

  2. Выполните развертывание буфера с помощью PowerShell.

    1. Разверните cspkg и cscfg в промежуточном слоте. Дополнительные сведения см. здесь.

      Пример: New-AzureDeployment -ServiceName "yourServiceName" -Slot "Промежуточное" -Package "YourCspkgFile.cspkg" -Configuration "YourConfigFile.cscfg"

    2. Переключитесь между промежуточным и рабочим слотами. Дополнительные сведения см. здесь.

      Пример: Move-AzureDeployment -ServiceName "yourServiceName"

    3. Удалите промежуточный слот с предыдущим рабочим развертыванием.

      Пример: Remove-AzureDeployment -ServiceName "yourServiceName" -Slot "Промежуточное"

  3. Выполните развертывание буфера с помощью REST API:

    1. Создайте развертывание в промежуточном слоте с помощью API создания развертывания. Если вам нужно найти CSPKG и CSCFG, можно вызвать API Get-Package).

      Пример: https://management.core.windows.net/<subscription-id>/services/hostedservices/<cloudservice-name>/deploymentslots/staging

    2. Переключите рабочие и промежуточные слоты с помощью развертывания замены.

      Пример: https://management.core.windows.net/<subscription-id>/services/hostedservices/<cloudservice-name>

    3. Удаление промежуточного слота с помощью предыдущего рабочего развертывания

      Пример: https://management.core.windows.net/<subscription-id>/services/hostedservices/<cloudservice-name>/deploymentslots/staging

Вариант 3. Создайте собственные ключи компьютера в web.config и выполните одновременное развертывание.

  1. Создайте новый XML-элемент ключа компьютера в PowerShell (см. приложение A).

  2. Обновите webConfig с помощью новых ключей компьютера. См. инструкции.

  3. Перепакуйте облачную службу.

  4. Выполните развертывание обновления с помощью CSCFG-файла, содержащего новые ключи компьютера. Режим должен быть задан одновременно или это может привести к тому, что приложение будет находиться в неработоспособном состоянии.

Заявление об отказе

Сведения, предоставленные в этом совете, предоставляются "как есть" без каких-либо гарантий. Корпорация Майкрософт отказывается от всех гарантий, явных или подразумеваемых, включая гарантии торговых возможностей и соответствия определенной цели. В любом случае корпорация Майкрософт или ее поставщики не несут ответственности за любые убытки, включая прямые, косвенные, случайные, косвенные, косвенные, следовательно, потерю прибыли или специальные убытки, даже если корпорация Майкрософт или ее поставщики были уведомлены о возможности таких повреждений. Некоторые государства не разрешают исключение или ограничение ответственности за последующие или случайные убытки, поэтому не может применяться ограничение.

Редакции

  • Версия 1.0 (8 мая 2018 г.): рекомендации, опубликованные.
  • Версия 1.1 (24 мая 2018 г.): добавлены вопросы и ответы #4, чтобы объяснить, как восстановить постоянные данные после шифрования данных с помощью MachineKey.Encode()/MachineKey.Protect(). Это только информационное изменение.
  • Версия 1.2 (29 июня 2018 г.): изменены ссылки на гостевую ОС Azure на Azure Облачные службы