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


Решение проблемы TLS 1.0, второе издание

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

TLS 1.0 — это протокол безопасности, который впервые определен в 1999 году для установления каналов шифрования через компьютерные сети. Корпорация Майкрософт поддерживает этот протокол с Windows XP/Server 2003. Хотя протокол безопасности по умолчанию больше не используется современными OSes, 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 выходят за рамки этого документа.

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

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

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

Поддерживаемые версии TLS в Windows

Многие операционные системы имеют устаревшие версии TLS по умолчанию или поддерживают потолки, которые необходимо учитывать.

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

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

Выпуск Windows Server 2019 GS соответствует требованиям Microsoft SDL, TLS 1.2 только с ограниченным набором наборов шифров.

Выпуск Windows Server 2022 соответствует требованиям Microsoft SDL, TLS 1.2 и TLS 1.3 только с ограниченным набором наборов шифров.

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. Это моделирование охватывает сочетания клиентских ОС и браузеров между производителями. Дополнительные сведения см. в приложении A в конце этого документа с подробным примером версий протокола TLS, согласованных различными имитированными сочетаниями клиентской ОС/браузера при подключении к www.microsoft.com.

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

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

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

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

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

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

    • Посетите https://securescore.microsoft.com/ для получения дополнительной информации.

  • Обновления .Net Framework для устранения жёсткого кодирования на уровне приложения и предотвращения унаследованных от платформы зависимостей TLS 1.0.

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

    • FYI: Все приложения, предназначенные для .NET 4.5 или ниже, скорее всего, должны быть изменены для поддержки TLS 1.2.
  • TLS 1.2 поддерживается в Windows Server 2008 с пакетом обновления 2 (SP2 ) и 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 в этом документе. Дополнительные сведения см. в приложении B .

  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.

Перестроение управляемых приложений

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 с помощью инициатив тестирования операционной системы/ кода или регрессии, описанных в приведенных выше разделах.

Conclusion

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

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

Результаты имитации рукопожатия

Приложение B. Не рекомендуется использовать TLS 1.0/1.1 при сохранении режима FIPS

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

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

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

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

Благодарности участникам

Марк Картрайт
Брайан Салливан
Патрик Джунгли
Майкл Scovetta
Тони Райс
Дэвид LeBlanc
Мортимер Кук
Даниэль Соммерфельд
Андрей Попов
Митико Шорт
Джастин Берк
Губернатор Махарадж
Брэд Тернер
Шон Стивенсон