Цифровая подпись ядерного кода в Vista
Jan 5, 2007 · CommentsБезопасностьПрограммирование
64-х битные версии Vista требуют, чтобы весь код, выполняемый в режиме ядра, был подписан в обязательном порядке. Система просто отказывается загружать неподписанные драйвера. Для 32-х битных версий требования не такие жесткие, тем не менее, Microsoft рекомендует производителям подписывать и 32-х битные версии драйверов. Очевидно, что со временем это требование станет обязательным и для 32-х битных систем. Кроме того, наличие неподписанных драйверов в системе может влиять на возможность проигрывания HD контента (HD-DVD, Blue Ray & Co.).
Не смотря на все плюсы (с точки зрения безопасности) обязательного подписывания ядерного кода, есть и довольно большой минус – стоимость сертификата и сложность его получения. Причем, если сложность получения сертификата на самом деле миф, то стоимость сертификата может быть значительной для небольшой компании или индивидуального разработчика. Я вполне могу себе представить проблемы, с которыми столкнется разработчик, объясняя руководству, зачем нужно платить за килобайт-другой цифр и букв.
Существует два способа обойтись без “настоящего” сертификата во время разработки драйвера. Первый использовать опцию “Disable Driver Signature Enforcement” во время загрузки системы.
Неудобство состоит в том, что эту опцию нужно вручную выбирать при каждой загрузке системы. Естественно, что это “неудобство” создано намеренно, иначе какой прок в такой системе защиты?
Второй способ заключается в создании тестового self-signed сертификата. Такой сертификат можно использовать для подписывания драйверов в процессе тестирования, однако он не позволяет подписывать драйвера, поставляемые конечным пользователям. Описание процесса создания и установки тестового сертификата, а также пошаговое описание процесса подписывания драйвера можно найти здесь: Kernel-Mode Code Signing Walkthrough.