безопасная загрузка: проверка initramfs

согласно https://wiki.ubuntu.com/UEFI/SecureBoot Образы Initrd не проверены . Эта информация актуальна? это сделает всю безопасную загрузку совершенно бесполезной, поскольку злоумышленник может очень легко заменить initramfs на тот, который записывает пароль LUKS и отправляет его ему ... Это, в свою очередь, сделало бы все проблемы с подписью модулей и отключением гибернации при безопасной загрузке совершенно нелепыми. на самом деле безопасно?

OTOH, если это утверждение устарело, как работает проверка? где находится пара ключей, которая используется для подписания файлов initrd, когда они создаются во время установки нового ядра? какой компонент позже проверяет подпись? (shim, MOK, GRUB, само ядро?) ... или, может быть, вместо этого используются PCR и TPM?
как работает проверка? где находится пара ключей, которая используется для подписания файлов initrd, когда они создаются во время установки нового ядра? какой компонент позже проверяет подпись? (shim, MOK, GRUB, само ядро?) ... или, может быть, вместо этого используются PCR и TPM?
как работает проверка? где находится пара ключей, которая используется для подписания файлов initrd, когда они создаются во время установки нового ядра? какой компонент позже проверяет подпись? (shim, MOK, GRUB, само ядро?) ... или, может быть, вместо этого используются PCR и TPM?
... а как насчет командной строки ядра? этот должен быть подписан / проверен также, чтобы сделать загрузку безопасной ...

0
задан 7 June 2020 в 11:55

2 ответа

Вам даже не нужно подписывать / проверять initramfs , потому что вам не нужно держать его доступным (незашифрованным на локальном диске).

Ubuntu 20.04 отлично справляется с макетом установки, в котором файл initrd содержится внутри зашифрованного контейнера (в настоящее время работает для luks1 на AMD64 и ARM64, luks2 и другие платформы в будущих версиях). Кроме перехода на самую раннюю версию с идентичным ядром, никто, кроме вас, не мог изменить initrd, запечатанный вашим паролем.

Часть, которая действительно отсутствует в текущей автоматизации, - это генерация подписанного двоичного файла grub, который проверяет свою собственную конфигурацию. Он также работает из коробки - grub может проверять подписи в стиле gpg - но скрипты установки ядра, поставляемые Canonical , не устанавливают / обновляют это обычным полностью автоматическим способом.

Если вы хотите настроить полностью проверенную загрузочную цепочку в текущих выпусках Ubuntu, вы можете попробовать разместить свой собственный сценарий (который gpg --sign в вашей конфигурации, а затем интегрирует его в двоичный файл grub. используя grub-mkstandalone , затем sbsign s этот двоичный файл перед помещением его в / boot / efi ) в /etc/kernel/postinst.d/ для автоматического вызова при установке / удалении ядра (версии).

Обратите внимание, что практически нет потребительских ПК для регистрации пользовательских ключей для безопасной загрузки ( MOK ), поэтому вы, вероятно, столкнетесь с некоторыми ошибками прошивки. Вы также не найдете слишком много отчетов об ошибках по этой теме просто потому, что мало кто хочет / делает такую ​​сложную и подверженную ошибкам вещь.

И это только сторона Ubuntu. Вы, вероятно, не выиграете ничего с точки зрения безопасности (но вы можете внести свой вклад ).

0
ответ дан 19 June 2020 в 22:10

Возможно, вам придется сначала определить модель угроз: от чего вы пытаетесь защититься?

Безопасная загрузка не должна позволять даже пользователю root нарушать целостность кода, выполняемого с привилегиями уровня ядра. Это наиболее очевидно при загрузке: даже root не должен иметь возможность установить ядро или загрузчик, который не заслуживает доверия, и мы используем подписи для определения надежности. Тем не менее, это также распространяется на работающее ядро: ядра Ubuntu будут обнаруживать безопасную загрузку и входить в режим целостности блокировки на ранней стадии загрузки. Режим целостности пытается поддерживать эту границу безопасности между корнем и ядром во время выполнения. (Это останавливает вас от выполнения чего-то вроде kexec из доверенного ядра в ненадежное.)

То, что никогда не было частью миссии безопасной загрузки, — это защита от замены root двоичных файлов, не являющихся ядрами. Это достаточно сложная проблема, и языки сценариев делают ее еще сложнее. Это еще более чревато в мире FOSS, потому что люди очень злятся на все, что, по их мнению, ограничивает свободу программного обеспечения, даже если его можно отключить. (Посмотрите, например, что Apple делает с подписью практически всего!)

Безусловно, существуют способы ограничить корневую установку вредоносных двоичных файлов. Вы можете использовать поддержку отсоединенной подписи grub, чтобы потребовать, чтобы initrd был подписан. Но тогда все, даже grub.cfg, должно быть подписано, и это будет очень раздражать. Вы можете использовать что-то вроде dm-verity. IMA может помочь вам (но не так много для скриптов). Но вы очень быстро перестаете иметь систему общего назначения!

0
ответ дан 14 August 2020 в 15:58

Другие вопросы по тегам:

Похожие вопросы: