Что делает подпись драйверов/модулей и каково ее значение?

Что делает подпись драйверов/модулей и каково ее значение?

Недавно установив драйвер, требующий ручной подписи модуля, я не мог понять, что именно делает этот модуль и зачем это нужно.

Есть и другие вопросы о процессе здесь, однако они более технические. Каково простое объяснение того, что делает подписывание модулей и почему это необходимо, а также какие есть альтернативы (судя по всему, dkms может автоматически подписывать модули)?

решение1

Ядро можно настроить так, чтобы оно либо просто предупреждало вас об использовании неподписанных или неправильно подписанных модулей (с помощью сообщения в журнале + путем установки флага неисправностей в ядре), либо полностью отклоняло любые модули ядра, не имеющие подписи, которую ядро ​​может проверить.

При использовании процесса загрузки в стиле BIOS или при использовании UEFI с отключенной функцией Secure Boot это по сути просто дополнительная дополнительная процедура безопасности. Это несколько усложнит злоумышленникам добавление вредоносных модулей ядра (например, руткитов на основе ядра, чтобы скрыть инструменты и действия злоумышленника) в систему.

Но при использовании UEFI с включенной Secure Boot это является частью требований Secure Boot. «Дух» Secure Boot заключается в том, чтобы запретить загрузку недоверенного кода в пространство ядра. Прошивка UEFI проверяет наличие действительной подписи (или хэша SHA256 из белого списка) на загрузчике; загрузчик должен проверить то же самое на ядре ОС; и ядро ​​должно распространить это требование на весь код, который будет выполняться в пространстве ядра.

Конечно, на практике ядро ​​ОС может легко отказаться от этого требования. Но организации, которые разработали Secure Boot, решили, что этот отказ должен, по крайней мере, потребовать определенных действий со стороны системного администратора: по умолчанию должно быть принудительное применение требования подписи.

(Кстати, это также одна из причин, по которой современная Windows требует, чтобы все установленные драйверы были подписаны по умолчанию. Если вы хотите установить неподписанные драйверы, вам нужно явно изменить настройку, требующую доступа администратора.)

Инструмент, который можно было бы загрузить в системе Secure Boot и который позволял бы выполнять неподписанный код пространства ядра «из коробки», назывался быУстройство обхода Secure Bootи может быть классифицировано как вредоносное ПО.

Microsoft — самый известный подписывающий орган Secure Boot, и он подписывает только те версии загрузчика shimx64.efi-оболочки, которые обеспечивают соблюдение требования подписи.

Прошивка UEFI с поддержкой Secure Boot будет иметь встроенную возможность проверки подписей на двоичных файлах, которые используют двоичный формат Microsoft PE+, который используют файлы *.efi. Но мир Linux обычно не использует этот двоичный формат: вместо него используется двоичный формат ELF.

И модули ядра Linux, и модули загрузчика GNU GRUB основаны на формате ELF. Это требует от загрузчика и ядра предоставления собственных алгоритмов проверки подписей для двоичных файлов ELF, но, по-видимому, UEFI Forum (отраслевой консорциум, управляющий спецификациями UEFI и Secure Boot) решил, что это допустимо, пока сохраняется требование по умолчанию для действительных подписей.

Конечно, это не совсем работает так, как ожидалось, если вы используете DKMS для автоматической сборки и подписи модулей ядра: это означает, что будет сертификат с его закрытым ключом, который может быть использован для автоматического создания действительной подписи, поэтому злоумышленник также может использовать его для подписи любых вредоносных модулей ядра. Это не менее безопасно, чем система без Secure Boot, но и не намного более безопасно.

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

Связанный контент