Решение проблемы с TLS 1.0, выпуск 2

Эндрю Маршалл (Andrew Marshall)
Главный руководитель программы безопасности
Microsoft Corporation

Аннотация

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

TLS 1.0 — это процедуры обеспечения безопасности, впервые определенные в 1999 г. для установки каналов шифрования по компьютерным сетям. Корпорация Майкрософт поддерживала этот протокол с момента выпуска Windows XP/Server 2003. Несмотря на то, что в современных ОС не используется протокол безопасности по умолчанию, TLS 1.0 по-прежнему поддерживается для обеспечения обратной совместимости. Развитие нормативных требований, а также новые уязвимые места системы безопасности в TLS 1.0 предоставляют организациям возможность полностью отключить TLS 1.0.

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

  • Анализ кода для поиска и исправления жестко закодированных экземпляров TLS 1.0 или более старых протоколов безопасности.

  • Проверка конечных точек сети и анализ трафика для обнаружения операционных систем, использующих TLS 1.0 или более старые протоколы.

  • Полное тестирование регрессии через весь стек приложений с отключенным TLS 1.0.

  • Миграция устаревших операционных систем и библиотек или платформ разработки в версии, способные по умолчанию согласовывать TLS 1.2.

  • Тестирование совместимости между операционными системами, используемыми в вашей организации, для обнаружения любых проблем, связанных с поддержкой TLS 1.2.

  • Согласуйте со своими бизнес-партнерами и клиентами решение о переходе на нерекомендуемый протокол TLS 1.0.

  • Узнайте, какие клиенты больше не смогут подключаться к вашим серверам после того, как TLS 1.0 будет отключен.

Целью данного документа является предоставление рекомендаций, которые могут помочь устранить технические препятствия при отключении TLS 1.0 и в то же время увеличить видимость воздействия этого изменения на ваших собственных клиентов. Выполнение такого исследования поможет снизить влияние следующей уязвимости системы безопасности в TLS 1.0 на организацию. В рамках этого документа ссылки на отключение TLS 1.0 также включают TLS 1.1.

У разработчиков корпоративного программного обеспечения есть стратегическая потребность в принятии более безопасных и гибких решений (также известных как Crypto Agility), которые могут повлиять на будущие протоколы безопасности. В то время как данный документ предлагает гибкие решения для устранения жесткого задания TLS, более масштабные решения Crypto Agility находятся за рамками данного документа.

Текущее состояние реализации Microsoft TLS 1.0

В реализации TLS 1.0 от Майкрософт нет известных уязвимостей безопасности. В связи с возможностью будущих атак при переходе на использование более ранней версии и других уязвимостей TLS 1.0, не относящихся к реализации Майкрософт, рекомендуется при возможности удалить зависимости по всем протоколам безопасности, выпущенным раньше TLS 1.2 (TLS 1.1/1.0/SSLv3/SSLv2).

Планируя миграцию на TLS 1.2+, разработчики и системные администраторы должны знать о возможностях версии протокола в приложениях, разработанных их сотрудниками и партнерами. Жесткое кодирование здесь означает, что версия TLS исправлена до устаревшей версии и менее безопасна по сравнению с более новыми версиями. Версии TLS более поздней версии, чем жестко закодированная, нельзя использовать без изменения рассматриваемой программы. Этот класс проблемы нельзя устранить без изменения исходного кода и развертывания обновлений программного обеспечения. В прошлом версия протокола жесткого кодирования была распространена для тестирования и поддержки, поскольку многие обозреватели и операционные системы имели различные уровни поддержки TLS.

Обеспечение поддержки TLS 1.2 в развернутых операционных системах

Многие операционные системы имеют устаревшую версию TLS по умолчанию или поддерживают лимиты, которые необходимо учитывать. Использование Windows 8/Server 2012 или более поздней версии означает, что TLS 1.2 будет иметь версию протокола безопасности по умолчанию:

Рис. 1. Поддержка протокола безопасности по версии ОС

ОС Windows SSLv2 SSLv3 TLS 1.0 TLS 1.1 TLS 1.2
Windows Vista Активировано Активировано По умолчанию Не поддерживается Не поддерживается
Windows Server 2008 Активировано Активировано По умолчанию Отключено* Отключено*
Windows 7 (WS2008 R2) Активировано Активировано По умолчанию Отключено* Отключено*
Windows 8 (WS2012) Выключено Активировано Активировано Активировано По умолчанию
Windows 8.1 (WS2012 R2) Выключено Активировано Активировано Активировано По умолчанию
Windows 10 Выключено Активировано Активировано Активировано По умолчанию
Windows Server 2016 Не поддерживается Выключено Активировано Активировано По умолчанию

*TLS 1.1/1.2 можно включить в Windows Server 2008 с помощью этого дополнительного пакета Центра обновления Windows.

Дополнительные сведения о прекращении поддержки TLS 1.0/1.1 в IE/Edge см. в статье "Модернизация подключений TLS в Microsoft Edge и Internet Explorer 11", изменения совместимости сайтов, поступающие в Microsoft Edgeи отключение TLS/1.0 и TLS/1.1 в новом браузере Edge

Чтобы быстро определить, какая версия TLS будет запрошена различными клиентами при подключении к веб-службам, обратитесь к имитации подтверждений в Qualys SSL Labs. Эта модель охватывает сочетания клиентских операционных систем или браузеров разных производителей. Подробный пример, в котором показаны версии протокола TLS, согласованные различными сочетаниями клиентских операционных систем и браузеров при подключении к www.microsoft.com, см. в разделе Приложение A в конце документа.

Если это еще не сделано, мы настоятельно рекомендуем провести инвентаризацию операционных систем, используемых предприятием, клиентами и партнерами (двух последних с помощью распространения или коммуникации, или по крайней мере через сбор строк агента обработки HTTP). Эту инвентаризацию можно дополнить анализом трафика на границе вашей корпоративной сети. В такой ситуации при анализе трафика будут выдаваться версии TLS, успешно согласованные клиентами или партнерами, подключающимся к вашим службам, но сам трафик останется зашифрованным.

Улучшения в инженерии корпорации Майкрософт для устранения зависимостей TLS 1.0

С момента выпуска версии 1 этого документа Корпорация Майкрософт выпустила ряд обновлений программного обеспечения и новых функций для поддержки отключения TLS 1.0. Сюда входит следующее.

  • Настраиваемое ведение журнала IIS для сопоставления строки агента пользователя или IP-адреса клиента, URI службы, версии протокола TLS и набора шифров.

    • С помощью этого журнала администраторы могут количественно оценить подверженность своих клиентов слабому TLS.
  • SecureScore. Чтобы помочь администраторам клиентов Office 365 определить свое собственное слабое использование TLS,и для обмена этой информацией был создан портал SecureScore, поскольку в октябре 2018 г. в Office 365 была отключена поддержка TLS 1.0.

    • Этот портал предоставляет администраторам клиентов Office 365 ценные сведения, необходимые им для обращения к своим клиентам, которые могут не знать о своих зависимостях TLS 1.0.

    • Дополнительные сведения см. в https://securescore.microsoft.com/.

  • Обновления .NET Framework позволяют исключить жесткое кодирование на уровне приложения и предотвратить наследование платформенных зависимостей TLS 1.0.

  • Руководство разработчика и обновления программного обеспечения были выпущены, чтобы помочь клиентам определить и устранить зависимости .NET от слабого протокола TLS: рекомендации по протоколу TLS с платформой .NET

    • FYI. Все приложения, предназначенные для .NET 4.5 или более ранней версии, скорее всего, должны быть изменены для поддержки TLS 1.2.
  • Протокол TLS 1.2 был реализован для Windows Server 2008 с пакетом обновления 2 и XP POSReady 2009, чтобы помочь клиентам с устаревшими обязательствами.

  • Дополнительные объявления будут сделаны в начале 2019 года и сообщены в последующих обновлениях этого документа.

Поиск и исправление зависимостей TLS 1.0 в коде

Для продуктов, использующих библиотеки шифрования и протоколы безопасности, предоставляемые ОС Windows, следующие шаги должны помочь определить любое жестко закодированное использование TLS 1.0 в приложениях.

  1. Найдите все экземпляры AcquireCredentialsHandle(). Это помогает рецензентам приблизиться к блокам кода, в которых TLS может быть жестко закодирован.

  2. Просмотрите все экземпляры SecPkgContext_SupportedProtocols и SecPkgContext_ConnectionInfo структур для жестко закодированных TLS.

  3. В машинном коде задайте для любого ненулевого назначения grbitEnabledProtocols значение ноль. Это позволяет операционной системе применить используемую по умолчанию версию TLS.

  4. Отключите режим FIPS, если он включен из-за возможности конфликта с параметрами, необходимыми для явного отключения TLS 1.0/1.1 в этом документе. Дополнительные сведения см. в Приложении Б.

  5. Обновите и перекомпилируйте все приложения, использующие WinHTTP, размещенные на сервере 2012 или более ранней версии.

    1. Управляемые приложения — перестроение и перенацеливание на последнюю версию .NET Framework

    2. Приложения должны добавлять код для поддержки TLS 1.2 через WinHttpSetOption

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

    1. SecurityProtocolType

    2. SSLv2, SSLv23, SSLv3, TLS1, TLS 10, TLS11

    3. WINHTTP_FLAG_SECURE_PROTOCOL_

    4. SP_PROT_

    5. NSStreamSocketSecurityLevel

    6. PROTOCOL_SSL или PROTOCOL_TLS

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

