Безопасность Linux с помощью USB-ключа YubiKey

USB ключ YubiKey Linux

Сегодня речь пойдет об одном из способов улучшить безопасность в Linux с помощью USB-ключа YubiKey и двухфакторной аутентификации.

Последнее время многое говорится о безопасности системы и эффективном управлении системой. Реализация на практике устройств с двухфакторной аутентификацией (2FA) помогает повысить эту безопасность.

YubiKey

Что такое YubiKey?

YubiKey — это устройство аутентификации оборудования, которое поддерживает разовые пароли, шифрование и аутентификацию с открытым ключом и протокол Universal 2nd Factor (U2F), являющийся международным стандартом для обеспечения беспроблемной аутентификации. Он позволяет безопасно входить в учетные записи пользователей, предоставляя одноразовые пароли или используя основанную на FIDO пару открытого / частного ключей, созданную устройством.

YubiKey также позволяет хранить статические пароли для использования на сайтах без поддержки одноразовых паролей. Среди самых крупных сайтов, имеющих такую поддержку, можно назвать Facebook, который использует YubiKey для аутентификационной информации своих работников, и Google, который поддерживает его как для сотрудников, так и для пользователей. Некоторые менеджеры паролей тоже поддерживают YubiKey.

YubiKey реализует основанный на HMAC алгоритм одноразовых паролей (HOTP) и алгоритм одноразовых паролей с временным критерием (TOTP) и определяет себя как клавиатуру, которая предоставляет одноразовые пароли через протокол USB HID. YubiKey NEO и YubiKey 4 включают протоколы вроде OpenPGP card, использующего 2048-битный алгоритм RSA. Он позволяет подписывать, шифровать и дешифровать сообщения, не выдавая частных ключей. Четвертое поколение YubiKey поддерживает OpenPGP с 4096-битными RSA-ключами и поддержкой PKCS#11 смарт-карт PIV — эта функция позволяет подписывать код образов Docker.

Yubico заменили в YubiKey 4 закрытым кодом все компоненты с открытым кодом. Yubico утверждает, что их код подвергся внутреннему и внешнему пересмотру, и их руководитель разместил обоснование этого шага.

Защита USB ключом YubiKey

Использование USB-ключа вроде YubiKey имеет ряд преимуществ, включая содействие в шифровании локальных дисков, безопасность аутентификационной информации и безопасность ключей SSH от хакеров. Эти устройства предназначены для безопасного хранения данных и показывают информацию с диска только когда это требуется.

YubiKey можно использовать как отдельное устройство или зарегистрировать его с сервисом пароля YubiKey и компании для обеспечения безопасности управления паролями и автоматического управления сетевыми паролями. YubiKey также можно использовать с Facebook, Google и рядом других провайдеров для обеспечения надежных логинов 2FA ради предотвращения взлома учетной записи. На разных сайтах это реализуется по-разному, но есть масса руководств, объясняющих, как это делается.

yubikey4
Защита USB ключом

Более того, если нажать на емкостное устройство, оно сгенерирует исключительно длинный и надежный пароль, именуемый OTP (one time password — разовый пароль) вместо запоминаемого пароля, что значительно затруднит возможность для кого бы то ни было похитить вашу информацию.

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

Для нашего урока мне придется сделать ряд допущений:

  • Первое — что у вас уже есть YubiKey 4 и что это устройство не используется в данный момент для иных целей.
  • Во-вторых, я подхожу к предмету с той точки зрения, что LUKS уже настроен и работает, как положено.
  • Предполагается также наличие хорошей, проверенной резервной копии и что она проверена на другом компьютере, не используемом для работы.

Эти действия, если они выполнены неправильно, могут привести к тому, что пользователь временно лишится доступа к своим зашифрованным данным.

Установка YubiKey

Для корректной работы в Linux YubiKey требует дополнительных пакетов. В моем примере будет использоваться Ubuntu 16.04.

Итак, из командного терминала установите эти пакеты:

После установки пользователь сможет настроить аппаратный ключ. Важно понять, как работает YubiKey. На устройстве YubiKey есть несколько разъемов-слотов. Каждый слот может содержать определенный ключ/пароль шифрования. Технически слотов несколько, но только два первых официально поддерживают использование паролей. Это отдельно от местоположения хранения SSH.

