Prescriviamo una procedura per l'accesso di emergenza agli host SSH con chiavi hardware

Prescriviamo una procedura per l'accesso di emergenza agli host SSH con chiavi hardware

In questo post svilupperemo una procedura per l'accesso di emergenza agli host SSH utilizzando chiavi di sicurezza hardware offline. Questo è solo un approccio e puoi adattarlo alle tue esigenze. Memorizzeremo l'autorità di certificazione SSH per i nostri host sulla chiave di sicurezza hardware. Questo schema funzionerà su quasi tutti gli OpenSSH, incluso SSH con Single Sign-On.

A cosa serve tutto questo? Bene, questa è l'ultima opzione. Questa è una backdoor che ti consentirà di accedere al tuo server quando per qualche motivo non funziona nient'altro.

Perché utilizzare i certificati invece delle chiavi pubbliche/private per l'accesso di emergenza?

  • A differenza delle chiavi pubbliche, i certificati possono avere una durata molto breve. Puoi generare un certificato valido per 1 minuto o anche 5 secondi. Trascorso questo periodo il certificato diventerà inutilizzabile per nuove connessioni. Questo è l'ideale per l'accesso di emergenza.
  • Puoi creare un certificato per qualsiasi account sui tuoi host e, se necessario, inviare tali certificati "una tantum" ai colleghi.

Di che cosa hai bisogno

  • Chiavi di sicurezza hardware che supportano chiavi residenti.
    Le chiavi residenti sono chiavi crittografiche archiviate interamente all'interno della chiave di sicurezza. A volte sono protetti da un PIN alfanumerico. La parte pubblica della chiave residente può essere esportata dalla chiave di sicurezza, facoltativamente insieme all'handle della chiave privata. Ad esempio, le chiavi USB della serie Yubikey 5 supportano le chiavi residenti, è consigliabile che siano destinate solo all'accesso di emergenza all'host. Per questo post utilizzerò solo una chiave, ma dovresti averne una aggiuntiva per il backup.
  • Un posto sicuro dove riporre quelle chiavi.
  • OpenSSH versione 8.2 o successiva sul tuo computer locale e sui server a cui desideri avere accesso di emergenza. Ubuntu 20.04 viene fornito con OpenSSH 8.2.
  • (facoltativo, ma consigliato) Uno strumento CLI per controllare i certificati.

Formazione

Innanzitutto, è necessario creare un'autorità di certificazione che verrà posizionata sulla chiave di sicurezza hardware. Inserisci la chiave ed esegui:

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

Come commento (-C) ho indicato [email protected]in modo da non dimenticare a quale chiave di sicurezza appartiene questa autorità di certificazione.

Oltre ad aggiungere la chiave a Yubikey, verranno generati localmente due file:

  1. sk-user-ca, un handle di chiave che fa riferimento alla chiave privata archiviata nella chiave di sicurezza,
  2. sk-user-ca.pub, che sarà la chiave pubblica per la tua autorità di certificazione.

Ma non preoccuparti, Yubikey memorizza un'altra chiave privata che non può essere recuperata. Pertanto, qui tutto è affidabile.

Sugli host, come root, aggiungi (se non lo hai già fatto) quanto segue alla configurazione SSHD (/etc/ssh/sshd_config):

TrustedUserCAKeys /etc/ssh/ca.pub

Quindi, sull'host, aggiungi la chiave pubblica (sk-user-ca.pub) a /etc/ssh/ca.pub

Riavviare il demone:

# /etc/init.d/ssh restart

Ora possiamo provare ad accedere all'host. Ma prima abbiamo bisogno di un certificato. Crea una coppia di chiavi che verrà associata al certificato:

$ ssh-keygen -t ecdsa -f emergency

Certificati e coppie SSH
A volte si è tentati di utilizzare un certificato in sostituzione di una coppia di chiavi pubblica/privata. Ma un certificato da solo non è sufficiente per autenticare un utente. A ogni certificato è inoltre associata una chiave privata. Questo è il motivo per cui dobbiamo generare questa coppia di chiavi di "emergenza" prima di emettere un certificato. L'importante è mostrare al server il certificato firmato, indicando la coppia di chiavi per la quale disponiamo di una chiave privata.

Quindi lo scambio di chiavi pubbliche è ancora vivo e vegeto. Funziona anche con i certificati. I certificati eliminano semplicemente la necessità che il server memorizzi le chiavi pubbliche.

Successivamente, crea il certificato stesso. Ho bisogno dell'autorizzazione utente Ubuntu in un intervallo di 10 minuti. Puoi farlo a modo tuo.

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

Ti verrà chiesto di firmare il certificato utilizzando la tua impronta digitale. Puoi aggiungere ulteriori nomi utente separati da virgole, ad esempio -n ubuntu,carl,ec2-user

Questo è tutto, ora hai un certificato! Successivamente è necessario specificare le autorizzazioni corrette:

$ chmod 600 emergency-cert.pub

Successivamente, puoi visualizzare il contenuto del tuo certificato:

$ step ssh inspect emergency-cert.pub

Questo è come appare il mio:

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

Qui la chiave pubblica è la chiave di emergenza che abbiamo creato e sk-user-ca è associata all'autorità di certificazione.

Finalmente siamo pronti per eseguire il comando SSH:


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

  1. Ora puoi creare certificati per qualsiasi utente su un host che considera attendibile la tua autorità di certificazione.
  2. Puoi rimuovere l'emergenza. Puoi salvare sk-user-ca, ma non è necessario poiché si trova anche nella chiave di sicurezza. Potresti anche voler rimuovere la chiave pubblica PEM originale dai tuoi host (ad esempio in ~/.ssh/authorized_keys per l'utente Ubuntu) se l'hai utilizzata per l'accesso di emergenza.

Accesso di emergenza: piano d'azione

Incolla la chiave di sicurezza ed esegui il comando:

$ ssh-add -K

Ciò aggiungerà la chiave pubblica e il descrittore di chiave dell'autorità di certificazione all'agente SSH.

Ora esporta la chiave pubblica per creare un certificato:

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

Crea un certificato con una data di scadenza, ad esempio, non superiore a un'ora:

$ 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

E ora di nuovo SSH:

$ ssh -i emergency username@host

Se il tuo file .ssh/config causa problemi durante la connessione, puoi eseguire ssh con l'opzione -F none per aggirarlo. Se devi inviare un certificato a un collega, l'opzione più semplice e sicura è Wormhole magico. Per fare ciò sono necessari solo due file: nel nostro caso emergenza e emergenza-cert.pub.

Quello che mi piace di questo approccio è il supporto hardware. Puoi mettere le tue chiavi di sicurezza in una cassaforte e non andranno da nessuna parte.

Sui diritti della pubblicità

Server epici - E ' VPS economici con potenti processori AMD, frequenza core CPU fino a 3.4 GHz. La configurazione massima consente di risolvere quasi tutti i problemi: 128 core CPU, 512 GB RAM, 4000 GB NVMe. Unisciti a noi!

Prescriviamo una procedura per l'accesso di emergenza agli host SSH con chiavi hardware

Fonte: habr.com

Aggiungi un commento