Windows PowerShell использует .NET Framework 4.5, который не включает TLS 1.2 в качестве доступного протокола. Для решения этой проблемы доступны два решения.

  1. Измените скрипт, чтобы включить в него следующее:

    [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12;
    
  2. Добавьте раздел реестра на уровне системы (например, через групповую политику) на любой компьютер, который должен выполнять подключения TLS 1.2 из приложения .NET. Это приведет к тому, что в .NET будут использоваться версии протокола TLS по умолчанию, которые добавляют протокол TLS 1.2 в качестве доступного протокола и позволят сценариям использовать будущие версии TLS, если их поддерживает ОС. (например, TLS 1.3)

    reg add HKLM\SOFTWARE\Microsoft.NETFramework\v4.0.30319 /v SystemDefaultTlsVersions /t REG_DWORD /d 1 /f /reg:64

    reg add HKLM\SOFTWARE\Microsoft.NETFramework\v4.0.30319 /v SystemDefaultTlsVersions /t REG_DWORD /d 1 /f /reg:32

Решения (1) и (2) являются взаимоисключающими, то есть их не нужно реализовывать вместе.

Перестроение и изменение целевой платформы управляемых приложений с использованием последней версии .NET Framework

В приложениях, использующих версии .NET Framework до версии 4.7, могут наблюдаться ограничения по эффективной поддержке ограничения TLS 1.0 независимо от базовой операционной системы по умолчанию. Дополнительные сведения см. на приведенной ниже схеме и рекомендациях по протоколу TLS в .NET Framework .

Rebuild managed applications

SystemDefaultTLSVersion имеет приоритет над нацеливанием версий TLS на уровне приложений. Рекомендуется всегда отдавать предпочтение стандартной версии TLS для ОС. Это также единственное решение для гибкого шифрования, позволяющее вашим приложениям пользоваться преимуществами будущей поддержки TLS 1.3.

Если как целевые заданы более старые версии .NET Framework, например 4.5.2 или 3.5, то по умолчанию приложение будет использовать более старые нерекомендуемые протоколы, такие как SSL 3.0 или TLS 1.0. Настоятельно рекомендуется обновить .NET Framework до более новой версии, например .NET Framework 4.6, или задать соответствующие разделы реестра для UseStrongCrypto.

Тестирование с помощью TLS 1.2+

Следуя исправлениям, рекомендуемым в разделе выше, продукты следует проверить на наличие ошибок согласования протокола и совместимость с другими операционными системами предприятия, используя регрессионное тестирование.

  • Наиболее распространенной проблемой в этом регрессионном тестировании является сбой согласования TLS из-за попытки подключения клиента к операционной системе или браузеру, не поддерживающему TLS 1.2.

    • Например, клиент Vista не сможет согласовать протокол TLS с сервером, настроенным для TLS 1.2+, так как максимальная поддерживаемая версия TLS в Vista — 1.0. Этот клиент должен быть либо обновлен, либо списан в среде TLS 1.2+.
  • Для продуктов, использующих взаимную проверку подлинности TLS на основе сертификатов, может потребоваться дополнительное регрессионное тестирование, поскольку код выбора сертификата, связанный с TLS 1.0, был менее выразительным, чем для TLS 1.2.

    • Если продукт согласовывает MTLS с сертификатом из нестандартного расположения (за пределами стандартного именованного хранилища сертификатов в Windows), то для правильного получения сертификата может потребоваться обновление кода.
  • Взаимозависимости службы следует проверять на наличие неисправностей.

    • Любые службы, взаимодействующие со сторонними службами, должны выполнять дополнительное тестирование взаимодействия с этими сторонними службами.

    • Для всех приложений, не использующих Windows, или серверных операционных систем требуется исследование или подтверждение того, что они могут поддерживать TLS 1.2. Чтобы определить это, проще всего выполнить сканирование.

Простая схема для тестирования этих изменений в веб-службе состоит из следующих компонентов.

  1. Выполните сканирование систем рабочей среды, чтобы определить операционные системы, которые не поддерживают TLS 1.2.

  2. Сканируйте исходный код и файлы конфигурации веб-службы для жестко закодированного TLS, как описано в разделе "Поиск и исправление зависимостей TLS 1.0 в коде"

  3. Обновление и повторная компиляция приложений по мере необходимости:

    1. Управляемые приложения

      1. Выполните повторную сборку до последней версии .NET Framework.

      2. Убедитесь, что для любого использования перечисления SSLProtocols задано значение SSLProtocols.None для использования параметров ОС по умолчанию.

    2. Приложения WinHTTP — перестроение с помощью WinHttpSetOption для поддержки TLS 1.2

  4. Начните тестирование в предварительной или промежуточной среде со всеми протоколами безопасности старше TLS 1.2, отключенными через реестр.

  5. Исправлены все оставшиеся экземпляры жесткого задания TLS по мере их возникновения при тестировании. Повторно разверните программное обеспечение и выполните новый тест регрессии.

Уведомление партнеров о планах отключения TLS 1.0

После обращения к жесткому заданию TLS и обновления операционной системы или платформы разработки необходимо использовать протокол TLS 1.0, который будет необходим для координации с клиентами и партнерами.

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

  • Каждому партнеру необходимо оценить собственный протокол TLS 1.2 с помощью описанных выше инициатив по тестированию операционной системы, сканированию кода и тестированию регрессии.

Заключение

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

Приложение А. Имитация подтверждения для различных клиентов, подключающихся к www.microsoft.com, с помощью SSLLabs.com

Results of Handshake Simulation

Приложение B. Отключение TLS 1.0/1.1 с сохранением режима FIPS

Выполните следующие действия, если вашей сети требуется режим FIPS, но вы хотите отключить TLS 1.0/1.1:

  1. Настройте версии TLS через реестр, установив для нежелательных версий TLS значение "Включено" равным нулю.

  2. Отключите кривую 25519 (только Server 2016) с помощью групповой политики.

  3. Отключите все комплекты шифров с помощью алгоритмов, которые не разрешены соответствующей публикацией FIPS. Для Server 2016 (предполагая, что действуют настройки по умолчанию) это означает отключение шифров RC4, PSK и NULL.

Спонсоры/Благодарность

Марк Картрайт (Mark Cartwright)
Брайан Салливан (Bryan Sullivan)
Патрик Джанглс (Patrick Jungles)
Майкл Сковетта (Michael Scovetta)
Тони Райс (Tony Rice)
Дэвид ЛеБлан (David LeBlanc)
Мортимер Кук (Mortimer Cook)
Даниэль Зоммерфельд (Daniel Sommerfeld)
Андрей Попов (Andrei Popov)
Мичико Шорт (Michiko Short)
Джастин Берк (Justin Burke)
Гов Махарадж (Gov Maharaj)
Брэд Тернер (Brad Turner)
Шон Стивенсон (Sean Stevenson)