Cloned Boy
Professional
- Messages
- 1,017
- Reaction score
- 787
- Points
- 113
Уязвимость Heartbleed (CVE-2014-0160) — это критическая уязвимость в библиотеке OpenSSL, обнаруженная в 2014 году. Она позволяла злоумышленнику читать содержимое оперативной памяти сервера, что могло привести к утечке конфиденциальных данных, включая приватные ключи, пароли и другую敏感тивную информацию.
Пример запроса (упрощённо):
Если payload_length = 65535, а реальный payload = "A" (1 байт), сервер вернёт "A" + 65534 байт из памяти.
Исправление:
Добавлена проверка, что payload_length соответствует реальной длине payload.
Пример использования утилиты openssl для проверки уязвимости:
Если сервер поддерживал Heartbeat, он мог быть уязвим.
Суть уязвимости
- Протокол TLS/SSL и расширение Heartbeat
- OpenSSL реализует протоколы шифрования TLS/SSL, используемые для защиты интернет-соединений.
- Расширение Heartbeat позволяет проверять, жив ли удалённый сервер, отправляя небольшой запрос и ожидая ответа.
- Ошибка в обработке Heartbeat-запроса
- Уязвимость была в функции dtls1_process_heartbeat() (для DTLS) и tls1_process_heartbeat() (для TLS).
- Сервер некорректно проверял длину (payload_length) в запросе Heartbeat.
- Атакующий мог отправить запрос с маленьким реальным payload (например, 1 байт), но указать большую длину (до 64 КБ).
- Сервер в ответе копировал не только переданные данные, но и случайные данные из своей памяти, соответствующие указанной длине.
Технические детали
- Уязвимые версии OpenSSL: 1.0.1 – 1.0.1f (исправлено в 1.0.1g).
- Тип атаки: Read Overflow (чтение за пределами буфера).
- Возможные последствия:
- Утечка приватных ключей сервера.
- Перехват сессий (куки, токены).
- Компрометация пользовательских данных.
Пример запроса (упрощённо):
Code:
| type (1B) | payload_length (2B) | payload (N bytes) | padding |
Код уязвимости (до исправления)
C:
/* Уязвимый код в OpenSSL (упрощённо) */
memcpy(bp, pl, payload_length); // Копирование payload + данные из памяти
Исправление:
Добавлена проверка, что payload_length соответствует реальной длине payload.
Как эксплуатировалась уязвимость?
- Атакующий отправлял специально сформированный Heartbeat-запрос.
- Сервер отвечал, включая в ответ случайные данные из своей памяти.
- Повторяя запросы, можно было получить критически важную информацию (например, приватные ключи TLS).
Пример использования утилиты openssl для проверки уязвимости:
Bash:
openssl s_client -connect example.com:443 -tlsextdebug 2>&1 | grep "TLS server extension"
Последствия и масштаб
- Затронуты тысячи серверов (включая крупные компании вроде Yahoo, Cloudflare).
- Уязвимость существовала 2 года до обнаружения.
- Потребовалась массовая замена SSL-сертификатов.
Меры защиты
- Обновить OpenSSL до версии 1.0.1g или новее.
- Отключить расширение Heartbeat, если оно не нужно.
- Заменить SSL-сертификаты после потенциальной утечки.
- Использовать IDS/IPS для обнаружения аномальных Heartbeat-запросов.