YubiKey надо настроить для работы с шифрованием LUKS. Сначала подключите YubiKey. Чтобы инициировать использование второго слота с LUKS, запустите следующую команду:

Примите изменения, нажав Y. Прежде чем запускать нижеприведенную команду для настройки YubiKey и LUKS, стоит проверить, что используется должный шифрованный раздел. Это делается обычным просмотром файла /etc/crypttab. Используйте следующую команду для подтверждения диска:

Шифрованный раздел находится в начале первой строки. В моем случае им является /dev/sda5. Если во время установки были выбраны настройки Ubuntu по умолчанию, то раздел sda5 — это всегда шифрованный диск. Последнее, что осталось — обновить систему LUKS для использования слота 7 устройства YubiKey. Добавится второй ключ LUKS, который не будет работать без аппаратного ключа и пароля:

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

Наконец, вас попросят ввести исходный пароль для диска LUKS. Вводите его правильно, иначе диск не станет нормально работать. Теперь остается только перезагрузить компьютер и убедиться, что новая настройка шифрования применена правильно.

После перезагрузки пользователь должен вставить YubiKey и ввести вновь созданный пароль LUKS. Если всё нормально, он должен нормально загрузиться.

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

Безопасность ключей с помощью YubiKey

Пора рассмотреть использование YubiKey для обеспечения безопасности частных ключей пользователей. Если у пользователя несколько компьютеров с Linux, на которые он заходит по паролю, то он неправ. А вот вход с помощью ключей SSH затрудняет незаконный доступ к процессу входа в систему, который становится более сложным.

Вход в систему через ключи SSH осуществляется посредством создания двух ключей: частного (закрытого, приватного) ключа и открытого(публичного)ключа.Открытый ключ загружается на компьютеры для администрирования, а частный ключ надежно хранится на YubiKey и защищается паролем.

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

YubiKey сам по себе не реализует создания частного / открытого ключа. Чтобы настроить YubiKey, надо использовать для создания ключей пакет opengpg2, и затем переместить частные ключи на YubiKey.

Обратите внимание, что по умолчанию установлены две версии gpg: gpg и gpg2. В этой статье используется gpg2, так как там солидно исправлен код и намного лучше работа с картами на gpg вроде YubiKey. Попытки использовать на нашем уроке исходный gpg приведут к некорректной работе некоторых действий или к полному отказу от работы.

Процесс создания ключей и настройки может показаться вам громоздким, но на самом деле он довольно прост. Следующие несколько шагов включают:

  • Создание мастер-ключа
  • Создание ключа отмены
  • Добавление подключа для входа в систему, подписания [signing] и шифрования
  • Удаление мастер-ключа из связки, чтобы его нельзя было использовать для подписания новых ключей
  • Размещение частных сертификатов на YubiKey
  • Экспорт открытых ключей SSH
  • Копирование их на серверы назначения

Создание мастер-ключа

В терминологии управления ключами этот ключ обычно является эквивалентом пользователя root. В производных Debian север создает два ключа: мастер-ключ, способный служить для удостоверения подключей; и подключ с возможностями шифрования и подписания.

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

  • Мастер-ключ
  • Ключ для шифрования
  • Для удостоверения
  • Ключ авторизации (ключ авторизации используется для подключения к устройствам SSH)

Мастер-ключ создается командой:

Вместе с ним создадутся файлы и папки связки ключей, если их не существовало. Поскольку наша статья использует это исключительно ради примера настройки, мы можем использовать то, что предложено по умолчанию. Но в среде live, по очевидным причинам, такого делать не рекомендуется. Для данного ключа подойдет опция 4: Только подпись RSA.

Когда будут приняты первые вопросы о длине ключа и сроке его действия (по умолчанию), приложение спросит у вас имя и адрес электронной почты для уникальной идентификации ключа. Для целей нашего урока введите свое имя и адрес электронной почты. Комментарии опциональны. Когда вы подтвердите правильность информации, нажмите O для создания ключа. Система также попросит вас ввести пароль — он предотвратит применение ключа, если ключ похитят.

Система выдаст немало текста, но нас интересует открытый ключ. ID ключа находится справа от rsa2046/.

