Как я могу защитить initrd и grub.cfg, используя безопасную загрузку?

8

Я использую стандартный подход Ubuntu с shim и grub2, в сочетании с моим собственным ключом платформы (самоподписывающий shim с sbsign) и зашифрованным корневым разделом, для безопасной загрузки моей установки Ubuntu. Но это проверяет только grubx64.efi и ядро, но не защищает файлы initrd.img и grub.cfg в незашифрованном загрузочном разделе от вредоносных изменений.

Итак, как я могу проверить конфигурацию initrd и grub, возможно, используя хэш sha256, прежде чем использовать их для загрузки? Эта проверка может происходить в shim, grub или в другом инструменте, который я мог бы использовать в дополнение или вместо shim и / или grub.

Цель этого вопроса - предотвратить запуск ядра с измененной средой (командной строкой ядра и initrd), чтобы предотвратить утечку пароля шифрования корневого раздела в любое место.

Не нашел каких-либо методов проверки конфигурации загрузки, несмотря на несколько дней чтения веб-учебников / блогов по безопасной загрузке, включая Ubuntu и PreLoader.efi Linux Foundation, каждый из которых объясняет, как работает проверка исполняемых файлов, включая модули ядра, но ни один из в котором упоминаются grub.cfg и (сценарии оболочки и файлы конфигурации внутри) initrd, так что, похоже, я первый, кто когда-либо обратился за проверкой недвоичных файлов в процессе загрузки. Лучшие источники, которые я когда-либо нашел, это источник Род Смит .

Чего я еще не пытался, так это изменять исходный код shim или grub, создавая форк или непосредственно внося в них свой вклад. Будет ли это единственный путь?

Юргена
источник
Ваша перекрестная публикация была со вчерашнего дня, немного больше терпения было бы уместно, а перекрестная публикация определенно не подходит (кстати, если вы, однако, выше нисходящей, вы можете видеть причины отрицательных голосов: никаких исследований / неясно / бесполезно)
Anthon
@ Антон, где, по-твоему, уместно задать этот вопрос? Я не знаю, поэтому я подумал, что здесь лучше, чем на SuperUser. И как вы думаете, мне следует удалить предыдущий и этот вопрос, прежде чем спрашивать в соответствующем месте, чтобы предотвратить повторное голосование из-за перекрестной публикации?
Юрген
Перекрестная публикация никогда не бывает хорошей, как вы знаете, если вы прочитаете справку. На этом сайте это причина для закрытия (как вы заметили), необходимо немного терпения, так как это сайт вопросов и ответов, а не какой-то личный или мгновенный сайт помощи. Несколько дней ожидания, особенно в выходные дни, будут уместны. И еще немного описания того, что вы пробовали, а что не работало. Если вы хотите, чтобы это снова было открыто здесь, удалите Q в суперпользователе, укажите это здесь (отредактировав ваше сообщение), и тогда оно будет находиться в очереди, которая будет открыта снова.
Anthon
@Антон, спасибо за ваши комментарии. Удалил вопрос о SuperUser и объяснил вопрос здесь более подробно. Могу ли я сделать лучше?
Юрген
Выглядит лучше, я голосую, чтобы открыть, но имейте в виду, что это занимает больше, чем просто мой голос.
Anthon

Ответы:

3

Я нашел отличную статью, которая описывает такую ​​настройку: https://ruderich.org/simon/notes/secure-boot-with-grub-and-signed-linux-and-initrd

tl; dr: подпишите grub config и initrd с помощью GPG, сгенерируйте двоичный файл grub, который будет выполнять проверки, и подпишите его с помощью ключей безопасной загрузки.

Пакет для Ubuntu, который реализует аналогичную идею: https://github.com/JohnstonJ/ubuntu-secure-boot

Юрий
источник
0

Grub поддерживает проверку подписи с использованием отдельных подписей. Я подозреваю, что это твой ответ.

Джастин Кинг-Лакруа
источник
Это не дает ответа на вопрос. Чтобы критиковать или запросить разъяснения у автора, оставьте комментарий под своим постом. - Из обзора
Archemar
На самом деле, это так. Первоначальный вопрос был: «Итак, как я могу проверить конфигурацию initrd и grub, возможно, используя хеш sha256, перед тем, как использовать их для загрузки? или вместо прокладки и / или личинки. " Ответ таков: «Похоже, что Grub поддерживает проверку подписи с использованием отдельных подписей». (Неявно: «... чтобы вы могли подписать initrd, сгенерировать отдельную подпись и попросить Grub проверить ее».)
Джастин Кинг-Лакруа,
@Justin King-Lacroix, спасибо за ваш ответ, но я не могу найти отдельные подписи в gnu.org/software/grub/manual/grub.html - это особенность неофициальной вилки grub? Погуглив "отдельные инструкции grub manual", ничего конкретного не возвращалось. Не могли бы вы указать мне на эту функцию, пожалуйста?
Юрген
К сожалению, у меня нет справочного руководства; Я нашел это, просматривая источник. Ищите операцию «проверить».
Джастин Кинг-Лакруа