4 Punkte von GN⁺ 2024-04-16 | 4 Kommentare | Auf WhatsApp teilen

Schwachstelle bei der Signaturerstellung mit ECDSA-Privatschlüsseln auf der NIST-P521-Kurve im PuTTY-Tool

  • Alle Versionen von PuTTY von 0.68 bis 0.80 enthalten eine schwerwiegende Schwachstelle im Code zur Erzeugung von Signaturen mit ECDSA-Privatschlüsseln, die die NIST-P521-Kurve verwenden
    • Tritt auf, wenn PuTTY oder Pageant beim Authentifizieren gegenüber einem SSH-Server eine Signatur aus dem Schlüssel erzeugt
    • Dieser Schwachstelle wurde CVE-2024-31497 zugewiesen
    • Entdeckt von Fabian Bäumer und Marcus Brinkmann von der Ruhr-Universität Bochum

Auswirkungen der Schwachstelle

  • Die Auswirkung dieser Schwachstelle ist die Offenlegung des Privatschlüssels
    • Wenn ein Angreifer einige Dutzend signierte Nachrichten und den öffentlichen Schlüssel besitzt, hat er genügend Informationen, um den Privatschlüssel wiederherzustellen
    • Dadurch kann er Signaturen fälschen, als wäre er der Benutzer, und sich bei allen Servern anmelden, die diesen Schlüssel verwenden
  • Um solche Signaturen zu erhalten, muss der Angreifer nur kurz einen Server kompromittieren, bei dem sich mit dem Schlüssel authentifiziert wird, oder kurz Zugriff auf eine Pageant-Instanz mit dem Schlüssel haben
    • Diese Signaturen werden jedoch einem passiven Lauscher auf einer SSH-Verbindung nicht offengelegt
  • Wenn Sie einen Schlüssel dieses Typs haben, wird empfohlen, ihn sofort zu verwerfen
    • Sie sollten den alten öffentlichen Schlüssel aus allen OpenSSH-authorized_keys-Dateien und denselben Dateien auf anderen SSH-Servern entfernen, damit Signaturen mit dem kompromittierten Schlüssel keinen Wert mehr haben
    • Erzeugen Sie anschließend ein neues Schlüsselpaar als Ersatz

Betroffene Schlüsseltypen

  • Der einzige betroffene Schlüsseltyp ist 521-Bit-ECDSA
    • Ein Schlüssel, bei dem in Windows-PuTTYgen am Anfang des Felds „Key fingerprint“ ecdsa-sha2-nistp521 angezeigt wird, der in Windows-Pageant beim Laden als „NIST p521“ beschrieben wird oder der im SSH-Protokoll oder in der Schlüsseldatei eine ID hat, die mit ecdsa-sha2-nistp521 beginnt
    • ECDSA mit anderen Größen und andere Schlüsselalgorithmen sind nicht betroffen
    • Insbesondere Ed25519 ist nicht betroffen

Details zum Fehler

  • Alle DSA-Signaturschemata müssen während der Signaturerstellung einen Zufallswert erzeugen
    • Dieser ist als „nonce“ (ein kryptografischer Begriff für einen Wert, der nur einmal verwendet wird) oder unter dem Buchstaben k bekannt
  • Es ist gut bekannt, dass ein Angreifer den Privatschlüssel sofort wiederherstellen kann, wenn er das verwendete k errät oder zwei mit demselben k erzeugte Signaturen findet
    • Daher ist es riskant, DSA-Signaturen auf Systemen ohne Quelle hochwertiger Zufälligkeit zu erzeugen
  • Da PuTTY unter Windows entwickelt wurde, gab es anfangs überhaupt keinen kryptografischen Zufallszahlengenerator
    • Deshalb hat PuTTY k bisher mit einer deterministischen Methode ohne jegliche Verwendung von Zufallszahlen erzeugt
    • Die Kerntechnik besteht darin, einen sicheren Hash zu berechnen, der sowohl die zu signierende Nachricht als auch den Privatschlüssel in die Hash-Eingabe einbezieht
  • Diese Technik ist heute Mainstream, und RFC 6979 dokumentiert eine konkrete und gut bekannte Methode dafür
    • PuTTY tat jedoch seit 2001 im Wesentlichen dasselbe, hielt sich aber nicht an diese Spezifikation, weil der RFC erst 2013 veröffentlicht wurde

Ursache der Schwachstelle

  • Die Technik von PuTTY funktioniert so, dass ein SHA-512-Hash erzeugt und anschließend modulo q reduziert wird, wobei q die Gruppenordnung des im DSA-System verwendeten Werts ist
  • In allen Fällen außer P521 ist die Verzerrung, die durch die Reduktion einer 512-Bit-Zahl modulo q entsteht, vernachlässigbar
  • Bei P521 ist q jedoch 521 Bit groß (also größer als 512 Bit), sodass die Reduktion einer 512-Bit-Zahl modulo q überhaupt keinen Effekt hat
    • Das führt zu k-Werten, bei denen die oberen 9 Bit immer 0 sind
  • Diese Verzerrung ermöglicht einen Angriff zur Wiederherstellung des Schlüssels

