Определяме процедурата за спешен достъп до SSH хостове с апаратни ключове

Определяме процедурата за спешен достъп до SSH хостове с апаратни ключове

В този пост ще разработим процедура за аварийен достъп до хостове SSH, използвайки хардуерни ключове за сигурност в офлайн режим. Това е само един от подходите и можете да го адаптирате според нуждите си. Ще съхраняваме център за сертификация SSH за нашите хостове на хардуерния ключ за сигурност. Тази схема ще работи практически на всяка версия на OpenSSH, включително SSH с единен вход.

Защо всичко това? Е, това е вариант за краен случай. Това е бекдор, който ще ви позволи да получите достъп до вашия сървър, в случай че поради някаква причина нищо друго не работи.

Защо да използвате сертификати вместо отворени / затворени ключове за аварийен достъп?

  • В отличие от отворените ключове, срокът на валидност на сертификатите може да бъде много кратък. Можете да генерирате сертификат, валиден за 1 минута или дори 5 секунди. След изтичането на този срок сертификатът става недействителен за нови връзки. Това е идеално за аварийен достъп.
  • Можете да създадете сертификат за всяка акаунт на вашите хостове и при необходимост да изпращате подобни "еднократни" сертификати на колеги.

Какво ще ви е необходимо

  • Хардуерни ключове за сигурност, които поддържат резидентни ключове.
    Резидентните ключове са криптографски ключове, които се съхраняват изцяло в ключа за сигурност. Понякога те са защитени с буквено-цифров PIN код. Отворената част на резидентния ключ може да бъде експортирана от ключа за сигурност, ако е необходимо — заедно с дескриптора на затворения ключ. Например, USB ключове от серията Yubikey 5 поддържат резидентни ключове. Желателно е те да са предназначени само за аварийен достъп до хост. За този пост ще използвам само един ключ, но е добре да имате допълнителен за резервно копие.
  • Сигурно място за съхранение на тези ключове.
  • OpenSSH версия 8.2 или по-висока на вашия локален компютър и на сървърите, до които искате да получите аварийен достъп. Ubuntu 20.04 идва с OpenSSH 8.2.
  • (по избор, но желателно) CLI инструмент за проверка на сертификати.

Подготовка

За начало трябва да създадете център за сертификация, който ще се намира на хардуерния ключ за сигурност. Включете ключа и стартирайте:

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

Като коментар (-C) посочих yubikey-9-512-742@smallstep.com, за да не забравя към ключа за сигурност, който се отнася за този сертификатен център.

Освен добавянето на ключа към Yubikey, локално ще бъдат генерирани два файла:

  1. sk-user-ca, дескриптор на ключа, който сочи към частния ключ, съхраняван в ключа за сигурност,
  2. sk-user-ca.pub, който ще бъде публичният ключ за вашия сертификатен център.

Но не се тревожете, на Yubikey се съхранява и друг частен ключ, който не може да бъде извлечен. Затова всичко тук е надеждно.

На хостовете от името на потребителя root добавете (ако не сте добавили вече) следното в конфигурацията на вашия SSHD (/etc/ssh/sshd_config):

TrustedUserCAKeys /etc/ssh/ca.pub

След това на хоста добавете публичния ключ (sk-user-ca.pub) в /etc/ssh/ca.pub

Рестартирайте демона:

# /etc/init.d/ssh restart

Сега можем да опитаме да получим достъп до хоста. Но първо ни е нужен сертификат. Създайте двойка ключове, която ще бъде свързана със сертификата:

$ ssh-keygen -t ecdsa -f emergency

Сертификати и SSH двойки
Понякога наистина искате да използвате сертификат като заместител на двойката публичен/частен ключ. Но за аутентикация на потребителя един сертификат не е достатъчен. Всеки сертификат също има свързан частен ключ. Ето защо трябва да генерираме тази "спешна" двойка ключове, преди да издадем сертификата. Важно е, че подписаният сертификат показваме на сървъра, указвайки двойката ключове, за които имаме частен ключ.

По този начин обменът на публични ключове все още е на мода. Това важи дори за сертификатите. Сертификатите просто освобождават сървъра от необходимостта да съхранява публични ключове.

Следващата стъпка е да създадете самия сертификат. Нуждая се от удостоверяване на потребителя ubuntu в 10-минутен интервал. Можете да направите по ваше желание.

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

Ще бъдете помолени да подпишете сертификата с помощта на пръстов отпечатък. Можете да добавите допълнителни имена на потребители, разделени със запетаи, например, -n ubuntu,carl,ec2-user

Всичко, сега имате сертификат! Следва да зададете правилните разрешения:

$ chmod 600 emergency-cert.pub

След това можете да се запознаете със съдържанието на сертификата си:

$ step ssh inspect emergency-cert.pub

Ето как изглежда моят:

emergency-cert.pub
        Тип: ecdsa-sha2-nistp256-cert-v01@openssh.com потребителски сертификат
        Публичен ключ: ECDSA-CERT SHA256:EJSfzfQv1UK44/LOKhBbuh5oRMqxXGBSr+UAzA7cork
        Подписващ CA: SK-ECDSA SHA256:kLJ7xfTTPQN0G/IF2cq5TB3EitaV4k3XczcBZcLPQ0E
        Идентификатор на ключа: "test-key"
        Сериен номер: 0
        Валиден: от 2020-06-24T16:53:03 до 2020-06-24T17:03:03
        Принципали:
                ubuntu
        Критични опции: (няма)
        Разширения:
                permit-X11-forwarding
                permit-agent-forwarding
                permit-port-forwarding
                permit-pty
                permit-user-rc

Тук публичният ключ е създаденият от нас ключ emergency, а с центъра за сертификация е свързан sk-user-ca.

Най-накрая сме готови да стартираме командата SSH:


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

  1. Сега можете да създавате сертификати за всеки потребител на хоста, който доверява на вашия център за сертификация.
  2. Можете да изтриете emergency. Можете да запазите sk-user-ca, но не е нужно, тъй като той също е на Security ключа. Може би ще искате да изтриете и оригиналния публичен ключ PEM от вашите хостове (например в ~/ .ssh / authorized_keys за потребителя ubuntu), ако сте го използвали за спешен достъп.

Спешен достъп: план за действие

Включете Security ключа и стартирайте командата:

$ ssh-add -K

По този начин ще добавите публичния ключ на центъра за сертификация и дескриптора на ключа в SSH агент.

Сега експортирайте публичния ключ, за да създадете сертификата:

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

Създайте сертификат с валидност, например, не повече от час:

$ 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

И сега отново SSH:

$ ssh -i emergency username@host

Ако вашият файл .ssh/config причинява някакви проблеми при свързването, можете да стартирате ssh с параметъра -F none, за да го пропуснете. Ако трябва да изпратите сертификата на колега, най-простият и безопасен вариант е Magic Wormhole. За това са необходими само два файла — в нашия случай това са emergency и emergency-cert.pub.

Това, което ми харесва в този подход, е хардуерната поддръжка. Можете да съхранявате Security ключовете в сейф, и те никъде няма да изчезнат.

Реклама

Епични сървъри — това е евтини VPS с мощни AMD процесори, с тактова честота на CPU до 3.4 GHz. Максималната конфигурация позволява решаването на почти всякакви задачи — 128 ядра CPU, 512 GB RAM, 4000 GB NVMe. Присъединете се!

Определяме процедурата за спешен достъп до SSH хостове с апаратни ключове

Източник: habr.com

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster