Wir schreiben ein Verfahren für den Notfallzugriff auf SSH-Hosts mit Hardwareschlüsseln vor

Wir schreiben ein Verfahren für den Notfallzugriff auf SSH-Hosts mit Hardwareschlüsseln vor

In diesem Beitrag entwickeln wir ein Verfahren für den Notfallzugriff auf SSH-Hosts mithilfe von Hardware-Sicherheitsschlüsseln offline. Dies ist nur ein Ansatz, den Sie an Ihre Bedürfnisse anpassen können. Wir speichern die SSH-Zertifizierungsstelle für unsere Hosts im Hardware-Sicherheitsschlüssel. Dieses Schema funktioniert auf fast jedem OpenSSH, einschließlich SSH mit Single Sign-On.

Wozu dient das alles? Nun, das ist der letzte Ausweg. Dies ist eine Hintertür, die es Ihnen ermöglicht, auf Ihren Server zuzugreifen, wenn aus irgendeinem Grund nichts anderes funktioniert.

Warum Zertifikate statt öffentlicher/privater Schlüssel für den Notfallzugriff verwenden?

  • Im Gegensatz zu öffentlichen Schlüsseln können Zertifikate eine sehr kurze Lebensdauer haben. Sie können ein Zertifikat generieren, das 1 Minute oder sogar 5 Sekunden gültig ist. Nach diesem Zeitraum ist das Zertifikat für neue Verbindungen unbrauchbar. Dies ist ideal für den Notfallzugang.
  • Sie können für jedes beliebige Konto auf Ihren Hosts ein Zertifikat erstellen und bei Bedarf solche „einmaligen“ Zertifikate an Kollegen versenden.

Was du brauchst

  • Hardware-Sicherheitsschlüssel, die residente Schlüssel unterstützen.
    Residente Schlüssel sind kryptografische Schlüssel, die vollständig im Sicherheitsschlüssel gespeichert sind. Manchmal sind sie durch eine alphanumerische PIN geschützt. Der öffentliche Teil des residenten Schlüssels kann aus dem Sicherheitsschlüssel exportiert werden, optional zusammen mit dem privaten Schlüsselhandle. Beispielsweise unterstützen USB-Sticks der Yubikey 5-Serie residente Schlüssel. Es wird empfohlen, dass sie nur für den Notfallzugriff auf den Host vorgesehen sind. Für diesen Beitrag werde ich nur einen Schlüssel verwenden, Sie sollten jedoch einen zusätzlichen zur Sicherung haben.
  • Ein sicherer Ort, um diese Schlüssel aufzubewahren.
  • OpenSSH Version 8.2 oder höher auf Ihrem lokalen Computer und auf den Servern, auf die Sie im Notfall Zugriff haben möchten. Ubuntu 20.04 wird mit OpenSSH 8.2 ausgeliefert.
  • (optional, aber empfohlen) Ein CLI-Tool zum Überprüfen von Zertifikaten.

Training

Zunächst müssen Sie eine Zertifizierungsstelle erstellen, die sich auf dem Hardware-Sicherheitsschlüssel befindet. Stecken Sie den Schlüssel ein und führen Sie Folgendes aus:

$ ssh-keygen -t ecdsa-sk -f sk-user-ca -O resident -C [security key ID]

Als Kommentar (-C) habe ich angegeben [E-Mail geschützt] Damit Sie nicht vergessen, zu welchem ​​Sicherheitsschlüssel diese Zertifizierungsstelle gehört.

Zusätzlich zum Hinzufügen des Schlüssels zum Yubikey werden zwei Dateien lokal generiert:

  1. sk-user-ca, ein Schlüsselhandle, das auf den im Sicherheitsschlüssel gespeicherten privaten Schlüssel verweist,
  2. sk-user-ca.pub, der öffentliche Schlüssel für Ihre Zertifizierungsstelle.

Aber keine Sorge, der Yubikey speichert einen weiteren privaten Schlüssel, der nicht abgerufen werden kann. Daher ist hier alles zuverlässig.

Fügen Sie auf Hosts als Root Folgendes zu Ihrer SSHD-Konfiguration (/etc/ssh/sshd_config) hinzu (falls Sie dies noch nicht getan haben):

TrustedUserCAKeys /etc/ssh/ca.pub

Fügen Sie dann auf dem Host den öffentlichen Schlüssel (sk-user-ca.pub) zu /etc/ssh/ca.pub hinzu

Starten Sie den Daemon neu:

# /etc/init.d/ssh restart

Jetzt können wir versuchen, auf den Host zuzugreifen. Aber zuerst brauchen wir ein Zertifikat. Erstellen Sie ein Schlüsselpaar, das dem Zertifikat zugeordnet wird:

$ ssh-keygen -t ecdsa -f emergency

Zertifikate und SSH-Paare
Manchmal ist es verlockend, ein Zertifikat als Ersatz für ein öffentliches/privates Schlüsselpaar zu verwenden. Ein Zertifikat allein reicht jedoch nicht aus, um einen Benutzer zu authentifizieren. Zu jedem Zertifikat gehört auch ein privater Schlüssel. Aus diesem Grund müssen wir dieses „Notfall“-Schlüsselpaar generieren, bevor wir uns ein Zertifikat ausstellen. Wichtig ist, dass wir dem Server das signierte Zertifikat zeigen und dabei das Schlüsselpaar angeben, für das wir einen privaten Schlüssel haben.

Der Austausch öffentlicher Schlüssel ist also immer noch am Leben. Dies funktioniert auch mit Zertifikaten. Zertifikate machen es einfach überflüssig, dass der Server öffentliche Schlüssel speichern muss.

Als nächstes erstellen Sie das Zertifikat selbst. Ich benötige alle 10 Minuten eine Ubuntu-Benutzerautorisierung. Du kannst es auf deine Art machen.

$ ssh-keygen -s sk-user-ca -I test-key -n ubuntu -V -5m:+5m emergency

Sie werden aufgefordert, das Zertifikat mit Ihrem Fingerabdruck zu signieren. Sie können zusätzliche, durch Kommas getrennte Benutzernamen hinzufügen, zum Beispiel -n ubuntu,carl,ec2-user

Das war's, jetzt haben Sie ein Zertifikat! Als nächstes müssen Sie die richtigen Berechtigungen angeben:

$ chmod 600 emergency-cert.pub

Anschließend können Sie den Inhalt Ihres Zertifikats einsehen:

$ step ssh inspect emergency-cert.pub

So sieht meiner aus:

emergency-cert.pub
        Type: [email protected] user certificate
        Public key: ECDSA-CERT SHA256:EJSfzfQv1UK44/LOKhBbuh5oRMqxXGBSr+UAzA7cork
        Signing CA: SK-ECDSA SHA256:kLJ7xfTTPQN0G/IF2cq5TB3EitaV4k3XczcBZcLPQ0E
        Key ID: "test-key"
        Serial: 0
        Valid: from 2020-06-24T16:53:03 to 2020-06-24T17:03:03
        Principals:
                ubuntu
        Critical Options: (none)
        Extensions:
                permit-X11-forwarding
                permit-agent-forwarding
                permit-port-forwarding
                permit-pty
                permit-user-rc

Hier ist der öffentliche Schlüssel der von uns erstellte Notfallschlüssel und sk-user-ca ist der Zertifizierungsstelle zugeordnet.

Endlich sind wir bereit, den SSH-Befehl auszuführen:


$ ssh -i emergency ubuntu@my-hostname
ubuntu@my-hostname:~$

  1. Sie können jetzt Zertifikate für jeden Benutzer auf einem Host erstellen, der Ihrer Zertifizierungsstelle vertraut.
  2. Sie können den Notfall entfernen. Sie können sk-user-ca speichern, müssen es aber nicht, da es sich auch auf dem Sicherheitsschlüssel befindet. Möglicherweise möchten Sie auch den ursprünglichen öffentlichen PEM-Schlüssel von Ihren Hosts entfernen (z. B. in ~/.ssh/authorized_keys für den Ubuntu-Benutzer), wenn Sie ihn für den Notfallzugriff verwendet haben.

Notfallzugang: Aktionsplan

Fügen Sie den Sicherheitsschlüssel ein und führen Sie den folgenden Befehl aus:

$ ssh-add -K

Dadurch werden der öffentliche Schlüssel und der Schlüsseldeskriptor der Zertifizierungsstelle zum SSH-Agenten hinzugefügt.

Exportieren Sie nun den öffentlichen Schlüssel, um ein Zertifikat zu erstellen:

$ ssh-add -L | tail -1 > sk-user-ca.pub

Erstellen Sie ein Zertifikat mit einem Ablaufdatum von beispielsweise maximal einer Stunde:

$ ssh-keygen -t ecdsa -f emergency
$ ssh-keygen -Us sk-user-ca.pub -I test-key -n [username] -V -5m:+60m emergency
$ chmod 600 emergency-cert.pub

Und jetzt nochmal SSH:

$ ssh -i emergency username@host

Wenn Ihre .ssh/config-Datei beim Herstellen einer Verbindung Probleme verursacht, können Sie ssh mit der Option -F none ausführen, um dies zu umgehen. Wenn Sie einem Kollegen ein Zertifikat senden müssen, ist dies die einfachste und sicherste Option Magisches Wurmloch. Dazu benötigen Sie lediglich zwei Dateien – in unserem Fall Emergency und Emergency-Cert.pub.

Was mir an diesem Ansatz gefällt, ist die Hardwareunterstützung. Sie können Ihre Sicherheitsschlüssel in einen Safe legen und sie werden nirgendwo hingehen.

Über die Rechte der Werbung

Epische Server - Das günstiger VPS mit leistungsstarken Prozessoren von AMD, CPU-Kernfrequenz bis zu 3.4 GHz. Mit der maximalen Konfiguration können Sie fast jedes Problem lösen – 128 CPU-Kerne, 512 GB RAM, 4000 GB NVMe. Begleiten Sie uns!

Wir schreiben ein Verfahren für den Notfallzugriff auf SSH-Hosts mit Hardwareschlüsseln vor

Source: habr.com

Kommentar hinzufügen