Inhalt der Fehlerbehebung

  • Zur Behebung dieser Schwachstelle wurde das bisherige System von PuTTY zur Erzeugung von k für alle DSA- und ECDSA-Schlüsseltypen vollständig aufgegeben und auf die Technik aus RFC 6979 umgestellt
    • EdDSA-Schlüssel wie Ed25519 verwendeten bereits ein anderes System und bleiben unverändert
  • Das ändert jedoch nichts daran, dass bei jeder Signatur, die mit dem bisherigen k-Generator erstellt wurde, bereits Informationen über bestehende P521-Privatschlüssel offengelegt wurden

Meinung von GN⁺

  • Es handelt sich um eine vergleichsweise kürzlich entdeckte Schwachstelle, die aber offenbar auf ein Problem mit einer seit 2001 verwendeten Methode zurückgeht. Man kann dies als Beispiel für das Risiko eines benutzerdefinierten Implementierungsansatzes sehen, der von Standards abweicht.
  • Diese Schwachstelle betrifft zwar nur einen bestimmten Schlüsseltyp, kann aber zu einem schwerwiegenden Problem werden, wenn dieser Schlüssel verwendet wurde. Daher ist es wichtig, betroffene Schlüssel sofort zu verwerfen.
  • In Open-Source-Projekten sollte man sich bei kryptografischen Komponenten an Standards halten, und auch externe Prüfungen erscheinen notwendig. Insbesondere die Erzeugung von Zufallszahlen ist sehr wichtig, daher dürfte es sicherer sein, sich auf das Betriebssystem oder auf geprüfte Bibliotheken zu verlassen.
  • PuTTY ist ein weit verbreiteter Open-Source-Terminalemulator mit Unterstützung für die Protokolle SSH, Telnet und Rlogin und wird dank seiner Funktion zum Speichern von Verbindungsinformationen bequem genutzt. Künftig sollte man aktiv auf Sicherheits-Patches für Schwachstellen reagieren.
  • Als Alternativen zu PuTTY unter macOS oder Linux kommen etwa die standardmäßige Terminal-App oder iTerm2 infrage. Unter Windows können Windows Terminal, PowerShell oder Cmder als Alternativen erwogen werden.

4 Kommentare

 
tominam2 2024-04-16

Ach..

 
kuroneko 2024-04-16

Ich glaube nicht, dass ich jemals einen Schlüssel dieses Typs verwendet habe, aber ich habe vorsichtshalber trotzdem ein Update gemacht.

 
dlehals2 2024-04-16

Nachdem ich das gesehen habe, habe ich sofort auf 0.81 aktualisiert, haha.

 
GN⁺ 2024-04-16
Hacker-News-Kommentare

Im Folgenden eine Zusammenfassung der Hacker-News-Kommentare:

  • In der von PuTTY verwendeten ECDSA-P-521-Schlüsselerzeugung wurde eine Schwachstelle entdeckt. Bei Verwendung eines 521-Bit-Modulus müsste auch der k-Wert ein 521-Bit-Zufallswert sein, doch PuTTY verwendete nur 512 Bit Zufall, sodass die oberen 9 Bit mit 0 aufgefüllt wurden. Das kann über lineare Algebra zur Offenlegung des privaten Schlüssels führen.
  • Die ehrliche und klare Art, wie PuTTY-Entwickler Simon Tatham die Schwachstelle offengelegt hat, wird sehr geschätzt. Er vermittelt die Fakten unverblümt und ohne Verharmlosung.
  • Es fehlt an Hintergrunderklärung dazu, wie die Schwachstelle entdeckt wurde.
  • In aktuellen Windows-Versionen ist OpenSSH standardmäßig integriert, sodass man PuTTY eigentlich nicht mehr verwenden muss. Dennoch nutzen es viele aus Gewohnheit oder Trägheit weiter.
  • Es dürfte nicht viele geben, die diesen Schlüsseltyp bewusst statt der Voreinstellung gewählt haben.
  • Wenn man einen P521-Host-Schlüssel verwendet, könnte nach dem Upgrade des Clients ein Austausch des Schlüssels nötig sein.
  • Ein Wechsel zu EdDSA, das weder einen RNG noch modulare Arithmetik benötigt, könnte erwogen werden.
  • Manche haben erst spät erkannt, dass der Name PuTTY von „putty“, also Fensterkitt zum Fixieren von Glasscheiben, stammt.
  • Es ist unklar, warum PuTTY das Ergebnis des SHA-512-Hashs modulo q berechnet hat. Es erscheint sinnvoller, nur die benötigten Bits abzuschneiden oder Nachricht und privaten Schlüssel getrennt zu hashen und anschließend zu kombinieren.
  • Es wird gefragt, nach welchem Prinzip bei Verwendung einer Zahl mit oberen 9 Bit gleich 0 statt einer 521-Bit-Zufallszahl nach 60 Signaturen der private Schlüssel offengelegt werden kann.