
Исследовательский инструмент, предназначенный для проверки уязвимости OpenSSL CVE-2014-0160
Простой инструмент на Ruby для проверки серверов на уязвимость OpenSSL CVE-2014-0160.
Я не несу ответственности за ущерб, который может быть причинён с помощью этого инструмента. Он был написан для проверки частных серверов на конкретную уязвимость и оценки возможной утечки пользовательских данных при высокой нагрузке. Он распространяется как инструмент для внутреннего аудита безопасности.
Требуется:
Для установки этих компонентов сначала загрузите и установите Ruby для вашей платформы. Затем установите Bundler командой gem install bundler и получите зависимости проекта, выполнив bundle install в корневом каталоге проекта.
Синопсис командной строки: ruby src/run.rb <хост> [<порт>]
Если ваш сервер не уязвим, вывод будет выглядеть так:
Host server:443 seems safe
В случае уязвимости вывод покажет около 64 Киб данных, извлечённых из памяти, в виде шестнадцатеричного дампа, чтобы вы могли проверить, произошла ли утечка конфиденциальной информации.
Host server:443 is vulnerable! Heartbeat response payload : 00000000 d4 03 03 53 4a 84 a9 00 01 02 03 04 05 06 07 08 |...SJ...........| 00000010 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 18 |................| 00000020 19 1a 1b 00 01 a6 00 00 00 01 00 02 00 03 00 04 |................| 00000030 00 05 00 06 00 07 00 08 00 09 00 0a 00 0b 00 0c |................| 00000040 00 0d 00 0e 00 0f 00 10 00 11 00 12 00 13 00 14 |................| 00000050 00 15 00 16 00 17 00 18 00 19 00 1a 00 1b 00 1c |................| 00000060 00 1d 00 1e 00 1f 00 20 00 21 00 22 00 23 00 24 |....... .!.".#.$| 00000070 00 25 00 26 00 27 00 28 00 29 00 2a 00 2b 00 2c |.%.&.'.(.).*.+.,| 00000080 00 2d 00 2e 00 2f 00 30 00 31 00 32 00 33 00 34 |.-.../.0.1.2.3.4| ....
Согласно RFC 6520 и 6066, максимальный размер сообщения Heartbeat должен быть ,
,
,
или
байт в зависимости от использования расширения максимальной длины фрагмента.
Цитата из RFC 6520:
Общая длина сообщения HeartbeatMessage НЕ ДОЛЖНА превышать 2^14 или max_fragment_length, если оно было согласовано в соответствии с RFC 6066.
Цитата из RFC 6066:
Поле "extension_data" этого расширения ДОЛЖНО содержать:
enum{ 2^9(1), 2^10(2), 2^11(3), 2^12(4), (255) } MaxFragmentLength;
чьё значение — желаемая максимальная длина фрагмента. Допустимые значения этого поля: 2^9, 2^10, 2^11 и 2^12.
Это означает, что максимальный размер извлекаемого фрагмента данных должен составлять около 16 Киб. Однако OpenSSL не соблюдает это ограничение, позволяя использовать максимальное значение поля длины полезной нагрузки сообщения Heartbeat, т.е. 65535 (0xFFFF).