Двухфакторная аутентификация Yubikey Полное шифрование диска через LUKS

Недавно я приобрел Yubikey Neo - изящное маленькое аппаратное устройство для аутентификации второго фактора. Он в первую очередь предназначен для использования с одноразовыми паролями и появляющимся протоколом U2F - но начиная с версии 2 Yubikey он также поддерживает аутентификацию по запросу-ответу HMAC-SHA1. HMAC-SHA1 объединяет секретный ключ (хранится внутри Yubikey) и комбинирует его с парольной фразой для генерации ответа.

Как я могу объединить Yubikey с моей установкой Ubuntu FDE, чтобы использовать 2FA с моим зашифрованным жестким диском?

1 ответ

Группа под названием PrivacyIdea создала небольшой пакет для добавления подпрограммы HMAC-SHA1 вызов-ответ в initramfs, что означает, что Ubuntu может запросить у вас запрос на передачу в Yubikey, а затем использовать ответ для разблокировки тома LUKS. По большей части, я следую этим инструкциям, с некоторыми добавленными комментариями. Процесс на самом деле очень легко сделать.

Я проверил это на Ubuntu 14.04, 16.04 и 18.04; используя Yubikey Neo. Он должен работать с любым последним Yubikey, с прошивкой 2.0+ и с любой версией Ubuntu после 14.04. Это могут быть и другие аппаратные устройства HMAC-SHA1, с которыми это работает, но я не знаю ни одного из существующих. Как всегда, прежде чем продолжить, убедитесь, что у вас есть резервная копия ваших данных - здесь не должно быть никаких проблем, но всегда есть вероятность, что это разрушит все на вашем компьютере. Эти инструкции поставляются без гарантии.

Обновление: Начиная с Ubuntu 16.04, необходимые пакеты находятся в основных репозиториях, и PPA не требуется.

Добавить комментарий, если у вас есть вопросы!


0. Предпосылки

Чтобы это работало, вам уже нужно будет настроить и работать с полным дисковым шифрованием LUKS. Вы можете сделать это, выбрав соответствующую опцию при установке Ubuntu. Для максимальной безопасности во время установки у вас должна быть выбрана очень надежная фраза-пароль. Если ваша парольная фраза не до конца, вы должны изменить ее на лучшую, прежде чем продолжить ( более подробные инструкции здесь).

Метод ниже не заменит существующие парольные фразы, но вместо этого добавит другую парольную фразу в один из слотов LUKS. Следовательно, если вы потеряете свой Yubikey, вы все равно сможете разблокировать компьютер, используя любую существующую парольную фразу - я предлагаю вам записать ее и спрятать в безопасном месте - вам также понадобится несколько раз во время этой процедуры. Ваша новая парольная фраза для вызова Yubikey должна быть достаточно сильной, но не обязательно такой же, как та, которую вы использовали при установке Ubuntu.


1. Добавить PrivacyIdea PPA и установить пакет

На Ubuntu 14.04

Откройте терминал и выполните следующую команду:

sudo add-apt-repository ppa:privacyidea/privacyidea 

Нажмите Enter при появлении запроса, затем запустите:

sudo apt-get update

Затем установите пакет с помощью:

sudo apt-get install yubikey-luks

На Ubuntu 16.04, 18.04 (и позже)

Нет необходимости в PPA, вы можете установить пакет с помощью:

sudo apt-get install yubikey-luks

2. Установите программное обеспечение Yubikey

Если вы используете функциональность HMAC-SHA1 Yubikey для чего-то другого, вы можете пропустить этот раздел. Он удалит любую конфигурацию во втором слоте Yubikey, поэтому не выполняйте этот шаг, если вы используете HMAC-SHA1 для других целей с этим Yubikey.

Вам нужно настроить Yubikey для работы с Ubuntu, установив необходимое программное обеспечение, либо из Yubico PPA в Ubuntu 14.04, либо из основного репозитория Ubuntu 16.04 и более поздних версий.

На Ubuntu 14.04

Если вы еще этого не сделали, добавьте PPA и установите пакет с:

sudo add-apt-repository ppa:yubico/stable
sudo apt-get update
sudo apt-get install yubikey-personalization

На Ubuntu 16.04, 18.04 (и позже)

sudo apt-get install yubikey-personalization

3. Инициализируйте слот Yubikey для HMAC-SHA1.

Теперь нам нужно запрограммировать второй слот Yubikey с конфигурацией HMAC-SHA1. Это удалит вашу предыдущую конфигурацию слота, которая по умолчанию пуста. Опять же, если вы используете HMAC-SHA1 для чего-то другого , не выполняйте эту команду - она ​​сотрет вашу конфигурацию. Вы можете безопасно использовать тот же секретный ключ внутри Yubikey для этой настройки LUKS, что и для других ваших целей. (Например, с другим компьютером, использующим LUKS+Yubikey).

ykpersonalize -2 -ochal-resp -ochal-hmac -ohmac-lt64 -oserial-api-visible

Терминал отобразит некоторую информацию о внесенных изменениях. Вам не нужно записывать это, но он покажет секретный ключ, используемый Yubikey в алгоритме HMAC-SHA1 для вычисления ответа при вызове.


4. Зарегистрируйте Yubikey в слот LUKS

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

Раздел, который нам нужно указать, зависит от того, используете ли вы BIOS или UEFI для загрузки вашей машины. Для BIOS зашифрованный том находится на /dev/sda5 по умолчанию для UEFI это на /dev/sda3, Вы можете проверить это, открыв disks утилита и подтверждение пути раздела - это должно быть либо sda3 или же sda5,

Запустите это в терминале:

sudo yubikey-luks-enroll -d /dev/sda3 -s 7

Это запишет в слот 7 конфигурации LUKS, следуя инструкциям установщика (они немного различаются в зависимости от используемой версии).

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

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


Изменение контрольной фразы запроса на шифрование

Смена пароля на более позднем этапе довольно проста, просто используйте эту команду для сброса секретного ключа. Не обязательно сбрасывать секретный ключ, но это не повредит. Имейте в виду, что это уничтожит предыдущий секретный ключ, не делайте этого, если вы используете HMAC-SHA1 для чего-то еще с этим Yubikey. (Например, с другим компьютером, использующим LUKS+Yubikey).

 ykpersonalize -2 -ochal-resp -ochal-hmac -ohmac-lt64 -oserial-api-visible

Затем, аналогично описанному выше шагу 4, зарегистрируйте новый пароль в слоте ключа LUKS, за исключением выбора очистки слота 7 с помощью этой команды:

sudo yubikey-luks-enroll -d /dev/sda3 -s 7 -c

Когда предложено Enter any remaining passphrase, используйте свою резервную парольную фразу - не парольную фразу Yubikey. Затем дважды введите новую парольную фразу Yubikey, затем, наконец, вам потребуется ввести резервную парольную фразу в последний раз.

Теперь ваша старая парольная фраза Yubikey Challenge была удалена, и только ваша новая будет расшифровывать жесткий диск. Ваша предыдущая резервная фраза будет прежней. Вы можете изменить эту фразу-пароль, перейдя по ссылкам на шаге 0.


Примечание о последствиях для безопасности

Добавление Yubikey добавит определенный уровень безопасности в вашу систему - кто-то должен знать и пароль-пароль вызова, и ваш Yubikey, чтобы иметь возможность разблокировать жесткий диск (или найти исходную фразу-пароль, которую вы сейчас используете в качестве резервной копии), Однако технически возможно, чтобы злоумышленник расшифровал жесткий диск, если он знает вашу парольную фразу вызова (например, путем "серфинга по плечу", когда вы его вводите) и может получить доступ к вашему Yubikey только на короткое время. Используя контрольную фразу, они могли получить ответ от Yubikey и сохранить его, а затем использовать его для расшифровки жесткого диска в любое время без Yubikey. Или, опять же, если злоумышленник или вредоносное ПО знали вашу фразу-пароль и смогли запустить код на компьютере, подключенном к вашему Yubikey, они также могли выполнить вызов и сохранить ответ. Поэтому по-прежнему крайне важно быть бдительным при вводе ключевой фразы вызова и следить за тем, чтобы Yubikey всегда находился в безопасном месте. Вы также должны подключать его только к машине, которой доверяете. Если вы потеряли отслеживание вашего Yubikey и подозреваете, что кто-то, возможно, использовал его, чтобы попытаться узнать ключ дешифрования, выполните шаги 2 и 3 еще раз, чтобы сбросить секретный ключ внутри Yubikey и выбрать новую парольную фразу вызова. Обратите внимание, что если злоумышленнику удалось узнать одну из ваших парольных фраз (ответ HMAC-SHA1 от Yubikey или вашу резервную копию), он может сделать резервную копию главного ключа LUKS, а затем использовать ее для расшифровки жесткого диска, даже если Вы меняете парольную фразу в будущем. Страница man для cryptsetup объясняет это, посмотрите в раздел luksHeaderBackup. Если вы подозреваете, что это произошло, вы должны создать совершенно новый том LUKS для защиты ваших данных.

Обновление для Ubuntu 20.04:

Пропустить 1 и 2 шаг

Теперь в репозитории Ubuntu 20.04 доступны все пакеты, поэтому просто установите yubikey-luks как:

sudo apt install yubikey-luks

Шаг 3

Здесь следует обратить внимание на одну вещь: вы можете добавить параметр -ochal-btn-trig к команде ykpersonalize.

Что оно делает? Он будет ждать 15 секунд нажатия кнопки на YubiKey (конечно, если у вас есть кнопка на yubikey), up2u.

Шаг 5

Когда вы перезагрузите компьютер, вы не увидите сообщение от /etc/ykluks.cfg, Зачем? Поскольку каким-то образом этот сценарий не изменяет /etc/crypttab.

Хорошо, теперь нам нужно изменить /etc/crypttab, добавить: keyscript=/usr/share/yubikey-luks/ykluks-keyscript,

Как это могло выглядеть до модификации?

cat /etc/crypttab  
[partition] UUID=1b2c1618-dc62-4d32-ab30-ebc23cb28cea none luks,discard

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

Как это может выглядеть после модификации?

cat /etc/crypttab  
[partition] UUID=1b2c1618-dc62-4d32-ab30-ebc23cb28cea none luks,keyscript=/usr/share/yubikey-luks/ykluks-keyscript,discard

Просто добавьте часть с помощью скрипта.

ОЧЕНЬ ВАЖНО: не пропускайте ЗАПЯТУЮ между опциями, потому что вы испортите config.

ОЧЕНЬ ВАЖНО v2: Перед следующим шагом проверьте путь к скрипту ключей, проверьте, есть ли у вас этот файл, если нет, извините idk.

Шаг 6:

sudo update-initramfs -u

Кредиты

Знания, которыми поделились с: https://infosec-handbook.eu/blog/yubikey-luks/

И все, пожалуйста.

Обновление для Ubuntu 19.04:

Похоже, что в Ubuntu 19.04 (и, возможно, 18.10, я не пробовал этот релиз), cryptsetup изменилось достаточно, чтобы сломать, как yubikey-luks раньше работал. Эта фиксация из вышестоящего репозитория, кажется, реализует исправление, но первоначальный репозиторий, по-видимому, не обновлялся с октября 2018 года. Я обнаружил этот форк репо, в котором есть исправление, а также несколько других примеров: и сумел собрать пакет, который работает 19.04.

Так как я не смог найти существующую сборку обновленного форка, метод получения yubikey-luks работа включает в себя получение исходного кода и сборку пакета DEB локально, а затем его установку.

Выполните шаги из моего предыдущего ответа, за исключением того, что замените шаг 1 следующим:


1. Получите исходный код yubikey-luks, соберите и установите пакет

Установите зависимости сборки с помощью:

sudo apt install dh-exec devscripts expect yubikey-personalization

Затем скачайте и распакуйте исходный архив:

mkdir ~/tmp
cd ~/tmp
wget -O yubikey-luks.zip https://github.com/thuandt/yubikey-luks/archive/master.zip
unzip yubikey-luks.zip
cd yubikey-luks-*

Постройте пакет с:

make builddeb NO_SIGN=1

Затем установите его:

sudo dpkg -i DEBUILD/yubikey-luks_*.deb

Затем продолжайте следовать остальным шагам в моем первом ответе.

Надеюсь, к 19.10 версия yubikey-luks В основном архив Ubuntu может быть обновлен, так что сборка вручную не требуется.

В качестве бонуса, более новая версия имеет файл конфигурации, который можно найти по адресу /etc/ykluks.cfg, Сообщение, отображаемое при загрузке, может быть настроено в этом файле.

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

Есть два проекта (не для Ubuntu), которые используют yubikey и также меняют ключ LUKS каждый раз, когда пользователь входит в систему. Таким образом становится намного сложнее получить доступ к системе, даже если предыдущий ключ и / или пароль каким-то образом известны злоумышленник. Это для действительно параноиков:)

Эти проекты:

Хотя они не будут работать напрямую с Ubuntu, их все же можно адаптировать.

Другие вопросы по тегам