Вроде, текущие механизмы secureboot в связки с поддерживаемыми бутлоадерами - проверяют подпись только у ведра. Потому-что предполагается что Initrd может быть пересобран на машине пользователя а ключей для подписи у него нет.
Ну, это-то понятно. Но применять такое слишком сложно: современный initramfs давно уже делает намного больше чем просто загружает в ведро дополнительные модули (тот-же популярный dracut - по-сути уже мини-ОС является). В современных дистрах применять такое ведро будет весьма затруднительно. Хотя-бы просто потому что будет весьма сложно организовать элементарный ввод пароля для разблокировки корневого раздела.
Если такой тип атаки рассматривается пользователем как вероятный, то уж извините.
Тогда вообще нужно использовать кастомный ro-образ для загрузки с аппаратно не изменяемого устройства (например, компакт-диск) и там уже монтировать зашифрованное устройство, справить всё это виртуализацией по вкусу. Например, примерно так реализован TAILS – уже на пользовательском уровне. Whonix юзает виртуализацию, но там упор на защиту от удаленного проникновения. Если комбинировать эти подходы вполне можно обычному пользователю защититься от сабжевой атаки.
Присобачиваем initramfs к самому ядру в одно efi-приложение. (попалась тут https://habr.com/ru/post/308032/ – для общего понимания тем кто далек от всего этого полезно будет как отправная точка погружения в тему).
а может ли помочь новая фишка в Debian 10 - APPARMOR ?
ведь можно запретить запуск «dmsetup table --showkeys», да и вообще запретить запуск всего чего угодно не разрешённого явно.
?
Для фул диск шифрования очень хорошо подходить Гента, со своим встроеным механизмом сборки ядра.
Просто нужно сделать свой init скрипт и собрать нужные утилиты и сложить в соответствующюю директорию. Ядро собирается одним файлом с initramfs. Если у тебя uefi, то ложишь его на флешку(ef00 раздел) с именем bootx64.efi и все...
Если загрузчик grub, то он может проверить ВСЕ что грузит, включая инитрд с помощью публичного ключа RSA.
А как вы планируете подписывать initrd который создаётся динамически, приватным ключём от сборщика дистрибутива который собрал и подписал ядро ? У вас-же нет этого ключа. В этом-то и смысл безопасной загрузки.
Или RSA ключ ваш собтвенный ?
Можете пример конфига показать, в котором граб проверяет подписи для всего, а не только для ядра ? А то я что-то с ходу не нашел.
Я пошел по такому пути LiveUSB с зашифрованной корневой фс с разблокированием по ssh (правда без сертификатов, тк изначально конечные хосты неизвесты).
У тебя все кроется как подписать твой уникальный core.img с твоим публичным ключом и модулями криптографии. Кажись это возможно только в coreboot. На счёт tboot, secureboot не знаю как ими уникальный, личный core.img подписать.