защита usb ключом
Защита USB ключом. Готовая настройка ключа, где показан вывод от ключа

Как вы можете видеть, у созданного ключа имеется надпись rsa2046/xxxxxx, где x — длинное число. Это идентификатор ключа. Поскольку наш урок будет использовать этот ключ несколько раз, ваша жизнь упростится, если вы дадите ему имя. Это уменьшит операции по копированию и вставке и количество потенциальных опечаток в цифрах. В терминале введите

Создание ключа отмены

Следующий важный шаг — создание ключа отмены [revocation key]. С ним можно отозвать любой ключ, который был потерян, украден или скомпрометирован. Экспортированный ключ не стоит хранить на локальном устройстве, лучше на флэшке в надежном месте. Чтобы создать файл отмены, сделайте следующее, изменяя местоположения для пользователей USB-флэшки:

Как и при создании оригинала ключа, процесс задаст вам несколько вопросов. На вопрос о причине отмены можно указать “0”. Помимо всего прочего, вас спросят пароль для мастер-ключа и новый пароль для ключа отмены.

Следующий шаг — экспортировать “secretkeys [секретные ключи]”. Пусть вас не вводит в заблуждение терминология. «Секретные ключи» означает «частный ключ». Это у него название такое! Чтобы экспортировать свой ключ на USB-брелок, используйте приведенную ниже команду, при необходимости заменив местоположение:

После настройки основных ключей надо создать подключи. Здесь мы создаем подключ для подписания. Обратите внимание на параметр —expert. Он включает несколько нужных нам опций:

защита usb ключом
Защита USB ключом. Создание подключей, с расширенными опциями

Для добавления ключа используйте команду addkey. Выберите опцию 4 (RSA Sign only). Опять примите настройки по умолчанию и новый пароль. Обратите внимание, что внизу появилась новая запись, и ее использование помечено “S”. Это означает, что ключ служит только для подписания.

Процесс повторяется для создания ключа шифрования. Предполагая, что пользователь всё еще находится в приложении gpg2, введите addkey. Выберите опцию для RSA Encrypt only [Только шифрование]. Примените настройки по умолчанию, как в предыдущих итерациях. В конечном итоге у вас должен быть новый ключ, отмеченный E (от Encryption).

Последний ключ, который нужно создать — ключ авторизации. Это ключ, который используется для входа в систему, а не для подписания, отмены и т. д. Снова запустите команду addkey. Однако на сей раз нам надо выбрать RSA (Set your own capabilities) [задайте свои полномочия]. Причина в том, что нам надо изменить способ использования, чтобы это был ключ авторизации. Если это не появилось, значит, вы не включили режим эксперта!

В ключе авторизации полномочия ключа нужно установить на Authorize [Авторизацию]. Разрешенные действия можно включать/отключать клавишами S, E или A. Переключайтесь по необходимости, пока не появится Authenticate. Нажмите G, чтобы завершить настройку. Примите настройки по умолчанию. Будем надеяться, что появятся четыре ключа: SC, S, E и A. Сохраните всю работу, введя save [сохранить]. Пользователь будет переведен в командную строку. После завершения должен появиться еще один подключ с пометкой “usage A”. Теперь надо сохранить всю эту настройку. Сохраните ее на диске, введя save. Пользователь снова окажется в командной строке Linux.

Теперь экспортируйте ключи и подключите частные ключи:

Далее надо экспортировать ключи SSH. В gpg2 есть инструмент для экспорта частного и открытого ключей SSH из ключей OpenGPG:

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

Если всё прошло нормально, выведется информация, относящаяся к рассматриваемому YubiKey. В нашем контексте мы можем проигнорировать большую часть записей. Единственные пункты, которые я бы предложил вам изменить — это вывод пользователя и администратора. Для этого надо перевести ключ в режим администратора. С этой целью введите admin и затем passwd. Вывод для пользователя по умолчанию ‘123456′, а для администратора — ‘12345678′. Переделайте их, выбрав какое-нибудь подходящее число и изменив контакты. Не забудьте сохранить информацию, прежде чем выйдете.

Загрузка на YubiKey

