
Лабораторная среда на основе Docker для эксплуатации CVE-2014-0160 (Heartbleed) с целью утечки конфиденциальной памяти из веб-серверов nginx, с правилами обнаружения Snort IDS.
Этот репозиторий посвящен созданию контейнера для создания среды, в которой можно эксплуатировать nginx с помощью техники Heartbleed, с акцентом на:

Проблема CVE-2014-0160 возникает, когда библиотека OpenSSL предоставляет TLS функцию heartbeat с размером буфера 64 КБ, что приводит к избыточности и утечке конфиденциальной информации из памяти сервера.
Веб-приложение обрабатывает конфиденциальные сообщения, которые nginx кеширует в памяти.
Мы эксплуатируем, проверяя, поддерживает ли среда TLS heartbeat.
openssl s_client -connect : -tlsdebug
Примечание: современные версии OpenSSL могут больше не поддерживать протокол TLS heartbeat, пожалуйста, используйте версию с поддержкой.
Heartbleed — это ошибка чтения за пределами границ (out-of-bounds read), носящая случайный характер. Сервер вернет 64 КБ смежной памяти.
Заголовок heartbeat (RFC6520) 18 03 02 00
Используйте docker build для сборки lab heartbleed
docker build -t heartbleed-lab .
docker run heartbleed-lab -p port:8443
Порт по умолчанию веб-приложения — 8443.
Используйте пейлоад heartbleed.py для тестирования.
Мы можем наблюдать, что пейлоад возвращает результат в виде hexdump.
В примере дампа мы видим отправленный запрос и ячейки памяти, в основном заполненные 0x00, так как пейлоад носит случайный характер, поэтому необходимо запустить его несколько раз, чтобы получить желаемый результат.
Мы можем запустить memory.py, чтобы отправить запрос к nginx, сохранить его в памяти, и затем получить утечку, как показано в result.txt.
Поскольку мы знаем, что злоумышленник будет использовать heartbeat запрос для утечки сообщений,
alert tcp any any -> any 443 (msg:"Heartbeat request"; content:"|18 03 02 00|"; rawbytes;sid:100000)
Используйте Snort IDS для обнаружения вторжений.