Срок действия сертификатов и компрометация ключей
В продолжение записки про “короткие сертификаты” Let’s Encrypt. Сертификаты на шесть дней предлагается выпускать для того, чтобы уменьшить интервал времени, когда компрометация ключа представляет угрозу. Попробуем разобраться, что это вообще за событие такое – компрометация ключа, в контексте TLS для веба, и чем это грозит на практике для обычного веб-сайта.
Прежде всего – речь о компрометации серверного ключа, то есть, о раскрытии третьей стороне секретного ключа из пары, открытая часть которой указана в сертификате сервера. Сам TLS-сертификат – документ публичный, скопировать его может кто угодно. Если у этого “кого угодно” есть секретный ключ от сертификата, то он может выдать свой сервер за легитимный, предоставив сертификат, подписанный Удостоверяющим Центром (УЦ). В данном случае – УЦ Let’s Enncrypt. Однако тут есть очень много “но”.
Если ключ от сертификата скомпрометирован, то штатный метод реагирования состоит в немедленном отзыве сертификата. Технически, сертификат отзывает УЦ. Более того, правила позволяют УЦ отозвать сертификат даже по собственной инициативе, если, например, стало “достоверно известно о компрометации ключа” (не единственная возможная причина). Программы-клиенты, подключающиеся к веб-сайту, должны как-то узнать, что сертификат отозван. Существует два практических способа это сделать: OCSP и CRL.
OCSP. Online Cerificate Status Protocol (Онлайн-протокол [определения] статуса сертификата). Этот способ позволяет отправить запрос о сертификате специальному респондеру, который ответит, отозван сертификат или нет. Технически способ напоминает работу с веб-сервером. Оператором OCSP-респондера является сам УЦ или доверенная сторона, а ответ о статусе сертификата удостоверяется цифровой подписью. Адрес респондера указывается в составе сертификата. В практике Интернета OCSP работает очень плохо. Протокол может показаться простым, но поддерживать его УЦ очень сложно. Начиная с того, что, при правильном внедрении, получаем сервис, блокирующий доступ к внешним ресурсам: без ответа респондера клиент не должен бы подключаться по HTTP к узлу, который пытается аутентифицировать при помощи данного сертификата. Почему? Потому, что если OCSP-респондер недоступен, то, формально, клиент не может узнать, что сертификат был отозван. Очевидно, что никакого смысла в OCSP, если игнорировать недоступность респондера, нет: третья сторона, перехватывающая сетевой доступ и использующая скомпрометированный ключ, тогда может просто заблокировать сетевой доступ и к OCSP-респондеру, чтобы скрыть факт отзыва.
В предыдущем абзаце использованы обороты “при правильном внедрении”, “формально” и др. Это сделано не просто так: в вебе – OCSP принято игнорировать. Например, браузер Chrome давно не поддерживает этот протокол. Хитрости ситуации добавляет тот факт, что, поскольку оператор OCSP-респондера видит индивидуальный запрос о конкретном сертификате (серийный номер), знает имена, для которых сертификат выпускался, то он может сопоставить адреса и запросы, построив статистику посещения веб-ресурсов ничего не подозревающими пользователями. А это уже “угроза приватности”. Конечно, есть технология OCSP stapling, позволяющая встроить актуальный ответ OCSP-респондера о статусе сертификата непосредственно в ответ TLS-сервера, чтобы клиент не обращался к OCSP-респондеру. Но данная технология не особенно распространена.
Наличие OCSP-респондера недавно признали опциональным для УЦ, отразив это в требованиях CA/B-форума (это объединение организаций – УЦ и разработчиков браузеров, – которое определяет базовые требования для включения корневых ключей УЦ в браузерные списки доверенных). Let’s Encrypt планирует закрыть свои OCSP-респондеры в следующем году. (И это правильно, поскольку OCSP, так или иначе, не самый лучший вариант.)
Следующий способ, позволяющий узнать о факте отзыва сертификата, это CRL – Certificate Revocation List (список отзыва сертификатов). CRL – это подписанный УЦ (или доверенной организацией) перечень серийных номеров отозванных сертификатов. Простое правило гласит, что если серийный номер сертификата указан в соответствующем CRL, то сертификат был отозван. Адрес точки раздачи CRL указывается в сертификате. Клиент может скачать список отзыва (со всеми сертификатами) и проверить статус нужного сертификата по нему. В общем случае, “точка раздачи” не знает, сертификат какого ресурса пытается проверить клиент (есть экзотические оговорки, но мы их тут пропустим) – поэтому “приватность” сохраняется лучше. Проблема в том, что на практике CRL тоже проверяется далеко не всегда, поскольку точка раздачи является почти таким же блокирующим сервисом, как и OCSP. Какой смысл в наличии CRL, если недоступность CRL игнорируется? Правильно – никакого смысла.
Получается, что проверки отзыва сертификатов, фактически, нет, поэтому клиент не узнает, что сертификат был отозван и, вероятно, поверит в отозванный сертификат. Традиционная трактовка гласит, что “короткий” сертификат закончится быстро, а в закончившийся сертификат клиент верить уже не станет, что и поможет снизить угрозу. То есть, если сертификат выпущен на шесть дней, а ключи утекают “равновероятно”, то есть неплохие шансы, что сертификату для скомпрометированного ключа останется всего пара дней срока. Хватит ли этого подменяющей соединение стороне? Технически, подменить соединение и прочитать пароли/куки-файлы можно за доли секунды. Но нужно учитывать и тот факт, что ключ от сертификата может утечь с большой задержкой, но “долгий” сертификат всё ещё будет валидным.
Обратите, впрочем, внимание, что если новый сертификат был выпущен для того же ключа, то ситуация не меняется – скомпрометированный ключ подходит к новому сертификату. Естественно, это работает только в том случае, если о компрометации не было известно. Ну и если ключи не меняются каждый раз при выпуске нового сертификата.
Рассмотрим ситуацию подмены TLS-узла. Если для подмены выпускается сертификат, – тем или иным способом, – то речь уже идёт не о компрометации ключа и срок действия сертификата не особенно влияет: новый сертификат будет действовать, а подменный ключ от него – есть у подменяющей стороны по условиям задачи (см. историю с jabber.ru, например). То есть, короткий срок действия приводит к тому, что нужно быстро использовать новый сертификат, ну, или придётся выпустить ещё один подменный. Конечно, при длительном подобном перехвате заметить пачку подменных сертификатов проще, чем один, выпущенный на год. Но часто ли такое требуется? Часто ли подменные сертификаты вообще попадают в “область видимости”? Нет, не часто – это ответ на оба предыдущих вопроса.
Насколько частым является событие “компрометация ключа” в деятельности обычного веб-сайта? Это, что называется, вопрос из серии многогранных: на “обычном веб-сайте” секретный ключ хранится в обычном файле, в открытом виде, а файл лежит там, куда его записала неведомая утилита certbot. Спросите доброго инженера по сертификации СКЗИ (Средств Криптографической Защиты Информации) – и он вам скажет, что так хранимый ключ уже скомпрометирован. Спросите то же самое у строгого инженера по сертификации СКЗИ – и он вам ответит, что ключ был скомпрометирован ещё в тот самый момент, когда его сгенерировала исполняемая с правами суперпользователя неведомая утилита certbot, свойства и недокументированные возможности которой “не только не документированы, но и не установлены”.
Однако, на практике, пусть где-то и вздохнёт специалист ИБ, очередной раз выполнив проверку конвертов tamper-proof и сверив записи в журналах, а опытный админ железного сервера всё равно уверенно сложит секретные ключи от сертификатов в резервные копии, хранимые неподалёку от ежесуточных дампов памяти виртуальных машин, в которых соответствующие TLS-серверы исполняются.
Что поделать – такова практика веба. Естественно, ключ может оказаться скомпрометирован и без всякой утечки непосредственно из места хранения ключа: ошибки в ПО могут привести к тому, что будет сгенерирован нестойкий ключ или ключ утечёт в рамках штатного выполнения криптографических операций. Такое, к сожалению, случается не так редко, как хотелось бы. Наверное, в такой ситуации короткие сертификаты можно признать благом. Вот только на то вопрос и многогранный, чтобы рассмотреть и другие грани тоже.
Чтобы применить скомпрометированный ключ в вебе, применяющая сторона должна перехватить трафик в направлении веб-сайта. Для важных сервисов, типа веб-почты Gmail или систем дистанционного банковского обслуживания, эта угроза подмены довольно серьёзная, поэтому можно рассматривать целевые атаки, когда трафик перехватывается ближе (в сетевом смысле) к точке подключения конкретного пользователя. Однако в других случаях (опять вспомним про jabber.ru) – перехват проводится рядом с точкой подключения атакуемого “обычного веб-сайта”. Но такой перехват позволит без проблем выпустить подменный сертификат, если вдруг ключ “скомпрометировать не удалось”. Так что практическая ситуация не такая прямолинейная, как можно подумать.
А вот что можно сказать точно, так это то, что сертификаты, выпускаемые на несколько дней, привяжут всякий ресурс к сервису выпуска сертификатов. Внедрение требования о коротких сертификатах в основные браузеры – приведёт к тому, что многие и многие “производные браузеры” получат это же требование автоматически. Просто потому, что мало кто рискует вмешиваться в “ядро валидации” сертификатов. И требование о коротком сроке действия начнёт работать даже для “собственных корней”.
Обратите внимание, что один из законодателей моды в данной области, – Google, – сейчас выпускает сертификаты для своих доменов от собственного УЦ. И эти сертификаты уже имеют достаточно короткий срок действия – три месяца. Если добавить сюда инициативу Let’s Encrypt с шестидневными сертификатами, то остаётся слишком мало сомнений в том, что требования браузеров к сроку действия TLS-сертификата начнут теперь сокращаться всё быстрее и быстрее.
Адрес записки: https://dxdt.ru/2024/12/18/14410/
Похожие записки:
- Мессенджер и удаление сообщений
- Apple и центральные ИИ-агенты
- Совпадения тегов ключей DNSSEC и парадокс дней рождения
- Контринтуитивное восприятие ИИ на примере из криптографии
- Продолжение сегментации: Docker Hub
- Взлом Twitter и влияние на офлайн
- Twitter за стеной регистрации
- Неверные обобщения "принципа Керкгоффса"
- "Почти что коллизия" и хеш-функции
- Подводные кабели и связность Интернета
- Бункеры в Fallout
Написать комментарий