
Dockerized-тренировочная лаборатория для эксплуатации Heartbleed (CVE-2014-0160) через TLS heartbeat с целью утечки памяти nginx, а также правило Snort для обнаружения атак.
Этот репозиторий посвящён созданию контейнера для упрощения эксплуатации 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 для сборки лаборатории 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 для обнаружения вторжений.