Автоматическая расшифровка диска с помощью TPM2
В этой статье показано, как настроить clevis и systemd-cryptenroll с помощью чипа Trusted Platform Module 2 для автоматической расшифровки разделов, зашифрованных с помощью LUKS, при загрузке.
Если вы просто хотите запустить автоматическую расшифровку, вы можете сразу перейти к разделу «Предварительные требования».
Мотивация
Шифрование диска защищает ваши данные (закрытые ключи и важные документы) посредством прямого доступа к вашему оборудованию. Подумайте о продаже вашего ноутбука/смартфона или о его краже злым авантюристом. Любые данные, даже если они «удалены», подлежат восстановлению и, следовательно, могут попасть в руки неизвестных третьих лиц.
Шифрование диска не защищает ваши данные от доступа в работающей системе. Например, шифрование диска не защищает ваши данные от доступа вредоносного ПО, работающего от имени вашего пользователя или в пространстве ядра. На тот момент он уже был расшифрован.
Ввод парольной фразы для расшифровки диска при загрузке может стать довольно утомительным. В современных системах защищенный аппаратный чип под названием «TPM» (доверенный платформенный модуль) может хранить секрет и автоматически расшифровывать ваш диск. это альтернативный фактор , а не второй фактор . Запомни. Если все сделано правильно, это альтернатива с уровнем безопасности, аналогичным парольной фразе.
Исходная информация
Чип TPM2 — это небольшой аппаратный модуль внутри вашего устройства, который в основном предоставляет API для информации только для записи или только для чтения. Таким образом, вы можете записать в него секрет, но никогда не сможете прочитать его позже (но доверенный платформенный модуль может использовать его позже для внутренних целей). Или вы пишете информацию в одном месте, которую вы только зачитываете позже. TPM2 предоставляет так называемые PCR (регистры конфигурации платформы). Эти регистры принимают хэши SHA1 или SHA256 и содержат измерения , используемые для подтверждения целостности, например, конфигурации UEFI.
Включить или отключить безопасную загрузку в UEFI системы. Среди прочего, безопасная загрузка вычисляет хэши каждого компонента в цепочке загрузки (UEFI и его конфигурация, загрузчик и т. д.) и связывает их вместе таким образом, что изменение в одном из этих компонентов изменяет вычисленные и сохраненные хэши во всех последующих PCR. Таким образом, вы можете завоевать доверие к среде, в которой вы находитесь. Оценка надежности вашей среды полезна, например, при расшифровке вашего диска. Спецификация UEFI Secure Boot определяет PCR от 0 до 7. Все, что сверх этого, является бесплатным для ОС и приложений.
Сводка того, что измеряется в каких PCR в соответствии со спецификацией
- PCR 0 : информация о прошивке EFI, такая как ее версия
- PCR 1 : дополнительная конфигурация и информация, связанная с прошивкой EFI 2 : диски EFI от аппаратных компонентов (таких как RAID-контроллер)
- PCR 3 : дополнительная конфигурация и информация для драйверов, хранящихся в 2
- PCR 4 : предоперационная диагностика и загрузчик ОС EFI
- PCR 5 : конфигурация загрузчика ОС EFI и таблицы GPT
- PCR 6 : зарезервировано для переменных производителя хост-платформы и не используется EFI
- PCR 7 : хранит конфигурацию политики безопасной загрузки
Некоторые примеры того, что измеряется в какой PCR
- Изменения в initramfs измеряются в PCR 9 и 10.
Поэтому, если вы регенерируете initramfs с помощью dracut -f , вам придется перепривязать. Это будет происходить при каждом обновлении ядра. - Изменения в конфигурации Grub, такие как добавление аргументов ядра, ядер и т. д. измеряются в PCR 8, 9 и 10.
- Устройства хранения измеряются в PCR 8 и 10. Однако концентраторы и YubiKeys, похоже, не измеряются ни в одном PCR .
- Дополнительные операционные системы учитываются в PCR 1. Это происходит, например, при подключении USB-накопителя перед загрузкой живого образа Fedora Linux.
- Загрузка живого образа изменяет PCR 1, 4, 5, 8, 9 и 10.
Инструмент под названием скоба создает новый секрет дешифрования для зашифрованного диска LUKS, сохраняет его в микросхеме TPM2 и настраивает TPM2 на возврат секрета только в том случае, если состояние PCR совпадает с состоянием во время настройки. Clevis попытается получить секрет и автоматически расшифровать диск во время загрузки, только если состояние соответствует ожидаемому.
Последствия для безопасности
Поскольку вы устанавливаете альтернативный метод разблокировки, используя только встроенное оборудование вашей платформы, вы должны быть уверены, что производитель вашей платформы сделает свою работу правильно. Это деликатная тема. Существует доверие к надежному дизайну аппаратного обеспечения и встроенного программного обеспечения. Тогда есть уверенность, что UEFI, загрузчик, ядро, initramfs и т. д. не изменены. В совокупности вы ожидаете надежную среду, в которой можно автоматически расшифровать диск.
При этом вы должны верить (или, лучше, подтвердить ), что производитель ничего не испортил в общей конструкции платформы, чтобы это можно было считать достаточно безопасной альтернативой дешифрования. Есть ряд случаев, когда что-то пошло не так, как планировалось. Например, когда исследования в области безопасности показали, что BitLocker на ноутбуке Lenovo использует незашифрованную связь SPI с TPM2, пропуская парольную фразу LUKS в виде простого текста, даже не изменяя систему, или что BitLocker использует встроенные функции шифрования SSD-накопителей, которые вы можете пройти сброс до заводских.
Все эти примеры относятся к BitLocker, но они должны прояснить, что если общий дизайн нарушен, то секрет доступен, и этот альтернативный метод менее безопасен, чем парольная фраза, присутствующая только в вашей голове (и где-то в безопасности, например, в диспетчере паролей) . С другой стороны, имейте в виду, что в большинстве случаев тщательно продуманные исследования и атаки для доступа к данным диска не стоят усилий злонамеренного злоумышленника. Кроме того, отсутствие необходимости вводить парольную фразу при каждой загрузке должно способствовать внедрению этой технологии, поскольку она прозрачна, но создает дополнительные препятствия для нежелательного доступа.
Предварительные условия
Сначала убедитесь, что:
- Безопасная загрузка включена и работает
- Доступен чип TPM2
- Пакет скобы установлен
Соединительная скоба находится там, где происходит волшебство. Это инструмент, который вы используете в работающей ОС для привязки TPM2 в качестве альтернативного метода дешифрования и использования его внутри initramfs для чтения секрета дешифрования из TPM2.
Убедитесь, что безопасная загрузка включена. Выход dmesg должен выглядеть так:
$ dmesg | grep Безопасный [0.000000] secureboot: безопасная загрузка включена [0.000000] Ядро заблокировано из режима безопасной загрузки EFI; см. man kernel_lockdown.7 [0.005537] secureboot: безопасная загрузка включена [ 1.582598] целостность: загружен сертификат X.509 'ЦС безопасной загрузки Fedora: fde32599c2d61db1bf5807335d7b20e4cd963b42' [35.382910] Bluetooth: hci0: безопасная загрузка включена
Проверить dmesg на наличие чипа TPM2:
$ dmesg | grep доверенный платформенный модуль [ 0.005598] ACPI: TPM2 0x000000005D757000 00004C (v04 DELL Dell Inc 00000002 01000013)
Установите зависимости clevis и перегенерируйте файлы initramfs с помощью dracut .
sudo dnf установить вилку вилку-luks вилку-dracut вилку-udisks2 вилку-systemd sudo dracut -fv --regenerate-all sudo systemctl reboot
Перезагрузка важна для получения правильных измерений PCR на основе нового образа initramfs, используемого для следующего шага.
Настроить скобу
Для привязки зашифрованного LUKS раздела с чипом TPM2. Направьте скобу на ваш (корневой) раздел LUKS и укажите PCR, которые он должен использовать.
При появлении запроса введите текущую парольную фразу LUKS. Процесс использует это для создания нового независимого секрета, который свяжет ваш раздел LUKS с TPM2 для использования в качестве альтернативного метода дешифрования . Поэтому, если это не сработает, у вас все равно будет возможность напрямую ввести кодовую фразу для дешифрования.
sudo clevis luks bind -d /dev/nvme... tpm2 '{"pcr_ids":"1,4,5,7,9"}' Как упоминалось ранее, PCR 1, 4 и 5 изменяются при загрузке в другую систему, такую как живой диск. PCR 7 отслеживает текущую политику безопасной загрузки UEFI, а PCR 9 изменяется, если изменяется файл initramfs, загруженный через EFI.
Примечание. Если вы просто хотите защитить парольную фразу LUKS от живых образов, но не заботитесь о более «сложных» атаках, таких как изменение неподписанных файлов initramfs в незашифрованном загрузочном разделе, вы можете опустить PCR 9.
и избавьте себя от необходимости перепривязывать обновления.
Автоматически расшифровывать дополнительные разделы
В случае вторичных зашифрованных разделов используйте /etc/crypttab .
Используйте systemd-cryptenroll для регистрации диска для systemd для разблокировки:
sudo systemd-cryptenroll /dev/nvme0n1... --tpm2-device=auto --tpm2-pcrs=1,4,5 ,7,9
Затем отразите эту конфигурацию в вашем /etc/crypttab , добавив параметры tpm2-device=auto,tpm2-pcrs=1,4,5,7,9 .
Отменить привязку, повторно привязать и изменить
Список всех текущих привязок устройства :
$ sudo clevis luks list -d /dev/nvme0n1... tpm2
1: tpm2 '{"хеш":"sha256","ключ":"ecc","pcr_bank":"sha256","pcr_ids":"0,1,2,3,4,5,7,9" }' Отключить устройство :
sudo clevis luks unbind -d /dev/nvme0n1... -s 1 tpm2
Параметр -s указывает слот альтернативного секрета для этого диска, хранящегося в ТПМ.
Должно быть 1, если вы всегда отменяете привязку перед повторной привязкой.
Восстановить привязку в случае изменения PCR :
sudo clevis luks regen -d /dev/nvme0n1... -s 1 tpm2
Редактировать конфигурацию устройства :
sudo luksdo править -d /dev/nvme0n1... -s 1 -c '{"pcr_ids":"0,1,2,3,4,5,7,9"}' Устранение неполадок
Отображается парольная фраза для расшифровки диска при загрузке, но через некоторое время исчезает :
Добавить команду сна в systemd-ask-password-plymouth.service
[Service] ExecStartPre=/bin/sleep 10
Добавьте в файл конфигурации /etc/dracut.conf.d/systemd-ask-password-plymouth.conf :
install_items+=" /etc/systemd/system/systemd -ask-password-plymouth.service.d/override.conf "
Затем регенерируйте dracut через sudo dracut -fv ‐ regenerate-all .
Перезагрузить и заново сгенерировать привязку:
перезагрузка sudo systemctl ... sudo clevis luks regen -d /dev/nvme0n1... -s 1
Ресурсы
- Автоматическая разблокировка тома LUKS с помощью чипа TPM2
- Автоматическое дешифрование с помощью TPM2 на Silverblue (Обсуждение)
- Правильный способ использования tpm для полное шифрование диска (Security StackExchange)
- Как TPM выполняет измерение целостности системы (Security StackExchange)
- Настройка SecureBoot + TPM2
- Переключение банков PCR на устройствах TPM2
- Проект tpm2-luks на Github
- Понимание PCR TPM, банков PCR и их взаимосвязей
- От украденного ноутбука к внутренней сети компании
- Спецификация библиотеки TPM
- Спецификация платформы TCG EFI
2 Like this:
2 Like this: Загрузка…
шифрование — Запрос автозапуска и разблокировки для зашифрованного вторичного диска
Во-первых, похоже, что мы имеем дело с шифрованием LUKS, судя по вашим изображениям выше.
Остальная часть моего ответа здесь предполагает, что вы используете шифрование LUKS.
Я не использовал никаких инструментов, которые автоматизируют настройку автоматической расшифровки разделов, но сделал это вручную, и в данном случае это должно сработать.
Вместо того, чтобы изобретать велосипед, я дам небольшой обзор, в котором опишу, что должно произойти, а затем я укажу вам на онлайн-публикацию, в которой описан процесс.
Обзор
Ваша система должна уметь обращаться с дополнительным зашифрованным разделом. Чтобы сообщить вашей системе, как обращаться с этим разделом, вам нужно создать для него запись в /etc/crypttab файл. Здесь вы сообщите системе, как расшифровать раздел. Это можно сделать с помощью ключевого файла, который хранится в основном зашифрованном разделе. Этого можно добиться с помощью сценария decrypt_derived, который использует ранее расшифрованный раздел для расшифровки вторичного раздела. Оба этих подхода описаны на странице, ссылка на которую приведена ниже.
Простого обновления /etc/crypttab недостаточно. Для фиксированного диска шифрование должно происходить во время загрузки, поэтому вы должны запустить update-initramfs для создания загрузочных файлов с только что внесенными изменениями. Сообщение, на которое я ссылаюсь ниже, просто обновляет текущую версию ядра. Проверьте параметры командной строки для этой команды, чтобы узнать, как обновить все версии, если вы хотите это сделать.
Как только система узнает, как расшифровать раздел, запись в /etc/fstab
Перенаправление
Как я уже упоминал, кто-то уже написал о конкретных шагах, которые нужно предпринять, чтобы это произошло.
