Установка Linux на шифрованный диск с авторазблокировкой

Linux взлом безопасность

Сегодня мы будем уста­новливать Linux на шиф­рован­ный кор­невой раз­дел, нас­тро­им авто­раз­бло­киров­ку при старте с помощью модуля TPM и новой функции systemd-cryptsetup. И будем бекапить ключ вос­ста­нов­ления в Active Directory. В моем случае будет использоваться Arch Linux, но вы можете проделать тоже самое в любом дис­три­бути­ве.

Еще по теме: Создание VPN-туннеля в Linux и Windows

Установка Linux на шифрованный диск

Хо­телось бы не вво­дить пароль при заг­рузке каж­дый раз. Для это­го нуж­но нас­тро­ить авто­раз­бло­киров­ку LUKS с помощью чипа TPM.

Убе­дим­ся, что мы счас­тли­вые обла­дате­ли TPM. Необ­ходимая вер­сия TPM — 2.0.

Ав­тораз­бло­киров­ку сде­лаем с помощью отно­ситель­но новой фичи systemd-cryptsetup.

Systemd-cryptsetup добав­лена в systemd начиная с вер­сии 248.

Для начала необ­ходимо про­верить нашу вер­сию systemd:

Все отлично. Для работы с TPM нуж­но допол­нитель­но уста­новить пакет tpm2-tss:

Да­лее добавим ключ TPM в слот LUKS с помощью тул­зы systemd-cryptenroll:

Не забыва­ем про­верить:

В коман­де выше мы ука­зали параметр --tpm2-pcrs=0,4. Что такое PCR? Вот оп­ределе­ние из Википе­дии:

PCR — это внут­ренние регис­тры памяти TPM, в которых в зашиф­рован­ном виде содер­жится вся информа­ция о целос­тнос­ти мет­рик сис­темы, начиная с заг­рузки BIOS до завер­шения работы сис­темы. Информа­ция, содер­жаща­яся в PCR, фор­миру­ет корень доверия для изме­рений (RTM). Могут хра­нить­ся как в энер­гонеза­виси­мой, так и в энер­гозави­симой памяти. Эти регис­тры сбра­сыва­ются при стар­те и при перезаг­рузке сис­темы. Спе­цифи­кация пред­писыва­ет минималь­ное количес­тво регис­тров (16), каж­дый регистр содер­жит 160 бит информа­ции. Регис­тры 0–7 зарезер­вирова­ны для нужд TPM. Регис­тры 8–15 дос­тупны для исполь­зования опе­раци­онной сис­темой и при­ложе­ниями. Изме­нения зна­чений PCR необ­ратимы, и их зна­чения нель­зя записать нап­рямую, их мож­но толь­ко рас­ширить новыми зна­чени­ями, которые зависят от пре­дыду­щих. Все изме­нения зна­чений PCR записы­вают­ся в лог изме­нений, который хра­нит­ся в энер­гозави­симой памяти.

PCR Use
PCR0 Core System Firmware executable code (aka Firmware)
PCR1 Core System Firmware data (aka UEFI settings)
PCR2 Extended or pluggable executable code
PCR3 Extended or pluggable firmware data
PCR4 Boot Manager
PCR5 GPT / Partition Table
PCR6 Resume from S4 and S5 Power State Events
PCR7 Secure Boot State
PCR8 Hash of the booted kernel
PCR 9 to 10 Reserved for Future Use
PCR11 BitLocker Access Control
PCR12 Data events and highly volatile events
PCR13 Boot Module Details
PCR14 Boot Authorities
PCR 15 to 23 Reserved for Future Use

Для вклю­чения systemd-cryptsetup необ­ходимо добавить в  /etc/mkinicpio.conf хуки systemd и sd-encrypt.

На­конец, изме­ним стро­ку заг­рузки, добавив парамет­ры rd.luks.name и  rd.luks.name.

Пе­резаг­ружа­емся и про­веря­ем, что все работа­ет как надо.

Для тех, кому systemd-cryptsetup по каким‑то при­чинам не под­ходит (нап­ример, вер­сия systemd ста­рая или вооб­ще нет systemd), могу пореко­мен­довать фрей­мворк Clevis. С его помощью мож­но реали­зовать сле­дующие сце­нарии авто­раз­бло­киров­ки LUKS:

  • tpm2 — раз­бло­киров­ка с TPM;
  • tang — раз­бло­киров­ка с сетево­го сер­вера.

Вот как исполь­зовать Сlevis с TPM:

Про­веря­ем:

Ва­риант с сер­вером tang нас­тра­ивает­ся не слож­нее (разуме­ется, заранее раз­ворачи­ваем tang и обес­печива­ем сетевую дос­тупность):

Про­веря­ем:

В зак­лючение темы авто­раз­бло­киров­ки сто­ит упо­мянуть некото­рые огра­ниче­ния фрей­мвор­ка Clevis:

  • Clevis работа­ет толь­ко с TPM 2.0; TPM 1.2 не под­держи­вает­ся.
  • В Tang не реали­зован механизм сме­ны клю­чей.
  • Для Tang необ­ходима дос­тупность сети на эта­пе заг­рузки, поэто­му, нап­ример, для Wi-Fi-под­клю­чения тре­бует­ся допол­нитель­ная нас­трой­ка адап­тера в initrd.

Создание ключей восстановления

Бэ­капы клю­чей в таком деле, как шиф­рование, дол­жны быть, об этом зна­ет каж­дый.

Есть два вари­анта соз­дания клю­чей вос­ста­нов­ления:

  • дамп заголов­ка и мас­тер‑клю­ча;
  • за­пись пароля вос­ста­нов­ления в Active Directory.

Создаем копию мастер-ключа

Сде­лать резер­вную копию заголов­ка и мас­тер‑клю­ча мож­но с помощью хорошо извес­тной нам ути­литы cryptsetup.

С помощью соз­данной копии мож­но будет получить дос­туп к раз­делу, не зная пароль, поэто­му нас забот­ливо пре­дуп­режда­ют, что хра­нить ее нуж­но в сек­рете!

При необ­ходимос­ти мож­но вос­ста­новить заголо­вок и уста­новить новый пароль.

Добавление пароля восстановления в Active Directory

Дру­гой инте­рес­ный спо­соб — это хра­нение пароля в AD.

Для начала нуж­но вклю­чить нашу Arch Linux в домен. Делать это буду с помощью System Security Services Daemon (SSSD) и realmd.

Ус­танав­лива­ем sssd обыч­ным спо­собом:

А realmd ста­вим из AUR.

Убе­дим­ся, что домен дос­тупен:

При­соеди­няем­ся к домену, для это­го понадо­бит­ся учет­ная запись с пра­вами вво­да в домен (для прос­тоты — administrator).

Про­веря­ем, что все прош­ло успешно и мы получи­ли билеты Kerberos:

Па­роль вос­ста­нов­ления будем хра­нить в учет­ной записи компь­юте­ра: это дочер­ний объ­ект клас­са msFVE-RecoveryInformation. Так дела­ет вин­довый BitLocker, ана­логич­но пос­тупим и мы.

За­писы­вать пароль в AD буду с помощью скрип­та на Python:

За­пус­каем ути­литу, ука­зав необ­ходимые парамет­ры и текущий ключ (пароль):

Про­веря­ем в AD, что пароль вос­ста­нов­ления успешно записал­ся.

linux шифрование системного диска

Ну и напос­ледок про­веря­ем сам пароль.

Заключение

Итак, мы уста­нови­ли Arch Linux на шиф­рован­ный кор­невой раз­дел, нас­тро­или авто­раз­бло­киров­ку при стар­те и позабо­тились о резер­вирова­нии клю­чей. Наде­юсь, для вас это тоже было увле­катель­ным прик­лючени­ем!

ПОЛЕЗНЫЕ ССЫЛКИ:

Дима (Kozhuh)

Эксперт в кибербезопасности. Работал в ведущих компаниях занимающихся аналитикой компьютерных угроз. Анонсы новых статей в Телеграме.

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