it-swarm.com.de

Folgen von manipulierten / etc / ssh / moduli

Was sind die Konsequenzen, wenn ein Angreifer das /etc/ssh/moduli Datei?

32
vergoglio

Der /etc/ssh/moduli Enthält vorgenerierte Gruppenparameter für Diffie-Hellman . Ein DH-Schlüsselaustausch findet in den frühen Schritten der SSH-Verbindung statt und generiert den geheimen gemeinsamen Schlüssel, der zum Verschlüsseln der Daten verwendet wird. DH arbeitet in einer bestimmten Gruppe ; Technisch gesehen ist ein Modulp(eine große Primzahl) und ein Generatorg: Der Generator befindet sich im 1..p-1range, und es sollte so sein, dass seine Reihenfolge ein Vielfaches einer "groß genug" Primzahl istq. Die Reihenfolgekist die kleinste Ganzzahl ungleich Null, so dasspk = 1modp. Diskreter Logarithmus und damit DH kann mit einem Aufwand durchbrochen werden, der sowohl vonpals auch vom größten Primfaktor vonk(welcher) abhängt wir werdenq) aufrufen:

  • Es gibt eine Variante des Number Field Sieve , die den diskreten Logarithmus bricht, wennpnicht groß genug ist; Der aktuelle Datensatz bezieht sich auf eine 530-Bit-Primzahl und es wird angenommen, dass 1024-Bit-Primzahlen noch sicher sind [Ed. Nicht mehr, siehe verschiedene Blog-Beiträge über Diffie-Hellman vom 2015-10-15.], und 2048-Bit-Primzahlen werden auf absehbare Zeit sicher sein.

  • Generische diskrete Logarithmusalgorithmen werden mit Kosten angewendet, die proportional zur Quadratwurzel des größten Primfaktors vonksind. Daher ist es wichtig (und ausreichend), dasskeinen Primfaktor von mindestens 200 Bit zulässt, wenn "100-Bit-Sicherheit" erreicht werden soll.

Ein Angreifer, der /etc/ssh/moduli Ändern kann, könnte versuchen, die Nice DH-Gruppenparameter durch andere Gruppenparameter zu ersetzen, diegut aussehen, aber das DH-Brechen für ihn einfacher (oder sogar einfacher) machen. Es gibt meistens zwei Möglichkeiten, dies zu tun:

  1. Wählen Sie eine Primzahlpund einen Generatorg, so dass die Reihenfolgekvongist ein Produkt von nur kleinen Primzahlen. Dies kann leicht getan werden; Beginnen Sie beispielsweise mit der Erzeugung einer Reihe kleiner Primzahlen (z. B. jeweils höchstens 80 Bit). Versuchen Sie dann zufällige Produkte solcher Primzahlen: Berechnen Sie für jedes Produktrp = 2r + 1und prüfen Sie, ob dies eine Primzahl ergibt. Wenn dies der Fall ist, istpso, dassanygeneratorgmodulo diese Primzahl einen schwachen Diffie-Hellman impliziert.

  2. Generieren Sie eine spezielle Primzahlp, sodass NFS für diese spezifischepschneller ist. Siehe diesen Artikel für einige theoretische Hintergründe.

Die Datei /etc/ssh/moduli Enthält nicht die Reihenfolge des vorgeschlagenen Generators. Sie können daher nicht einfach überprüfen, ob diese Reihenfolge prim ist und mitgübereinstimmt. Sie können jedochp-1nehmen und die Methode Elliptic-Curve-Faktorisierung darauf anwenden: Hier finden Sie alle kleinen Primfaktoren inp-1, und damit können Sie überprüfen, ob die Reihenfolge vongnicht geschwächt wurde (kist notwendigerweise ein Teiler oderp- 1). Somit kann eine Schwächung der ersten Art festgestellt werden (wenn auch nicht innerhalb weniger Sekunden). Dementsprechend verzichten Angreifer, die das Risiko einer Exposition nicht mögen (insbesondere Spionageagenturen), auf diese Methode.

Die zweite Art der Schwächung ist jedoch schwer zu erkennen. Man muss also davon ausgehen, dass ein Angreifer Ihre /etc/ssh/moduli - Datei irgendwie beschädigen könnte (z. B. indem Sie die mit OpenSSH verteilte Datei ändern , durch Bestechung von OpenSSH-Entwicklern) könntemöglicherweise eine Hintertür eingeführt haben, die es ihm ermöglicht, Ihre SSH-Verbindungen nach Belieben zu entschlüsseln (SSH-Verbindungen zu Ihrem Server, da die Gruppenparameter vom Server ausgewählt werden). Da die involvierte Mathematik nicht einfach ist, wäre dieser Angreifer zumindest einkompetenterAngreifer.

Die einzig gute Gegenmaßnahme besteht darin, den Inhalt von /etc/ssh/moduli Durch Werte zu ersetzen, die Siekennenum korrekt zu sein und nicht böswillig, weil sie selbst erzeugt wurden. ssh-keygen Kann das (siehe man page ). Sie können dies auch mit benutzerdefiniertem Code tun (z. B. mit der Java-Klasse BigInteger, dies sind höchstens 50 Codezeilen).

Alternativ können Sie DSA-Gruppenparameter verwenden (sie funktionieren auch), die wie in Anhang A von FIPS 186-4 : beschrieben) generiert wurden. Dies sind nichts, was mir im Ärmel liegt weil die Kandidatenwerte fürpdurch ein deterministisches, vollständig spezifiziertes PRNG erhalten werden, das vermutlich nicht dazu gezwungen werden kann, eine "spezielle Primzahl" zu bilden, die NFS einfach macht Es wäre besser gewesen, wenn OpenSSH-Entwickler zunächst eine solche überprüfbare Generierungsmethode verwendet hätten.

41
Thomas Pornin