TPM и шифрование дисков
Формат Linux Unified Key Setup-on-disk (LUKS) позволяет шифровать блочные устройства и предоставляет набор инструментов, упрощающих управление зашифрованными устройствами.
PBD (Policy-Based Decryption) это набор технологий, которые позволяют разблокировать зашифрованные корневые и дополнительные тома жестких дисков на физических и виртуальных машинах. PBD использует различные методы разблокировки, например, устройство Trusted Platform Module (TPM).
В zVirt реализация PBD состоит из платформы Clevis и подключаемых модулей pin. Каждый pin обеспечивает отдельную возможность разблокировки, например, tpm2 позволяет разблокировать с использованием политик TPM2.
ТРМ или Trusted Platform Module– это набор спецификаций от Trust Computing Group (TCG), разработанный независимо от операционной системы. Такие спецификации используются для разработки криптопроцессора (аппаратного или программного), функция которого заключается в защите платформы (аппаратной или программной, иначе виртуальной машины) с помощью криптографических ключей и операций. TPM не используется для шифрования/дешифрования наших данных на жестком диске; это аппаратное обеспечение, содержащее секретные ключи, которые используются программным компонентом для фактического шифрования и дешифрования на лету.
TPM поддерживают не все ОС.
1. Шифрование дисков хоста
Требования:
-
Доступное устройство, совместимое с TPM 2.0.
-
Система с 64-разрядной архитектурой Intel или 64-разрядной архитектурой AMD.
Методика:
-
Включить модуль TPM в BIOS/UEFI.
Точные шаги для этой процедуры будут зависеть от вашего BIOS, вашей материнской платы, версии модуля ТРМ, поэтому обратитесь к руководству по материнской плате.
-
При установке ОС zVirt Node во время разбиения дисков выберите параметр “Encrypt my data”:
Введите фразу-пароль:
-
При загрузке системы после завершения установки введите фразу-пароль для входа в систему (Фраза-пароль будет запрашиваться при каждом запуске системы).
2. Настройка автоматической разблокировки дисков с помощью TPM
-
Убедимся может ли ядро правильно видеть модуль TPM:
dmesg | grep -i tpm
Если все работает корректно, то команда должна вывести выпуск модуля ТРМ:
Mar 17 20:37:15 vmm kernel: tpm_tis 00:05: 2.0 TPM (device-id 0xD, rev-id xy)
Другой способ - проверить, есть ли в /dev/ устройство tpm0:
ls /dev/tpm0
-
Чтобы автоматически разблокировать существующий том, зашифрованный LUKS, установите подпакет clevis-luks:
yum install clevis-luks
-
Определите том, зашифрованный LUKS.
lsblk
В следующем примере блочное устройство упоминается как /dev/sda3:
-
Привяжите том к устройству TPM 2.0:
clevis luks bind -d /dev/sda3 tpm2 '{"hash":"sha256","key":"rsa"}'
Эта команда выполняет четыре шага:
-
Создает новый ключ с той же энтропией, что и главный ключ LUKS.
-
Шифрует новый ключ с помощью Clevis.
-
Сохраняет объект Clevis JWE в токене заголовка LUKS 2 или использует LUKSMeta, если используется заголовок LUKS 1, отличный от стандартного.
-
Включает новый ключ для использования с LUKS.
В качестве альтернативы, если вы хотите привязать данные к определенным состояниям регистров конфигурации платформы (PCR), а значения pcr_bank и pcr_ids - к команде
clevis luks bind
:clevis luks bind -d /dev/sda3 tpm2 ‘{“hash”:”sha256”,”key”:”rsa”,”pcr_bank”:”sha256”,”pcr_ids”:”0,1”}’
- Platform Configuration Register (PCR)
-
Киптографическая запись (изменения) состояния ПО. Регистры хранят ключи для проверки ПО при запуске системы. Eсли значения хэшей PCR не соответствуют политике, используемой при запечатывании, криптографические ключи, запечатанные с определённым набором значений PCR работать не будут.
-
-
Теперь том можно разблокировать с помощью вашего существующего пароля, а также с помощью политики Clevis.
-
Чтобы разрешить системе загрузки обрабатывать привязку диска, используйте инструмент dracut в уже установленной системе:
yum install clevis-dracut dracut -fv --regenerate-all
- dracut
-
Утилита создания initramfs (initial RAM disk image, загружаемый в оперативную память файл с образом файловой системы), используемого при загрузке Linux в качестве первоначальной корневой файловой системы. Загрузчик загружает в память ядро и initramfs, монтирует временную корневую файловую систему и передаёт управление ядру.
Задача initramfs - обеспечить хранение скриптов, программ, модулей ядра и прочих файлов, необходимых для загрузки драйверов, инициализации сетевых устройств, видео, устройств хранения, обработки сложных случаев.
3. Проверка работоспособности
Перезагружаем хост. При появлении запроса на ввод фразы-пароля, не вводим его самостоятельно. Через некоторый период времени (~ 1 минута) сработает ТРМ и система запустится самостоятельно.
4. Возможные проблемы
clevis luks bind -d /dev/sda3 tpm2 '{"hash":"sha256","key":"rsa"}'
4.1. Проблема
Warning: Value 512 is outside of the allowed entropy range, adjusting it.
WARNING:esys:src/tss2-esys/api/Esys_Create.c:375:Esys_Create_Finish() Received TPM Error
ERROR:esys:src/tss2-esys/api/Esys_Create.c:375:Esys_Create()Esys Finish ErrorCode (0x00000921)
ERROR: Esys_Create(0x921) - tpm:warn(2.0): authorizations for objects subjects to DA protection are not allowed at thes time because the TPM is in DA lockout mode
ERROR: Unable to run tpm2_create
Creating TPM2 object for jwk failed!
5. Чтобы убедиться, что объект Clevis JWE успешно помещен в заголовок LUKS
clevis luks list -d /dev/sda3
Вывод:
tpm2 '{"hash":"sha256","key":"rsa"}'
6. Рекомендуемый способ удаления Clevis pin с тома, зашифрованного LUKS (отключение автоматической разблокировки)
Pаботает как для томов LUKS1, так и для томов LUKS2. Команда удаляет метаданные, созданные на этапе привязки, и стирает слот для ключей 1 на устройстве /dev/sda3:
clevis luks unbind -d /dev/sda3 -s 1
7. Удаление вручную Clevis pin с тома, зашифрованного LUKS
7.1. Требования
Том, зашифрованный LUKS, с привязкой Clevis.
Методика:
-
Проверьте, какой версией LUKS зашифрован том, например /dev/sda3, и определите слот и токен, привязанный к Clevis:
clevis luksDump /dev/sd3
Вывод:
-
В случае шифрования LUKS2 удалите токен:
cryptsetup token remove --token-id 0 /dev/sda3
-
Если ваше устройство зашифровано с помощью LUKS1, на что указывает строка Version: 1 в выходных данных команды cryptsetup luksDump, выполните этот дополнительный шаг:
luksmeta wipe -d /dev/sda3 -s 1
-
Сотрите слот для ключей, содержащий кодовую фразу Clevis:
cryptsetup luksKillSlot /dev/sda3 1
После этих процедур автоматическая разблокировка дисков с помощью TPM работать не будет.
9. Настройка шифрования дисков ВМ
9.1. Шифрование дисков с данными используя LUKS2
9.1.1. Требования
-
Блочное устройство содержит файловую систему.
-
Вы создали резервную копию своих данных.
9.1.2. Методика
-
Размонтируйте все файловые системы, которые необходимо зашифровать:
umount /dev/sdc1
-
Освободите место для хранения заголовка LUKS. Выберите один из следующих вариантов, который соответствует вашему сценарию:
-
В случае шифрования логического тома вы можете расширить логический том без изменения размера файловой системы:
lvextend -L +32M vg00/lv00
-
Расширьте раздел с помощью инструментов управления разделами, таких как fstab.
-
Уменьшите размер файловой системы на устройстве. Вы можете использовать утилиту resize2fs для файловых систем ext2, ext3 или ext4. Обратите внимание, что вы не можете уменьшить размер файловой системы XFS.
-
-
Инициализируйте шифрование:
cryptsetup reencrypt --encrypt --init-only --reduce-device-size 32M /dev/sdc1 sdc1_encrypted
Команда запросит у вас кодовую фразу и запустит процесс шифрования.
-
Примонтируйте устройство:
mount /dev/mapper/sdc1_encrypted /mnt/sdc1_encrypted
-
Запустите онлайн-шифрование:
cryptsetup reencrypt --resume-only /dev/sdc1
9.2. Шифрование пустых дисков используя LUKS2
9.2.1. Требование
-
Пустое блочное устройство
Методика:
-
Настройте раздел как зашифрованный раздел LUKS:
cryptsetup luksFormat /dev/sdс1
-
Откройте зашифрованный раздел LUKS:
cryptsetup open /dev/sdс1 sdс1_encrypted
Эта команда разблокирует раздел и сопоставит его с новым устройством с помощью средства сопоставления устройств. Это предупреждает ядро о том, что устройство является зашифрованным устройством и должно быть адресовано через LUKS с использованием /dev/mapper/device_mapped_name, чтобы не перезаписывать зашифрованные данные.
-
Чтобы записать зашифрованные данные в раздел, к нему необходимо получить доступ через сопоставленное имя устройства. Для этого вы должны создать файловую систему.
mkfs -t ext4 /dev/mapper/sdс1_encrypted
-
Примонтируем устройство:
mount /dev/mapper/sdс1_encrypted mount-point
Настройка автоматической разблокировки дисков с помощью TPM аналогична настройке для хоста |