Vi föreskriver en procedur för nödåtkomst till SSH-värdar med hårdvaranycklar

Vi föreskriver en procedur för nödåtkomst till SSH-värdar med hårdvaranycklar

I det här inlägget kommer vi att utveckla en procedur för nödåtkomst till SSH-värdar med hjälp av hårdvarusäkerhetsnycklar offline. Detta är bara ett tillvägagångssätt och du kan anpassa det efter dina behov. Vi kommer att lagra SSH-certifikatutfärdaren för våra värdar på hårdvarans säkerhetsnyckel. Detta schema kommer att fungera på nästan alla OpenSSH, inklusive SSH med enkel inloggning.

Vad är allt detta till för? Tja, detta är en sista utväg. Detta är en bakdörr som gör att du kan få tillgång till din server när inget annat av någon anledning fungerar.

Varför använda certifikat istället för offentliga/privata nycklar för nödåtkomst?

  • Till skillnad från offentliga nycklar kan certifikat ha en mycket kort livslängd. Du kan generera ett certifikat som är giltigt i 1 minut eller till och med 5 sekunder. Efter denna period kommer certifikatet att bli oanvändbart för nya anslutningar. Detta är idealiskt för nödtillgång.
  • Du kan skapa ett certifikat för vilket konto som helst på dina värdar och vid behov skicka sådana "engångscertifikat" till kollegor.

Vad du behöver

  • Säkerhetsnycklar för maskinvara som stöder inbyggda nycklar.
    Residentnycklar är kryptografiska nycklar som helt och hållet lagras i säkerhetsnyckeln. Ibland skyddas de av en alfanumerisk PIN-kod. Den offentliga delen av den inhemska nyckeln kan exporteras från säkerhetsnyckeln, valfritt tillsammans med den privata nyckeln. Till exempel stöder USB-nycklar i Yubikey 5-serien inbyggda nycklar. Det är tillrådligt att de endast är avsedda för nödåtkomst till värden. För det här inlägget kommer jag bara att använda en nyckel, men du bör ha ytterligare en för säkerhetskopiering.
  • En säker plats att förvara nycklarna.
  • OpenSSH version 8.2 eller högre på din lokala dator och på de servrar du vill ha nödåtkomst till. Ubuntu 20.04 levereras med OpenSSH 8.2.
  • (valfritt, men rekommenderas) Ett CLI-verktyg för att kontrollera certifikat.

Utbildning

Först måste du skapa en certifieringsmyndighet som kommer att finnas på hårdvarans säkerhetsnyckel. Sätt i nyckeln och kör:

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

Som en kommentar (-C) angav jag [e-postskyddad]så att du inte glömmer vilken säkerhetsnyckel denna certifikatutfärdare tillhör.

Förutom att lägga till nyckeln till Yubikey, kommer två filer att genereras lokalt:

  1. sk-user-ca, ett nyckelhandtag som refererar till den privata nyckeln lagrad i säkerhetsnyckeln,
  2. sk-user-ca.pub, som kommer att vara den publika nyckeln för din certifikatutfärdare.

Men oroa dig inte, Yubikey lagrar en annan privat nyckel som inte kan hämtas. Därför är allt pålitligt här.

På värdar, som root, lägg till (om du inte redan har gjort det) följande till din SSHD-konfiguration (/etc/ssh/sshd_config):

TrustedUserCAKeys /etc/ssh/ca.pub

Lägg sedan till den publika nyckeln (sk-user-ca.pub) på värden till /etc/ssh/ca.pub

Starta om demonen:

# /etc/init.d/ssh restart

Nu kan vi försöka komma åt värden. Men först behöver vi ett certifikat. Skapa ett nyckelpar som kommer att kopplas till certifikatet:

$ ssh-keygen -t ecdsa -f emergency

Certifikat och SSH-par
Ibland är det frestande att använda ett certifikat som ersättning för ett offentligt/privat nyckelpar. Men ett certifikat enbart är inte tillräckligt för att autentisera en användare. Varje certifikat har också en privat nyckel kopplad till sig. Det är därför vi måste generera detta "nödnyckelpar" innan vi utfärdar ett certifikat till oss själva. Det viktiga är att vi visar det signerade certifikatet till servern, vilket indikerar nyckelparet som vi har en privat nyckel för.

Så offentligt nyckelutbyte lever fortfarande och mår bra. Detta fungerar även med certifikat. Certifikat eliminerar helt enkelt behovet för servern att lagra publika nycklar.

Skapa sedan själva certifikatet. Jag behöver ubuntu-användarbehörighet inom 10 minuters intervall. Du kan göra det på ditt sätt.

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

Du kommer att bli ombedd att underteckna certifikatet med ditt fingeravtryck. Du kan lägga till ytterligare användarnamn separerade med kommatecken, till exempel -n ubuntu,carl,ec2-user

Det var allt, nu har du ett certifikat! Därefter måste du ange rätt behörigheter:

$ chmod 600 emergency-cert.pub

Efter detta kan du se innehållet i ditt certifikat:

$ step ssh inspect emergency-cert.pub

Så här ser min ut:

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

Här är den publika nyckeln nödnyckeln vi skapade, och sk-user-ca är associerad med certifieringsmyndigheten.

Äntligen är vi redo att köra SSH-kommandot:


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

  1. Du kan nu skapa certifikat för alla användare på en värd som litar på din certifikatutfärdare.
  2. Du kan ta bort nödsituation. Du kan spara sk-user-ca, men du behöver inte eftersom det också finns på säkerhetsnyckeln. Du kanske också vill ta bort den ursprungliga offentliga PEM-nyckeln från dina värdar (till exempel i ~/.ssh/authorized_keys för ubuntu-användaren) om du använde den för nödåtkomst.

Nödtillgång: Handlingsplan

Klistra in säkerhetsnyckeln och kör kommandot:

$ ssh-add -K

Detta kommer att lägga till certifikatutfärdarens publika nyckel och nyckelbeskrivning till SSH-agenten.

Exportera nu den publika nyckeln för att skapa ett certifikat:

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

Skapa ett certifikat med ett utgångsdatum på till exempel högst en timme:

$ 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

Och nu SSH igen:

$ ssh -i emergency username@host

Om din .ssh/config-fil orsakar vissa problem vid anslutning, kan du köra ssh med alternativet -F none för att kringgå den. Om du behöver skicka ett certifikat till en kollega är det enklaste och säkraste alternativet Magiskt maskhål. För att göra detta behöver du bara två filer - i vårt fall, akut och emergency-cert.pub.

Det jag gillar med det här tillvägagångssättet är hårdvarustödet. Du kan lägga dina säkerhetsnycklar i ett kassaskåp och de går ingenstans.

Om reklamens rättigheter

Episka servrar - Är billig VPS med kraftfulla processorer från AMD, CPU-kärnfrekvens upp till 3.4 GHz. Den maximala konfigurationen låter dig lösa nästan alla problem - 128 CPU-kärnor, 512 GB RAM, 4000 GB NVMe. Gå med oss!

Vi föreskriver en procedur för nödåtkomst till SSH-värdar med hårdvaranycklar

Källa: will.com

Lägg en kommentar