Vi foreskriver en prosedyre for nødtilgang til SSH-verter med maskinvarenøkler

Vi foreskriver en prosedyre for nødtilgang til SSH-verter med maskinvarenøkler

I dette innlegget vil vi utvikle en prosedyre for nødtilgang til SSH-verter som bruker maskinvaresikkerhetsnøkler offline. Dette er bare én tilnærming, og du kan tilpasse den til dine behov. Vi vil lagre SSH-sertifikatautoriteten for våre verter på maskinvaresikkerhetsnøkkelen. Denne ordningen vil fungere på nesten alle OpenSSH, inkludert SSH med enkel pålogging.

Hva er alt dette for noe? Vel, dette er en siste utvei. Dette er en bakdør som lar deg få tilgang til serveren din når ingenting annet fungerer.

Hvorfor bruke sertifikater i stedet for offentlige/private nøkler for nødtilgang?

  • I motsetning til offentlige nøkler kan sertifikater ha svært kort levetid. Du kan generere et sertifikat som er gyldig i 1 minutt eller til og med 5 sekunder. Etter denne perioden vil sertifikatet bli ubrukelig for nye tilkoblinger. Dette er ideelt for nødtilgang.
  • Du kan opprette et sertifikat for en hvilken som helst konto på vertene dine og, om nødvendig, sende slike "engangssertifikater" til kolleger.

Hva du trenger

  • Maskinvaresikkerhetsnøkler som støtter innbyggernøkler.
    Residentnøkler er kryptografiske nøkler som er lagret utelukkende innenfor sikkerhetsnøkkelen. Noen ganger er de beskyttet av en alfanumerisk PIN-kode. Den offentlige delen av den fastboende nøkkelen kan eksporteres fra sikkerhetsnøkkelen, eventuelt sammen med den private nøkkelhåndtaket. For eksempel støtter USB-nøkler i Yubikey 5-serien hjemmenøkler. Det anbefales at de kun er beregnet på nødtilgang til verten. For dette innlegget vil jeg bare bruke én nøkkel, men du bør ha en ekstra for sikkerhetskopiering.
  • Et trygt sted å oppbevare disse nøklene.
  • OpenSSH versjon 8.2 eller høyere på din lokale datamaskin og på serverne du vil ha nødtilgang til. Ubuntu 20.04 leveres med OpenSSH 8.2.
  • (valgfritt, men anbefalt) Et CLI-verktøy for å sjekke sertifikater.

Trening

Først må du opprette en sertifiseringsinstans som vil være plassert på maskinvaresikkerhetsnøkkelen. Sett inn nøkkelen og kjør:

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

Som en kommentar (-C) antydet jeg [e-postbeskyttet]slik at du ikke glemmer hvilken sikkerhetsnøkkel denne sertifiseringsinstansen tilhører.

I tillegg til å legge til nøkkelen til Yubikey, vil to filer bli generert lokalt:

  1. sk-user-ca, et nøkkelhåndtak som refererer til den private nøkkelen som er lagret i sikkerhetsnøkkelen,
  2. sk-user-ca.pub, som vil være den offentlige nøkkelen for sertifiseringsmyndigheten.

Men ikke bekymre deg, Yubikey lagrer en annen privat nøkkel som ikke kan hentes. Derfor er alt pålitelig her.

På verter, som root, legg til (hvis du ikke allerede har gjort det) følgende til SSHD-konfigurasjonen din (/etc/ssh/sshd_config):

TrustedUserCAKeys /etc/ssh/ca.pub

Så på verten legger du til den offentlige nøkkelen (sk-user-ca.pub) til /etc/ssh/ca.pub

Start demonen på nytt:

# /etc/init.d/ssh restart

Nå kan vi prøve å få tilgang til verten. Men først trenger vi et sertifikat. Opprett et nøkkelpar som skal knyttes til sertifikatet:

$ ssh-keygen -t ecdsa -f emergency

Sertifikater og SSH-par
Noen ganger er det fristende å bruke et sertifikat som erstatning for et offentlig/privat nøkkelpar. Men et sertifikat alene er ikke nok til å autentisere en bruker. Hvert sertifikat har også en privat nøkkel knyttet til seg. Dette er grunnen til at vi må generere dette "nødnøkkelparet" før vi utsteder et sertifikat. Det viktige er at vi viser det signerte sertifikatet til serveren, og indikerer nøkkelparet som vi har en privat nøkkel for.

Så offentlig nøkkelutveksling lever fortsatt i beste velgående. Dette fungerer selv med sertifikater. Sertifikater eliminerer ganske enkelt behovet for at serveren skal lagre offentlige nøkler.

Deretter oppretter du selve sertifikatet. Jeg trenger ubuntu-brukerautorisasjon innen 10 minutters intervall. Du kan gjøre det på din måte.

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

Du vil bli bedt om å signere sertifikatet med fingeravtrykket ditt. Du kan legge til flere brukernavn atskilt med komma, for eksempel -n ubuntu,carl,ec2-user

Det er det, nå har du et sertifikat! Deretter må du spesifisere de riktige tillatelsene:

$ chmod 600 emergency-cert.pub

Etter dette kan du se innholdet i sertifikatet ditt:

$ step ssh inspect emergency-cert.pub

Slik 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

Her er den offentlige nøkkelen nødnøkkelen vi opprettet, og sk-user-ca er tilknyttet sertifiseringsmyndigheten.

Endelig er vi klare til å kjøre SSH-kommandoen:


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

  1. Du kan nå opprette sertifikater for enhver bruker på en vert som stoler på sertifiseringsinstansen din.
  2. Du kan fjerne nødstilfelle. Du kan lagre sk-user-ca, men det trenger du ikke siden det også er på sikkerhetsnøkkelen. Det kan også være lurt å fjerne den originale PEM offentlige nøkkelen fra vertene dine (for eksempel i ~/.ssh/authorized_keys for ubuntu-brukeren) hvis du brukte den for nødtilgang.

Nødtilgang: Handlingsplan

Lim inn sikkerhetsnøkkelen og kjør kommandoen:

$ ssh-add -K

Dette vil legge til sertifiseringsmyndighetens offentlige nøkkel og nøkkelbeskrivelse til SSH-agenten.

Eksporter nå den offentlige nøkkelen for å lage et sertifikat:

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

Opprett et sertifikat med en utløpsdato på for eksempel ikke mer enn en time:

$ 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

Og nå SSH igjen:

$ ssh -i emergency username@host

Hvis .ssh/config-filen din forårsaker noen problemer når du kobler til, kan du kjøre ssh med alternativet -F none for å omgå den. Hvis du trenger å sende et sertifikat til en kollega, er det enkleste og sikreste alternativet Magisk ormehull. For å gjøre dette trenger du bare to filer - i vårt tilfelle, emergency og emergency-cert.pub.

Det jeg liker med denne tilnærmingen er maskinvarestøtten. Du kan legge sikkerhetsnøklene dine i en safe, og de vil ikke gå noen vei.

Om rettighetene til annonsering

Episke servere - Er billig VPS med kraftige prosessorer fra AMD, CPU-kjernefrekvens opptil 3.4 GHz. Den maksimale konfigurasjonen lar deg løse nesten alle problemer - 128 CPU-kjerner, 512 GB RAM, 4000 GB NVMe. Bli med oss!

Vi foreskriver en prosedyre for nødtilgang til SSH-verter med maskinvarenøkler

Kilde: www.habr.com

Legg til en kommentar