Следующая задача — загрузить ранее созданные ключи авторизации, шифрования и подписания на YubiKey. Это делается командой keytocard. Этот шаг придется повторить несколько раз, для каждого ключа, пока не будут загружены ключ подписания, ключ шифрования и ключ аутентификации:

В этот момент пользователю надо выбрать соответствующий ключ. Введите key 1. Будет выбран ключ 1 в YubiKey. Для перемещения частного ключа на карту ключей введите keytocard, чтобы активировать перенос локальных ключей на YubiKey. У вас спросят, куда сохранять ключ на слотах YubiKeys для частных ключей. Выберите Signature key [Ключ подписания]. Снова введите key 1, и это отменит выбор ключа. Выбранный ключ обозначается знаком ‘*’ около подключа.

Повторите keytocard, используя key 2, и в ответ на keytocard выберите 2. Снова повторите с key 3 и выбором 3 (он должен быть единственным доступным). Теперь все ключи скопированы на карту. Но они по-прежнему имеются на компьютере! Лучше всего удалить ключи подписания root (здесь позвольте мне еще раз повторить, что удалить эти ключи можно только по завершении резервного копирования, когда у вас будет надежная копия):

Программа gpg2 несколько раз попросит вас подтвердить, что вы на самом деле, действительно хотите удалить мастер-ключ. По завершении проверьте статус ключей YubiKey:

Теперь рядом с ключом безопасности должен быть знак ‘#’. Он дает пользователю знать, что этого ключа не существует на устройстве. А ‘>’ на подключах означает, что ключ находится на карте. Теперь, поскольку мы удалили мастер-ключ, можно импортировать оставшиеся части ключей. На отдельном компьютере, чтобы настроить устройство, запустите команду gpg2, и следом Ctrl + C. Это делается для создания некоторых важных файлов и папок.

По завершении импортируйте открытые ключи:

Дважды проверьте доступность этих ключей с помощью gpg2 —list-secret-keys. Теперь надо выдать доверие новому ключу, поскольку мы лишили его родителя и, следовательно, цепь доверия разорвалась. Чтобы облегчить себе жизнь, используйте export KEYID=the sec# key. Для задания опция доверия [trust] отредактируйте ключ:

Когда вам предложат выбрать уровень доверия, выберите 5 (Доверяю в высшей степени — I trust ultimately). Согласитесь на доверие, нажав Y. Затем выйдите с помощью quit.

Теперь вся настройка для вашего устройства YubiKey выполнена. Последнее, что нам следует сделать —при необходимости включить автоматическую функцию “pass-through [сквозной доступ]” частного ключа. Это делается с помощью двух команд:

Перезагрузите компьютер, чтобы сервисы обновили конфигурацию. После завершения откройте новое окно терминала и скомандуйте ssh-add -L. Если сквозное прохождение SSH работает, должно показаться несколько записей. Сейчас вы можете использовать команду:

Войдите со своим обычным паролем. Ваш открытый ключ скопируется на сервер. На это уйдет буквально секунда.

Теперь, если пользователь попытается зайти по SSH на хост, он введет информацию частного ключа и у него спросят пароль частного ключа. Чтобы узнать об этом подробнее, скомандуйте ssh -v user@remotehost

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

usb ключ linux
Защита USB ключом. LUKS, настроенный на использование YubiKey

Подведем итоги: YubiKey и другие аппаратные ключи предлагают большой выбор полезных функций. И хотя многие из них выглядят весьма сложными, всё же их определенно стоит использовать хотя бы ради душевного покоя.

ВКонтакте
OK
Telegram
WhatsApp
Viber

2 комментария

  1. Сисадмин со стажем длинною в жизнь.

    Это конечно оффтоп, но прошу вашей помощи. Кто нибудь сталкивался с проблемой невозможности загрузки из-за форматирования носителя, на котором с помощью стандартной утилиты биос на click BIOS msi military class 3, был установлен USB KEY (usb ключ). Таблетку вытаскивал и полностью обесточивал мать на пол часа, запускал с отключенными винтами и вынутой таблеткой. Никак пекарня не запускается, только выводит сообщение красными буквами на чёрном экране please insert usb key press any key check. Как снять или обойти эту блокировку? Имхо дополнительных ключей и ключей сброса утилита опционально не способна запилить.

  2. паяльщик

    Методом пайки )))

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *