Автоматически разблокируем LUKS диски при помощи TPM

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

Введение

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

  • компьютер, сервер или ноутбук, оснащённый TPM версии 2.0 (или выше);
  • Fedora версии 30 (или выше);
  • LUKS-конфигурация, созданная по схеме:
    • ESP (UEFI) раздел (точка монтирования /boot/efi);
    • загрузочный раздел для хранения ядер и initrd без шифрования (точка монтирования /boot);
    • LUKS-зашифрованный корневой раздел, либо LVM том;
  • активированный UEFI Secure Boot.

TPM и некоторые особенности

TPM (Trusted Platform Module) — это специальный криптопроцессор, внутри которого генерируются и надёжно хранятся без возможности извлечения ключи шифрования. В этом он чем-то похож на обычные смарт-карты или токены, хотя оными не является.

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

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

О надёжности шифрования

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

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

  1. установим надёжный пароль супервизора в UEFI BIOS и настроим либо режим его ввода при каждом включении компьютера (рекомендуется), либо лишь после открытия задней крышки;
  2. (опционально) включим режим автоматической очистки TPM при открытии задней крышки, либо N неверных попыток ввода пароля. Очистка TPM уничтожит все ключи шифрования, что потребует ввода LUKS-пароля при следующем входе и настройки разблокировки с нуля. Данная функция поддерживается далеко не всеми устройствами;
  3. установим надёжный пароль для всех пользователей системы, особенно обладающих административными привилегиями.

Проверка функциональности

Проверим, что в компьютере имеется подходящий TPM модуль:

test -c /dev/tpm0 && echo OK || echo FAIL

Убедимся, что система установлена в UEFI режиме:

test -d /sys/firmware/efi && echo OK || echo FAIL

Запустим тестовое шифрование и расшифровку при помощи TPM (потребуется повышение прав до суперпользователя):

sudo -i
echo 'Fedora encryption test' | clevis encrypt tpm2 '{}' > test.jwe
echo test.jwe | clevis decrypt tpm2

Если ответ на вышеуказанные команды OK, а тестовый процесс шифрования завершился без ошибок, то продолжим, иначе разблокировка при помощи TPM невозможна.

Отказ от гарантий

Внимание! Все описанные в статье действия вы выполняете только на свой страх и риск. Никто не несёт никакой ответственности (явной или подразумеваемой) за это.

Так как существует риск потери данных на диске, мы настоятельно настоятельно рекомендуем перед любыми операциями сделать полную резервную копию.

Предварительная настройка

Войдём в UEFI BIOS устройства, перейдём на страницу управления TPM модулем и очистим его, т.к. без этого мы не сможем переключиться в режим администрирования для добавления новых ключей.

Внимание! Если в dual boot установлена Windows 10 с шифрованием системного раздела, то после очистки доступ к её разделу будет утерян и потребуется ручной ввод специального кода восстановления BitLocker, созданного при активации шифрования.

Установка необходимых пакетов

Установим криптографический фреймворк Clevis, который будет использоваться для работы с TPM модулем и LUKS:

sudo dnf install clevis clevis-luks clevis-dracut

Разблокировка корневого раздела

В нашем примере мы настроим разблокировку зашифрованного корневого раздела /dev/sda3 с использованием Clevis.

Создадим резервную копию LUKS-заголовка на случай возникновения каких-либо проблем в будущем:

sudo cryptsetup luksHeaderBackup /dev/sda3 --header-backup-file /media/data/header-sda3.img

Данный файл следует надёжно хранить в безопасном месте на другом носителе. Внутри него находится LUKS заголовок с включением всех созданных ключевых слотов и соответствующих им ключей шифрования. Его восстановление позволит откатить все произведённые ниже изменения.

Сгенерируем ключевую пару внутри TPM (регистры PCR7) и привяжем её к зашифрованному разделу:

sudo clevis luks bind -d /dev/sda3 tpm2 '{"pcr_ids":"7"}'

Проверим, появился ли пункт clevis в списке доступных слотов:

sudo cryptsetup luksDump /dev/sda3

Если это не так, повторим привязку.

Пересоздадим образ initrd ядра, который будет включать в себя модуль работы с TPM для ранней стадии загрузки системы:

sudo dracut -f

Произведём перезагрузку системы:

sudo systemctl reboot

Разблокировка других разделов

Так как количество свободного места для RSA ключей внутри TPM сильно ограничено и зависит исключительно от его производителя и модели, для разблокировки прочих разделов мы воспользуемся обычными ключевыми файлами на примере домашнего раздела /dev/sda4.

Сгенерируем ключевой файл и сохраним его внутри корневого раздела:

sudo mkdir -p /etc/keys
sudo dd if=/dev/urandom of=/etc/keys/home.key bs=1024 count=4
sudo chown root:root /etc/keys/home.key
sudo chmod 0400 /etc/keys/home.key

Добавим его в один из свободных слотов LUKS (потребуется ввести текущий пароль шифрования):

sudo cryptsetup luksAddKey /dev/sda4 /etc/keys/home.key

Откроем файл /etc/crypttab в любом текстовом редакторе и укажем полный путь к созданному ключевому файлу вместо none:

luks-home UUID=ABCD012345 /etc/keys/home.key luks

Сохраним изменения и перезагрузим систему.

Заключение

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

Литература

При написании данной статьи использовалась литература из следующих источников:

Пока нет комментариев.

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

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