We schrijven een procedure voor voor noodtoegang tot SSH-hosts met hardwaresleutels

We schrijven een procedure voor voor noodtoegang tot SSH-hosts met hardwaresleutels

In dit bericht zullen we een procedure ontwikkelen voor noodtoegang tot SSH-hosts met offline hardwarebeveiligingssleutels. Dit is slechts één benadering en u kunt deze aanpassen aan uw behoeften. We slaan de SSH-certificeringsinstantie voor onze hosts op op de hardwarebeveiligingssleutel. Dit schema werkt op vrijwel elke OpenSSH, inclusief SSH met eenmalige aanmelding.

Waar is dit allemaal voor? Welnu, dit is een laatste redmiddel. Dit is een achterdeur waarmee u toegang kunt krijgen tot uw server als om de een of andere reden niets anders werkt.

Waarom certificaten gebruiken in plaats van openbare/privésleutels voor noodtoegang?

  • In tegenstelling tot publieke sleutels kunnen certificaten een zeer korte levensduur hebben. U kunt een certificaat genereren dat 1 minuut of zelfs 5 seconden geldig is. Na deze periode wordt het certificaat onbruikbaar voor nieuwe verbindingen. Dit is ideaal voor noodtoegang.
  • U kunt voor elk account op uw hosts een certificaat aanmaken en, indien nodig, dergelijke “eenmalige” certificaten naar collega's sturen.

Wat je nodig hebt

  • Hardwarebeveiligingssleutels die residente sleutels ondersteunen.
    Residente sleutels zijn cryptografische sleutels die volledig in de beveiligingssleutel zijn opgeslagen. Soms zijn ze beveiligd met een alfanumerieke pincode. Het publieke deel van de residente sleutel kan vanuit de beveiligingssleutel worden geëxporteerd, optioneel samen met de private sleutelhandle. USB-sleutels uit de Yubikey 5-serie ondersteunen bijvoorbeeld sleutels voor bewoners. Het is raadzaam dat ze alleen bedoeld zijn voor noodtoegang tot de host. Voor dit bericht zal ik slechts één sleutel gebruiken, maar je zou een extra sleutel moeten hebben als back-up.
  • Een veilige plek om die sleutels op te bergen.
  • OpenSSH versie 8.2 of hoger op uw lokale computer en op de servers waartoe u noodtoegang wilt hebben. Ubuntu 20.04 wordt geleverd met OpenSSH 8.2.
  • (optioneel, maar aanbevolen) Een CLI-tool voor het controleren van certificaten.

Opleiding

Eerst moet u een certificeringsinstantie aanmaken die zich op de hardwarebeveiligingssleutel bevindt. Steek de sleutel in en voer uit:

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

Als opmerking (-C) heb ik aangegeven [e-mail beveiligd]zodat u niet vergeet tot welke beveiligingssleutel deze certificeringsinstantie behoort.

Naast het toevoegen van de sleutel aan de Yubikey, worden er lokaal twee bestanden gegenereerd:

  1. sk-user-ca, een sleutelhandvat dat verwijst naar de privésleutel die is opgeslagen in de beveiligingssleutel,
  2. sk-user-ca.pub, wat de publieke sleutel voor uw certificeringsinstantie zal zijn.

Maar maak je geen zorgen, de Yubikey bewaart nog een privésleutel die niet kan worden opgehaald. Daarom is alles hier betrouwbaar.

Voeg op hosts, als root, (als je dat nog niet hebt gedaan) het volgende toe aan je SSHD-configuratie (/etc/ssh/sshd_config):

TrustedUserCAKeys /etc/ssh/ca.pub

Voeg vervolgens op de host de openbare sleutel (sk-user-ca.pub) toe aan /etc/ssh/ca.pub

Start de daemon opnieuw:

# /etc/init.d/ssh restart

Nu kunnen we proberen toegang te krijgen tot de host. Maar eerst hebben we een certificaat nodig. Maak een sleutelpaar dat aan het certificaat wordt gekoppeld:

$ ssh-keygen -t ecdsa -f emergency

Certificaten en SSH-paren
Soms is het verleidelijk om een ​​certificaat te gebruiken ter vervanging van een publiek/privaat sleutelpaar. Maar een certificaat alleen is niet voldoende om een ​​gebruiker te authenticeren. Aan elk certificaat is ook een privésleutel gekoppeld. Daarom moeten we dit ‘noodsleutelpaar’ genereren voordat we onszelf een certificaat uitgeven. Het belangrijkste is dat we het ondertekende certificaat aan de server laten zien, met vermelding van het sleutelpaar waarvoor we een privésleutel hebben.

De uitwisseling van openbare sleutels is dus nog steeds springlevend. Dit werkt zelfs met certificaten. Certificaten elimineren eenvoudigweg de noodzaak voor de server om openbare sleutels op te slaan.

Maak vervolgens het certificaat zelf. Ik heb ubuntu-gebruikersautorisatie nodig met een interval van 10 minuten. Je kunt het op jouw manier doen.

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

U wordt gevraagd het certificaat te ondertekenen met uw vingerafdruk. U kunt extra gebruikersnamen toevoegen, gescheiden door komma's, bijvoorbeeld -n ubuntu,carl,ec2-user

Dat is alles, nu heb je een certificaat! Vervolgens moet u de juiste machtigingen opgeven:

$ chmod 600 emergency-cert.pub

Hierna kunt u de inhoud van uw certificaat bekijken:

$ step ssh inspect emergency-cert.pub

Zo ziet de mijne eruit:

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 is de openbare sleutel de noodsleutel die we hebben gemaakt, en sk-user-ca is gekoppeld aan de certificeringsinstantie.

Eindelijk zijn we klaar om de SSH-opdracht uit te voeren:


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

  1. U kunt nu certificaten maken voor elke gebruiker op een host die uw certificeringsinstantie vertrouwt.
  2. U kunt een noodgeval verwijderen. U kunt sk-user-ca opslaan, maar dat is niet nodig omdat het ook op de beveiligingssleutel staat. Mogelijk wilt u ook de originele openbare PEM-sleutel van uw hosts verwijderen (bijvoorbeeld in ~/.ssh/authorized_keys voor de ubuntu-gebruiker) als u deze voor noodtoegang hebt gebruikt.

Toegang voor noodgevallen: actieplan

Plak de beveiligingssleutel en voer de opdracht uit:

$ ssh-add -K

Hierdoor worden de openbare sleutel en de sleuteldescriptor van de certificeringsinstantie toegevoegd aan de SSH-agent.

Exporteer nu de publieke sleutel om een ​​certificaat te maken:

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

Maak een certificaat aan met een vervaldatum van bijvoorbeeld maximaal een uur:

$ 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

En nu weer SSH:

$ ssh -i emergency username@host

Als uw .ssh/config-bestand problemen veroorzaakt bij het verbinden, kunt u ssh uitvoeren met de optie -F none om dit te omzeilen. Als u een certificaat naar een collega moet sturen, is dit de eenvoudigste en veiligste optie Magisch wormgat. Hiervoor heeft u slechts twee bestanden nodig: in ons geval emergency en emergency-cert.pub.

Wat ik leuk vind aan deze aanpak is de hardwareondersteuning. U kunt uw beveiligingssleutels in een kluis bewaren en ze gaan nergens heen.

Als advertentie

Epische servers - Is goedkope VPS met krachtige processoren van AMD, CPU-kernfrequentie tot 3.4 GHz. Met de maximale configuratie kunt u vrijwel elk probleem oplossen: 128 CPU-kernen, 512 GB RAM, 4000 GB NVMe. Doe met ons mee!

We schrijven een procedure voor voor noodtoegang tot SSH-hosts met hardwaresleutels

Bron: www.habr.com

Voeg een reactie