Уязвимость Heartbleed поставила под удар две трети серверов в мире
Бюллетень по безопасности CVE-2014—0160 вышел 7 апреля. Из него стало известно о длительном существовании критической уязвимости в криптографическом пакете OpenSSL.
Обнаружилось, что алгоритмы реализации протоколов TLS и SSL в большинстве используемых сегодня версий OpenSSL некорректно обрабатывают пакеты расширения Heartbeat (из-за чего ошибка получила название HeartBleed). Это позволяет злоумышленникам получить удалённый доступ к конфиденциальной информации из оперативной памяти активного сетевого процесса за пределами буфера.
Удивительно, но критическую уязвимость не замечали на протяжении двух лет. Ей подвержены все версии OpenSSL от 1.0.1 до 1.0.1f включительно, а также 1.0.2-beta1.
В результате допущенной ошибки в них не проверяется фактическая длина в записи SSLv3. Это позволяет прочитать без авторизации до 64 Кбайт из оперативной памяти процесса на подключённом клиенте или сервере за каждое обращение. Во многих случаях этого оказывается достаточно для получения ключей, паролей или других секретных данных.
Уязвимые версии криптографического пакета OpenSSL с марта 2012 года входят в состав многих дистрибутивов ОС семейства BSD и практически всех ОС Linux ветвей Debian, RedHat и Slackware.
В первую очередь ошибка затрагивает серверы Apache, nginx, проект Tor (через веб-сервер torproject.org), а также многие веб-сайты, использующие протокол HTTPS, даже если доступ к ним осуществляется по VPN. "Возможно, нам следует выкинуть наш SSL-сертификат и получить новый", — пишут в блоге проекта Tor.
По данным W3Techs, под управлением Apache сегодня работают 60,7% всех сайтов интернета. Написанный Игорем Сысоевым HTTP и почтовый сервер nginx обслуживает около 18% популярных российских сайтов, включая "Яндекс", Mail.Ru, "Рамблер" и "ВКонтакте".
По оценке ArsTechnica, критическая уязвимость в OpenSSL затронула в общей сложности более двух третей сайтов в мире.
Особенно важен тот факт, что атака с использованием данной уязвимости не оставляет никаких следов в логах сервера, поэтому не существует способа достоверно узнать, воспользовался ли кто-то этой ошибкой.
Уязвимость в OpenSSL была обнаружена экспертами из фирмы Codenomicon в начале апреля. Факт её существования подтверждён независимым исследованием исходного кода библиотеки ssl/d1_both.c, проведённым группой под руководством специалиста по вопросам безопасности компании Google Нила Мехты (Neel Mehta).
"Ради проверки мы решили взломать сами себя, — рассказывает Мехта. — Мы смогли получить секретные ключи, используемые для сертификатов X.509, имена пользователей и их пароли, перехватить мгновенные сообщения и электронные письма, прочесть критически важные для бизнеса документы".
Патч для OpenSSL был выпущен Ником Салливаном (Nick Sullivan) — системным программистом компании CloudFlare. Ему помогали программист Google Адам Лэнгли (Adam Langley) и советник по безопасности The OpenSSL Project Бодо Мюллер (Bodo Moeller).
Наиболее важная часть исправлений коснулась добавления проверки длины полезной нагрузки.
/* Read type and payload length first */
if (1 + 2 + 16 > s->s3->rrec.length)
return 0; /* silently discard */
Они же придержали опубликование официального бюллетеня с описанием ошибки до её исправления. Однако по результатам своих исследований группа Мехта вынесла крайне неутешительный прогноз: поскольку уязвимость существовала давно и факты о её эксплуатации получить невозможно, её уже могут скрыто использовать для получения несанкционированного доступа и создания других обходных путей на будущее. Поэтому, считают эксперты Google, проблема НСД останется актуальной даже после установки патча.
Пока в бюллетене и распространённых информационных сообщениях официально советуют предпринять следующие шаги:
установить исправленную версию OpenSSL 1.0.1g или 1.0.2-beta2 либо перекомпилировать пакет OpenSSL с ключом OPENSSL_NO_HEARTBEATS;
перевыпустить SSL-сертификат;
использовать приманки (honeypot), имитирующие наличие серверов с уязвимым пакетом OpenSSL, и проверять подключения к ним.