Как стать автором
Обновить

Как сделать безопасную загрузку с полностью зашифрованным диском на Linux без загрузчика на UEFI

Уровень сложностиСложный
Время на прочтение14 мин
Количество просмотров13K
Всего голосов 45: ↑45 и ↓0+57
Комментарии22

Комментарии 22

@le9i0nx, а будет инструкция, чтобы записать загрузочную флешку с windows 10/11 через любой дистр Линукса, например Debian, не прокидывая wine и не поднимая виндовую виртуалку?))))
Знаю, что в компании сталкивались с таким кейсом))

А, ну и чтобы система точно установилась))

Маловероятно это не профиль нашей компании.

Попробуйте ventoy. Судя по всему, не совсем то, о чем вы спрашиваете, но на выходе таки получается загрузочная флешка с любой виндой и не только.

Если в прошивке машины, на которую будете ставить Windows, есть драйвер NTFS (на FAT32 install.wim может не влезть, если его размер превышаает ограничения FAT32), то можно просто распаковать содержимое образа на флешку - EFI-загрузка работает с любой ФС, лишь бы прошивка могла прочитать файловую систему.

Есть хорошая утилита windows2usb (https://github.com/ValdikSS/windows2usb), есть в виде готового appimage.

Windows2usb is a bash script which writes Microsoft Windows
7/8/8.1/10/11 installation DVD images to USB Flash Drive or external HDD
on Linux. It was designed with compatibility in mind, and should work
in all cases, contrary to other popular Linux tools.

Если нужна загрузка только с EFI систем, то можно просто распаковать в раздел с fat32.

Если wim файл больше 4 GiB, можно разбить на несколько файлов с помощью dism или open source утилиты wimlib-imagex. Работает быстро, без необходимости пережимать.

Эх, была бы возможность чекнуть галочку при установке, чтобы сделать всё хорошо.

Не помню в каком дистре видел зашифрованный boot автоматом, без uefi правда.

В принципе это возможно в grub2 с какой то версии он стал поддерживать шифрованный раздел /boot/ но в нём есть ограничение на поддерживаемый формат LUKS и самое противное это необходимость вводить пароль дважды. И нет возможности удалённо ввести пароль по ssh

На самом деле там есть обход через... Раскрытие основного раздела через сохраненный ключ. Т.е. бут раскрывается через ввод пароля (на первой версии luks, да), а дальше используется сохраненный на зашифрованном разделе ключ.

Разумеется, минусы есть: лежащий в относительном доступе ключ (после загрузки), первая версия luks. Зато вектор атаки без основной дыры.

Безопасней держать загрузчик на флешке

В принципе вы правы. Такое добавление ещё сильнее усложнит атаку. Но такое сработает насколько мне известно только при физическом доступе к загружаемому устройству.

Ручной вариант установки
Нужно загрузиться с установщика и выбрать экспертный режим.

debian-12.6.0-amd64-netinst.iso 2024-06-29 13:56 631M
Рекомедую почитать Unified kernel image, Unified kernel image specification
Рекомедую включить:

network-console: Continue installation remotely using SSH

Пакет: systemd-ukify в Debian trixie и sid dep: systemd (>= 256.4-3)
В bookworm-backports systemd (254.16-1~bpo12+1)
Лучший вариант для меня:
Загрузка с live-cd. Для примера debian-live-12.6.0-amd64-lxde.iso
Разметка диска. debootstrap, arch-install-scripts или systemd-nspawn

А зачем этот весь геморрой, если в арче при установке все можно сделать не особо напрягаясь? А учитывая что в заключительном комментарии предлагают использовать арчевые скрипты, то смысл статьи теряется чуть больше чем полностью

выбор дистрибутива это совсем другой разговор.
А вот что вы подразумеваете под "арчевые скрипты" непонятно. Не могли бы вы раскрыть эту часть более подробно?

А как с этим дела у мобильных платформ?

Там такой подход почти с самого начала существует. Ключи прошиваются в проц, фиг достанешь, первичный загрузчик сидит тоже в mask rom - неизменяемый. Другое дело, что конфиг проца сложный, и многие производители тех же телефонов в нем косячат, открывая возможности для взлома...

Недавно настаивал свои ключи и secure boot с подписанным systemd-boot и ядрами в Gentoo. Как вы храните ключ которым подписываете новые ядра?

Обидно что secure boot на AMD сломали, см. AMD sinkclose.

ключи хранятся локально на зашифрованном root. Это не 100% безопасно т.к. ключи не защищены паролем или шифрованием.

Как-то запланировал переезд на новую машину (Lenovo 320-15ISK) и задался целью сделать красиво. Требования были: UEFI + Security Boot + systemd-boot + Debian 12 "Bookworm" + дисковое шифрование + автоматическая расшифровка диска чипом TPM2.0 при загрузке. На выходе хотелось красивую и плавную загрузку ноутбука, как у MS Windows или MacOS. Пришлось изрядно помучаться, но своего добился. Если кто-то захочет повторить похожий путь, то внесу свои 5 копеек:

  • У sbctl есть не официальные APT репозитории, работающие под Debian.

  • Чтобы можно было задействовать TPM2.0 для расшифровки диска, есть два пути:

    1. Придется перевести систему с initramfs на dracut, потому что в Ubuntu и Debian почему-то отключена поддержка TMP. Из плюсов: после настройки все просто работает. Из минусов: Debian больше ориентирован на initramfs, некоторые пакеты и приложения могут кидать предупреждения.

    2. Использовать Clevis. Из плюсов: интеграция с initramfs. Из минусов: система дольше грузится, есть ощутимый лаг, пока загружается Clevis; Страдает визуальная составляющая, Clevis вначале кидает форму для ввода пароля, потом задействует TPM2.0.

В dracut потребуется прописать:

# /etc/dracut.conf.d/tpm2-tss.conf
install_items+=" /usr/lib/x86_64-linux-gnu/cryptsetup/libcryptsetup-token-systemd-tpm2.so "
install_optional_items+=" /usr/lib/x86_64-linux-gnu/libtss2* "
add_dracutmodules+=" tpm2-tss "

А так же поставить дополнительные пакеты. Не уверен, что все они нужны, у меня стоят:

  • libtpm2-pkcs11-1

  • libtpm2-pkcs11-tools

  • libtpms0:amd64

  • libtss2-tcti-swtpm0:amd64

  • tpm-udev

  • tpm2-openssl:amd64

  • tpm2-tools

TPM это срез угла в безопасности. т.к. позволяет при физическом доступе как минимум загрузить os.
И обмен с TPM не зашифрован и его можно дампать. Это вроде хотят как-то прикрыть шифрованием сообщений в SPI.

Безопасность не может быть удобной по определению.

Для ZFS это не сработает, конечно?

Если адаптировать то думаю сработает. только модуль ZFS нужно запихивать в ядро собирая либо в initramfs как динамический модуль в "правильную папку".

Зарегистрируйтесь на Хабре, чтобы оставить комментарий