Ich suchte nach einer zuverlässigen und portablen Möglichkeit, die OpenSSL-Version unter GNU / Linux und anderen Systemen zu überprüfen, damit Benutzer aufgrund des Heartbleed-Fehlers leicht feststellen können, ob sie ihr SSL aktualisieren sollten.
Ich dachte, es wäre einfach, aber ich stieß auf Ubuntu 12.04 LTS mit der neuesten Version von OpenSSL 1.0.1g schnell auf ein Problem:
openssl version -a
Ich hatte erwartet, eine Vollversion zu sehen, aber stattdessen bekam ich Folgendes:
OpenSSL 1.0.1 14. März 2012 gebaut am: Di Jun 4 07:26:06 UTC 2013 Plattform: [...]
Zu meiner unangenehmen Überraschung wird der Versionsbrief nicht angezeigt. Kein f, kein g da, nur "1.0.1" und das wars. Die aufgeführten Daten helfen auch nicht dabei, eine (nicht) anfällige Version zu finden.
Der Unterschied zwischen 1.0.1 (af) und 1.0.1g ist entscheidend.
Fragen:
- Was ist ein zuverlässiger Weg, um die Version zu überprüfen, vorzugsweise Cross-Distribution?
- Warum wird der Versionsbrief nicht an erster Stelle angezeigt? Ich konnte dies nur mit Ubuntu 12.04 LTS testen.
Andere melden dieses Verhalten ebenfalls. Einige Beispiele:
- https://twitter.com/orblivion/status/453323034955223040
- https://twitter.com/axiomsofchoice/status/453309436816535554
Einige (distro-spezifische) Vorschläge für:
- Ubuntu und Debian:
apt-cache policy openssl
undapt-cache policy libssl1.0.0
. Vergleichen Sie die Versionsnummern mit den Paketen hier: http://www.ubuntu.com/usn/usn-2165-1/ - Fedora 20:
yum info openssl
(danke @znmeb auf Twitter) undyum info openssl-libs
Überprüfen, ob eine ältere Version von OpenSSL noch vorhanden ist:
- Es ist nicht ganz zuverlässig, aber Sie können es versuchen
lsof -n | grep ssl | grep DEL
. Siehe Heartbleed: Wie kann man die OpenSSL-Version zuverlässig und portabel überprüfen? Warum funktioniert das bei Ihnen nicht?
Es stellt sich heraus, dass die Aktualisierung 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
.
[root@null~]# openssl version -a OpenSSL 1.0.1e-fips 11 Feb 2013
apt-cache policy openssl
und es antwortete mit: DasInstalled: 1.0.1-4ubuntu5.12
ist die 1.0.1g, die gerade von Ubuntu für 12.04 LTS veröffentlicht wurde. Ich habe mich abgemeldet und wieder angemeldet. Kann ich noch etwas tun, um mich zu verifizieren?Antworten:
Auf der Grundlage des von Ihrer Version von OpenSSL angezeigten Datum, es scheint , Sie sind die Vollversion dort angezeigt zu sehen.
Open SSL 1.0.1 wurde am 14. März 2012 veröffentlicht . 1.0.1a wurde am 19. April 2012 veröffentlicht.
Ich gehe also weiter und behaupte, dass dies
openssl version -a
die richtige, distanzü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, und ist auch die in der OpenSSL-Dokumentation von help.ubuntu.com vorgeschlagene Methode . Ubuntu LTS 12.04 wird mit Vanilla OpenSSL v1.0.1 ausgeliefert. Dies ist die Version, die wie eine Kurzversion aussieht, da kein Buchstabe darauf folgt.Allerdings scheint es einen großen Fehler in Ubuntu zu geben (oder wie OpenSSL gepackt 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 andere Version aktualisiert wurde oder nicht der neueren Versionen. Und wie bei den meisten Dingen, wenn es regnet, gießt es.Ubuntu ist nicht die einzige große Distribution, die es sich zur Gewohnheit macht, Updates in OpenSSL (oder andere Pakete) zurück zu portieren, anstatt sich auf die Upstream-Updates und die Versionsnummerierung zu verlassen, die jeder kennt. Im Fall von OpenSSL, bei dem die Buchstabenversionsnummern nur Fehlerbehebungs- und Sicherheitsupdates darstellen, scheint dies fast unverständlich zu sein. Ich wurde jedoch darüber informiert, dass dies möglicherweise an dem mit OpenSSL gelieferten, von FIPS validierten Plug-in für große Linux-Distributionen liegt. Aufgrund der Anforderungen im Zusammenhang mit der erneuten Validierung, die aufgrund von Änderungen ausgelöst werden, selbst Änderungen, die Sicherheitslücken schließen, ist die Version gesperrt.
Beispielsweise zeigt die feste Version unter Debian eine Versionsnummer von
1.0.1e-2+deb7u5
anstelle der Upstream-Version von an1.0.1g
.Aus diesem Grund gibt es derzeit keine zuverlässige, tragbare Möglichkeit, SSL-Versionen für Linux-Distributionen zu überprüfen , da alle ihre eigenen, zurückportierten Patches und Aktualisierungen mit unterschiedlichen Versionsnummernschemata verwenden. Sie müssen die feste Versionsnummer für jede von Ihnen ausgeführte Linux-Distribution ermitteln und die installierte OpenSSL-Version anhand der spezifischen Versionsnummer dieser Distribution überprüfen, um festzustellen, ob auf Ihren Servern eine anfällige Version ausgeführt wird oder nicht.
quelle
openssl version -a
ist dies keine portable Methode (zumindest nicht für Ubuntu portierbar). Ich habe es überprüftapt-cache policy openssl
und es antwortete mit: DasInstalled: 1.0.1-4ubuntu5.12
ist die 1.0.1g, die gerade von Ubuntu für 12.04 LTS veröffentlicht wurde. Ich habe mich abgemeldet und wieder angemeldet, bevor ich eingecheckt habe.After the release of OpenSSL 1.0.0 the versioning scheme changed. Letter releases (e.g. 1.0.1a) can only contain bug and security fixes and no new features.
Also nichts gewonnen wird , wenn man das Upstream-Versionierungsschema aufgibt; Das Backportieren der Updates entspricht im Wesentlichen der Verwendung der aktualisierten Version, da das Update ohnehin nur Sicherheits- und Fehlerkorrekturen enthält. Das verwirrt die Dinge und lässt uns keine Möglichkeit, die OpenSSL-Version in Linux-Distributionen portabel zu überprüfen.Wenn Sie etwas wirklich plattformübergreifendes möchten, suchen Sie nach der Sicherheitsanfälligkeit selbst, anstatt sich auf Versionsnummern zu verlassen.
Möglicherweise verfügen Sie über Code, der eine Versionsnummer meldet, von der bekannt ist, dass sie anfällig ist , der tatsächliche Code ist jedoch nicht anfällig . Und das Gegenteil - lautlos anfälliger Code - könnte noch schlimmer sein!
Viele Anbieter, die Open-Source-Produkte wie OpenSSL und OpenSSH bündeln, werden dringende Korrekturen selektiv auf eine ältere Codeversion nachrüsten, um die API-Stabilität und -Vorhersagbarkeit zu gewährleisten. Dies gilt insbesondere für "Langzeitversionen" und Appliance-Plattformen.
Hersteller, die dies im Hintergrund tun (ohne ein eigenes Versions-String-Suffix hinzuzufügen), laufen jedoch Gefahr, bei Schwachstellenscannern falsche Positive 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 die Wahrscheinlichkeit eines Bruchs zu minimieren, da andere Programme die Versionsnummern auf viele direkte und indirekte Arten prüfen.
So kann es also aussehen:
... obwohl es gepatcht wurde :
Mit solchen Dingen ist es besser, wenn Sie der Versionsnummer nicht vertrauen.
quelle
Leider bin ich mir nicht sicher, ob es dafür eine plattformübergreifende Möglichkeit gibt. Wie ich in einem Blogbeitrag erläutere, wird die Version von OpenSSL nach dem Upgrade auf eine feste Version unter Ubuntu 12.04 REMAINS 1.0.1 angezeigt.
NUR für Ubuntu 12.04 können Sie feststellen, ob Sie aktualisiert wurden, wenn alle der folgenden Aussagen 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 "eingebautes" Datum vom 7. April 2014 oder später.Danke an @danny für die zusätzlichen Infos.
quelle
1.0.1-4ubuntu5.12
NUR für Ubuntu 12.04 LTS ist. Wenn Sie auf Ubuntu 12.10 sind , sollten Sie mindestens Version sehen ,1.0.1c-3ubuntu2.7
und wenn Sie auf 13.10 sind dann sollte es mindestens Version sein1.0.1e-3ubuntu1.2
, nach Quelle: ubuntu.com/usn/usn-2165-1libssl1.0.0
explizit auf Ubuntu aktualisieren . Wenn Sie ein Build-on-Datum vor dem 7. April 2014 sehen, selbst wenn die Version von openssl korrekt aussieht (1.0.1-4ubuntu5.12
für Ubuntu 12.04), sind Sie wahrscheinlich immer noch anfällig.openssl version -a
Möglicherweise wird das Erstellungsdatum vom 7. April nicht benötigt, da das Update auf ältere Releases zurückportiert wird.Probieren Sie Folgendes aus. Es werden alle Zeichenfolgen aus der Kryptobibliothek extrahiert , mit der ssh verknüpft ist. Es erzeugt mehr als eine Ausgabezeile, kann aber bei Bedarf in eine Zeile konvertiert werden.
produziert
zB auf Gentoo bevor es auftaucht
der obige Befehl ergibt
nach
Autsch, noch kein g.
quelle
[...] part of OpenSSL 1.0.1 14 Mar 2012
die gleiche Weise an, wie dies deropenssl version -a
Fall ist. Dies ist jedoch ein Trick, der in anderen Fällen funktionieren kann!Testen diese Skripte alle Dienste oder nur HTTPS ? AFAIK , PostgreSQL ist anfällig, aber das ist nur ein Gerücht, bis ein wilder Angriff auftaucht.
Es steht ein Metasploit- Skript zur Verfügung.
Sie können dies eingeben (getestet mit GnuWin32 OpenSSL-Binärversion 1.0.1.6 vom 14.01.2014) oder einfach das Skript im Kommentar unter diesem verwenden. Es ist genauer und einfacher!
Sobald eine Verbindung vom Typ B hergestellt wurde, wird auf einem anfälligen Host Folgendes angezeigt, und die Verbindung wird nicht getrennt:
Sie erhalten eine Heartbeat-Antwort, die dieser ähnelt.
Auf einem gepatchten Host wird eine Antwort ähnlich der folgenden angezeigt, und die Verbindung wird getrennt:
Geben Sie B ein
Quelle:
Es gibt auch diese Tools:
https://github.com/titanous/heartbleeder
http://filippo.io/Heartbleed/
https://github.com/musalbas/heartbleed-masstest
quelle
Für Ubuntu können Sie verwenden:
Und vergleiche mit http://www.ubuntu.com/usn/usn-2165-1/ . Nach einem Neustart (!!!) können Sie mit überprüfen
http://possible.lv/tools/hb
.quelle
Sie sollten besser auf die neueste Version von OpenSSL OpenSSL 1.0.1j aktualisieren.
http://blog.vincosolution.com/2014/10/upgrade-openssl-1-0-1j-debianubuntu.html
quelle
Ich habe dieses Skript in devcentral gefunden :
Ersetzen Sie
example.com
durch den Namen oder die IP-Adresse des Servers, den Sie überprüfen möchten.Wird zurückkehren,
"safe"
wenn Ihr Server in Ordnung ist oder"server extension "heartbeat" (id=15)"
nicht.Dies hängt nicht von der Versionsnummer ab, sondern von der Auflistung der Servererweiterung, die das Problem verursacht. Sie sollte daher immun gegen die Spielereien der Bibliotheksversion sein.
Die Maschine , die Sie laufen
openssl s_client
auf muss sein für diese Verwendung von OpenSSL 1.0.1 oder höher , um zu arbeiten.quelle
openssl s_client
MUSS OpenSSL 1.0.1 oder höher verwenden, damit dies funktioniert. Wenn Sie diesen Befehl auf einem Computer mit 0.9.8 oder 1.0.0 ausführen, MELDEN SIE IMMER "Sicher", auch für anfällige Server .