Definiamo la procedura di accesso emergenziale agli host SSH con chiavi hardware.

Definiamo la procedura di accesso emergenziale 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 in modalità offline. Questo è solo uno dei metodi e puoi adattarlo alle tue esigenze. Terremo l'autorità di certificazione SSH per i nostri host su una chiave di sicurezza hardware. Questo schema funzionerà praticamente su qualsiasi OpenSSH, incluso SSH con accesso unico.

Perché tutto questo? Beh, è una soluzione per le emergenze. È una backdoor che ti permetterà di accedere al tuo server nel caso in cui, per qualche motivo, non ci sia altro da fare.

Perché usare certificati invece di chiavi pubbliche/private per l'accesso di emergenza?

  • A differenza delle chiavi pubbliche, la durata dei certificati può essere molto breve. Puoi generare un certificato valido per 1 minuto o addirittura 5 secondi. Scaduto questo termine, il certificato diventerà inutilizzabile per nuove connessioni. Questo è perfetto per accessi di emergenza.
  • Puoi creare un certificato per qualsiasi account sui tuoi host e, se necessario, inviare tali certificati "usa e getta" ai tuoi colleghi.

Cosa vi serve

  • Chiavi di sicurezza hardware che supportano chiavi residenti.
    Le chiavi residenti sono chiavi crittografiche che sono completamente memorizzate all'interno della chiave di sicurezza. Talvolta sono protette da un codice PIN alfanumerico. La parte aperta della chiave residente può essere esportata dalla chiave di sicurezza, se necessario, insieme al descrittore della chiave privata. Le chiavi USB della serie Yubikey 5, ad esempio, supportano le chiavi residenti. È preferibile che siano destinate esclusivamente per l'accesso di emergenza all'host. Per questo post utilizzerò solo una chiave, ma dovresti averne un'altra per il backup.
  • Un luogo sicuro per conservare queste chiavi.
  • OpenSSH versione 8.2 o superiore sul tuo computer locale e sui server a cui desideri accedere in caso di emergenza. Ubuntu 20.04 viene fornito con OpenSSH 8.2.
  • (opzionale, ma consigliato) Strumento CLI per la verifica dei certificati.

Preparazione

Per iniziare, è necessario creare un'autorità di certificazione che si troverà sulla chiave di sicurezza hardware. Inserisci la chiave e avvia:

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

Ho inserito come commento (-C) yubikey-9-512-742@smallstep.com, così da non dimenticare a quale chiave di sicurezza si riferisce questa autorità di certificazione.

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

  1. sk-user-ca, che è il descrittore della chiave che si riferisce alla chiave privata memorizzata nella chiave di sicurezza,
  2. sk-user-ca.pub, che sarà la chiave pubblica per la tua autorità di certificazione.

Ma non preoccuparti, su Yubikey c'è un'altra chiave privata che non può essere estratta. Quindi, qui è tutto sicuro.

Sugli host, a nome dell'utente root, aggiungi (se non l'hai già fatto) alla configurazione del tuo SSHD (/etc/ssh/sshd_config) quanto segue:

TrustedUserCAKeys /etc/ssh/ca.pub

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

Riavvia il demone:

# /etc/init.d/ssh restart

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

$ ssh-keygen -t ecdsa -f emergency

Certificati e coppie SSH
Talvolta si è tentati di utilizzare un certificato come sostituto di una coppia chiave pubblica/privata. Ma per l'autenticazione dell'utente non basta un solo certificato. Ogni certificato ha anche una chiave privata associata. Ecco perché dobbiamo generare questa coppia di chiavi "di emergenza" prima di rilasciare un certificato. È importante che il certificato firmato venga mostrato al server, indicando la coppia di chiavi di cui possediamo la chiave privata.

Così, lo scambio di chiavi pubbliche è ancora vivo e vegeto. Funziona anche con i certificati. I certificati semplicemente eliminano l'esigenza per il server di memorizzare chiavi pubbliche.

Successivamente, crea il certificato stesso. Ho bisogno dell'autorizzazione dell'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 con l'impronta digitale. Puoi aggiungere nomi utente aggiuntivi separati da virgole, ad esempio, -n ubuntu,carl,ec2-user

Ecco, ora hai un certificato! Ora devi impostare i permessi corretti:

$ chmod 600 emergency-cert.pub

Dopo di che puoi esaminare il contenuto del tuo certificato:

$ step ssh inspect emergency-cert.pub

Ecco come appare il mio:

emergency-cert.pub
        Tipo: ecdsa-sha2-nistp256-cert-v01@openssh.com certificato utente
        Chiave pubblica: ECDSA-CERT SHA256:EJSfzfQv1UK44/LOKhBbuh5oRMqxXGBSr+UAzA7cork
        CA di firma: SK-ECDSA SHA256:kLJ7xfTTPQN0G/IF2cq5TB3EitaV4k3XczcBZcLPQ0E
        ID chiave: "test-key"
        Seriale: 0
        Valido: dal 2020-06-24T16:53:03 al 2020-06-24T17:03:03
        Principali:
                ubuntu
        Opzioni critiche: (nessuna)
        Estensioni:
                permit-X11-forwarding
                permit-agent-forwarding
                permit-port-forwarding
                permit-pty
                permit-user-rc

Qui la chiave pubblica è quella che abbiamo creato noi, la chiave emergency, e è associata al centro di certificazione sk-user-ca.

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 sull'host che si fida del tuo centro di certificazione.
  2. Puoi eliminare emergency. Puoi mantenere sk-user-ca, ma non è necessario, poiché è già presente sulla 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

Inserisci la chiave di sicurezza e avvia il comando:

$ ssh-add -K

In questo modo aggiungerai la chiave pubblica del centro di certificazione e l'identificatore della chiave all'agente SSH.

Ora esporta la chiave pubblica per creare il certificato:

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

Crea un certificato con una durata, 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 il parametro -F none per evitarlo. Se devi inviare il certificato a un collega, il modo più semplice e sicuro è Magic Wormhole. Per questo servono solo due file — nel nostro caso sono emergency e emergency-cert.pub.

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

In pubblicità

Server epici — rappresenta VPS economici con potenti processori AMD, frequenza del nucleo CPU fino a 3.4 GHz. La configurazione massima può affrontare praticamente qualsiasi compito — 128 core CPU, 512 GB RAM, 4000 GB NVMe. Unisciti a noi!

Definiamo la procedura di accesso emergenziale agli host SSH con chiavi hardware.

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS 🔥 Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS | ProHoster