CVE-2014-0160
CVE-2014-0160 — это идентификатор уязвимости в программном обеспечении OpenSSL, также известной как «Heartbleed» (с англ. — «Кровоточащее сердце»). Она представляет собой ошибку чтения за пределами границ буфера в реализации протокола Heartbeat (RFC 6520) для TLS/DTLS. Уязвимость позволяет неавторизованному удалённому злоумышленнику без какой-либо аутентификации считывать содержимое оперативной памяти сервера или клиента, что может привести к утечке конфиденциальных данных, включая закрытые ключи шифрования, пароли, сессионные токены и содержимое передаваемых сообщений.
История
Обнаружение и публикация
Уязвимость была независимо обнаружена сотрудниками компании Google Security (Нил Мета) и финской компании Codenomicon (Антти Карьялайнен, Матти Камунен и другие) в начале апреля 2014 года. 7 апреля 2014 года информация об уязвимости была публично раскрыта координационно, одновременно с выпуском исправленной версии OpenSSL 1.0.1g. Исследователи безопасности из Codenomicon дали уязвимости название «Heartbleed» и создали логотип, который стал одним из самых узнаваемых символов в истории кибербезопасности.
Причина появления
Ошибка была внесена в код OpenSSL 31 декабря 2011 года разработчиком Робином Сиглем (Robin Seggelmann) в рамках реализации расширения Heartbeat для TLS. Ошибка была допущена при написании кода обработки входящего Heartbeat-запроса: не была выполнена проверка на соответствие заявленной длины полезной нагрузки (payload) фактической длине данных, переданных в запросе. В результате, если злоумышленник отправлял запрос, в котором поле длины указывало значение, большее, чем реальная длина данных, сервер копировал в ответный пакет не только отправленные данные, но и произвольный блок памяти, следующий за ними. Размер этого блока мог достигать 64 килобайт.
Реакция сообщества
После публикации информация о Heartbleed вызвала беспрецедентную реакцию в глобальном масштабе. Многие крупные интернет-компании (Google, Facebook, Yahoo, Amazon, Microsoft, Cloudflare и другие) в течение нескольких часов выпустили заявления о том, что их сервисы были уязвимы, и начали массовое обновление программного обеспечения и отзыв и перевыпуск SSL/TLS-сертификатов. По оценкам экспертов, на момент обнаружения уязвимости ей были подвержены около 17% всех защищённых веб-серверов в мире (более 500 000 сайтов). В России уязвимость затронула ряд государственных и коммерческих ресурсов, включая портал «Госуслуги» (впоследствии уязвимость была закрыта).
Технические подробности
Механизм эксплуатации
Уязвимость CVE-2014-0160 реализуется следующим образом:
- Клиент (злоумышленник) инициирует TLS-соединение с сервером.
- После установки соединения клиент отправляет Heartbeat-запрос, содержащий поле «payload length» (длина полезной нагрузки), установленное в 64 КБ (максимальное значение), и поле «payload data» (полезные данные), содержащее, например, всего 1 байт.
- Сервер, обрабатывая запрос, считывает из памяти буфер размером, указанным в поле «payload length» (64 КБ), начиная с адреса, где хранятся полученные полезные данные (1 байт). Поскольку реальный размер полезных данных меньше заявленного, сервер захватывает в ответный пакет содержимое оперативной памяти, расположенное после отправленного клиентом 1 байта.
- Сервер отправляет ответный Heartbeat-пакет, содержащий 64 КБ произвольных данных из своей памяти. Этот процесс может повторяться многократно, позволяя злоумышленнику постепенно извлечь весь объём памяти процесса OpenSSL.
Данные, доступные для извлечения
В результате эксплуатации уязвимости злоумышленник мог получить:
- Закрытые ключи SSL/TLS: позволяют расшифровывать весь прошлый и будущий трафик, а также подделывать сертификаты для проведения атак «человек посередине».
- Пароли и логины пользователей: хранящиеся в памяти в процессе обработки запросов.
- Сессионные идентификаторы (cookies): позволяют захватить активные сессии пользователей без необходимости ввода пароля.
- Содержимое запросов и ответов: в том числе конфиденциальные документы, сообщения и данные банковских карт.
- Ключи аутентификации и другие секреты: используемые для внутренних коммуникаций серверов.
Затронутые версии
Уязвимости были подвержены версии OpenSSL с 1.0.1 по 1.0.1f (включительно). Версии 1.0.0 и старше, а также 1.0.2 (бета) не содержали данную ошибку, так как в них не была реализована поддержка Heartbeat. Исправление было внесено в версию OpenSSL 1.0.1g.
Влияние и последствия
Кибербезопасность
Heartbleed стала одной из самых серьёзных уязвимостей в истории интернета. Её главная опасность заключалась в том, что она не оставляла следов в логах сервера, делая обнаружение атаки крайне затруднительным. Эксплуатация не требовала специальных привилегий или сложного инструментария — существовали готовые скрипты, позволяющие провести атаку за несколько секунд.
Юридические и регуляторные последствия
Инцидент привёл к пересмотру подходов к управлению уязвимостями и криптографической безопасности. В ряде стран были ужесточены требования к аудиту безопасности государственных информационных систем. В России, после обнаружения уязвимости на портале «Госуслуги», были проведены внеплановые проверки защищённости государственных ресурсов, а также рекомендовано использование отечественных криптографических средств.
Экономические последствия
Крупнейшие интернет-компании понесли значительные прямые и косвенные убытки, связанные с необходимостью экстренного обновления сотен тысяч серверов, отзыва и перевыпуска миллионов SSL-сертификатов. По оценкам, совокупные затраты на устранение последствий Heartbleed в глобальном масштабе превысили 500 миллионов долларов США.
Исправление и меры защиты
Обновление программного обеспечения
Основной мерой защиты являлось немедленное обновление OpenSSL до версии 1.0.1g или более поздней. Для систем, где обновление было невозможно, рекомендовалось перекомпилировать OpenSSL с отключённой поддержкой Heartbeat (флаг -DOPENSSL_NO_HEARTBEATS).
Пост-инцидентные действия
После обновления требовалось выполнить комплекс мер:
- Отзыв и перевыпуск SSL/TLS-сертификатов: старые сертификаты считались скомпрометированными, так как их закрытые ключи могли быть украдены.
- Сброс всех сессионных ключей и паролей: принудительный сброс паролей всех пользователей для предотвращения использования перехваченных данных.
- Ротация ключей аутентификации: смена ключей для внутренних сервисов (API, базы данных, SSH).
Критика и уроки
Критика проекта OpenSSL
Инцидент с Heartbleed выявил системные проблемы в управлении проектом OpenSSL:
- Недостаточное финансирование: на момент обнаружения уязвимости проект OpenSSL поддерживался небольшим числом добровольцев и имел крайне ограниченный бюджет (около 2000 долларов США в год).
- Отсутствие аудита кода: критически важная криптографическая библиотека не проходила регулярного профессионального аудита безопасности.
- Сложность кодовой базы: код OpenSSL был труден для понимания и рецензирования, что способствовало накоплению ошибок.
Последствия для индустрии
Heartbleed привела к созданию инициатив по финансированию разработки и аудита критически важного открытого ПО, таких как Core Infrastructure Initiative (CII) под эгидой Linux Foundation. CII предоставила финансирование для аудита OpenSSL и других проектов, а также способствовала созданию более безопасных альтернатив (например, LibreSSL и BoringSSL). Уязвимость также стала катализатором для внедрения практик автоматического тестирования безопасности (SAST, DAST) и более широкого использования протокола HTTP Strict Transport Security (HSTS).
Интересные факты
- Логотип Heartbleed (кровоточащее сердце) был создан дизайнером из Codenomicon и стал одним из самых узнаваемых символов в сфере информационной безопасности.
- Уязвимость существовала в коде более двух лет, прежде чем была обнаружена.
- Существуют неподтверждённые данные о том, что спецслужбы некоторых стран (в частности, АНБ США) могли знать об уязвимости до её публичного раскрытия и использовать её для сбора данных. Официальные представители АНБ это отрицали.
- В 2014 году компания Cloudflare, один из крупнейших CDN-провайдеров, провела эксперимент по «охоте на Heartbleed», в ходе которого намеренно оставила уязвимый сервер в сети, чтобы продемонстрировать, как легко злоумышленники могут извлечь данные из памяти. В результате эксперимента были извлечены реальные ключи шифрования и пароли.
Источники
- CVE-2014-0160. Common Vulnerabilities and Exposures (CVE).
- Heartbleed Bug. Codenomicon.
- OpenSSL Security Advisory [07 Apr 2014]. OpenSSL Foundation.
- Seggelmann, R. (2014). Analysis of the Heartbleed bug.
- Durumeric, Z., et al. (2014). The Matter of Heartbleed. Proceedings of the 2014 Conference on Internet Measurement Conference (IMC '14).
- Официальные заявления Минкомсвязи РФ (апрель 2014 г.).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →