Как стать автором
Обновить

Справочник по уязвимости OpenSSL Heartbleed

Время на прочтение4 мин
Количество просмотров60K

Что может узнать атакующий


Приватный ключ TLS сервера, приватный ключ TLS клиента (если клиент уязвим), cookies, логины, пароли и любые другие данные, которыми обменивается сервер и его клиенты. При этом не нужно прослушивать канал связи, достаточно послать специально сформированный пакет, и это нельзя обнаружить в логах сервера.

Уязвимость двусторонняя: если уязвимый клиент подключается к серверу злоумышленника, то злоумышленник может читать память процесса клиента. Пример уязвимых клиентов: MariaDB, wget, curl, git, nginx (в режиме прокси).

Как протестировать уязвимость


Веб-сервисы:
filippo.io/Heartbleed,
www.ssllabs.com/ssltest,
rehmann.co/projects/heartbeat,
possible.lv/tools/hb.
Тест для клиента: reverseheartbleed.com
Скрипт на Python: gist.github.com/sh1n0b1/10100394, gist.github.com/mitsuhiko/10130454
Скрипт на Go: github.com/titanous/heartbleeder
Статистика по сайтам: gist.github.com/dberkholz/10169691

Какие системы подвержены уязвимости


— Уязвимы OpenSSL 1.0.1 — 1.0.1f, 1.0.2-beta1, уязвимость исправлена в OpenSSL 1.0.1g и 1.0.2-beta2 (secadv).
— OpenVPN, в том числе и под Windows — исправлено в версии I004 (загрузка)
— Любые программы, статически слинкованные с уязвимой версией OpenSSL.
— Tor (блог).

— Debian Wheezy (stable) — исправлено в OpenSSL 1.0.1e-2+deb7u5 и 1.0.1e-2+deb7u6 (security)
— Ubuntu 12.04.4 LTS — исправлено в OpenSSL 1.0.1-4ubuntu5.12 (USN)
— CentOS 6.5 — исправлено в openssl-1.0.1e-16.el6_5.7 (centos-announce)
— Redhat 6.5 — исправлено в openssl-1.0.1e-16.el6_5.7 (solutions, errata, bugzilla)
— Fedora 19 и 20 — исправлено в openssl-1.0.1e-37 (announce)
— Gentoo — исправлено в openssl-1.0.1g (GLSA)
— Slackware 14.0 и 14.1 — исправлено в openssl-1.0.1g (slackware-security)
— OpenSUSE 12.3 и 13.1 — исправлено в openssl-1.0.1e (opensuse-security-announce)
— FreeBSD 10.0 — исправлено в 10.0-RELEASE-p1 (advisories)
— OpenBSD 5.3 и 5.4 (patch)
— NetBSD 5.0.2
— Amazon — исправлено в OpenSSL 1.0.1e-37.66 (security-bulletins)
— Android 4.1.1 — остальные версии без уязвимости.

Обычно зависят от уязвимой библиотеки и требуют перезапуска:
— Веб-серверы: Nginx, Apache, почтовые серверы: Postfix, Dovecot, Jabber и прочие IM: ejabberd,
— MySQL, если используется TLS для авторизации и он зависит от OpenSSL: в CentOS, RedHat (включая Remi), Percona Server (blog).

Что не подвержено уязвимости


— Windows (нет OpenSSL), MacOS (старая версия OpenSSL), Firefox, Thunderbird (по умолчанию использует NSS), Chrome/Chromium (по умолчанию использует NSS), Android (отключен heartbeat).
— Корневые и промежуточные сертификаты, которыми подписаны ключи TLS сервера (приватные ключи от них отсутствуют на сервере)
— OpenSSH (использует OpenSSL только для генерации ключей)
— OpenVPN, если использует статические ключи (не x509) или если использует в конфиге ключ вида «tls-auth ta.key 1»
— Метод распространения обновлений Unix-like ОС (чаще всего используется GnuPG для подписи).

Как обновить систему


Debian, Ubuntu

# aptitude update
# aptitude -VR full-upgrade

После этого полностью перезапустить сервисы, которые используют TLS. Установщик обновления предложит перезапустить автоматически, или можно вручную:
# service nginx restart
# service apache2 restart

Полный список сервисов, которые нуждаются в перезапуске и могут быть уязвимы:
# lsof -n | grep -iE 'del.*(libssl\.so|libcrypto\.so)'
или
# checkrestart

Если не уверены, лучше полностью перезагрузить сервер.
Проверка версии:
# dpkg -l | grep -i openssl
# aptitude changelog openssl


CentOS, RedHat, Fedora


# yum update

После этого полностью перезапустить сервисы, которые используют TLS, например:
# service nginx restart
# service httpd restart

Полный список сервисов, которые нуждаются в перезапуске и могут быть уязвимы:
# lsof -n | grep -iE 'del.*(libssl\.so|libcrypto\.so)'
или
# needs-restarting

Если не уверены, лучше полностью перезагрузить сервер.
Проверка версии:
# yum list openssl
# rpm -q --changelog openssl


FreeBSD


# freebsd-update fetch
# freebsd-update install

После этого полностью перезапустить сервисы, которые используют TLS, например:
# service nginx restart
# service apache22 restart

Если не уверены, лучше полностью перезагрузить сервер.
Проверка версии:
# freebsd-version


Отзыв TLS ключей и смена паролей


— Если атакующий смог собрать полностью приватный ключ, то он может использовать его для создания поддельного сайта, или для расшифровки подслушанных сессий. Поэтому рекомендуется отозвать сертификаты, ключи от которых могли попасть к атакующему.

— Если браузер клиентов передавал пароли на сайт без hash+salt, а в чистом виде, то эти пароли также могут быть скомпрометированы.

На будущее


— Нужно убедиться, что браузер проверяет, не отозван ли сертификат сайта, который он посещает.
Firefox по умолчанию проверяет OSCP, а последние версии также поддерживают OCSP Stapling; Safari проверяет по умолчанию с версии Mac OS X 10.7 (Lion); Chrome не проверяет по умолчанию (в настройках раздел HTTPS/SSL), OCSP Stapling не поддерживается; Internet Explorer по умолчанию проверяет OSCP, но не поддерживает OCSP Stapling; Opera проверяет OSCP по умолчанию; Safari не проверяет OSCP по умолчанию. Настройки разных браузеров.

— На сервере желательно включить Perfect forward secrecy (PFS). При этом даже при компрометации приватного ключа злоумышленник не сможет расшифровать прошлый или будущий подслушанный трафик. Для этого нужно включить Elliptic Curve Diffie-Hellman Ephemeral (ECDHE) или Diffie-Hellman Ephemeral (DHE). Настройка сервера, тестирование.
Теги:
Хабы:
+60
Комментарии46

Публикации

Изменить настройки темы

Истории

Работа

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн