Двухфакторная Аутентификация При Монтировании Зашифрованного Раздела Luks С Помощью Yubikey 4.



Часть 3: Юбикей 4 и LUKS

Двухфакторная аутентификация при монтировании зашифрованного раздела LUKS с помощью Yubikey 4.



Введение

В этой статье обсуждается, как реализовать двухфакторную аутентификацию с использованием ключа Yubikey 4 для монтирования зашифрованного раздела LUKS. Процесс реализации двухфакторной аутентификации с использованием ключа Yubikey 4 для монтирования зашифрованного раздела LUKS можно разбить на три части: 1. Подготовка раздела LUKS. 2. Подготовка к использованию ключа Yubikey 4 в операционной системе.

3. Непосредственно используйте ключ Yubikey 4 для двухфакторной аутентификации.

Первоначальные условия:

  • Linux Mint 18 Сара 64-битная
  • Юбикей 4


Подготовка раздела LUKS



Двухфакторная аутентификация при монтировании зашифрованного раздела LUKS с помощью Yubikey 4.

Необходимо провести предварительный анализ существующего раздела LUKS. Для использования двухфакторной аутентификации с помощью ключа Yubikey 4 нам понадобится один свободный слот LUKS на разделе.

Поэтому вам необходимо знать, сколько слотов свободно и какие.

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

В качестве дополнительной меры безопасности можно создать дамп MasterKey. Важно отметить, что в реальной системе может использоваться устройство, отличное от /dev/sdb1. Команды в статье приведены для наглядности.

Например, в вашей системе это может быть /dev/sdb5.

Восемь слотов для ключей LUKS

LUKS использует восемь слотов на зашифрованный раздел, каждый из которых может хранить отдельный ключ.

Для расшифровки раздела можно использовать любой из восьми ключей.

Вы можете использовать только одну клавишу или назначить все восемь.

Для просмотра всех слотов нужно использовать команду установка крипты :

  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
   

# cryptsetup luksDump /dev/sdb1 | grep Slot Key Slot 0: ENABLED Key Slot 1: ENABLED Key Slot 2: DISABLED Key Slot 3: DISABLED Key Slot 4: DISABLED Key Slot 5: DISABLED Key Slot 6: DISABLED Key Slot 7: DISABLED

В этом примере:
  • /dev/sdb1 — раздел LUKS.
  • Слоты ключей начинаются с номера 0. Таким образом, можно использовать слоты от 0 до 7.
  • ENABLED – слот содержит ключ, назначенный разделу LUKS.
  • Для хранения ключей отведено два слота.



Добавление нового ключа

Чтобы добавить новый ключ — парольную фразу — в зашифрованный раздел LUKS, используйте команду luksAddKey:

# cryptsetup luksAddKey /dev/sdb1 Enter any passphrase: Enter new passphrase for key slot: Verify passphrase:

В этом примере:
  • /dev/sdb1 — зашифрованный раздел
  • Введите любую парольную фразу: - введите любой существующий ключ
  • Введите новую парольную фразу для слота ключа: - введите новый ключ
  • Проверьте парольную фразу: — повторите ввод нового ключа.

Новый ключ будет добавлен в следующий доступный слот. В данном случае это будет слот 2.

# cryptsetup luksDump /dev/sdb1 | grep Slot Key Slot 0: ENABLED Key Slot 1: ENABLED Key Slot 2: ENABLED Key Slot 3: DISABLED Key Slot 4: DISABLED Key Slot 5: DISABLED Key Slot 6: DISABLED Key Slot 7: DISABLED



Добавление нового ключа в указанный слот

Чтобы добавить ключ в указанный слот, используйте опцию -S, указывающую номер слота:

# cryptsetup luksAddKey /dev/sdb1 -S 5 # cryptsetup luksDump /dev/sdb1 | grep Slot Key Slot 0: ENABLED Key Slot 1: ENABLED Key Slot 2: ENABLED Key Slot 3: DISABLED Key Slot 4: DISABLED Key Slot 5: <b>ENABLED</b> Key Slot 6: DISABLED Key Slot 7: DISABLED



Удаление существующего ключа

Чтобы удалить существующий ключ, используйте команду luksRemoveKey:

# cryptsetup luksRemoveKey /dev/sdb1 Enter LUKS passphrase to be deleted:

При удалении ключа номер слота не используется; необходимо ввести именно парольную фразу – ключ (тот, который был присвоен целевому слоту).



# cryptsetup luksDump /dev/sdb1 | grep Slot Key Slot 0: ENABLED Key Slot 1: ENABLED Key Slot 2: ENABLED Key Slot 3: DISABLED Key Slot 4: DISABLED Key Slot 5: DISABLED Key Slot 6: DISABLED Key Slot 7: DISABLED



Удаление ключа

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

Извлечение ключа из слота №2. Вам будет предложено ввести любой назначенный LUKS-ключ.



# cryptsetup luksKillSlot /dev/sdb1 2 Enter any remaining LUKS passphrase:

Результат:

# cryptsetup luksDump /dev/sdb1 | grep Slot Key Slot 0: ENABLED Key Slot 1: ENABLED Key Slot 2: DISABLED Key Slot 3: DISABLED Key Slot 4: DISABLED Key Slot 5: DISABLED Key Slot 6: DISABLED Key Slot 7: DISABLED



Добавление нового ключа LUKS из файла

Также возможно добавить новый ключ из файла:

# cryptsetup luksAddKey /dev/sdb1 masterkeyfile Enter any passphrase:

В этом примере:
  • masterkeyfile содержит новый ключ, который вы хотите добавить.

    Это должен быть бинарный (двоичный) файл.

  • Когда будет предложено ввести парольную фразу, вы должны ввести любой из существующих ключей для указанного раздела /dev/sdb1.
Результат:

# cryptsetup luksDump /dev/sdb1 | grep Slot Key Slot 0: ENABLED Key Slot 1: ENABLED Key Slot 2: ENABLED Key Slot 3: DISABLED Key Slot 4: DISABLED Key Slot 5: DISABLED Key Slot 6: DISABLED Key Slot 7: DISABLED



Сброс забытого LUKS ключа – установка нового ключа

Если вы перезагрузили (ваш) сервер и не можете смонтировать зашифрованный раздел LUKS, потому что забыли пароль LUKS, у вас нет вариантов.

Данные потеряны.

Вам придется снова работать с разделом (зашифровать, возможно переразбить, создать файловую систему, заполнить данными).

Однако если зашифрованный раздел LUKS все еще открыт, вы не перезагрузили систему и забыли пароль LUKS для этого раздела, который все еще смонтирован, вы можете назначить новый ключ LUKS. В сценарии «Я забыл свой пароль LUKS» вы можете выполнить следующие два шага:

  • Выберите текущий ключ шифрования из раздела LUKS.
  • Создайте новый ключ LUKS, используя предварительно назначенный ключ.

В этом примере смонтирован раздел /home1, который является зашифрованным разделом LUKS, но пароль для него неизвестен.



# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 127G 44G 76G 37% / /dev/mapper/home1 93G 188M 88G 1% /home1

Имя тома находится в первом столбце вывода команды «df -h» после «/dev/mapper/», в этом примере имя тома — «home1».

Следующая команда покажет список всех ключей шифрования для всех разделов, смонтированных в системе:

# dmsetup table --showkeys home1: 0 197259264 crypt aes-cbc-essiv:sha256 607f482870c795a9b1e307ffbfc6643eaa219e9ef8c6773de02cd298c8fcda3c 0 8:17 4096

Поле после «aes-cbc-essiv:sha256» представляет собой зашифрованный пароль.

Давайте получим зашифрованный ключ LUKS и сохраним его в файл:

# vi existinglukskey.txt 607f482870c795a9b1e307ffbfc6643eaa219e9ef8c6773de02cd298c8fcda3c

Итак, теперь преобразуем полученный ключ из текстового файла в бинарный файл.

Для этого используйте команду «xxd»:

# xxd -r -p existinglukskey.txt existinglukskey.bin

В этом примере:

  • Опция -r для обратного преобразования.

    Это преобразует шестнадцатеричный дамп в двоичный.

  • Опция -p для обработки постскриптума.

    Здесь мне сложно адекватно перевести руководство man (вывод в стиле постскриптум непрерывного шестнадцатеричного кода.

    Также известный как стиль простого шестнадцатеричного кода).

  • существующий входной файл lukskey.txt.
  • Выходной файл существующегоlukskey.bin. Он будет содержать существующий зашифрованный пароль LUKS в двоичном файле.

Наконец, давайте добавим новый ключ LUKS, используя существующий ключ, извлеченный в двоичный файл:

# cryptsetup luksAddKey /dev/sdb1 --master-key-file <(cat existinglukskey.bin) Enter new passphrase for key slot: Verify passphrase:

В этом примере:
  • --master-key-file Указывает двоичный файл.

    Не используйте входной файл suchlukskey.txt. Используйте выходной файл существующийlukskey.bin.

  • Как видите, команда «cryptsetup luksAddKey» не запрашивает существующий пароль LUKS, поскольку он берется из бинарного файла.

  • Когда появится приглашение командной строки «Введите новую парольную фразу для слота ключа:», введите новый пароль LUKS. И на этот раз не забудь его.



Дамп LUKS MasterKey

Вы также можете сбросить MasterKey и сохранить его в безопасном месте.

Помните, что с помощью дампа MasterKey любой может получить доступ к вашему разделу LUKS.

# cryptsetup luksDump --dump-master-key /dev/sdb1 Are you sure? (Type uppercase yes): YES Enter LUKS passphrase: LUKS header information for /dev/sdb1 Cipher name: aes Cipher mode: cbc-essiv:sha256 Payload offset: 4096 UUID: 146d639a-757c-4bcb-aee6-8fe815345104 MK bits: 256 MK dump: 60 7f 48 28 70 c7 95 a9 b1 e3 07 ff bf c6 64 3e aa 21 9e 9e f8 c6 77 3d e0 2c d2 98 c8 fc da 3c

Итак, используя описанные выше способы, для дальнейших действий необходимо сделать следующее:

  • Определите устройство(а) с зашифрованным разделом LUKS.
  • Определите, какие слоты свободны для записи ключа(ов).

  • При необходимости добавьте новый ключ (резервный).

Источники На этом основан перевод. сайт .

Полное обсуждение того, как работает утилита cryptsetup, выходит за рамки этой статьи.

Желающие могут ознакомиться с использованием и возможностями утилиты cryptsetup. Вот несколько ресурсов, с которых можно начать: wiki.archlinux.org , gitlab.com .



Подготовка к использованию ключа Yubikey 4 в операционной системе

Для работы с ключом Yubikey 4 необходимо установить программное обеспечение.

В системах на базе Ubuntu версии 16.04 и старше выполните следующие команды: 1. sudo apt-get установить yubikey-luks 2. sudo apt-get установить yubikey-персонализацию 3. Вставьте ключ Yubikey 4 в USB-слот и выполните команду:

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

Yubikey имеет два слота.

Здесь используется слот №2, поэтому слот №1 можно использовать в обычном режиме «OTP».

4. Чтобы «привязать» ключ Yubikey 4 к слоту LUKS, используйте команду «yubikey-luks-enroll».

Исполняемый файл (скрипт) находится по адресу /usr/bin/yubikey-luks-enroll. Сценарий предполагает, что раздел LUKS расположен на устройстве /dev/sda5. Если в вашем случае это не так, скопируйте скрипт в свой домашний каталог и измените строку:

DISK="/dev/sda5"

Следует отметить, что существует разница между именованием устройств, используемых для зашифрованного раздела в системах BIOS и UEFI. Для систем, загружающихся с использованием BIOS, имя тома по умолчанию для шифрования — /dev/sda5. Для загрузочных систем UEFI имя тома по умолчанию для зашифрованных разделов — /dev/sda3. 5. После настройки параметров в скрипте yubikey-luks-enroll запустите его.

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



Использование ключа Yubikey 4 для двухфакторной аутентификации

  1. Вставьте Yubikey 4 в USB-разъем вашего компьютера.

  2. Включите компьютер.

  3. В поле ввода пароля введите проверочный пароль — пароль, созданный при запуске скрипта yubikey-luks-enroll. Нажмите клавишу Enter на клавиатуре.

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

  5. После завершения процесса расшифровки Yubikey 4 можно вынуть из USB-слота.

Если ключ Yubikey 4 утерян (отсутствует), все равно можно использовать ранее введенную парольную фразу для расшифровки раздела.

Если, конечно, парольная фраза была предварительно введена и сохранена в одном из LUKS-слотов раздела.



Заключение



Двухфакторная аутентификация при монтировании зашифрованного раздела LUKS с помощью Yubikey 4.

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

Теги: #luks #yubikey #yubico #linux #crypto #информационная безопасность #Криптография

Вместе с данным постом часто просматривают: