Двофакторна автентифікація для SSH

"Безпечна оболонка" SSH - мережевий протокол для встановлення захищеного з'єднання між хостами, стандартно по порту 22 (який краще поміняти). SSH-клієнти та SSH-сервери доступні для більшості операційних систем. Усередині SSH працює практично будь-який інший мережевий протокол, тобто можна віддалено працювати на іншому комп'ютері, передавати шифрованим каналом звуковий потік або відео і т.д. Крім того, через SOCKS-проксі на віддаленому хості можна підключатися до інших хостів вже від імені цього віддаленого хост.

Аутентифікація відбувається за паролем, але розробники та системні адміністратори традиційно застосовують SSH-ключі. Проблема полягає в тому, що секретний ключ можуть вкрасти. Додавання парольної фрази теоретично захищає від крадіжки секретного ключа, але на практиці при форвардингу та кешуванні ключів вони все одно можуть використовуватись без підтвердження. Двофакторна автентифікація вирішує цю проблему.

Як реалізувати двофакторну автентифікацію

Розробники з компанії Honeycomb нещодавно опублікували докладну інструкцію, як реалізувати відповідну інфраструктуру на клієнті та сервері.

Інструкція передбачає, що у вас є базовий хост, відкритий в інтернет (бастіон). Ви хочете підключатися до цього хосту з ноутбуків або комп'ютерів через інтернет, і отримувати доступ до всіх інших пристроїв, які знаходяться за ним. 2FA гарантує, що зловмисник не зможе виконати те саме, навіть якщо отримає доступ до вашого ноутбука, наприклад, встановивши шкідливе ПЗ.

Перший варіант - OTP

OTP — одноразові цифрові паролі, які будуть використовуватися для SSH-автентифікації разом з ключем. Розробники пишуть, що це неідеальний варіант, тому що зловмисник може підняти фальшивий бастіон, перехопити ваш OTP та використати його. Але це краще ніж нічого.

В даному випадку на серверній стороні в конфіг Chef прописуються такі рядки:

  • metadata.rb
  • attributes/default.rbattributes.rb)
  • files/sshd
  • recipes/default.rb (копія з recipe.rb)
  • templates/default/users.oath.erb

На клієнтській стороні ставиться будь-який OTP-додаток: Google Authenticator, Authy, Duo, Lastpass, встановлюється brew install oath-toolkit або apt install oathtool opensslпотім генерується випадковий рядок base16 (ключ). Вона конвертується у формат Base32, який використовують мобільні автентифікатори, та імпортується безпосередньо у додаток.

У результаті ви можете підключитися до бастіону і переконатися, що тепер той вимагає не тільки парольну фразу, але й OTP код для аутентифікації:

➜ ssh -A bastion
Enter passphrase for key '[snip]': 
One-time password (OATH) for '[user]': 
Welcome to Ubuntu 18.04.1 LTS...

Другий варіант – апаратна автентифікація

В даному випадку від користувача не потрібно щоразу вводити OTP-код, оскільки другим фактором стає апаратний пристрій або біометрія.

Тут конфігурація Chef трохи складніше, а конфігурація клієнтів залежить від ОС. Проте після виконання всіх дій клієнти на MacOS можуть підтверджувати аутентифікацію в SSH за парольною фразою і додатком пальця до сенсора (другий фактор).

Власники iOS та Android підтверджують вхід натисканням однієї кнопки на смартфоні. Це спеціальна технологія від Krypt.co, яка навіть безпечніша, ніж OTP.

На Linux/ChromeOS є варіант роботи із USB-токенами YubiKey. Звичайно, зловмисник може викрасти ваш токен, але він не знає парольну фразу.

Джерело: habr.com

Додати коментар або відгук