
Ich habe nach einer zuverlässigen und portablen Möglichkeit gesucht, die OpenSSL-Version unter GNU/Linux und anderen Systemen zu überprüfen, sodass Benutzer leicht feststellen können, ob sie ihr SSL aufgrund des Heartbleed-Bugs aktualisieren sollten.
Ich dachte, es wäre einfach, aber unter Ubuntu 12.04 LTS mit dem neuesten OpenSSL 1.0.1g stieß ich schnell auf ein Problem:
openssl version -a
Ich hatte erwartet, eine Vollversion zu sehen, aber stattdessen bekam ich dies:
OpenSSL 1.0.1 14. März 2012 erstellt am: Di 4. Jun 07:26:06 UTC 2013 Plattform: [...]
Zu meiner unangenehmen Überraschung wird der Versionsbuchstabe nicht angezeigt. Kein f, kein g, nur „1.0.1“ und das war’s. Die aufgeführten Daten helfen auch nicht dabei, eine (nicht) anfällige Version zu entdecken.
Der Unterschied zwischen 1.0.1(af) und 1.0.1g ist entscheidend.
Fragen:
- Wie kann ich die Version zuverlässig überprüfen, vorzugsweise distributionsübergreifend?
- Warum wird der Versionsbuchstabe überhaupt nicht angezeigt? Ich konnte dies nur auf Ubuntu 12.04 LTS testen.
Andere berichten ebenfalls von diesem Verhalten. Einige Beispiele:
- https://twitter.com/orblivion/status/453323034955223040
- https://twitter.com/axiomsofchoice/status/453309436816535554
Es kommen einige (distrospezifische) Vorschläge herein:
- Ubuntu und Debian:
apt-cache policy openssl
undapt-cache policy libssl1.0.0
. Vergleichen Sie hier die Versionsnummern mit den Paketen:http://www.ubuntu.com/usn/usn-2165-1/ - Fedora 20:
yum info openssl
(danke @znmeb auf Twitter) undyum info openssl-libs
Überprüfen, ob noch eine ältere Version von OpenSSL vorhanden ist:
- Es ist nicht ganz zuverlässig, aber Sie können es versuchen
lsof -n | grep ssl | grep DEL
. SieheHeartbleed: Wie kann die OpenSSL-Version zuverlässig und portabel überprüft werden?warum dies für Sie möglicherweise nicht funktioniert.
Es stellt sich heraus, dass das Aktualisieren des OpenSSL-Pakets unter Ubuntu und Debian nicht immer ausreicht. Sie sollten auch das Paket libssl1.0.0 aktualisieren und dann prüfen, ob dies openssl version -a
angezeigt wird built on: Mon Apr 7 20:33:29 UTC 2014
.
Antwort1
Basierend auf dem von Ihrer Version von OpenSSL angezeigten Datum scheinen SieSinddort wird die Vollversion angezeigt.
Open SSL 1.0.1 wurde am 14. März 2012 veröffentlicht. 1.0.1a wurde am 19. April 2012 veröffentlicht.
Ich werde also weitermachen und behaupten, dass openssl version -a
dies die richtige, distributionsübergreifende Methode ist, um die Vollversion von OpenSSL anzuzeigen, die auf dem System installiert ist. Es scheint für alle Linux-Distributionen zu funktionieren, auf die ich Zugriff habe, undist die Methode, die auch in der OpenSSL-Dokumentation help.ubuntu.com vorgeschlagen wird. Ubuntu LTS 12.04 wurde mit der Standardversion OpenSSL v1.0.1 ausgeliefert. Dabei handelt es sich um die Version, die wie eine Kurzversion aussieht, da ihr kein Buchstabe folgt.
Allerdings scheint es einewesentlichFehler in Ubuntu (oder wie OpenSSL verpackt wird), der openssl version -a
weiterhin die ursprüngliche Version 1.0.1 vom 14. März 2012 zurückgibt, unabhängig davon, ob OpenSSL auf eine der neueren Versionen aktualisiert wurde oder nicht. Und wie bei den meisten Dingen regnet es in Strömen.
Ubuntu ist nicht die einzige große Distribution, die Updates in OpenSSL (oder andere Pakete) zurückportiert, anstatt sich auf die Upstream-Updates und Versionsnummern zu verlassen, die jeder kennt. Im Fall von OpenSSL, wo die Buchstabenversionsnummern nur Bugfixes und Sicherheitsupdates darstellen, scheint dies fast unverständlich, aber mir wurde gesagt, dass dies an derFIPS-validiertDie wichtigsten Linux-Distributionen werden mit OpenSSL ausgeliefert. Aufgrund von Anforderungen zur erneuten Validierung, die bei jeder Änderung ausgelöst werden, sogar bei Änderungen, die Sicherheitslücken schließen, ist es versionsgesperrt.
Beispielsweise wird unter Debian für die korrigierte Version die Versionsnummer angezeigt, 1.0.1e-2+deb7u5
anstatt der Upstream-Version von 1.0.1g
.
Als Ergebnis, zu diesem ZeitpunktEs gibt keine zuverlässige, portable Möglichkeit, SSL-Versionen über Linux-Distributionen hinweg zu überprüfen., da sie alle ihre eigenen Backport-Patches und Updates mit unterschiedlichen Versionsnummerierungsschemata verwenden. Sie müssen die korrigierte Versionsnummer für jede von Ihnen ausgeführte Linux-Distribution nachschlagen und die installierte OpenSSL-Version mit der spezifischen Versionsnummer dieser Distribution vergleichen, um festzustellen, ob auf Ihren Servern eine anfällige Version ausgeführt wird oder nicht.
Antwort2
Wenn Sie etwas wirklich plattformübergreifendes wollen,Suchen Sie nach der Sicherheitslücke selbst, anstatt sich auf Versionsnummern zu verlassen.
Möglicherweise haben Sie Code, der eine Versionsnummer meldet, die als anfällig bekannt ist.aber der eigentliche Code ist nicht anfälligUnd umgekehrt – stillschweigend anfälliger Code – könnte sogar noch schlimmer sein!
Viele Anbieter, die Open-Source-Produkte wie OpenSSL und OpenSSH bündeln, führen dringende Korrekturen selektiv in älteren Codeversionen durch, um die API-Stabilität und Vorhersehbarkeit aufrechtzuerhalten. Dies gilt insbesondere für „Long-Term Release“- und Appliance-Plattformen.
Anbieter, die dies jedoch stillschweigend tun (ohne ein eigenes Versionssuffix hinzuzufügen), laufen Gefahr, bei Schwachstellenscannern falsche Ergebnisse auszulösen (und Benutzer zu verwirren). Um dies transparent und überprüfbar zu machen, hängen einige Anbieter ihre eigenen Zeichenfolgen an die Hauptpaketversion an. Sowohl Debian (OpenSSL) als auch FreeBSD (in OpenSSH über die VersionAddendum
Direktive sshd_config) tun dies manchmal.
Anbieter, die dies nicht tun, tun dies wahrscheinlich, um das Risiko von Störungen aufgrund der vielen direkten und indirekten Möglichkeiten, mit denen andere Programme die Versionsnummern überprüfen, zu minimieren.
Es kann also so aussehen:
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=12.04
DISTRIB_CODENAME=precise
DISTRIB_DESCRIPTION="Ubuntu 12.04.4 LTS"
$ openssl version
OpenSSL 1.0.1 14 Mar 2012
... wenngleiches wurde gepatcht:
$ dpkg -l openssl | grep openssl
ii openssl 1.0.1-4ubuntu5.12 [truncated]
$ ls -la `which openssl`
-rwxr-xr-x 1 root root 513208 Apr 7 12:37 /usr/bin/openssl
$ md5sum /usr/bin/openssl
ea2a858ab594905beb8088c7c2b84748 /usr/bin/openssl
Bei solchen Dingen ist es besser, wenn SieVertrauen Sie der Versionsnummer nicht.
Antwort3
Leider bin ich mir da nicht sicherIsteine plattformübergreifende Möglichkeit, dies zu tun.Wie ich in einem Blog-Beitrag erörtere, die unter Ubuntu 12.04 angezeigte Version von OpenSSL bleibt nach dem Upgrade auf eine korrigierte Version 1.0.1.
NUR bei Ubuntu 12.04 können Sie feststellen, ob Ihr System aktualisiert wurde, wenn alle der folgenden Punkte zutreffen:
dpkg -s openssl | grep Version
zeigt Version 1.0.1-4ubuntu5.12 oder höher.dpkg -s libssl1.0.0 | grep Version
zeigt Version 1.0.1-4ubuntu5.12 oder höher.openssl version -a
zeigt ein „Baudatum“ vom 7. April 2014 oder später.
Danke an @danny für die zusätzlichen Informationen.
Antwort4
Testen diese Skripte alle Dienste oder nurHTTPS?so viel ich weiss,PostgreSQList anfällig, aber das ist nur ein Gerücht, bis ein Angriff in der Praxis auftaucht.
Da ist einMetasploitSkript zur Verwendung verfügbar.
https://github.com/rapid7/metasploit-framework/commit/dd69a9e5dd321915e07d8e3dc8fe60d3c54f551a
Sie können dies eingeben (getestet mitGnuWin32OpenSSL-Binärversion 1.0.1.6, datiert 14.01.2014) oder verwenden Sie einfach das Skript im Kommentar darunter. Das ist genauer und einfacher!
s_client -connect a23-75-248-141.deploy.static.akamaitechnologies.com:443 -debug -state
Sobald die Verbindung hergestellt ist, geben Sie B ein. Sie sehen dann einen anfälligen Host und Ihre Verbindung wird nicht unterbrochen:
B
HEARTBEATING
write to 0x801c17160 [0x801cbc003] (66 bytes => 66 (0x42))
0000 - 18 03 03 00 3d 8f 6f 3c-52 11 83 20 9c a2 c0 49 ....=.o 5 (0x5))
0000 - 18 03 03 00 3d ....=
read from 0x801c17160 [0x801cb7008] (61 bytes => 61 (0x3D))
0000 - 05 4d f5 c0 db 96 d1 f5-c7 07 e5 17 1f 3b 48 34 .M...........;H4
0010 - 6e 11 9d ba 10 0c 3a 34-eb 7b a5 7c c4 b6 c0 c0 n.....:4.{.|....
0020 - b0 75 0e fe b7 fa 9e 04-e9 4e 4a 7d 51 d3 11 1f .u.......NJ}Q...
0030 - e2 23 16 77 cb a6 e1 8e-77 84 2b f8 7f .#.w....w.+..
read R BLOCK
Sie erhalten eine Heartbeat-Antwort, die dieser ähnlich sieht.
Auf einem gepatchten Host wird eine Antwort ähnlich der folgenden angezeigt und Ihre Verbindung wird getrennt:
Geben Sie B ein
HEARTBEATING
write to 0x801818160 [0x8019d5803] (101 bytes => 101 (0x65))
0000 - 18 03 03 00 60 9c a3 1e-fc 3b 3f 1f 0e 3a fe 4c ....`....;?..:.L
0010 - a9 33 08 cc 3d 43 54 75-44 7d 2c 7b f3 47 b9 56 .3..=CTuD},{.G.V
0020 - 89 37 c1 43 1c 80 7b 87-66 ff cb 55 5f 8d 1a 95 .7.C..{.f..U_...
0030 - 1b 4c 65 14 21 a1 95 ac-7a 70 79 fc cc a0 cf 51 .Le.!...zpy....Q
0040 - 0f 7e c5 56 14 c8 37 c1-40 0b b8 cb 43 96 8a e6 [email protected]...
0050 - 21 42 64 58 62 15 fb 51-82 e6 7f ef 21 1b 6f 87 !BdXb..Q....!.o.
0060 - b9 c2 04 c8 47 ....G
Quelle:
Es gibt auch diese Tools: