LUKS2 + TPM2 + Clevis/Tang: автоматизированная разблокировка при безопасном старте
LUKS2 + TPM2 + Clevis/Tang: автоматизированная разблокировка при безопасном старте
Аннотация
Практическое руководство по настройке шифрования дисков с автоматической разблокировкой через TPM2 и сетевой сервис Tang, с откатом на пароль при нарушении политики целостности. Покрывает Fedora/CentOS/RHEL и Debian/Ubuntu, интеграцию с Secure Boot и восстановление при замене оборудования.
1. Архитектура и угрозы
Компоненты:
- LUKS2 — шифрование блочного устройства с метаданными в JSON.
- TPM2 — аппаратный корень доверия, хранение первичного ключа в NV-indices с политикой PCR.
- Clevis — клиентская сторона привязки (pin), реализует автоматическую разблокировку.
- Tang — сетевой сервис выдаёт ответ JWE для Clevis.
Угрозы и контрмеры:
- Кража диска: бесполезно без ключей TPM/Tang.
- Загрузка с другого носителя: PCR-политика TPM2 блокирует выдачу ключа.
- Замена материнской платы/обновление BIOS: изменение PCR — требуется пересоздание привязки или запасной пароль.
- Отказ Tang: Clevis откатывается на парольную фразу.
2. Предварительные условия
- Ядро с поддержкой TPM2 и device-mapper (dm-crypt).
- Пакеты: cryptsetup (>=2.3), tpm2-tools, clevis, clevis-dracut или clevis-initramfs, tang.
- Secure Boot в штатном режиме (не disabled), корректные подписи ядра/initramfs.
- НTP/Chrony синхронизированы на клиенте и Tang.
3. Настройка Tang-сервера
# Установка
sudo dnf install -y tang # RHEL/Fedora
# или
sudo apt install -y tang # Debian/Ubuntu
# Запуск и автозапуск
sudo systemctl enable --now tangd.socket
# Проверка
systemctl status tangd.socket
curl -s http://<TANG_HOST>/.well-known/tnp | jq .
Политика размещения: Tang в защищённом сегменте, доступ только по внутреннему VLAN, TLS для административного API (если используется). Резервный Tang на другом узле с идентичным ключом (экспорт/импорт через tpm2).
4. Настройка клиента (LUKS2 + TPM2 + Clevis)
4.1 Привязка через TPM2
# Генерация первичного ключа в TPM2
tpm2_createprimary -C o -G rsa -c primary.ctx
# Создание объекта для хранения ключа LUKS
tpm2_create -C primary.ctx -G rsa -u key.pub -r key.priv -c key.ctx
# Привязка к PCR (пример: PCR 0,7 для BIOS/UEFI и Secure Boot)
tpm2_policypcr -S session.ctx -l sha256:0,7 -L policy.pcr
tpm2_createpolicy -C key.ctx -L policy.ctx
4.2 Инициализация LUKS2
cryptsetup luksFormat --type luks2 /dev/sdX --pbkdf argon2id --key-size 512
4.3 Привязка Clevis к TPM2
clevis bind tpm2 /dev/sdX '{}'
4.4 Интеграция с Tang (резервный канал)
clevis bind http /dev/sdX '{"url": "http://<TANG_HOST>/adv"}'
5. Инициализация и проверка
cryptsetup luksOpen /dev/sdX cryptroot
clevis decrypt < /etc/crypttab.d/cryptroot.clevis | cryptsetup luksOpen /dev/sdX cryptroot --key-file -
Добавьте в /etc/crypttab:
cryptroot /dev/sdX none clevis,discard
Пересоберите initramfs:
# RHEL/Fedora
dracut -f
# Debian/Ubuntu
update-initramfs -u
6. Восстановление при замене оборудования
При замене материнской платы или обновлении BIOS PCR изменятся:
- Загрузитесь с Live USB.
- Откройте том с паролем: cryptsetup luksOpen /dev/sdX cryptroot.
- Пересоздайте привязку Clevis к новому TPM2 или Tang.
- Пересоберите initramfs.
7. Мониторинг и эксплуатация
- Мониторьте статус tangd и доступность сервиса.
- Алерты на изменение PCR без пересоздания привязки.
- Регулярная проверка health-check разблокировки в тестовой среде.
- Резервные копии метаданных LUKS (header backup).
8. Чек-лист внедрения
- TPM2 включён, Secure Boot активен.
- Пакеты установлены, версии соответствуют.
- Tang доступен из защищённого сегмента.
- PCR-политика зафиксирована и документирована.
- Initramfs пересобран на всех узлах.
- Health-check разблокировки настроен.
- Runbook для замены оборудования.
Заключение
Комбинация LUKS2+TPM2+Clevis/Tang обеспечивает баланс между безопасностью и удобством: автоматическая разблокировка в штатном режиме, откат на пароль при аномалиях, устойчивость к замене оборудования при правильной процедуре.