Heartbleed.c Tester auf CentOS 6.x kompilieren

811
Jeffrey L. Roberts

Ich habe seit Tagen nach einer Lösung dafür gesucht, im Grunde versuche ich, mein Netzwerk auf den problematischen Fehler zu testen, aber ich kann den Tester auf CentOS 6.x nicht kompilieren, alle Ideen oder Vorschläge werden sehr geschätzt ...

Link zum Tester

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

Fehler bekomme ich

[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 ~]#  
1
Warum nicht den Python Tester verwenden? Ángel vor 10 Jahren 0

3 Antworten auf die Frage

1
RoraΖ

Für CentOS wird empfohlen, die -lss3Flagge Ihrer Compile-Zeile hinzuzufügen . Unterstützender Link .

Sie können auch versuchen, OpenSSL über denselben Link wie oben statisch in Ihren Build einzubinden. Ersetzen des Speicherorts Ihrer *.aDateien:

#!/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 

Wenn Sie sich auf Debian befinden (zur Vollständigkeit weiß ich, dass sich diese Frage auf CentOS 6.x bezieht), dann haben Sie dieses Problem. Dann könnte dieser Link Ihnen bei Ihrem Problem helfen, da er die folgende Lösung bietet:

$ 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 

Dieser Link ist etwas verwirrend, er stellt das genaue Problem 2013 dar, sagt aber nur, dass der Header zum Kompilieren aktualisiert wurde. Also vielleicht dreimal die Header-Datei auf Kommentare überprüfen?

Eine andere Lösung für Ihr Problem könnte die Antwort auf Folgendes sein. Welche Version von OpenSSL läuft in Ihrem Netzwerk? Hier ist ein Auszug aus HeartBleed.com

Welche Versionen von OpenSSL sind betroffen?

Status verschiedener Versionen:

OpenSSL 1.0.1 bis einschließlich 1.0.1f (einschließlich) sind anfällig. OpenSSL 1.0.1g ist NICHT anfällig. Der Zweig OpenSSL 1.0.0 ist NICHT anfällig. Der Zweig OpenSSL 0.9.8 ist NICHT anfällig

Es wurde in OpenSSL Version 1.0.1g gepatcht: Aus dem OpenSSL Security Advisory :

Betroffene Benutzer sollten auf OpenSSL 1.0.1g aktualisieren. Benutzer, die nicht sofort ein Upgrade durchführen können, können OpenSSL alternativ mit -DOPENSSL_NO_HEARTBEATS erneut kompilieren.

Sie können ältere Versionen mit diesem Flag erneut kompilieren, wenn Sie kein Upgrade durchführen können.

Gleicher Fehler leider Jeffrey L. Roberts vor 10 Jahren 0
Welche Optionen ausprobieren? vor 10 Jahren 0
Übrigens ist die Flagge nicht im Link `-lssl3`? Ich kann nirgendwo -lss3 finden. Und -lssl3 wird bereits von OP verwendet. vor 10 Jahren 1
Sie haben recht, ich hätte schwören können, dass ich die Option -lss3 doppelt geprüft habe, aber sie wird vom OP verwendet. Ich bin immer noch nicht sicher, ob das OP die Header-Datei geprüft hat, wie im 3. Link angegeben. Ich bin nicht sicher, welche Kommentare hier enthalten sein könnten. vor 10 Jahren 0
* "Sie können auch versuchen, OpenSSL statisch in Ihren Build einzubinden" * - das ist irrelevant. jww vor 10 Jahren 0
0

Es scheint, dass die Fehlfunktion durch die Erstellungsoptionen Ihrer OpenSSL-Bibliothek deaktiviert wurde. Sie können openssl manuell kompilieren.

Als Alternative können Sie nmap verwenden (Überprüfen Sie zunächst Ihre aktuelle nmap-Version, möglicherweise haben Sie bereits das heartbleed-Skript).

0
jww

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

Das sieht gut aus. -lsslsind die SSL / TLS-Routinen von OpenSSL. -lcryptoist die Kryptographie-Routine von OpenSSL.

Aber ich bin mir nicht sicher -lssl3. Welche Bibliothek ist das?


heartbleed.c :(. text + 0x47d): undefinierter Verweis auf `SSL_CTX_SRP_CTX_init '

Es scheint, dass Ihre Version von OpenSSL das Secure Remote Password (SRP) von Thomas Wu nicht unterstützt . Oder es wurde ohne Unterstützung kompiliert .

Gemäß OpenSSL CHANGELOG wurde SRP bei OpenSSL 1.0.1 hinzugefügt:

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

Sie können mit den folgenden Anweisungen überprüfen, ob die OpenSSL-Bibliothek ohne SRP erstellt wurde.

Suchen Sie zunächst die OpenSSL SSL / TLS-Bibliothek:

$ 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 ... 

Zweitens, ob das Symbol exportiert wird:

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

In meinem Fall ist SRP nicht verfügbar, da die Standardbibliothek von Apple nicht so hoch ist (Version 0.9.7).

Ich habe eine weitere Kopie der Bibliothek weggeschoben (Version 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 

Meine Version 1.0.1i hat die Routine.


Manchmal können Sie auch ohne SRP bauen . So prüfen Sie, ob OpenSSL ohne SRP konfiguriert wurde :

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

Im obigen Fall habe ich SRP konfiguriert.

So sieht es aus, wenn OpenSSL ohne eine Funktion konfiguriert wird (ich konfiguriere ohne 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_initwird an zwei Stellen verwendet. Um dies zu beheben, kommentieren Sie es einfach aus.

Zunächst Zeile 355:

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

Zweite Zeile 499:

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

In Verbindung damit könnten die Urheber des Exploits wahrscheinlich die Versionsnummer von OpenSSL überwachen. Die Bibliothek bietet OPENSSL_VERSION_NUMBER (3) nur für diese Art von Dingen. So etwas wie:

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