Прапісваем працэдуру экстранага доступу да хастаў SSH з апаратнымі ключамі

Прапісваем працэдуру экстранага доступу да хастаў SSH з апаратнымі ключамі

У гэтым пасце мы распрацуем працэдуру для экстранага доступу да хастаў SSH, выкарыстоўваючы апаратныя ключы бяспекі ў аўтаномным рэжыме. Гэта ўсяго толькі адзін з падыходаў, і вы можаце адаптаваць яго пад сябе. Мы будзем захоўваць цэнтр сертыфікацыі SSH для нашых хастоў на апаратным ключы бяспекі. Гэтая схема будзе працаваць практычна на любым OpenSSH, у тым ліку SSH з адзіным уваходам.

Нашто ўсё гэта? Ну, гэта варыянт на крайні выпадак. Гэта бэкдор, які дазволіць вам атрымаць доступ да свайго сервера ў тым выпадку, калі па нейкай прычыне больш нічога не дапамагае.

Навошта выкарыстоўваць сертыфікаты замест адкрытых / зачыненых ключоў для экстранага доступу?

  • У адрозненне ад адчыненых ключоў, тэрмін дзеяння сертыфікатаў можа быць вельмі кароткім. Вы можаце згенераваць сертыфікат, сапраўдны на працягу 1 хвіліны ці нават 5 секунд. Па заканчэнні гэтага тэрміна сертыфікат стане непрыдатным для новых падлучэнняў. Гэта ідэальна падыходзіць для экстранага доступу.
  • Вы можаце стварыць сертыфікат для любога ўліковага запісу на сваіх хастах і пры неабходнасці адпраўляць такія вось «аднаразовыя» сертыфікаты калегам.

Што вам спатрэбіцца

  • Апаратныя ключы бяспекі, якія падтрымліваюць рэзідэнтныя ключы.
    Рэзідэнтныя ключы - гэта крыптаграфічныя ключы, якія цалкам захоўваюцца ўнутры ключа бяспекі. Часам яны абаронены літарна-лічбавым PIN-кодам. Адкрытая частка рэзідэнтнага ключа можа быць экспартавана з ключа бяспекі, пры неабходнасці - разам з дэскрыптарам закрытага ключа. Падтрымку рэзідэнтных ключоў, маюць, напрыклад, USB-ключы серыі Yubikey 5. Пажадана, каб яны прызначаліся толькі для экстранага доступу да хаста. Для гэтай пасады я буду выкарыстоўваць толькі адзін ключ, але ў вас павінен быць дадатковы для рэзервовага капіявання.
  • Бяспечнае месца для захоўвання гэтых ключоў.
  • OpenSSH версіі 8.2 або вышэй на вашым лакальным кампутары і на серверах, да якіх вы хочаце атрымаць экстраны доступ. Ubuntu 20.04/8.2 пастаўляецца з OpenSSH XNUMX.
  • (неабавязкова, але пажадана) Сродак CLI для праверкі сертыфікатаў.

Падрыхтоўка

Для пачатку трэба стварыць цэнтр сертыфікацыі, які будзе знаходзіцца на апаратным ключы бяспекі. Устаўце ключ і запусціце:

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

У якасці каментара (-C) я паказаў [электронная пошта абаронена], каб не забыцца, да якога ключа бяспекі адносіцца гэты цэнтр сертыфікацыі.

Акрамя дадання ключа да 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
        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

Тут адкрыты ключ - гэта створаны намі ключ emergency, а з цэнтрам сертыфікацыі звязаны sk-user-ca.

Нарэшце мы гатовыя запусціць каманду SSH:


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

  1. Цяпер вы можаце ствараць сертыфікаты для любога карыстальніка на хасце, які давярае вашаму цэнтру сертыфікацыі.
  2. Вы можаце выдаліць emergency. Вы можаце захаваць sk-user-ca, але вам гэта не патрэбна, паколькі ён таксама знаходзіцца на ключы бяспекі. Магчыма, вы таксама захочаце выдаліць зыходны адкрыты ключ PEM са сваіх хастоў (напрыклад, у ~/.ssh/authorized_keys для карыстальніка ubuntu), калі вы выкарыстоўвалі яго для экстранага доступу.

Экстранны доступ: план дзеянняў

Устаўце ключ бяспекі і запусціце каманду:

$ 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.

Што мне падабаецца ў гэтым падыходзе, дык гэта апаратная падтрымка. Вы можаце змясціць ключы бяспекі ў сейф, і яны нікуды не падзенуцца.

На правах рэкламы

Эпічныя серверы - Гэта танныя VPS з магутнымі працэсарамі ад AMD, частата ядра CPU да 3.4/128 GHz. Максімальная канфігурацыя дазваляе вырашыць практычна любыя задачы – 512 ядраў CPU, 4000 ГБ RAM, XNUMX ГБ NVMe. Далучайцеся!

Прапісваем працэдуру экстранага доступу да хастаў SSH з апаратнымі ключамі

Крыніца: habr.com

Дадаць каментар