Haben Sie ein System, das SSH-Schlüssel jeden 90. Tag abläuft

28

Ich habe einen Kunden, der jetzt verlangt, dass wir jedes Passwort jeden 90. Tag ändern, weil er die DSGVO interpretiert. Das ist in Ordnung für das webbasierte System, das wir für sie entwickeln, weil wir diese Regeln einfach implementieren können. Sie verlangen aber auch, dass wir die Passwörter auf unseren SSH-Schlüsseln ändern, die für den Zugriff auf die Server verwendet werden, was nicht in Ordnung ist.

  1. Ist es möglich, das Passwort für einen vorhandenen SSH-Schlüssel zu ändern?
  2. Wenn nicht, gibt es Tools, die wir verwenden können, um dies zu handhaben? Ich denke:

    ein. Erstellen Sie neue Schlüssel.
    b. Verteilen Sie alle öffentlichen Schlüssel auf vorhandene Server.
    c. Entfernen Sie vorhandene öffentliche Schlüssel.
    d. Alte private Schlüssel archivieren.

    Ich habe hier einige Posts über Puppet gelesen, aber so wie ich es verstehe, sollen sie nur das Problem lösen, die öffentlichen Schlüssel auf die Server zu verteilen und nicht jeden neunten Tag neue Schlüssel zu erstellen. Sollte ich meine Forschungen zu Puppet fortsetzen?

  3. Was ist der Community-Standard, wenn es um die Speicherung von Passwörtern und SSH-Schlüsseln geht? Wie machst du das?

herr d
quelle
7
Dieses Thema scheint in Bezug auf Informationssicherheit besser erörtert zu werden . Die Grundfrage hat dort bereits eine Antwort .
Gerald Schneider
31
Dies wird von der DSGVO eigentlich nicht verlangt. Nach der DSGVO müssen Sie, wenn überhaupt, die besten Praktiken befolgen. Und die beste Vorgehensweise ist heute , Passwörter nicht ablaufen zu lassen. Das Erzwingen des Kennwortablaufs war um die Jahrhundertwende eine bewährte Methode, wurde jedoch lange vor dem Vorschlag der DSGVO diskreditiert.
MSalters
2
SSH kann Zertifikate verwenden, vielleicht könnte das verwendet werden, um so etwas zu erreichen?
Edheldil
Ja, wie @Edheldil sagte, verwenden Sie Zertifikate anstelle von unformatierten Schlüsseln, da Sie ihnen Ablaufdaten hinzufügen können. Suche nach einer Netflix-Lösung dafür; Sie haben ihr internes Setup für die SSH-Authentifizierung mit Zertifikaten geteilt, die 5 Minuten lang gültig sind (dies gilt nur für die Authentifizierung, geöffnete Verbindungen bleiben geöffnet).
Patrick Mevzek
9
@GeraldSchneider, die Grundfrage lautet: "Mein Kunde ist ein Idiot. Wie gebe ich ihm, was er will, mit einem Minimum an Aufwand von meiner Seite?". Das ist eine ServerFault-Frage, keine InfoSec-Frage.
Mark

Antworten:

35

Der Kunde irrt sich hier und versteht nicht, wovon er spricht. Das Ändern der Passphrase für einen privaten Schlüssel ist eine sehr schlechte Idee, da sie sehr widersprüchliche Sicherheitseigenschaften aufweist.

Normalerweise denken Benutzer an Passwörter, die sie geändert haben, als "nicht mehr geheim". Sie können zu Wegwerfkennwörtern für Websites mit geringem Wert, Online-Handles / Spitznamen, Pointen für Witze usw. werden, und jedes Papier, auf dem sie geschrieben sind, kann zu Schrott werden, der freigelegt wird.

Bei einer Passphrase, die zum Verschlüsseln eines privaten Schlüssels verwendet wird , funktioniert dies nicht ! Die Passphrase muss für immer geheim gehalten werden, es sei denn, alle mit dem Schlüssel verbundenen Berechtigungen wurden widerrufen (und das Folgende gilt nicht für ssh-Schlüssel, aber wenn die Passphrase für einen Schlüssel bestimmt ist, der nicht nur zum Signieren, sondern zum Empfangen von privaten Nachrichten verwendet wird, dann für immer bedeutet wirklich für immer ). Dies ist auf die Möglichkeit zurückzuführen, dass die verschlüsselte private Schlüsseldatei von einem Angreifer abgerufen oder an einem Ort (wie in einem Backup) gespeichert wurde, an dem sie in Zukunft möglicherweise von einem Angreifer abgerufen wird. Wenn die Passphrase jemals enthüllt wird, ist sie kompromittiert.

In gewisser Weise ist ein privater Schlüssel, der in seiner Lebensdauer N Passwörter durchlaufen hat, 1 / N so sicher, da die Kenntnis eines der letzten Passwörter ausreicht, um den Schlüssel zu gefährden, wenn der Angreifer Zugriff auf die verschlüsselte private Schlüsseldatei hatte .

Nun zurück zu Ihrem Problem.

Wenn sich der Kunde nicht auf dieses Missverständnis mit "ssh-Passwörtern" eingelassen und es aufgegriffen hätte, wäre es das Richtige, es nie zu erwähnen und die Best Practices für die Schlüsselverarbeitung selbst zu befolgen. Aber jetzt müssen Sie wahrscheinlich etwas tun, um sie zufriedenzustellen. Sie könnten versuchen zu erklären, wie Passwörter, die private Schlüssel verschlüsseln, andere Sicherheitseigenschaften aufweisen als Passwörter. Angesichts der Tatsache, dass der Kunde in vielen Punkten Unrecht hat (das Ablaufen von Passwörtern ist im Allgemeinen eine schlechte Idee), bezweifle ich, dass dies funktionieren wird.

Sie haben dann die Aufgabe, ein System zur Verteilung neuer Schlüssel zu automatisieren. Ich rate Ihnen dringend davon ab, ein System zur zentralen Generierung der neuen Schlüssel zu automatisieren, da private Schlüssel niemals zwischen Computern verschoben werden sollten . Stattdessen sollten Sie Prozesse / Erinnerungen / Skripte haben, um es den Mitarbeitern / Auftragnehmern an Ihrer Seite zu erleichtern, die Zugriff benötigen, um neue private Schlüssel zu generieren und die entsprechenden öffentlichen Schlüssel zu veröffentlichen, und über das Verteilungssystem für öffentliche Schlüssel (Puppet oder anderweitig) verfügen Sie verwenden Push diese auf die Systeme, auf die sie zugreifen müssen.

Zusätzlich: Eine Sache, die den Kunden überzeugen könnte, dies zu verwerfen, ist der Hinweis, dass es grundsätzlich keine Möglichkeit gibt, zu erzwingen, dass der neue private Schlüssel eine andere Passphrase hat als der alte oder dass er überhaupt eine Passphrase hat.

R ..
quelle
10
Wie bereits erwähnt, ist der richtige Weg, dies zu tun, manuell und das Aufladen des Kunden für die manuelle Arbeit kann eine ausreichende Abschreckung sein.
Bischof
3
Als eine gute Möglichkeit, dem Kunden mitzuteilen, dass er dies nicht tun möchte, ist zu sagen, dass der Prozess zur Aktualisierung der Schlüssel für die Mitarbeiter die absolute Garantie beinhalten muss, dass die alten Schlüssel endgültig gelöscht werden, um sicherzustellen, dass ein Das alte Schlüsselpaar aus öffentlichem und privatem Schlüssel fällt nicht in die falschen Hände. Wenn Sie dies nicht garantieren können, können wir diesen Plan nicht ausführen. "
Max Williams
19

Die Antwort auf Ihre erste Frage: "Ist es möglich, das Passwort für einen vorhandenen SSH-Schlüssel zu ändern?" ist ja. Mit openssh ist das so einfach wiessh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]

Das Problem ist, dass sich das Kennwort in der privaten Schlüsseldatei befindet. Dies ist ein einfaches Format, das kein Ablaufdatum unterstützt. Ein großer Teil des Konzepts der schlüsselbasierten Authentifizierung in ssh besteht darin, dass der private Schlüssel nicht zentral verwaltet wird, sondern nur auf der Arbeitsstation des Benutzers vorhanden sein sollte, wodurch es nahezu unmöglich wird, eine Kennwortablaufrichtlinie für den privaten Schlüssel durchzusetzen.


Stattdessen: In jeder Umgebung, in der ich war, befand sich die Kennwortrichtlinie auf dem Benutzerkontoobjekt und nicht auf der Methode, die für den Zugriff auf dieses Konto verwendet wurde. Wenn ein Kennwort abgelaufen ist oder ein Konto gesperrt ist, werden alle Zugriffsmethoden einschließlich des SSH-Schlüssels gesperrt.

Fügen Sie die Multi-Faktor-Authentifizierung hinzu, wenn Sie mehr Sicherheit für ein Konto benötigen.


Aber ich bin neugierig, was andere Leute getan haben, um Ihre berechtigten Bedenken auszuräumen.

