The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

Двухфакторная аутентификация SSH с использованием YubiKey
Все началось с того, что я приобрел YubiKey и захотел использовать его для
двухфакторной аутентификации SSH. Я также хотел иметь возможность восстановить
доступ к серверу на случай, если потеряю ключ. Информация о том, как это
сделать, слишком разрознена, поэтому я написал собственное руководство.

Вещи, которые необходимо знать:

* HOTP -- это алгоритм генерации одноразового пароля на основе счетчика.
Счетчик меняется каждый раз, когда генерируется новый пароль.
* TOTP -- алгоритм генерации пароля в зависимости от таймера, регулярно
генерируется новый пароль. (30 секунд в этом случае).

В результате, вы входите через SSH, видите запрос пароля и вводите пароль,
предоставленный OTP, системой одноразовых паролей (one-time password) от YubiKey.

Для аварийного доступа я настроил возможность аутентификации с помощью
Android-приложения Google Authenticator. Я настраивал все на Debian Wheezy
сервере, но это должно работать и для других похожих систем.

Вам необходимо установить libpam-oath на сервере (>=1.12.4-1 или вы не сможете
использовать аварийный вход).
На вашем компьютере необходимо установить yubikey-personalization-gui, oathtool
и libmime-base32-perl.

Когда вы установите необходимые программы и библиотеки, то прежде, чем
приступать к настройке, убедитесь, что у вас открыт дополнительный терминал с
правами root, чтобы можно было исправить возможные ошибки.

Ключ ниже указан просто для примера, вам необходимо подставить свой.

Настройка YubiKey.

Для начала, используем yubikey-personalisation-gui, чтобы настроить YubiKey и
сгенерировать ключ. Укажите OATH-HOTP режим, отключите token идентификацию и
скопируйте ключ куда-нибудь, он понадобится для настройки сервера. Не забудьте
сохранить настройки в YubiKey.

Создайте файл /etc/users.oath на сервере с содержанием:

   HOTP robin - 8a54ac40689f0bb99f306fdf186b0ef6bd153429

где robin это имя пользователя, использующего ключ, а большая шестнадцатиричная
строка это ключ без пробелов, который вы сгенерировали ранее.

Установите возможность читать файл только для root:

   # chmod 600 /etc/users.oath

Измените /etc/pam.d/sshd таким образом, чтобы строка

   @include common-auth

была раскомментирована, а после нее добавьте следующее:

   auth required pam_unix.so nullok_secure

   # OATH OTP
   auth required pam_oath.so usersfile=/etc/users.oath window=20

window=20 указывает, как много раз может быть нажата кнопка на YubiKey перед
входом. Иными словами, как далеко в последовательности OTP модуль будет искать совпадение.

Измените sshd_config, чтобы он разрешал вызов-ответ (Challenge-Response) аутентификацию.

   sed -i.bak -E -e 's/(ChallengeResponseAuthentication) no/\\1 yes/' /etc/ssh/sshd_config

Вы можете проверить последовательность следующим образом:

   $ oathtool -w10 8a54ac40689f0bb99f306fdf186b0ef6bd153429
   333518
   886962
   ...

Если вы нажмете кнопку на YubiKey несколько раз, вы дожны увидеть точно такую
же последовательность.

Перезапустите ssh демон и все должно работать. Вам нужно ввести пароль, вы
нажимаете на кнопку YubiKey.

Настройка Google Authenticator

Это будет аварийным входом на случай, если вы потеряете ключ. Используем здесь
повременной счетчик TOTP вместо счетчика на основе последовательности.

Для начала сгенерируйте случайный десятибайтовый ключ (20 символов в шестнадцатиричном виде):

   $ head -c 1024 /dev/urandom | openssl sha1 | tail -c 21 
   2c2d309a7a92e117df5a

Добавьте строку в /etc/users.oath:

   HOTP/T30 robin - 2c2d309a7a92e117df5a

T30 означает, что используется повременной алгоритм с 30-и секундной ротацией.

Перед тем, как добавить этот же ключ в android приложение, мы должны представить его в base32 виде:

   $ perl -e 'use MIME::Base32 qw( RFC ); print  lc(MIME::Base32::encode(pack("H*","2c2d309a7a92e117df5a")))."\\n";'
   fqwtbgt2slqrpx22

Эта команда на perl из шестнадцатиричного ключа сначала получает двоичный,
который потом преобразовывает в base32.
Проверить, что все работает, можно так:

   $ oathtool --totp -w10 2c2d309a7a92e117df5a
   125557
   804612
   ...

Последовательность должна совпадать с той, которую отдает android приложение.
Поскольку алгоритм генерации основывается на времени, то разница времени на
устройствах должна не превышать пары секунд.

Теперь вы можете войти на сервер через повременной ключ, сгенерированный
приложением или с помощью пароля, сгенерированным нажатием на кнопку YubiKey.

Примечания

Когда вы залогиньтесь, файл users.oath будет изменен, в него будет записано
новое значение счетчика и время. Убедитесь, что файл не открыт в текстовом редакторе.

Если кто-нибудь нажмет кнопку YubiKey много раз (больше двадцати для этого
примера), то ключ рассинхронизируется с сервером и вам придется сбросить его,
сгенерировав новый и заменив старый в users.oath.

Есть еще libpam-google-authenticator, который ведет себя похожим образом, но
недоступен для Debian Wheezy.

Если у вас много сервереров и вы хотите использовать один YubiKey для всех, то
вам потребуется что-нибудь вроде центрального сервера аутентификации, чтобы
избежать рассинхронизации ключей.
 
30.09.2013 , Автор: Dvenum , Источник: http://www.kallisti.net.nz/blog/201...
Ключи: ssh, auth, yubikey, password / Лицензия: CC-BY
Раздел:    Корень / Безопасность / SSH

Обсуждение [ Линейный режим | Показать все | RSS ]
 
  • 1.1, lucentcode, 21:18, 01/10/2013 [ответить] [смотреть все]
  • +/
    Спасибо. Очень интересный материал. Не зла про YubiKey.
     
  • 1.2, lucentcode, 21:19, 01/10/2013 [ответить] [смотреть все]
  • +/
    Не знал про YubiKey(опечатки такие опечатки).
     
  • 1.3, Аноним, 18:55, 02/10/2013 [ответить] [смотреть все]
  • –1 +/
    Еще бы абзац о том, что такое юбикей и чем он лучше ключей 2 железки постоянн... весь текст скрыт [показать]
     
  • 1.4, Аноним, 22:43, 02/10/2013 [ответить] [смотреть все]  
  • –1 +/
    Только получается что поймав ваш 8a54ac40689f0bb99f306fdf186b0ef6bd153429 с ... весь текст скрыт [показать]
     
     
  • 2.6, pavlinux, 00:08, 03/10/2013 [^] [ответить] [смотреть все]  
  • +/
    > Только получается что

    ФСБ запрещает юзать аппаратные ключи для удалённого доступа! Это только увеличивает риск.
    Лучше один, средненький пароль, типа "Qwerty-1025", чем два ключа.  
    Более того, использовать аппаратную авторизацию допускается только на защищенной,
    ограниченной территории (в пределах этажа, отдела).

    А как нарисовано на сайте http://www.yubico.ru/?uic_map=1505201284100
    "Юбикей на связке ключей" - это ваще, высший пилотаж раз3.1415здяйства. :D

     
     
  • 3.8, n0p, 22:54, 04/10/2013 [^] [ответить] [смотреть все]  
  • +/
    Есть маленький нюанс, дружище.

    Двухфакторная аутентификация означает, что ты "что-то знаешь", например пароль и "что-то имеешь", например, ключ. И при этом используются обязательно обе штуки одновременно.

    Если у тебя сперли пароль, то это не значит, что им можно воспользоваться, а если сперли ключ, то без пароля его можно тупо заблокировать и заменить на другой.

    Как думаешь, у ФСБ будут возражения?

     
     
  • 4.9, pavlinux, 01:30, 06/10/2013 [^] [ответить] [смотреть все]  
  • +/
    > В результате, вы входите через SSH, видите запрос пароля и вводите пароль,
    > предоставленный OTP, системой одноразовых паролей (one-time password) от YubiKey.

    Где тут двухфакторность?

    ----

    Двух-, трех-, хз- факторность - это последовательные, НЕ ВЗАИМОИСКЛЮЧАЮЩИЕ процедуры аутентификации.
    Например ( SSL-ключ && пароль && подтверждение по SMS).

     
     
  • 5.10, n0p, 12:29, 06/10/2013 [^] [ответить] [смотреть все]  
  • +/

    Согласен, эту штуку обязательно надо использовать в сочетании с дополнительной процедурой. Без неё она превращается в тыкву.
     
  • 5.15, Filosof, 19:39, 15/10/2013 [^] [ответить] [смотреть все]  
  • +/
    У меня сначала идёт запрос ОТП, потом стандартный пароль.
    2 фактора + защита от перебора.

    Для ленивых стандартное поведение - "авторизовывать по ключу, если нет ключа - запускать 2х факторность". Спасает при необходимости написания скриптов.
    Система вообще гибкая - твори что хочешь. PAM же.

    А вот "сервера YubiKey" меня пугают. Я б никому не доверял свой ключ.

     
  • 3.19, Crazy Alex, 13:17, 23/10/2013 [^] [ответить] [смотреть все]  
  • +/
    Смотря от чего защищаешься. Если от интернет-взломщиков всяких, и при этом хочешь ходить откуда угодно (то есть только ключами не обойдешься) - то как раз OTP будет отличным вариантом, даже без двухфакторки.

    Собственно, есть куча случаев, когда вариант "блокнотик, а то и листок на мониторе со страшными паролями" будет очень надежным и удобным решением.

    Мораль - прежде чем защищаться - стройте модель угроз.

     
  • 1.5, pavlinux, 00:00, 03/10/2013 [ответить] [смотреть все]  
  • +/
    Кто ж напишет PAM модуль для подтверждения по SMS, мне чёй-то так в падлу.
     
     
  • 2.7, Andrey Mitrofanov, 10:48, 03/10/2013 [^] [ответить] [смотреть все]  
  • +/
    > Кто ж напишет PAM модуль для подтверждения по SMS, мне чёй-то так в падлу.

    [CODE]Debian GNU/Linux 6.0 servachok tty2

    servachok send SMS text OK to short nmr 5554 and enter the unlock code : _[/CODE]

     
  • 2.11, Олег, 13:36, 06/10/2013 [^] [ответить] [смотреть все]  
  • +/
    Проспонсируешь? :)
     
     
  • 3.12, pavlinux, 14:18, 06/10/2013 [^] [ответить] [смотреть все]  
  • +/
    > Проспонсируешь? :)

    Краудфандинг или как там это зовётся.

     
     
  • 4.13, Олег, 14:58, 06/10/2013 [^] [ответить] [смотреть все]  
  • +/
    Ну как оно там зовется мне все равно :)
    Главное что бы это было кому нибудь нужно, и еще было бы неплохо что бы этот кто то еще и заплатил :)
     
     
  • 5.17, Аноним, 14:56, 20/10/2013 [^] [ответить] [смотреть все]  
  • +/
    Тебе надо Ты и плати Пассажиров без тебя хватамбо ... весь текст скрыт [показать]
     
     
  • 6.18, Аноним, 10:33, 22/10/2013 [^] [ответить] [смотреть все]  
  • +/
    Не хами! Проходи мимо
     
  • 2.16, Filosof, 19:42, 15/10/2013 [^] [ответить] [смотреть все]  
  • +/
    > Кто ж напишет PAM модуль для подтверждения по SMS, мне чёй-то так
    > в падлу.

    Я там ниже ссылку на коллекцию motp-поделок дал - там должно быть что-то готовое стоящее.

    Я лично СМСки шлю через внешний сервер - к нему стучусь через http rest. По сути скрипт-однострочник. Но для этой цели не пользовал - итак в телефоне стоит клиент-генератор.

     
  • 1.14, Filosof, 19:33, 15/10/2013 [ответить] [смотреть все]  
  • +/
    Пакет libpam-google-authenticator есть для бубунты Думаю бекпортировать в Дебиа... весь текст скрыт [показать]
     
     
  • 2.20, Аноним, 10:33, 05/05/2017 [^] [ответить] [смотреть все]  
  • +/
    TOTP ME позволяет сделать то же самое на любой недорогой кнопочной мобиле с J2ME... весь текст скрыт [показать]
     

    Ваш комментарий
    Имя:         
    E-Mail:      
    Заголовок:
    Текст:




      Закладки на сайте
      Проследить за страницей
    Created 1996-2017 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by Ihor TopList