In unserer digitalen Welt spielen sichere Authentifizierungsmethoden eine entscheidende Rolle. SSH ist eine solche Methode, die insbesondere in der IT-Branche weit verbreitet ist. Doch nicht allen ist klar: Die Sicherheit von SSH hängt maßgeblich von der Sicherheit der verwendeten Schlüssel ab. Veraltete Algorithmen und weniger offensichtliche Schwachstellen wie Fermat Faktorisierung oder der Debian OpenSSL Bug können Schlüssel – und damit den gesamten Authentifizierungsvorgang – anfällig machen. Die meisten Nutzer generieren ihre SSH-Schlüssel automatisch mit Tools wie OpenSSL oder PuTTY. Doch diese Tools können Schwachstellen aufweisen, die die generierten Schlüssel unsicher machen – meist ohne, dass die Nutzer es bemerken. Und auch wenn solche Schwachstellen behoben werden, bleiben die unsicheren Schlüssel oft noch lange im Umlauf. Mit dem Tool Badkeys ist es möglich, SSH-Schlüssel automatisch auf bestimmte Probleme zu prüfen. Wir haben das am Beispiel einer GitLab-Instanz ausprobiert und konnten so die Schlüssel aller Nutzer automatisch testen.
Versteckte Gefahren bei der Schlüsselgenerierung
Die Generierung von kryptografischen Schlüsseln ist ein komplexer Prozess, bei dem eine Vielzahl von Problemen auftreten kann. Meist sind diese tief im Inneren des Generierungstools versteckt und für die Benutzer nicht erkennbar. Bekannte Schwachstellen sind zum Beispiel:
- Fermat-Faktorisierung: RSA basiert darauf, dass die Faktorisierung des Produkts zweier großer Primzahlen nicht effizient berechenbar ist. Wenn die Primzahlen jedoch zu nah beieinander liegen, können sie mittel der Fermat-Faktorisierung berechnet werden. Dieses Problem wurde zum Beispiel in Druckern von Canon und Fujifilm sowie einem Krypto-Modul von Rambus gefunden.
- Debian OpenSSL Bug: Bereits 2008 wurde festgestellt, dass es im OpenSSL-Paket von Debian und Ubuntu Probleme mit dem Zufallsgenerator gab, die es ermöglichten, geheime Schlüssel zu erraten. Obwohl die Schwachstelle längst behoben wurde, finden sich auch heute noch Schlüssel, die von diesem Problem betroffen sind.
- Keypair / Gitkraken Schwachstelle: 2021 wurde entdeckt, dass in dem JavaScript-Paket keypair Probleme mit dem Zufallsgenerator auftraten. Dieses Paket wurde von Gitkraken zur Generierung von SSH-Schlüsseln verwendet. Die betroffenen Schlüssel könnten unter Umständen erraten werden.
Es ist wichtig zu betonen, dass es sich bei diesen Problemen nicht um grundsätzliche Schwachstellen der Algorithmen oder von SSH selbst handelt, sondern um Implementierungsfehler in den jeweiligen Systemen. Schwachstellen wie diese kommen regelmäßig ans Licht und werden meist auch schnell behoben. Für den durchschnittlichen Nutzer ist es jedoch kaum möglich, sich ständig darüber zu informieren und den Überblick zu behalten, welche Schlüssel mit welchen Tools generiert wurden und eventuell angepasst werden müssen.
Badkeys: Ein Werkzeug zur Schlüsselprüfung
Badkeys ist ein Open-Source-Tool, das kryptografische Schlüssel auf eine Reihe bekannter Schwachstellen untersucht. Es ist online, als CLI-Tool und als Python-Modul verfügbar.
Den Kern der Anwendung bildet ein Algorithmus, der öffentliche Schlüssel auf eine Vielzahl von bekannten Schwachstellen prüft. Der Ablauf ist dabei einfach: Man gibt dem Tool den öffentlichen Schlüssel, der überprüft werden soll. Badkeys identifiziert dann zunächst den Schlüsselalgorithmus, beispielsweise RSA, DSA oder Ed25519. Auf der Grundlage des erkannten Algorithmus führt das Tool spezifische Tests durch.
Ein Beispiel eines solchen Tests ist die Fermat-Faktorisierung für RSA-Schlüssel. Hierbei überprüft Badkeys, ob die Primzahlen, aus denen der Schlüssel besteht, zu nahe beieinander liegen, was die Sicherheit erheblich beeinträchtigen könnte. Zudem überprüft das Tool, ob der verwendete Algorithmus allgemein als sicher gilt; im Falle von RSA muss beispielsweise eine Schlüssellänge von mindestens 2048 Bit vorliegen. Ein weiteres wichtiges Feature von Badkeys ist der Abgleich der Schlüssel mit einer Datenbank bekannter unsicherer Schlüssel.
Am Ende erhält man für jeden getesteten Schlüssel eine Liste von Ergebnissen, die die fehlgeschlagenen Tests jeweils mit einer kurzen Erklärung enthält. So ermöglicht es Badkeys Administratoren und Entwicklern, sicherzustellen, dass ihre Schlüssel sicher und vertrauenswürdig bleiben.
Praktischer Einsatz von Badkeys in GitLab
Wir haben Badkeys genutzt, um die SSH-Schlüssel aller Nutzer in unserer GitLab-Instanz zu prüfen. Dafür haben wir ein Python-Skript geschrieben, das zunächst alle Nutzer und deren (öffentliche) SSH-Schlüssel aus GitLab abruft. Bei einer GitLab-Standardkonfiguration sind hierfür keine besonderen Berechtigungen nötig. Anschließend werden die Schlüssel durch das Badkeys Python-Modul geprüft und das Ergebnis in einer CSV-Datei festgehalten. Da Badkeys bei diesem Vorgehen lokal ausgeführt wird, müssen keine Schlüssel an Dritte übertragen werden, wodurch die Vertraulichkeit gewahrt bleibt. Neben den Problemen der einzelnen Schlüssel gibt unser Skript auch die Verteilung der verwendeten Algorithmen aus, um eine umfassendere Analyse zu ermöglichen.
Bei dieser Überprüfung konnten wir in unserem Fall keine gravierenden Schwachstellen feststellen, allerdings haben wir bemerkt, dass der mittlerweile veraltete Algorithmus RSA-1024 bei uns teilweise noch im Einsatz war. Interessant war auch die Feststellung, dass einige Kollegen RSA-Schlüssel mit ungewöhnlichen Exponenten verwendeten, was auf historische Praktiken in Tools wie PuTTY und OpenSSH zurückzuführen war. PuTTY nutzte bis 2020 für RSA-Schlüssel den Exponenten 37 und OpenSSH bis 2010 den Exponenten 35, anstelle des empfohlenen Exponenten 65537.
Dadurch, dass wir die betroffenen Kollegen über ihre problematischen Schlüssel informiert und ihnen die Verwendung von Ed25519 empfohlen haben, konnten wir unsere Cybersicherheit ein kleines Stück robuster und zukunftsfähiger machen.
Das Python-Skript ist hier öffentlich zugänglich, damit auch andere von seinem Nutzen profitieren können. Wir empfehlen, das Skript (speziell für GitLab) und Badkeys regelmäßig zu verwenden, um die SSH-Schlüssel in Ihrer Infrastruktur auf potenzielle Schwachstellen zu überprüfen. Durch die regelmäßige Prüfung und Aktualisierung Ihrer SSH-Schlüssel können Sie Ihre Cybersicherheit erheblich stärken und Ihre Systeme besser vor Angriffen schützen.
Valentin Böhm ist Werkstudent im Security-Team bei iteratec. Er beschäftigt sich mit Recherche- und Entwicklungsaufgaben in Themengebieten wie Authentifizierungsmethoden, Security-Awareness und der Absicherung von IT-Infrastrukturen.
Haben Sie Fragen oder benötigen Unterstützung?
Mehr zu den Möglichkeiten von IT-Sicherheit für Ihr Unternehmen finden Sie auf unserer Webseite. Sprechen Sie uns auch gerne an.