У гэтым пасце мы распрацуем працэдуру для экстранага доступу да хастаў 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, лакальна будзе згенеравана два файлы:
- sk-user-ca, дэскрыптар ключа, які спасылаецца на зачынены ключ, які захоўваецца ў ключы бяспекі,
- 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:~$
- Цяпер вы можаце ствараць сертыфікаты для любога карыстальніка на хасце, які давярае вашаму цэнтру сертыфікацыі.
- Вы можаце выдаліць 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, каб абысціся без яго. Калі вам трэба адправіць сертыфікат калегу, самы просты і бяспечны варыянт - гэта
Што мне падабаецца ў гэтым падыходзе, дык гэта апаратная падтрымка. Вы можаце змясціць ключы бяспекі ў сейф, і яны нікуды не падзенуцца.
На правах рэкламы
Эпічныя серверы - Гэта
Крыніца: habr.com