Heartbleed
Heartbleed — это критическая уязвимость в криптографической библиотеке OpenSSL, обнаруженная в апреле 2014 года. Она позволяла злоумышленнику, не оставляя следов, читать защищённую память сервера или клиента, получая доступ к секретным ключам шифрования, паролям, сессионным токенам и другим конфиденциальным данным. Уязвимость получила кодовое название Heartbleed (от англ. heart — «сердце» и bleed — «кровотечение») из-за своей природы: она эксплуатировала ошибку в реализации расширения TLS Heartbeat (RFC 6520), которое предназначено для поддержания соединения.
История и обнаружение
Уязвимость была внесена в код OpenSSL в декабре 2011 года (в версии 1.0.1) и оставалась незамеченной более двух лет. Она была независимо обнаружена и задокументирована двумя группами исследователей: сотрудниками финской компании Codenomicon (Някки Лахти, Матти Камюнен и др.) и инженером Google Security Нилом Мехта (Neel Mehta).
7 апреля 2014 года Codenomicon публично раскрыла информацию об уязвимости, одновременно выпустив исправленную версию OpenSSL 1.0.1g. В тот же день компания CloudFlare провела демонстрацию эксплуатации уязвимости на своём сайте, показав, как можно украсть закрытый ключ сервера. Новость мгновенно распространилась по всему миру, вызвав панику в интернет-сообществе, так как OpenSSL использовалась на подавляющем большинстве веб-серверов (около 66% по данным опросов того времени).
Технические детали
Принцип работы расширения Heartbeat
Протокол TLS (Transport Layer Security) использует расширение Heartbeat для поддержания активного соединения между клиентом и сервером. Оно работает следующим образом:
- Запрос (HeartbeatRequest): Одна сторона (например, клиент) отправляет другой стороне (серверу) сообщение, содержащее произвольные данные (полезную нагрузку) и указание их длины.
- Ответ (HeartbeatResponse): Получившая сторона должна вернуть ровно те же данные обратно, подтверждая, что соединение живо.
Ошибка в реализации
Уязвимость заключалась в том, что реализация Heartbeat в OpenSSL не проверяла, соответствует ли фактическая длина отправляемых данных заявленной в сообщении. Если злоумышленник отправлял запрос, где в поле длины указывал значение, большее, чем реальный размер данных, сервер, доверяя этому полю, копировал в ответный пакет не только полезную нагрузку, но и произвольный фрагмент из своей оперативной памяти, следующий за ней.
Схема эксплуатации
- Злоумышленник формирует HeartbeatRequest, содержащий, например, 1 байт данных, но в поле длины указывает 65535 байт.
- Сервер, следуя протоколу, выделяет буфер размером 65535 байт для ответа.
- Сервер копирует в этот буфер 1 байт полезной нагрузки, а затем заполняет оставшиеся 65534 байта содержимым своей оперативной памяти, которая находилась рядом с этим 1 байтом.
- Сервер отправляет этот 65535-байтовый пакет обратно злоумышленнику.
- Злоумышленник получает фрагмент памяти сервера, который может содержать секретные ключи, пароли, содержимое запросов других пользователей и т.д.
Атака могла повторяться многократно, позволяя постепенно «вычитать» всю память процесса OpenSSL.
Что можно было украсть
- Закрытые ключи сервера (Private Keys): Самый опасный сценарий. Зная закрытый ключ, злоумышленник мог расшифровать любой ранее перехваченный трафик, а также выдавать себя за легитимный сервер.
- Пароли и учётные данные: Пользовательские логины и пароли, передаваемые в открытом виде (например, при аутентификации на форумах или в приложениях, не использующих дополнительные меры защиты).
- Сессионные токены (Session IDs, Cookies): Позволяли перехватить сессию пользователя и получить доступ к его аккаунту без ввода пароля.
- Содержимое запросов: Данные, которые другие пользователи отправляли на сервер в момент атаки (например, содержимое форм, личные сообщения).
- Конфиденциальная информация: Любые другие данные, временно хранящиеся в памяти процесса OpenSSL (номера кредитных карт, медицинские записи, внутренняя переписка).
Масштаб и последствия
Heartbleed стала одной из самых масштабных и резонансных уязвимостей в истории интернета.
Поражённые системы
Уязвимость затрагивала версии OpenSSL с 1.0.1 по 1.0.1f. Она была исправлена в версии 1.0.1g. По оценкам экспертов, на момент обнаружения уязвимости ей были подвержены около 500 000 веб-сайтов, включая крупнейшие интернет-сервисы:
- Социальные сети: Facebook (организация признана экстремистской и запрещена в РФ), Twitter, Instagram (организация признана экстремистской и запрещена в РФ), LinkedIn, Pinterest.
- Поисковые системы и почта: Yahoo!, Google (Gmail, YouTube), Microsoft (Outlook.com), Яндекс.
- Сервисы облачных вычислений: Amazon Web Services, Dropbox, CloudFlare (частично).
- Правительственные и финансовые сайты: Сайты многих государственных учреждений США, Великобритании, Канады и других стран, а также банковские порталы.
- Операционные системы: Уязвимости были подвержены дистрибутивы Linux (Debian, Ubuntu, Red Hat, CentOS), FreeBSD, а также некоторые версии OpenBSD.
- Сетевое оборудование: Маршрутизаторы, коммутаторы и VPN-устройства от Cisco, Juniper и других производителей, использующие OpenSSL.
Реакция сообщества
- Экстренное исправление: Разработчики OpenSSL в течение нескольких дней выпустили исправление. Ведущие интернет-компании (Google, Facebook (организация признана экстремистской и запрещена в РФ), Yahoo!) в течение нескольких часов или дней обновили свои серверы.
- Массовая смена паролей: Пользователям по всему миру настоятельно рекомендовали сменить пароли на всех сайтах, которые могли быть уязвимы. Многие крупные сервисы (например, Apple, Google) ввели принудительную смену паролей для своих пользователей.
- Отзыв и перевыпуск сертификатов: Компании, чьи закрытые ключи могли быть скомпрометированы, были вынуждены отзывать старые SSL/TLS-сертификаты и получать новые от центров сертификации.
- Создание Core Infrastructure Initiative: После Heartbleed была создана инициатива Core Infrastructure Initiative (CII) под эгидой Linux Foundation для финансирования и поддержки критически важных проектов с открытым исходным кодом, таких как OpenSSL.
Юридические и финансовые последствия
Уязвимость привела к нескольким судебным искам. Например, в Канаде был подан коллективный иск против компании Yahoo! за то, что она не смогла защитить данные пользователей. Финансовые потери от утечки данных, смены сертификатов и простоев были оценены в миллиарды долларов.
Критика и уроки
Heartbleed стала ярким примером проблем управления проектами с открытым исходным кодом.
- Недостаток финансирования: Проект OpenSSL на момент обнаружения уязвимости имел крайне ограниченное финансирование и, по сути, поддерживался горсткой добровольцев. Это привело к нехватке времени для аудита кода и тестирования.
- Сложность кода: Кодовая база OpenSSL была огромной, плохо документированной и содержала множество устаревших и неиспользуемых функций, что затрудняло поиск ошибок.
- Отсутствие автоматизированного тестирования: В проекте не было достаточного покрытия кода автоматическими тестами, которые могли бы выявить несоответствие между заявленной и фактической длиной данных.
Уязвимость стимулировала значительные инвестиции в безопасность открытого кода. Были запущены программы bug bounty (вознаграждение за найденные уязвимости) для критических проектов, а также началось активное внедрение методов формальной верификации и фаззинга (fuzzing) — автоматизированной подачи случайных или некорректных данных на вход программы для поиска ошибок.
Источники
- Codenomicon. «Heartbleed Bug». Официальный сайт уязвимости (heartbleed.com).
- OpenSSL Security Advisory [07 Apr 2014]. «TLS heartbeat read overrun (CVE-2014-0160)».
- Bruce Schneier. «Heartbleed». Блог Schneier on Security, 9 апреля 2014.
- Robert Graham. «How Heartbleed works». Блог Errata Security, 9 апреля 2014.
- CloudFlare. «The Heartbleed Bug and CloudFlare». Блог CloudFlare, 8 апреля 2014.
- Linux Foundation. «Core Infrastructure Initiative». Официальный сайт.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →