Шифрование системы(включая /boot)

Автор dr_faust, 19 июля 2024, 10:07:03

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

dr_faust

upd. От 7.12.24

1. Используется формат luks2(luks1 тоже поддерживается). Это значит, что у раздела есть заголовок, в котором содержатся ключи и параметры шифрования. Отсюда три вывода.

Во-первых, отпереться, что устройство/раздел не зашифрованы, вы не сможете даже теоретически. Хотите хотя бы теоретически отпереться — используйте режим plain для всего объема физического устройства. Этот тип не позволяет зашифровать загрузчик, он должен быть на отдельном носителе и подключаться перед подачей электропитания на  микросхемы машины. Подробнее гуглите по «plain» и «crypto kernel hook». Там различий с luks немного, только в загрузчике по-другому - и ручками — прописать параметры загрузки системы.

В загрузочном разделе также содержатся параметры дешифровки зашифрованного устройства, так что изучение умным и хоть немного прошаренным в теме человеком содержимого ваших флешек и sd-карт сразу наведет его на правильные мысли. Впрочем и наличие в машине не размеченного носителя само по себе наведет на то же. Дальше дело техники.

Во-вторых, стирание заголовка делает невозможным расшифровку от слова совсем. Так так теряются как ключи, так и параметры шифрования(а их разнообразие вообще-то немалое).  Вроде бы можно настроить так, чтобы при неправильном пароле заголовок стирался, как это сделать хз.

В третьих, заголовки таки можно бэкапировать.

cryptsetup luksHeaderBackup —header-backup-file=<файл, в который сохранить заголовок> <зашифрованный раздел>

Нужно вам это или нет — решайте сами.

2. Прочитав раздел 1 у вас, конечно, возникнет вопрос «Зачем шифровать, если Правильные Люди, котором Очень Надо, в любом случае получат доступ?»(а они получат, не сомневайтесь).

Мы живем интересное время, когда широкие народные массы стремительно беднеют(на всем шарике беднеют). Ноутбук как физический предмет имеет весьма немалую ценность. Но это ж только для дэбилов. Для умного, мало-мальски технически подкованного ценность имеет и информация, которая на нем содержится. Люди очень легкомысленны и небрежны. Они не думают что хранится у них в системе и как это может быть использовано против них. На оставленных ими логинах-паролях, переписки - в том числе финансового характера и с любовницами-, метаданных о недавно обрабатываемых файлам можно сделать неплохой гешефт.

Вводить слабых во искушение есть грех, за который последует наказание уже в  этой жизни в виде бОльших — нежели утрата полезной в хозяйстве и чего-то стоящей вещи -потерь. Риски нужно фиксировать и фиксировать вовремя.

«Так зачем ж и /boot?» - умные люди бывают разной степени технической прошаренности, имеют разный режим доступа к вам и вашим вещам. Умные могут и образ ядра, который хранится в /boot, немного модифицировать. Чуть-чуть. Только чтобы получить доступ.

3. grub 2.12-1(и более новый) поддерживает luks2 ограничено. Поддерживает только хеширование PBKDF2, тогда как дебиантовский установщик по-умолчанию использует Argon2.

Поэтому либо ставить дистрибутив из консоли, создав контейнер командой
cryptsetup luksFormat —-type luks2 -S 0 --pbkdf pbkdf2 <раздел>
Либо после захода в свежеустановленый дистрибутив добавить новый ключ
cryptsetup luksAddKey —-type luks2 -S 1 --pbkdf pbkdf2 <раздел>где -S <цифра> - номер слота(всего 8 от 0 до 7)
Старый ключ можно удалить командой

cryptsetup luksKillSlot  <раздел> 0где цифра - номер слота

4. В случае выбора второго варианта.
Создаем lvm-том в зашифрованном разделе, на котором стоит система, форматируем его, копируем в него содержимое старого /boot раздела, снимаем со старого флаг загрузочного, uuid нового прописываем в /etc/fstab, при необходимости меняя также и тип файловой системы(если у нового и старого они не совпадают).

Отредактировать
/etc/default/grub
GRUB_ENABLE_CRYTPODISK=y
GRUB_PRELOAD_MODULES="at_keyboard"

Вторая строка вроде бы нужна для того, чтобы у загрузчика работала смена регистра клавиатуры.

Никакие модули прописывать не надо. GRUB в  debian-based  дистрибутивах нынче умным стал, сам необходимые определяет.

Установка загрузчика
*bios-mbr*
grub-install --recheck /dev/sda
*uefi-gpt*
grub-install --boot-directory=/boot --efi-directory=/boot/efi —target=<версия прошивки> --bootloader-id=<название, например debian12>--removable
где название версии прошивки для x86 — i386-efi, x64 — x86_64-efi.

update-grub2
В принципе grub нынче умный пошел и при установке в uefi-gpt чем определить что и куда, поэтому можно обойтись — так в интернетах пишут - и просто
grub-install
Но пусть будет развернуто, мало ли что.

5. Те, кто устанавливает из под deboostrap лучше меня знают что и как. Сложная штука это. Даже с использованием arch-chroot.

Отмечу лишь несколько моментов прямо касающихся темы описываемой магии.

А) Обязательно проверьте установлены ли
cryptsetup-initramfs cryptsetup lvm2
Установка пакетов по-умолчанию в deboostrap работает как-то странно и многое необходимое для работы системы просто не устанавливает(или я не умею утилитой пользоваться).
Пакет lvm2 понадобится только в случае, если вы хотите внутри шифрованного раздела создать структуру lvm-томов.

Б) В /etc/crypttab
добавьте строку следующего вида (подробнее о поддерживаемых опциях см. man crypttab, там много интересного, может натокнет на какие-нибудь умные мысли)
<название расшифрованного раздела, которое будет отображаться в /dev/mapper/> <uuid шифрованного раздела> none lusk

В) В
/etc/cryptsetup-initramfs/conf-hook

CRYPTSETYP=yes

Далее создать образ ядра.

6. По загрузке свежеустановленой(5) или модифицированной(4) системы вы обнаружите, что она дважды просит ввести пароль. Первый — для загрузчика, второй — ядру, так как загрузчик не передает запускаемому им ядру ключ к шифроразделу.

Это можно поправить добавлением в иной слот ключа в виде файла.

Смотрим какие слоты заняты, а какие нет

cryptsetup luksDump <шифрораздел>

Создаем ключ-файл
mkdir /etc/key
cd  /etc/key
dd if=dev/random of= bs=512 court=1
На файл и каталог права: владелец root, права 700.
Также по идее можно хранить ключ в неком отдельном месте, подключать к системе только при необходимости создания/обновления ядра.

Допустим у нас свободен слот 1
cryptsetup luksAddKey -S 1 <шифрораздел> /etc/key/key.bin

В
/etc/cryptsetup-initramfs/conf-hook
KEYFILE_PATTERN=/etc/key/key.bin

Уже имеющуюся строку в /etc/crypttab приводим к следующему виду

<название расшифрованного раздела, которое будет отображаться в /dev/mapper/> <uuid шифрованного раздела> /etc/key/key.bin lusk,key-slot=1

В
etc/initramfs-tools/initramfs.conf
UMASK=0077
для установки ограниченных прав доступа: просмотр, запись, выполнение только суперюзер.
Использование маски контринтуитивно, как минимум для меня.. Проще было бы указывать желаемые права доступа в цифровом виде. Однако такая функция вроде бы не поддерживается.
update-initramfs -k all
Devuan 4. Debian 12. LXDE.

Лия


dr_faust

Цитата: Лия от 07 декабря 2024, 23:33:11
Цитата: dr_faust от 19 июля 2024, 10:07:03at_reyboard
Может at_keyboard? :)

Может. Иструкцию писал исключительно по памяти. А апечатки у меня и на русском языке обычное явление.
Devuan 4. Debian 12. LXDE.

Листик

#3
/boot никогда не шифровал (и пароля на него не ставил). Но кроме самой системы защищаю и отдельные файлы. Не знаю, насколько эффективно.