16 апреля 2014
2/3 Серверов интернет скомпрометировано ошибкой в криптографическом пакете OpenSSL
Критическая ошибка в криптографическом пакете с открытым исходным кодом OpenSSL получила название HeartBleed. В распространенных версиях OpenSSL алгоритмы обработки протоколов TLS и SSL позволяют считывать до 64 Кб оперативной памяти приложения с каждым обращением. Это происходит потому, что не проверяется фактическая длина в записи SSLv3. Считывая оперативную память активного сетевого процесса за пределами буфера веб-сервера, злоумышленники могут получить доступ к конфиденциальной информации сервера и пользователей, перехватывая ключи, файлы cookies и пароли.
Проблема появилась 31 декабря 2011 года. Седьмого апреля 2014 года вышел бюллетень по безопасности CVE-2014—0160, из которого стало известно о критической уязвимости OpenSSL 1.0.2-beta и всех версий OpenSSL 1.0.1, кроме 1.0.1g. Ошибка обнаружена экспертами компании «Codenomicon» и ее наличие подтверждено независимым исследованием группы по вопросам безопасности компании «Google».
Уязвимость была распространена в дистрибутивы операционных систем семейства BSD, Linux ветвей Debian, RedHat и Slackware, с выпуском версии OpenSSL 1.0.1 14 марта 2012 года. Ошибка подвергает опасности серверы Apache, nginx, проект Tor и сайты использующие протокол HTTPS. Использование уязвимости OpenSSL не оставляет следов в логах сервера, поэтому неизвестно кто и когда смог воспользовался этой ошибкой.
Для устранения ошибки сотрудниками компании «CloudFlare» для OpenSSL выпущена «заплатка».
Самая важная часть исправления – проверка длины в записи SSLv3.
/* Read type and payload length first */
if (1 + 2 + 16 > s->s3->rrec.length)
return 0; /* silently discard */
Официальный бюллетень с описанием ошибки был опубликован после ее исправления. В связи с тем, что ошибка существовала длительное время, ее могли использовать и для создания обходных путей.
В бюллетене по безопасности CVE-2014—0160 советуют предпринять следующие шаги:
– установить исправленную версию OpenSSL 1.0.1g или 1.0.2-beta2; либо перекомпилировать пакет OpenSSL с ключом OPENSSL_NO_HEARTBEATS;
– заменить ssl сертификаты;
– использовать приманки (honeypot), имитирующие наличие серверов OpenSSL с уязвимым пакетом, и проверять подключения к ним.