- PVSM.RU - https://www.pvsm.ru -
Что делать, если у вашего сервера утёк закрытый ключ? Вопрос, ставший особенно актуальным после Heartbleed [1].
Последовательность действий, сразу приходящая в голову:
К сожалению, всё не так просто. В этой и следующей статьях мы подробно ответим на следующие вопросы:
Эта статья будет полезна тем, кому интересно разобраться в применяющихся на практике механизмах проверки статуса сертификатов (проверки, является ли сертификат отозванным).
Современный защищённый Веб стоит на двух китах: протоколе TLS [2] и инфраструктуре открытых ключей X.509 [3]. Для установки защищённого TLS-соединения сервер должен передать клиенту свой открытый ключ. Аутентичность ключа сервера, пересылаемого через незащищённые публичные сети, обеспечивается цепочкой сертификатов открытых ключей инфраструктуры X.509 [4].

Удостоверяющий центр (УЦ, certification authority, CA) может отозвать подписанный (изданный) им ранее сертификат, например, в случае компрометации закрытого ключа, соответствующего этому сертификату. Поэтому, чтобы исключить возможность подключения к «человеку посередине», при установке TLS-соединения клиент должен не только проверять корректность подписей всей предоставленной сервером цепочки сертификатов, но и проверять статус предоставленных ему сертификатов (сертификат действителен или отозван).
Применяющиеся на практике механизмы проверки статуса сертификатов основаны на списках отозванных сертификатов [3] (certificate revocation list, CRL) и протоколе онлайн-проверки статуса сертификатов [5] (online certificate status protocol, OCSP).
Дальше в качестве примера будем рассматривать сертификат сервера с доменным именем www.example.com [6], выданный УЦ «Example Certification Authority», схематично изображённый на рисунке:

УЦ публикуют CRL, в которые вносятся серийные номера отозванных сертификатов, в точках распространения CRL (CRL distribution point, CDP). Адреса (URL) точек распространения CRL, к которым следует обращаться для получения информации о статусе проверяемого сертификата, как правило, указываются в самом сертификате.
Для проверки статуса сертификата, изображённого на рисунке выше, нужно загрузить CRL, доступный по URL ca.example.com/crl [7], и проверить, содержится ли в нём серийный номер проверяемого сертификата (46:35:AC:5F).
На рисунке приведено схематическое изображение загруженного CRL.

В нём сообщается, что УЦ «Example Certification Authority» были отозваны три сертификата c серийными номерами 00:C9:79:0E, 46:35:AC:5F и 50:4E:6F:C7. Проверяемый сертификат является отозванным, поскольку его серийный номер находится в этом списке.
Клиенты получают свежие CRL одним из следующих способов:
CRL чаще всего применяются для оффлайн-проверок и являются мало пригодными для систем, нуждающихся в наиболее актуальной информации о статусе сертификата и требующих упомянутых выше онлайн-загрузок CRL, по следующим причинам:
OCSP, как следует из его названия, предназначен для получения наиболее актуальной информации о статусе сертификата в режиме онлайн и не обладает приведёнными выше недостатками CRL.
Рассмотрим работу этого протокола на примере для сертификата www.example.com [6] (смотри второй рисунок к статье). Для получения информации о статусе сертификата TLS-клиент с помощью OCSP-клиента отправляет запрос OCSP-серверу (OCSP responder) УЦ, указанному в расширении authority information access (AIA) сертификата:

В запросе указывается серийный номер проверяемого сертификата (46:35:AC:5F). Также в запросе опционально может быть передан случайный одноразовый код (nonce), предназначенный для защиты ответа OCSP-сервера от атаки повторного воспроизведения. В ответе OCSP-сервера сообщается, что сертификат с серийным номером 46:35:AC:5F был отозван, поскольку соответствующий ему закрытый ключ был скомпрометирован. OCSP-ответ защищён от подделывания и атаки повторного воспроизведения, поскольку подписан доверенным ключом OCSP-сервера и содержит полученный от клиента случайный одноразовый код.
Следует отметить, что защита от атаки повторного воспроизведения в OCSP является опциональной и её отсутствие имеет свои преимущества. Отключение проверки значения случайного одноразового кода на клиенте позволяет кэшировать OCSP-ответы на стороне сервера, снижая накладные расходы на функционирование протокола.
Проблемами OCSP являются:
Для решения этих проблем было предложено расширение протокола TLS, позволяющее прикреплять OCSP-ответы к сертификатам (OCSP stapling [8]) и переносящее ответственность за выполнение OCSP на TLS-сервер.
На рисунке изображена схема использования OCSP stapling:

Схема описывает следующие шаги:
Таким образом:
«Но где же тут защита от атаки повторного воспроизведения?» — спросите вы. Тут её действительно нет, однако рассматриваемое расширение протокола TLS позволяет клиентам пересылать случайный одноразовый код при установке соединения:

Такой вариант использования OCSP stapling не позволяет кэшировать OCSP-ответы на сервере, из-за чего растёт время установки TLS-соединения и увеличивается нагрузка на серверы УЦ.
Следует отметить, что существует две версии OCSP stapling. Первая версия [9] по неясной причине позволяет прикреплять OCSP-ответ только для сертификата самого сервера. При использовании этой версии ответственность за получение информации о статусе остальных сертификатов цепочки лежит на клиенте. Этот недостаток исправлен в новой версии [10].
В этой статье мы рассмотрели три основных механизма проверки статуса сертификатов. Проверки, осуществляемые на практике, являются надстройками над этими механизмами или их комбинацией. Тема дальнейшего обсуждения и следующей статьи — каким образом проверки статуса сертификатов реализованы в Веб-браузерах?
Про проблему отозванных сертификатов и «Кошмар скомпрометированных ключей» мы говорили на «очной ставке» NeoQUEST-2016. У нас даже есть отличное видео, в котором автор статьи рассказывает про отозванные сертификаты:
Пока у нас активно ведется подготовка к очередной «очной ставке» NeoQUEST-2017, которая пройдет в Питере 29 июня (и на которую мы ждём ВСЕХ желающих!), рассказываем интересную новость:
Мы объявляем конкурс докладов [11] на «очную ставку» NeoQUEST-2017!
Если у тебя есть интересные исследования по информационной безопасности и ты хочешь поделиться ими с миром — заходи на сайт neoquest.ru, отправляй заявку через специальную веб-форму, и организаторы с тобой обязательно свяжутся! По всем вопросам смело пиши на support@neoquest.ru!
Автор: НеоБИТ
Источник [12]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/informatsionnaya-bezopasnost/252006
Ссылки в тексте:
[1] Heartbleed: http://heartbleed.com/
[2] протоколе TLS: https://tools.ietf.org/html/rfc5246
[3] инфраструктуре открытых ключей X.509: https://tools.ietf.org/html/rfc5280
[4] X.509: https://ru.wikipedia.org/wiki/X.509
[5] протоколе онлайн-проверки статуса сертификатов: https://tools.ietf.org/html/rfc6960
[6] www.example.com: http://www.example.com
[7] ca.example.com/crl: http://ca.example.com/crl
[8] OCSP stapling: https://en.wikipedia.org/wiki/OCSP_stapling
[9] Первая версия: https://tools.ietf.org/html/rfc6066
[10] новой версии: https://tools.ietf.org/html/rfc6961
[11] объявляем конкурс докладов: http://neoquest.ru
[12] Источник: https://habrahabr.ru/post/325490/
Нажмите здесь для печати.