1

Я уже несколько дней ищу решение этой проблемы, в основном я пытаюсь проверить свою сеть на наличие ошибки, но я не могу скомпилировать тестер на CentOS 6.x, любые идеи или предложения очень ценятся ...

Ссылка на тестер

http://www.exploit-db.com/download/32998

Я получаю ошибку

[root@www ~]# gcc heartbleed.c -o heartbleed -lssl -lssl3 -lcrypto
/tmp/cc4cZa2B.o: In function `tls_bind':
heartbleed.c:(.text+0x47d): undefined reference to `SSL_CTX_SRP_CTX_init'
collect2: ld returned 1 exit status
[root@www ~]# 

3 ответа3

1

Для CentOS предлагается добавить флаг -lss3 в строку компиляции. Вспомогательная ссылка.

Вы также можете попробовать статически связать OpenSSL в вашу сборку по той же ссылке, что и выше. Замена расположения ваших *.a файлов:

#!/bin/bash
# Emerge openssl with static-libs to obtain all the *.a
mkdir -p heartbleed.d
cd heartbleed.d
ar x /usr/lib/libssl.a
ar x /usr/lib/libcrypto.a
ar x /usr/lib/libgmp.a
ar x /usr/lib/libz.a
cd ..
gcc -o heartbleed heartbleed.d/*.o heartbleed.c -ldl

Если вы работаете в Debian (для полноты я знаю, что этот вопрос относится к CentOS 6.x), тогда у вас возникнет эта проблема. Тогда эта ссылка может помочь вам с вашей проблемой, она предоставляет следующее решение:

$ gcc heartbleed.c -o heartbleed -Wl,-Bstatic -lssl -Wl,-Bdynamic -lssl3 -lcrypto
$ uname -a
Linux xxxxx Debian 3.2.54-2 x86_64 GNU/Linux
$ ls -al heartbleed
-rwxr-xr-x 1 x x357603 Apr 11 23:20 heartbleed

Эта ссылка немного сбивает с толку, она представляет точную проблему в 2013 году, но просто говорит, что они обновили заголовок для компиляции. Так может быть, трижды проверить заголовок файла для комментариев?

Другим решением вашей проблемы может быть ответ на следующее. Какая версия OpenSSL работает в вашей сети? Вот выдержка из HeartBleed.com

Какие версии OpenSSL затронуты?

Статус разных версий:

OpenSSL 1.0.1 - 1.0.1f (включительно) уязвимы OpenSSL 1.0.1g НЕ уязвимы Ветка OpenSSL 1.0.0 НЕ уязвима Ветка OpenSSL 0.9.8 НЕ уязвима

Это было исправлено в OpenSSL версии 1.0.1g: из рекомендаций по безопасности OpenSSL:

Затронутые пользователи должны обновить до OpenSSL 1.0.1g. Пользователи, не имеющие возможности немедленного обновления, могут альтернативно перекомпилировать OpenSSL с -DOPENSSL_NO_HEARTBEATS.

Вы можете перекомпилировать более старые версии с этим флагом, если не можете обновить.

0

gcc heartbleed.c -o heartbleed -lssl -lssl3 -lcrypto

Это выглядит хорошо. -lssl - это подпрограммы OpenSSL SSL/TLS. -lcrypto - это криптографические процедуры OpenSSL.

Но я не уверен насчет -lssl3 . Что это за библиотека?


heartbleed.c:(. text+0x47d): неопределенная ссылка на `SSL_CTX_SRP_CTX_init '

Похоже, что ваша версия OpenSSL не поддерживает пароль безопасного удаленного доступа (SRP) Томаса Ву. Или он был скомпилирован без поддержки.

Согласно OpenSSL CHANGELOG, SRP был добавлен в OpenSSL 1.0.1:

  *) Add SRP support.
     [Tom Wu <tjw@cs.stanford.edu> and Ben Laurie]

Вы можете проверить, была ли библиотека OpenSSL построена без SRP, с помощью следующего.

Сначала найдите библиотеку OpenSSL SSL/TLS:

$ find /usr/ -iname libssl.*
/usr/lib/libssl.0.9.7.dylib
/usr/lib/libssl.0.9.8.dylib
/usr/lib/libssl.dylib
/usr/local/ssl/android-14/lib/libssl.a
/usr/local/ssl/android-14/lib/libssl.so
/usr/local/ssl/android-14/lib/libssl.so.1.0.0
/usr/local/ssl/android-18/lib/libssl.a
/usr/local/ssl/android-18/lib/libssl.so
/usr/local/ssl/android-18/lib/libssl.so.1.0.0
...

Во-вторых, посмотрите, экспортируется ли символ:

$ nm /usr/lib/libssl.0.9.7.dylib | grep SSL_CTX_SRP_CTX_init
$

В моем случае, SRP не доступен , так как библиотека Apple , по умолчанию так вниз уровня (версия 0.9.7).

У меня есть еще одна копия библиотеки (версия 1.0.1i):

$ nm /usr/local/ssl/macosx-x64/lib/libssl.dylib | grep SSL_CTX_SRP_CTX_init
0000000000034920 T _SSL_CTX_SRP_CTX_init

Моя версия 1.0.1i имеет рутину.


Иногда вы можете построить без SRP. Чтобы проверить, был ли OpenSSL настроен без SRP:

$ cat /usr/local/ssl/macosx-x64/include/openssl/opensslconf.h | grep -A 1 SRP
$

В случае выше, я настроил для SRP.

Вот как это выглядит, когда OpenSSL настроен без функции (я настраиваю без SSLv2):

$ cat /usr//local/ssl/macosx-x64/include/openssl/opensslconf.h | grep -A 1 SSL2
#ifndef OPENSSL_NO_SSL2
# define OPENSSL_NO_SSL2
#endif
--
# if defined(OPENSSL_NO_SSL2) && !defined(NO_SSL2)
#  define NO_SSL2
# endif

SSL_CTX_SRP_CTX_init используется в двух местах. Чтобы это исправить, просто закомментируйте это.

Сначала строка 355:

 /* SSL_CTX_SRP_CTX_init(c->sslContext); */

Во-вторых, строка 499:

 /* SSL_CTX_SRP_CTX_init(c->sslContext); */

В связи с этим, авторы эксплойта, вероятно, могли бы следить за номером версии OpenSSL. Библиотека предоставляет OPENSSL_VERSION_NUMBER(3) только для такого рода вещей. Что-то вроде:

#if (OPENSSL_VERSION_NUMBER >= 0x10001000L) && !defined(OPENSSL_NO_SRP)
    SSL_CTX_SRP_CTX_init(c->sslContext);
#endif
0

Кажется, что пропущенная функция была деактивирована через опции сборки вашей библиотеки OpenSSL. Вы можете попробовать вручную скомпилировать openssl.

В качестве альтернативы вы можете использовать nmap (сначала проверьте текущую версию nmap, возможно, у вас уже есть сценарий heartbleed).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .