Автоматически разблокируем 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
cat 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.

Литература

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

2 commentary to post

  1. Добрый день.

    Осталось несколько вопросов.

    Что мешает злоумышленнику подменить shell во время загрузки, тем самым получив доступ ко всем файлам после автоматической расшифровки разделов?
    Или запуститься с live cd и считать все данные с /dev/tpm0?
    Где-то проскакивала информация, что нужно включать SecureBoot, который будет использовать EFI grub и проверять целостность файлов, предварительно всех их подписав сертификатом. А также ведь ещё нужно проверять ядро и initramfs…

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

      Используйте supervisor password (если поддерживается UEFI BIOS), а также технологию Secure Boot с заблокированным CSM.

      Или запуститься с live cd и считать все данные с /dev/tpm0?

      TPM чип — это сложное криптографическое устройство. Считать данные из него не представляется возможным. Ключи внутри него хранятся в не экспортируемом виде.

      Если загрузиться с Live, то цепь загрузки изменится и доступ к регистрам PCR-7, используемым в LUKS разблокировки диска, получить не удастся.

      Где-то проскакивала информация, что нужно включать SecureBoot, который будет использовать EFI grub и проверять целостность файлов, предварительно всех их подписав сертификатом. А также ведь ещё нужно проверять ядро и initramfs

      В Fedora вся цепь загрузки уже подписана ключами Fedora Project и Microsoft (начальный предварительный загрузчик shim), поэтому всё будет работать «из коробки», хотя и не обеспечит надёжной защиты.

      Для максимально надёжной защиты рекомендуется создать свой собственный удостоверяющий центр, затем удалить из списка доверенных УЦ UEFI BIOS всё, после чего добавить наш. Далее придётся переподписать всю цепь загрузки: загрузчик, ядро, initrd, а также BIOS других устройств, например видеокарты ибо после удаления публичного ключа удостоверяющего центра Microsoft они не смогут быть инициализированы.

Обсуждение закрыто.