2014-04-10 3 views
16

Nach dem Heartbleed-Fehler beschreibt this post on ruby-lang.org, wie Sie die Schwachstelle und das Upgrade überprüfen können.Wie kann ich sicherstellen, dass Ruby ein OpenSSL verwendet, das nicht anfällig für Heartbleed ist?

Es enthält diesen Rat:


Um zu überprüfen, welche Version der OpenSSL-Bibliothek Sie Ruby verknüpfen, verwenden Sie die folgenden Schritte aus:

ruby -v -ropenssl -rfiddle -e 'puts Fiddle::Function.new(Fiddle.dlopen(nil)["SSLeay_version"], [Fiddle::TYPE_INT], Fiddle::TYPE_VOIDP).call(0)' 

die Version von OpenSSL zur Zeit mit Ruby-Installation Um zu überprüfen, verwenden Sie die folgende:

ruby -ropenssl -e 'puts OpenSSL::OPENSSL_VERSION' 

Was ist der Unterschied zwischen diesen beiden Prüfungen, und welche Aktion wird empfohlen, wenn von einem der Befehle eine ungültige Version zurückgegeben wird?

+2

Ich vermute, dass man OpenSSL entweder in die Ruby-Binärdatei kompilieren oder es zur Laufzeit auf die Systembibliothek zugreifen kann? Wenn das korrekt ist, woher weiß ich, wie eine bestimmte Ruby-Binärdatei OpenSSL verwendet? –

Antwort

9

Es ist möglich, dass mehrere Versionen von OpenSSL auf Ihrem System installiert sind. Diese beiden Tests sagen Ihnen, welche Version mit Ihrem Ruby verknüpft werden würde, wenn Sie einen Build erstellen würden und welche Version tatsächlich in dem Ruby verlinkt ist, den Sie gerade verwenden.

Nehmen wir als Beispiel an, dass Sie immer noch Ruby 1.9.3 verwenden und es letztes Jahr installiert/kompiliert haben. Es wäre mit der Version von OpenSSL verknüpft gewesen, die Sie zu der Zeit installiert hatten. In der Zwischenzeit haben Sie Ihre Version von OpenSSL (z. B. mit Homebrew) als Reaktion auf das Heartbleed-Problem aktualisiert.

Wenn Sie den ersten Test ausgeführt haben, erhalten Sie OpenSSL 1.0.1g, die aktuelle Version, die Sie gerade aktualisiert haben.

Wenn Sie den zweiten Test ausführen, würde es zeigen, dass Ihre Kopie von Ruby wahrscheinlich immer noch mit der älteren, anfälligen Kopie von OpenSSL verknüpft ist.

Als Beispiel, ich Ausgabe von meinem eigenen System verwenden werden (Mac OSX 10.9):

Ergebnisse auf dem System Rubin (2.0.0):

[~] $ ruby -v -ropenssl -rfiddle -e 'puts Fiddle::Function.new(Fiddle.dlopen(nil ["SSLeay_version"], [Fiddle::TYPE_INT], Fiddle::TYPE_VOIDP).call(0)'` 

ruby 2.0.0p247 (2013-06-27 revision 41674) [universal.x86_64-darwin13] 
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/openssl/ssl.rb:10 1: warning: assigned but unused variable - id 
OpenSSL 0.9.8y 5 Feb 2013 


[~] $ ruby -ropenssl -e 'puts OpenSSL::OPENSSL_VERSION' 
OpenSSL 0.9.8y 5 Feb 2013 

Ergebnisse ruby 2.1.1p76 (von rbenv verwaltet, konnte aber RVM oder andere sein):

[~] $ ruby -v -ropenssl -rfiddle -e 'puts Fiddle::Function.new(Fiddle.dlopen(nil)["SSLeay_version"], [Fiddle::TYPE_INT], Fiddle::TYPE_VOIDP).call(0)' 
ruby 2.1.1p76 (2014-02-24 revision 45161) [x86_64-darwin13.0] 
OpenSSL 1.0.1g 7 Apr 2014 
[~] $ ruby -ropenssl -e 'puts OpenSSL::OPENSSL_VERSION' 
OpenSSL 1.0.1g 7 Apr 2014 

Wie Sie das System Rubin sehen i s verbunden mit der OpenSSL im Lieferumfang von OS X, und noch nicht von Apple gepatcht. Ruby 2.1.1 habe ich nach der Verwendung von Homebrew neu erstellt, um meine Installation von OpenSSL zu aktualisieren.

[~] $ brew list openssl 
/usr/local/Cellar/openssl/1.0.1g/bin/openssl 
/usr/local/Cellar/openssl/1.0.1g/bin/c_rehash 
/usr/local/Cellar/openssl/1.0.1g/include/openssl/ (75 files) 
/usr/local/Cellar/openssl/1.0.1g/lib/libcrypto.1.0.0.dylib 
/usr/local/Cellar/openssl/1.0.1g/lib/libssl.1.0.0.dylib 
/usr/local/Cellar/openssl/1.0.1g/lib/engines/ (12 files) 
/usr/local/Cellar/openssl/1.0.1g/lib/pkgconfig/ (3 files) 
/usr/local/Cellar/openssl/1.0.1g/lib/ (4 other files) 
/usr/local/Cellar/openssl/1.0.1g/share/man/ (1126 files) 

Zuerst stellen Sie sicher, dass Sie die aktuellste OpenSSL haben, wenn Sie Homebrew verwenden, benutzen Sie einfach:

brew upgrade openssl.

Stellen Sie außerdem sicher, dass die älteren Versionen von OpenSSL mit brew cleanup openssl

ich das System Ruby beste Patchen ist nicht empfehlenswert zu entfernen, um eine Ruby-Version-Manager zu verwenden, wie rbenv oder RVM.Nachdem Sie Ihr SSL aktualisiert haben, entfernen Sie die Ruby-Versionen, die Sie verwenden, und erstellen Sie sie neu, indem Sie die normalen Build-/Installationsanweisungen für Ihren Versionsmanager befolgen.

13

Nach ein paar Fragen zu stellen elsewhere, mein gegenwärtiges Verständnis ist dies:

  • OpenSSL wird nie zusammen mit Rubin zusammengestellt; Ruby wird zur Kompilierzeit einfach gesagt, wo man nach OpenSSL suchen soll.
  • ruby -r rbconfig -e 'puts RbConfig::CONFIG["configure_args"]' sollte Ihnen sagen, wo Ruby nach verschiedenen ausführbaren Dateien suchen wird, einschließlich OpenSSL
  • Alles, was zählt, ist, dass die Kopie von OpenSSL an diesem Speicherort aktuell ist; CD dort und ./openssl version verwenden, um herauszufinden.
  • ruby -v -ropenssl -rfiddle -e 'puts Fiddle::Function.new(Fiddle.dlopen(nil)["SSLeay_version"], [Fiddle::TYPE_INT], Fiddle::TYPE_VOIDP).call(0)' sollte die gleiche Antwort geben wie Laufen openssl version direkt, weil es tatsächlich die Kopie von OpenSSL fragt die Ruby nutzt seine Versionsnummer melden
  • OpenSSL::OPENSSL_VERSION kann out-of-date sein; Es meldet die Version, die es beim Kompilieren gefunden hat.
+0

'OpenSSL :: OPENSSL_LIBRARY_VERSION', um zu sehen, mit welcher Version ruby ​​läuft. – Jerrod

Verwandte Themen