HBruijn
quelle
6
Wenn die PW-Rotation zum Schutz vor Diebstahl / Bruteforcing eines PW verwendet werden soll, sollte die Schlüsselrotation das Drehen von Schlüsseln anstelle von Kennwörtern auf Schlüsseln zum Schutz vor Schlüsselverlust / -diebstahl umfassen. Wenn ein Angreifer Ihren alten privaten Schlüssel mit dem alten Passwort ergreift, kann er trotzdem einsteigen
BlueCacti
@BlueCacti Es sollte jedoch beachtet werden, dass erzwungene Passwortrotationen wirklich bedeutungslos sind, wenn die ursprünglichen Passwörter / Phrasen bereits auf einem Auswahlprozess mit einem hohen Maß an Entropie basieren. Das Ändern eines Kennworts, das 1 Million Jahre in Anspruch nehmen könnte, um ein anderes Kennwort zu erzwingen, das den gleichen Umfang haben könnte, würde nichts wirklich verbessern.
Code_dredd
@code_dredd Ich bin nicht hier, um die Verwendung der Passwortrotation zu diskutieren. Ich bin auch ziemlich dagegen. Ich möchte in Bezug auf die Frage von OP nur darauf hinweisen, dass es in diesem Fall sinnvoller wäre, Schlüssel zu drehen, als Passwörter auf Schlüsseln zu drehen
BlueCacti
@BlueCacti Ich habe nur ein paar Dinge gesagt, die zu dem, was Sie gesagt haben, hinzugefügt werden sollen. Ich diskutiere nichts.
Code_dredd
2
+1 für Multi-Faktor-Authentifizierung Verwenden Sie dann eine bekannte App / ein Plugin, um Codes zu generieren. Auf diese Weise können Sie Ihrem Client mitteilen, dass sich das Kennwort alle X Sekunden ändert. Einschließlich Link hier als mögliche Umsetzung, keine Billigung jeglicher Art. digitalocean.com/community/tutorials/…
Philippe
6

Mit AuthorizedKeysCommand kann ein Ablaufmechanismus auf der Serverseite implementiert werden. Von der einfachen Überprüfung des Dateizeitstempels bis hin zu etwas Komplizierterem.

danblack
quelle
Der öffentliche Schlüssel ändert sich nicht, wenn Sie das Kennwort für den privaten Schlüssel ändern. Wie würde es überprüfen, ob das Passwort geändert wurde?
Edheldil
Das kannst du nicht. Wie Sie vorschlagen, wirken sich Änderungen an der Passphrase für den privaten Schlüssel nicht auf den öffentlichen Schlüssel aus. Sie könnten sogar ihre Passphrase ganz entfernen. Sie können nur überprüfen, ob sich der gesamte öffentliche Schlüssel geändert hat oder nicht.
Guzzijason
6

Eine Möglichkeit, die möglicherweise ausreicht oder nicht, ist die Verwendung einer SSH-Benutzerzertifizierungsstelle, mit der Sie eine Lebensdauer für den signierten Schlüssel festlegen können. Unabhängig davon, welche Automatisierung Sie für das Signieren von Schlüsseln verwenden, kann das Signieren länger als 90 Tage verweigert werden. Fügen Sie dann den öffentlichen Schlüssel für Ihre Benutzer-CA zu TrustedUserCAKeys in / etc / ssh / sshd_config hinzu und setzen Sie AuthorizedKeysFile auf none.

Kennzeichen
quelle
2

Sie können ein Tool wie Hashicorp's Vault verwenden, um kurzlebige, signierte SSH-Schlüssel zu erstellen . Jeder Benutzer erhielt jeden Tag (oder so) einen neuen Schlüssel. Sie würden sich bei Vault authentifizieren, um das Zertifikat mit dem zu erhalten, was Sie heute verwenden, beispielsweise mit einem LDAP-Server.

Der Aufwand, dies einzurichten, ist nicht immens, aber meiner Erfahrung nach größer als das, worauf sich @Mark in seinem Kommentar bezog. Sie ersetzen im Grunde genommen ein Problem (ahnungslose Client-Anforderungen) durch ein anderes ( Shard-Management ).

Es ermöglicht jedoch auch ein anderes Szenario, z. B. das einfache Generieren von internen X509-Zertifikaten und das Verwalten von Datenbankkennwörtern, Anwendungsgeheimnissen in einer Textdatei. Sie beurteilen den Aufwand und den ROI.

Beachten Sie auch, dass die Open Source-Version keine DR-Funktionen besitzt (alles andere).

ixe013
quelle
1

Sie können einen Schlüsselagenten verwenden, der zeitbasierte Einmalpasswörter (TOTP) enthält. Jetzt ändert sich Ihr "Passwort" jede Minute.

Alle anderen hier haben jedoch Recht: Das ist albern.

Michael
quelle