Поделиться через


Цифровые подписи для модулей ядра в системах под управлением Windows Vista

 

Корпорация Майкрософт

Обновлено июня 2007 г.

Применимо к:
   Windows Vista
   Windows Server 2008

сводка: для Microsoft Windows Vista и более поздних версий семейства операционных систем Windows программное обеспечение в режиме ядра должно иметь цифровую подпись для загрузки на компьютерные системы на основе x64. Узнайте, как управлять процессом подписывания программного обеспечения в режиме ядра для Windows Vista. (22 печатных страниц.)

Текущая версия этого документа хранится в Интернете по адресу: https://www.microsoft.com/whdc/system/platform/64bit/kmsigning.mspx.

Содержание

Знакомство
   Цифровые подписи в качестве рекомендации
   Параметры подписывания кода в режиме ядра
Процесс подписывания кода в режиме ядра
   Получение сертификата публикации программного обеспечения (SPC)
   Создание подписанного CAT-файла
   Добавление внедренной подписи в файл образа драйвера
Отключение принудительного применения подписей во время разработки
Использование тестовой подписи
   Включение устранения неполадок с подписыванием тестов
   Обнаружение ошибок загрузки драйвера
   Включение событий журнала системы диагностики целостности кода
   Параметры отладки проверки драйвера
Ресурсы

Знакомство

Для потребителей и корпоративных пользователей Windows по всему миру защита персональных и корпоративных данных остается основной проблемой. Корпорация Майкрософт стремится реализовать новые способы ограничения распространения вредоносного программного обеспечения. Цифровые подписи для программного обеспечения в режиме ядра — это важный способ обеспечения безопасности в компьютерных системах.

Цифровые подписи позволяют администратору или конечному пользователю устанавливать программное обеспечение под управлением Windows, чтобы узнать, предоставил ли законный издатель пакет программного обеспечения. Когда пользователи предпочитают отправлять данные отчетов об ошибках Windows в Корпорацию Майкрософт после сбоя или другой ошибки, корпорация Майкрософт может проанализировать данные, чтобы узнать, какое программное обеспечение издателей выполнялось в системе во время ошибки. Затем издатели программного обеспечения могут использовать сведения, предоставленные корпорацией Майкрософт, для поиска и устранения проблем в программном обеспечении.

Windows Vista использует цифровые подписи в коде режима ядра для повышения безопасности и стабильности платформы Microsoft Windows и обеспечения новых возможностей клиентов с контентом класса Premium следующего поколения:

  • Драйверы должны быть подписаны для устройств, которые передают защищенное содержимое. К ним относятся звуковые драйверы, использующие защищенный звук в режиме пользователя (PUMA) и защищенный звуковой путь (ПАП), а также драйверы видеоустройств, которые обрабатывают команды защиты от защиты от вывода видео (PVP-OPM) .
  • Программное обеспечение без знака в режиме ядра не загружается и не будет работать в системах на основе x64.

Примечание. Даже пользователи с правами администратора не могут загрузить код без знака в системах на основе x64. Это относится к любому программному модулю, загружаемому в режиме ядра, включая драйверы устройств, драйверы фильтров и службы ядра.

Область применения новой политики подписывания кода в режиме ядра далеко не достигнута. Для разработчиков, публикующих программное обеспечение в режиме ядра, эта политика имеет следующие последствия:

  • Для любого компонента режима ядра, который еще не подписан, издатели должны получить сертификат публикации программного обеспечения (SPC) и использовать SPC для подписи всего 64-разрядного программного обеспечения в режиме ядра, которое будет работать на компьютерах на основе x64 под управлением Windows Vista. Это включает программное обеспечение служб в режиме ядра.

  • Издатели, которые предоставляют 64-разрядный драйвер устройства или другое программное обеспечение в режиме ядра, которое уже подписано с помощью программы логотипа Windows, будет иметь свои каталоги драйверов, подписанные с подписью Windows Hardware Quality Labs (WHQL). Чтобы полностью протестировать пакет драйверов перед отправкой в WHQL, зарегистрируйте каталог драйверов с помощью SPC.

  • В специальном случае драйверов начального запуска также необходимо использовать SPC для внедрения файла двоичного образа драйвера для оптимальной производительности загрузки системы.

    Примечание Драйвер, как правило, запускается, если он загружается загрузчиком операционной системы Windows Vista. Драйверы начального запуска можно определить следующим образом: драйвер INF указывает начальный тип "Start=0", или служба ядра настроена как "Драйвер ядра" или "Драйвер файловой системы" и "StartMode".

Обязательная политика подписывания кода в режиме ядра применяется ко всем программному обеспечению в режиме ядра в системах на основе x64 под управлением Windows Vista. Однако корпорация Майкрософт рекомендует издателям подписывать все программное обеспечение, включая драйверы устройств для 32-разрядных и 64-разрядных платформ. Windows Vista выполняет проверку подписи в режиме ядра в системах x86 для поддержки защищенного содержимого мультимедиа. Однако подписи драйверов в режиме ядра не являются обязательными для 32-разрядных систем.

В этом документе описывается, как управлять процессом подписывания кода в режиме ядра для Windows Vista, включая получение сертификата публикации программного обеспечения (SPC), рекомендаций по защите ключей и подписывание пакета драйверов с помощью средств, предоставляемых в комплекте драйверов Windows (WDK).

Цифровые подписи в качестве рекомендации

С момента выпуска Windows 98 корпорация Майкрософт способствовала подписанию драйверов для назначенных классов устройств в качестве механизма повышения надежности драйверов, обеспечения лучшего взаимодействия с пользователем, снижения затрат на поддержку поставщиков программного обеспечения и оборудования, а также снижения общей стоимости владения для клиентов.

Для драйверов устройств и другого программного обеспечения в режиме ядра драйверы, подписанные в рамках программы логотипа Windows, повышают доверие конечных пользователей к качеству программного обеспечения и улучшают взаимодействие с пользователем, так как логотип Windows, принадлежащий драйверу, указывает, что драйвер был протестирован и цифровая подпись, которая сопровождает логотип Windows подтверждает, что с момента тестирования не было изменено.

Для большинства пакетов драйверов в режиме ядра цифровая подпись предоставляется в файле подписанного каталога (CAT). Лаборатории качества оборудования Windows (WHQL) предоставляют подписанный Корпорацией Майкрософт ФАЙЛ CAT для распространения с пакетом драйвера, который соответствует требованиям программы логотипа Windows.

Процесс создания подписанного программного обеспечения в режиме ядра состоит из двух отдельных, но связанных действий. Это можно сделать параллельно, так как программное обеспечение обычно не должно быть подписано относительно поздно в процессе разработки.

  • Управление процессом подписывания. Обычно это обрабатывается программами издателей и службами выпуска программного обеспечения и включает:

    • Выбор соответствующего параметра подписи.
    • Получение необходимых сертификатов.
    • Управление цифровыми подписями или ключами подписи кода.

    Примечание Для цифрового подписывания двоичных файлов или каталогов образов издатель программного обеспечения должен иметь сертифицированный ключ подписи кода, что означает, что центр сертификации достаточно установил удостоверение издателя.

  • Реализация подписанного драйвера. Обычно это обрабатывается командой разработчиков издателя и включает:

    • Реализация самого драйвера.
    • Создание подписанного пакета драйвера для внутреннего тестирования или выпуска.

Эти процессы описаны для более ранних версий Windows в WDK и пакете SDK для платформы. В этом документе описаны дополнительные параметры, связанные с подписью кода в режиме ядра для Windows Vista.

Параметры подписывания кода в режиме ядра

Существует несколько вариантов для работы с требованиями к подписи кода в режиме ядра (KMCS) в Windows Vista. Файлы драйверов подписывания не требуются для загрузки драйверов Windows Vista при разработке кода режима ядра. Вместо этого разработчики могут использовать один из механизмов для временной отключения проверок времени загрузки ядром для разработки и неавтомулируемых тестовых систем. Однако для автоматизации установки пакета драйверов на тестовых системах требуется проверка подписывания пакетов драйверов без всплывающих окон установки драйвера. Инфраструктура управления драйверами (DMI) проверяет подпись пакета драйвера во время установки и предупреждает пользователей о неподписанных драйверах.

В следующей таблице сравниваются параметры для модулей ядра цифровой подписи, поддерживаемых Windows Vista.

Параметры подписывания модулей ядра

Параметры подписывания Функциональность, проверенная в соответствии с требованиями к логотипу Проверено удостоверение Предполагаемое использование
Программа логотипа Windows Да Да Отпускать
Подписывание кода в режиме ядра с помощью SPC Нет Да Отпускать
Программа тестовой подписи WHQL Нет Да Тестирование
Подписывание тестов KMCS Нет Нет Тестирование

Программа логотипа Windows проверяет правильные функциональные возможности драйвера и обеспечивает высокий уровень качества и надежности. Пакеты драйверов, отправленные в программу логотипа Windows, подписываются корпорацией Майкрософт. Программа логотипа Windows принимает пакеты устройств, установленные с помощью INF-файла для оборудования, соответствующего требованиям логотипа Windows. Издатель драйвера отправляет пакет драйвера после завершения тестов проверки драйвера для программы логотипа Windows. Драйверы, которые имеют право на логотип, получают подписанный корпорацией Майкрософт ФАЙЛ CAT. Сведения о программе логотипа Windows см. в разделе "Ресурсы" в конце этого документа.

Разработчики могут подписать файл образа драйвера или каталог драйверов с помощью SPC для тестирования перед отправкой в WHQL, чтобы убедиться, что драйвер загружает и работает правильно.

Подписывание кода в режиме ядра с помощью SPC обеспечивает возможность идентификации издателя модуля ядра, загружаемого в Windows Vista. Он не предоставляет никакого уровня сертификации функциональных возможностей или надежности модуля ядра. Для драйверов, которые не соответствуют логотипу Windows, или логотип Windows не является одним из требований к продукту, издатель может создать CAT-файл для пакета драйвера и подписать его с помощью SPC издателя.

Важное подписывание кода в режиме ядра не заменяет программу WHQL. Корпорация Майкрософт призывает издателей использовать программу логотипа Windows для обеспечения качества драйвера. Подписывание кода в режиме ядра не требует, чтобы издатель программного обеспечения прошел требования к тестированию программы логотипа Windows, связанные с WHQL.

Подписанный CAT-файл — это все, что необходимо для установки и загрузки большинства пакетов драйверов в системах x64, за исключением пакетов, содержащих драйвер, загруженный загрузчиком Windows Vista. Пакет драйвера, содержащий драйвер устройства, загруженный загрузчиком Windows Vista, должен быть подписан двумя способами:

  • Двоичный файл драйвера режима ядра, загруженный во время загрузки, должен иметь внедренную подпись в двоичном файле, подписанном с помощью SPC. Для простоты может быть проще внедрить все файлы образа драйвера в пакете.
  • Пакет драйвера, установленный с помощью INF-файла, также должен иметь подписанный файл каталога, как и пакеты драйверов, не содержащие загрузочный драйвер, для проверки подписи во время установки.

Производители должны гарантировать, что поставщики оборудования получают SPC и подписывают все драйверы начальной загрузки, которые будут установлены в установленных изготовителях системах.

Для тестирования во время цикла разработки рекомендуется подписывание кода с помощью сертификата test вместо подписывания с помощью сертификата выпуска. Тестовый двоичный файл, подписанный, распознается только системами Windows Vista, если включен параметр конфигурации загрузки, позволяющий использовать тестовые сертификаты подписывания. Подписывание тестов не включено по умолчанию, и тестовые подписи не будут доверять большинству систем Windows Vista.

Программа подписи тестов WHQL также поддерживается для подписи тестов. Участники программы могут отправлять пакеты драйверов для подписывания тестов WHQL. Подпись в тестовых подписанных каталогах создается сертификатом, выданным в корневом центре Microsoft Test. Корневой центр Microsoft Test принимается, когда параметр конфигурации загрузки Windows Vista включает подписывание тестов. Сведения о программе подписи тестов WHQL см. в разделе "Ресурсы" в конце этого документа.

Для подписывания "test" и "release" команда разработчиков должна следовать рекомендациям по управлению ключами, как описано в руководстве по защите ключей подписывания кода далее в этом документе.

Подписывание тестов подробно описано в разделе "Использование тестового подписывания далее в этом документе".

Процесс подписывания кода в режиме ядра

Цифровая подпись файла образа или каталога в режиме ядра устанавливает целостность подписанного файла или файлов. Модули программного обеспечения никогда не следует изменять после выполнения операции подписывания кода. Изменение файла образа после подписания кода приводит к сбоям проверки подписи во время установки и времени загрузки.

Пакет драйвера, содержащий несколько файлов, может быть подписан с помощью каталога. Пакет драйвера должен иметь файл подписанного каталога (CAT), который используется для идентификации издателя при установке пакета драйвера и проверки образа драйвера при загрузке в ядро. Файл каталога содержит цифровой сертификат, определяющий издателя, а также хэши содержимого пакета, который позволяет системе проверить, не были ли изменены файлы в пакете.

Как упоминалось ранее, драйверы запуска загрузки должны иметь внедренные сигнатуры в файле образа драйвера. Внедренные подписи в файлах образа начального драйвера запуска оптимизируют производительность загрузки операционной системы, устраняя необходимость найти файл appropriate.cat, когда загрузчик операционной системы проверяет подпись драйвера.

Подписывание драйвера не требуется для каждой сборки во время процесса разработки драйверов. Разработчики могут отключить принудительное применение подписи драйверов, как описано в разделе "Отключение принудительного применения подписей во время разработки" далее в этом документе.

В следующих разделах описывается получение сертификатов и управление ими. Механика подписывания пакетов драйверов рассматривается далее в этом документе.

Получение сертификата публикации программного обеспечения (SPC)

Получите SPC для подписывания программного обеспечения режима ядра, соответствующего политике подписывания кода в обязательном режиме ядра, выполнив следующие действия:

  1. Получите SPC из коммерческого ЦС, который выдает цифровые сертификаты для подписывания кода режима ядра. Список ЦС, которые предоставляют сертификаты публикации программного обеспечения (или сертификаты подписывания кода), которые можно использовать для подписи кода в режиме ядра, доступны на веб-странице кросс-сертификатов Майкрософт для подписи кода в режиме ядра Windows Vista.
  2. Скачайте соответствующий кросс-сертификат из кросс-сертификатов Майкрософт для подписи кода в режиме ядра Windows Vista веб-страницу корневого центра сертификации, выдавшего SPC. Кросс-сертификат используется в цифровой подписи для кода режима ядра, чтобы подпись можно было проверить до доверенного корневого центра, известного ядром Windows Vista.

При запросе сертификата публикации программного обеспечения из коммерческого ЦС следуйте инструкциям на веб-сайте ЦС, чтобы получить и установить сертификат подписи кода на компьютере, где вы будете использовать закрытый ключ для подписи кода.

Руководство по защите ключей подписывания кода

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

Подробные сведения о безопасности закрытых ключей см. в рекомендации по подписи кода.

Использование кросс-сертификатов с подписыванием кода в режиме ядра

Подписывание кода в режиме ядра использует кросс-сертификаты в рамках процесса подписывания кода. Кросс-сертификат — это сертификат X.509, выданный одним центром сертификации (ЦС), который подписывает открытый ключ для корневого сертификата другого центра сертификации. Загрузчик операционной системы Windows Vista и ядро распознают кросс-сертификаты при проверке подписей драйверов. Кросс-сертификаты позволяют ядру иметь единый доверенный корневой центр Майкрософт, но также обеспечивает гибкость для расширения цепочки доверия к нескольким коммерческим центрам сертификации, которые выдают сертификаты издателя программного обеспечения.

Кросс-сертификаты позволяют разработчикам и издателям использовать сертификаты издателя программного обеспечения для подписывания программного обеспечения в режиме ядра. Разработчики, использующие подписывание кода в режиме ядра, скачивают правильный файл кросс-сертификата (.cer) в систему, в которой выполняется операция цифровой подписи. Издатели не должны распространять файл кросс-сертификатов с помощью пакета программного обеспечения или драйвера. Кросс-сертификат будет включен в цифровую подпись в файле образа драйвера или каталоге пакетов драйверов. Пользователям, устанавливающим пакет драйвера, не придется выполнять какие-либо действия по настройке Для Windows Vista, чтобы проверить цифровую подпись, содержащую кросс-сертификат.

Важное SignTool в Windows Vista Beta2 WDK является единственной версией SignTool, которая в настоящее время поддерживает добавление кросс-сертификатов в цифровую подпись. Предыдущие версии SignTool в пакете SDK для платформы Windows Server 2003 или DDK не поддерживают добавление кросс-сертификатов.

Кросс-сертификаты для нескольких ЦС, используемых для подписывания кода в режиме ядра, доступны для скачивания с веб-сайта Microsoft WHDC. Дополнительные сведения см. в разделе Кросс-сертификаты Майкрософт для подписывания кода в режиме ядра Windows Vista в разделе "Ресурсы" в конце этого документа.

Сведения о добавлении кросс-сертификата в цифровую подпись описаны в разделах "Как подписать CAT-файл" и "Добавление внедренной подписи в файл образа драйвера".

Создание тестовых сертификатов

Тестовые сертификаты используются вместо spCs для тестового модуля программного обеспечения режима подписывания ядра, которые не предназначены для распространения или выпуска за пределами организации. Подписывание тестов применяет цифровую подпись к двоичным файлам в режиме ядра или каталогам пакетов драйверов, используемым для внутреннего тестирования. Подписывание тестов подробно описано в разделе "Использование тестового подписывания далее в этом документе". При использовании тестового сертификата для подписывания кода в режиме ядра кросс-сертификат не требуется.

Тестовые сертификаты можно создать с помощью корпоративного ЦС или с помощью программы Makecert. Дополнительные сведения об использовании корпоративного ЦС для выдачи сертификатов подписывания тестов в организации см. в рекомендациях по подписанию кода.

В следующем примере Makecert создает тестовый сертификат, выданный корнем теста по умолчанию, сохраняет закрытый ключ в контейнере ключей и выводит сертификат в хранилище сертификатов и файл сертификата:

Makecert –r –pe –ss SubjectCertStoreName –n "CN= CertName" OutputFile.cer

Аргументы Makecert в примере выполняют следующие действия.

  • -r
    Создает самозаверяющий сертификат, то есть сертификат является корневым сертификатом.
  • -pe
    Делает закрытый ключ, связанный с экспортируемым сертификатом.
  • -ssSubjectCertStoreName
    Указывает имя хранилища сертификатов, содержащего корневой сертификат.
  • **-n "CN=**CertName"
    Указывает имя сертификата. Если имя сертификата не указано, имя сертификата по умолчанию — "Программное обеспечение Emporium Джо".
  • OutputFile.cer
    Имя файла, в котором сохраняется корневой сертификат.

Пример скрипта команды с помощью makecert доступен в WDK. Имя файла скрипта — selfsign_example.txt, расположенный в каталоге bin\selfsign. Прежде чем установить пакет драйвера, необходимо добавить тестовые сертификаты в хранилище сертификатов на целевом тестовом компьютере.

В следующем примере показано, как добавить тестовые сертификаты в доверенное корневое хранилище и доверенное хранилище издателей на целевом тестовом компьютере.

certmgr.exe -add OutputFile.cer -s -r localMachine root 
certmgr.exe -add OutputFile.cer -s -r localMachine trustedpublisher

Аргументы Certmgr в примере выполняют следующие действия:

  • -add
    Добавляет сертификат в файл сертификата в хранилище сертификатов.
  • -s
    Указывает, что хранилище сертификатов — это системное хранилище.
  • -r
    Указывает, что расположение реестра системного хранилища находится в разделе HKEY_LOCAL_MACHINE
  • корневой или доверенной публикации
    Указывает имя хранилища системных сертификатов

Дополнительные сведения о Certmgr и Makecert см. в разделе "Ресурсы" в конце этого документа.

Создание подписанного CAT-файла

Средства, используемые для создания и подписывания файлов каталога, MakeCat и SignTool, предоставляются в Windows Vista WDK.

Примечание Signtool.exe и MakeCat.exe находятся в каталоге bin\selfsign в WDK.

Создание CAT-файла

Файл CAT с цифровой подписью содержит хэши всех модулей в режиме ядра, которые проверяются при загрузке в ядро. Файл каталога также может включать хэши для других файлов в пакет программного обеспечения, например программы приложений в режиме пользователя (EXES) и расширения приложений (DLL). Корпорация Майкрософт рекомендует, чтобы ФАЙЛ CAT содержал хэши всех файлов в пакете программного обеспечения.

Файл CAT содержит список хэшей файлов, соответствующих указанному набору файлов. Хэш файла — это продукт хэша SHA1 по целевому файлу. Хэш неструктурированных файлов не используется для файлов, таких как драйверы, использующие формат переносимого исполняемого файла (PE). Вместо этого соответствующие разделы, такие как заголовок PE, исполняемые данные и прошедшие проверку подлинности атрибуты, выборочно хэшируются.

При загрузке драйвера в память ядро Windows Vista выполняет хэш SHA1 по соответствующим разделам файла двоичного образа драйвера. Windows проверяет, что файл не был изменен, сравнивая результирующее хэш-значение со списком двоичных хэшей в связанном cat-файле.

При установке драйвера с INF-файлом через Plug and Play используйте средство подписывания из WDK, чтобы создать каталог, как описано ниже. В противном случае вручную создайте каталог, как описано в руководстве по созданию каталога вручную в этом документе.

Создание каталога с помощью подписи

Подпись — это средство, которое используется для проверки INF-файлов и создания файла каталога на основе INF-файла. Он включен в WDK и может выполняться из среды сборки WDK. Для подписывания требуется допустимый INF-файл для пакета драйвера. Дополнительные сведения о создании INF-файла см. в документации по WDK. Чтобы создать каталог с помощью средства подписи, сделайте следующее:

Использование подписи для создания каталога

  1. Создайте каталог пакета драйверов, содержащий все файлы в пакете драйвера.
  2. Создайте INF-файл в каталоге пакета драйвера и измените его для Windows Vista. В частности, измените дату сборки на 4.1.2006 или более поздней, а версию — на 6. Например: DriverVer=04/01/2006, 6.0.1.0
  3. Выполните команду Signability, чтобы создать допустимый CAT-файл на основе INF-файла:
    • Запустите Signability.exe и используйте графический интерфейс для создания файла каталога.

    • Запустите подпись из командной строки. Обратите внимание, что package_directory должен быть полным путем к каталогу пакета.

      Signability.exe /auto /cat /driver:package_directory /os:512
      

В этом примере создается CAT-файл в каталоге driver_package с помощью нескольких аргументов, поддерживаемых signability:

  • /auto
    Настраивает средство подписи для запуска без необходимости взаимодействия с пользователем.
  • /cat
    Настраивает средство подписи для создания файла каталога, имя которого предоставляется INF-файлом пакета драйвера.
  • /driver:DriverPath
    Предоставляет путь к каталогу, содержаму файлы пакета драйвера.
  • /os:nnn
    Настраивает средство подписывания, чтобы убедиться, что INF-файл пакета драйвера соответствует требованиям версий Windows, заданных значением флага nnn. 512 — это значение для Windows Vista, 64-разрядная версия.

Создание каталога вручную

Чтобы вручную создать CAT-файл, сначала используйте текстовый редактор для создания файла определения каталога (CDF). CDF-файл содержит список файлов, которые необходимо каталогизировать и их атрибуты.

В следующем примере показано содержимое типичного CDF-файла, который называется Good.cdf. Пакет, который будет каталогирован, содержит два файла, File1 и File2. Результирующий CAT-файл называется Good.cat.

[CatalogHeader]
Name=Good.cat
PublicVersion=0x0000001
EncodingType=0x00010001
CATATTR1=0x10010001:OSAttr:2:6.0
[CatalogFiles]
<hash>File1=File1
<hash>File2=File2

Файл CAT создается с помощью средства командной строки MakeCat, который входит в состав пакета SDK для платформы и WDK. Средство MakeCat:

  • Проверяет список атрибутов для каждого указанного файла.
  • Добавляет перечисленные атрибуты в ФАЙЛ CAT.
  • Хэширует каждый из перечисленных файлов.
  • Сохраняет хэши каждого файла в CAT-файле.

Создание файла CAT

  1. Используйте текстовый редактор для создания CDF-файла, содержащего список файлов для каталогизации с их атрибутами.
  2. Запустите MakeCat в CDF-файле.

Примечание MakeCat не изменяет CDF-файл.

В следующем примере показано, как сделать CAT-файл из Good.cdf. Флаг -v указывает подробную версию MakeCat. Хэшированные файлы и только что созданный Good.cat файл помещаются в ту же папку, что и File1 и File2.

MakeCat -v Good.cdf

Файл CAT теперь готов к подписанию.

Дополнительные сведения о MakeCat и формате CDF-файлов см. в документации MakeCat, указанной в разделе "Ресурсы" в конце этого документа.

Как подписать CAT-файл

Cat-файл, созданный MakeCat, содержит все хэши файлов, необходимые для установки модулей в режиме ядра в системе пользователя. Однако файл также должен быть цифровой подписью.

Файл CAT подписан с помощью средства signTool программы командной строки. Цифровая подпись каталога, которая используется для проверки файлов изображений в режиме ядра, должна содержать кросс-сертификат. Кросс-сертификат добавляется с помощью нового параметра команды в SignTool.

Важные Необходимо использовать версию SignTool из Windows Vista Beta2 WDK, чтобы добавить кросс-сертификат в цифровую подпись.

В следующем примере показано, как использовать signtool для подписи CAT-файла с помощью SPC и соответствующего закрытого ключа, импортируемого в хранилище сертификатов Windows. Сведения о том, как использовать signtool с HSM, см. в документации по SignTool, указанной в разделе "Ресурсы" в конце этого документа.

SignTool sign /v /ac CrossCertificateFile /s SPCCertificateStore /n SPCSubjectName /t http://timestamp.verisign.com/scripts/timestamp.dll Good.cat

В этом примере используется несколько аргументов, поддерживаемых SignTool:

  • подписи
    Настраивает средство для подписи CAT-файла, который называется CatFileName.cat.
  • /v
    Задает подробный параметр для успешного выполнения и предупреждений сообщений*.*
  • /ac
    Добавляет кросс-сертификат из файла CrossCertificateFile в цифровую подпись
  • /s
    Указывает хранилище сертификатов, которое называется SPCCertificateStore.
  • /n
    Указывает сертификат с именем субъекта SPCSubjectName.
  • /tURL-адрес
    Указывает, что цифровая подпись будет метка времени указана центром метки времени (TSA), указанным URL-адресом.

Важные Mist каталога или подписи драйвера включают метку времени для предоставления необходимых сведений о отзывах ключей в случае компрометации закрытого ключа подписывающего кода подписи.

Во время установки устройства, если срок действия SPC, используемый для подписи, истек, и подпись не была заметлена, файл CAT не установлен, и Windows не разрешает загрузку драйвера. Тем не менее, если подпись заметен доверенным центром метки времени, файл CAT устанавливается, и Windows позволяет загрузить драйвер.

Подписывание самораспаковывающегося файла скачивания

Программное обеспечение, опубликованное для распространения на веб-сайте поддержки продуктов, обычно упаковано в самораспространяющийся архивный файл. Самораспакующийся исполняемый файл загружается с помощью веб-браузера и содержимое, извлеченное до того, как пользователь начнет устанавливать на своем компьютере. Используйте SPC, подписанный файл cat-файла пакета драйвера, чтобы также цифрово подписать самораспакующий файл .exe.

Цифровая подпись самозаверяющего .exe-файла идентифицирует издателя архивного файла и обеспечивает целостность самораспаковывающегося файла .exe, скачиваемого через Интернет. Пользователи, скачивающие самозагрузительный файл .exe, обычно получают диалоговое окно доверия или предупреждение системы безопасности при выборе скачивания и запуска самостоятельного извлечения файла.

В Windows Vista, если пользователь просматривает сведения диалогового окна "Предупреждение системы безопасности" и выбирает "Всегда устанавливать программное обеспечение из имени издателя <">", этот параметр упрощает последующее подтверждение при установке пакета драйвера. После установки пакета драйвера пользователю будет предложено доверять издателю подписанного пакета драйвера до начала установки драйвера. Если пользователь выбрал параметр всегда устанавливать программное обеспечение от издателя драйвера при загрузке файла самостоятельного извлечения .exe файла, диалоговое окно доверия во время установки драйвера не произойдет.

Установка подписанного CAT-файла

Для драйверов, установленных через Plug and Play, никаких изменений в процессе установки не ожидается. Для установки встроенного подписанного драйвера не требуется специальная обработка за пределами стандартных механизмов INF и установки. Обратите внимание, что только пользователи, являющиеся членами группы администраторов, могут устанавливать пакеты драйверов.

Драйверы, которые не устанавливаются через Plug and Play, должны устанавливать файлы CAT в корневой папке каталога системы. Установка каталога в корневой папке каталога можно управлять с помощью существующих вызовов API каталога Win32, в частности CryptCATAdminAddCatalog.

Добавление внедренной подписи в файл образа драйвера

Чтобы оптимизировать производительность проверки драйвера во время загрузки, двоичные файлы драйвера начального запуска должны иметь внедренную подпись с помощью SPC в дополнение к подписанному CAT-файлу пакета. Внедренная сигнатура экономит значительное время во время загрузки операционной системы, так как не требуется загрузчик операционной системы для поиска cat-файла в драйвере. Типичная система Windows Vista может содержать более сотен разных файлов каталога в корневом хранилище каталога. Поиск правильного файла каталога для проверки хэша изображения определенного драйвера может включать много системных накладных расходов на поиск нескольких каталогов для правильного файла.

Драйверы начальной загрузки определяются на основе значения startType службы SERVICE_BOOT_START (0).

Внедренные подписи не препятствуют подписи или проверке ФАЙЛОВ CAT. Обратите внимание, что хэши, содержащиеся в каталогах и внедренных подписях, выборочно исключают часть подписи в формате PE-файла.

Чтобы использовать Signtool.exe для внедрения подписи в двоичный файл драйвера начальной загрузки с помощью SPC и соответствующего закрытого ключа, импортированного в хранилище сертификатов Windows, используйте следующую команду:

SignTool sign /v /ac CrossCertificateFile /s SPCCertificateStore /n SPCSubjectName /t http://timestamp.verisign.com/scripts/timestamp.dll winloaddriver.sys

В этом примере используется несколько аргументов, поддерживаемых SignTool:

  • подписи
    Команда знака настраивает средство для подписывания драйвера с именем winloaddriver.sys.
  • /v
    Задает подробный параметр для успешного выполнения и предупреждений сообщений*.*
  • /ac
    Добавляет кросс-сертификат из файла CrossCertificateFile в цифровую подпись
  • параметры /s
    Указывает хранилище сертификатов с именем SPCCertificateStore
  • /n
    Указывает сертификат с именем субъекта SPCSubjectName.
  • /tURL-адрес
    Указывает, что цифровая подпись должна быть заметен меткой времени TSA, указанной URL-адресом.

Важно: каталог или драйвер должен быть меткой времени, так как это позволит предоставить необходимую информацию для отзыва ключей в случае компрометации ключа подписи.

Как проверить внедренную подпись

В следующей процедуре показано, как проверить внедренную подпись в проводнике Windows.

Проверка внедренных подписей

  1. При запуске Windows Vista щелкните правой кнопкой мыши файл драйвера .sys и выберите пункт Свойства в контекстном меню.
  2. Щелкните вкладку цифровые подписи, если она присутствует.
    • Если эта вкладка отсутствует, файл не имеет внедренной подписи.
  3. Выберите подписыватель и щелкните Сведения, чтобы открыть диалоговое окно Сведения о подписи.
  4. Щелкните Просмотреть сертификат, чтобы открыть страницы свойств сертификата.
    • Убедитесь, что диалоговые окна предупреждения отсутствуют.
    • Убедитесь, что имя субъекта сертификатов publisher зарегистрировано в распознаваемом центре сертификации.
  5. Перейдите на вкладку Путь сертификации.
    • Убедитесь, что имя субъекта верхнего сертификата корневойпроверки кода Майкрософт.

Проверка внедренных подписей с помощью signtool.exe для политики подписывания кода в режиме ядра

  • Signtool.exe можно использовать для проверки подписи в CAT-файле с помощью следующей команды:
Signtool verify /kp /c tstamd64.cat toaster.sys

Убедитесь, что хэш изображения для файла toaster.sys найден в файле каталога. Средство возвращает строку "Success".

Отключение принудительного применения подписей во время разработки

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

  • Присоединение отладчика ядра. Присоединение активного отладчика ядра к целевому компьютеру отключает принудительное применение подписей режима ядра в Windows Vista и позволяет драйверу загружаться.

  • Использование параметра F8. Параметр расширенной загрузки F8, представленный в Windows Vista , "Отключить принудительное применение подписи драйвера", доступен для отключения принудительного применения подписи ядра только для текущего сеанса загрузки. Этот параметр не сохраняется в сеансах загрузки.

  • Настройка конфигурации загрузки. Параметр конфигурации загрузки доступен в выпуске Windows Vista Beta2, который отключает принудительное применение подписей режима ядра для сохранения в сеансах загрузки.

    Windows Vista включает средство командной строки BCDedit, которое можно использовать для настройки параметра в Windows Vista Beta2 для отключения проверок подписей. Чтобы использовать BCDedit, пользователь должен быть членом группы администраторов в системе и выполнить команду из командной строки с повышенными привилегиями. Командная строка с повышенными привилегиями можно запустить, создав ярлык рабочего стола для cmd.exe, а затем щелкнув правой кнопкой мыши и "Запуск от имени администратора".

    Ниже показан пример запуска BDCedit в командной строке:

    // Disable enforcement – no signing checks
    Bcdedit.exe –set nointegritychecks ON 
    
    // Enable enforcement – signing checks apply
    Bcdedit.exe –set nointegritychecks OFF 
    
    // Disabling integrity check on an alternate OS 
    // specified by a GUID for the system ID
    Bcdedit.exe –set {4518fd64-05f1-11da-b13e-00306e386aee} nointegritychecks ON 
    

Примечание Параметр Bcdedit отключить проверку целостности доступен только для загрузки неподписанных драйверов в выпуске Windows Vista Beta2. Дополнительные сведения см. в разделе "Часто задаваемые вопросы о редакторе BCD" на веб-сайте MSDN.

Использование тестовой подписи

Подписывание тестов предоставляет дополнительные возможности для организаций разработки для включения подписывания кода в режиме ядра для предварительного выпуска программного обеспечения, которое не готово для публикации. Подписывание тестов позволяет использовать сертификаты подписи кода "test" для подписывания драйверов, которые будут загружаться в Windows Vista, когда параметр конфигурации загрузки Windows Vista позволяет тестовые подписи.

Проверка подписывания может быть подходящей для использования в следующих сценариях:

  • Командам разработчиков необходимо протестировать предварительные версии драйвера в тестовых системах, где не очень удобно подключить отладчик ядра.
  • Автоматическое тестирование программного обеспечения режима ядра делает его нецелесообразным для использования параметра расширенной загрузки F8, чтобы временно отключить принудительное применение подписи драйвера на каждом цикле загрузки компьютера.

Подписывание тестов позволяет разработчикам подписывать предварительные версии двоичных файлов в режиме ядра таким образом, что Windows Vista может проверить и загрузить подписанный драйвер. Подписывание тестов включает в себя следующие отличия от обычной рабочей или выпускной подписи:

  • Сертификаты, используемые для подписи тестов, можно создавать с помощью средства подписи кода Makecert.exe или выпуска корпоративного ЦС вместо использования SPC, выданного коммерческим ЦС.
  • Параметр конфигурации загрузки Windows Vista для включения подписывания тестов должен быть включен в системе Windows Vista, которая загрузит подписанный тестовый драйвер.

Организации разработки могут настроить корпоративный PKI и выдавать собственные сертификаты подписывания кода для тестирования. Когда Windows Vista включает проверку подписи тестов, проверка цифровой подписи в двоичном файле драйвера будет принимать сертификаты, выданные любым ЦС или центром выдачи. Проверка подписи проверяет, что образ драйвера подписан, но проверка пути сертификата, выполняемая в режиме ядра, не требует настройки издателя в качестве доверенного корневого центра. Это позволяет организациям использовать отдельные подписи в тестовых двоичных файлах на основе учетных данных, выданных для подписывания кода в организации. Корпорация Майкрософт рекомендует эту форму развертывания для тестирования подписывания кода в режиме ядра.

Использование сертификатов, созданных средством makecert.exe, также допускается для подписи тестов. Однако сертификаты, созданные makecert, часто не предоставляют полезные сведения об удостоверениях и нет способа отслеживать, какой отдельный разработчик создал тестовую версию подписанного двоичного файла предварительного выпуска.

примечание выпуск Windows Vista Beta2 принимает только тестовые сертификаты, созданные средством makecert. Тестовые сертификаты подписывания кода, выданные корпоративным ЦС для подписи тестов, недоступны в Windows Vista Beta2.

Инструкции по подписи в этом документе работают так же, как используется SPC или сертификат, созданный программой makecert, или с помощью сертификата, выданного корпоративным ЦС. Единственное различие обычно будет иметь имя издателя и субъекта в сертификате.

Программа подписи тестов WHQL также поддерживается для подписи тестов. Участники программы могут отправлять пакеты драйверов для подписей тестов WHQL. Подпись в тестовых подписанных каталогах создается сертификатом, выданным в корневом центре Microsoft Test. Корневой центр Microsoft Test принимается по умолчанию в Windows Vista Beta2 в рамках бета-программы. В последнем выпуске Windows Vista корневой центр Microsoft Test принимается, когда параметр конфигурации загрузки Windows Vista включает подписывание тестов.

По умолчанию тестируемые двоичные файлы с подписанным режимом ядра не будут загружаться в системах Windows Vista. Цифровые подписи в тестовых двоичных файлах недопустимы в системах Windows Vista по умолчанию, так как политика подписывания кода в режиме ядра не принимает и не доверяет сертификатам подписи теста.

Включение подписи тестов

Используйте средство командной строки Bcdedit, чтобы включить подписывание тестов. Чтобы использовать BCDedit, пользователь должен быть членом группы администраторов в системе и выполнить команду из командной строки с повышенными привилегиями. Командная строка с повышенными привилегиями можно запустить, создав ярлык рабочего стола для cmd.exe, а затем щелкнув правой кнопкой мыши и "Запуск от имени администратора".

Ниже показан пример запуска BDCedit в командной строке:

// Accept test signed kernel mode signatures
Bcdedit.exe –set TESTSIGNING ON 

// Do not accept test signed kernel mode signatures
Bcdedit.exe –set TESTSIGNING OFF 

Параметр конфигурации TESTSIGNING загрузки определяет, принимает ли Windows Vista тестовый двоичный файл с подписанным режимом ядра. Параметр не определен по умолчанию, что означает, что цифровые подписи в драйверах режима тестового режима ядра не будут проверяться и не загружаться. Когда Windows Vista принимает двоичные файлы с подписанным режимом ядра, некоторые защищенные содержимое класса Premium могут быть недоступны в системе.

Устранение неполадок

Существуют конкретные действия по выявлению и устранению потенциальных проблем, связанных с проверкой подписей кода в режиме ядра. В этом разделе содержатся сведения об устранении неполадок с применением подписывания драйвера. Основными средствами устранения неполадок подписывания драйверов являются следующие:

  • Обнаружение ошибок загрузки драйвера
  • Включение событий журнала системы диагностики целостности кода.

Приложение тостера, включенное в Windows Vista WDK, используется в качестве примера. Приложение тостера можно найти в WDK в каталоге "src\general\тостер".

Обнаружение ошибок загрузки драйвера

Приложение тостера устанавливает драйвер устройства (toaster.sys), который в этом примере не подписан. Симптом проблемы с драйвером без знака заключается в том, что устройство тостера не запускается. С помощью диспетчера устройств можно проверить состояние устройства Тостера и просмотреть состояние драйвера, как показано на следующем рисунке экрана.

Bb530195.digitalsigskernmodules01(en-us,MSDN.10).gif

Рис. 1. Ошибка драйвера без знака

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

Включение событий журнала системы диагностики целостности кода

Принудительное применение подписывания кода в режиме ядра реализуется компонентом Windows Vista, известным как целостность кода. Целостность кода создает диагностические события и событие журнала аудита системы при сигнатуре модуля ядра не удается проверить правильно.

  • Операционные события целостности кода всегда включены. Операционные события — это события предупреждения, когда проверка образа завершилась сбоем при загрузке двоичного файла в режиме ядра.
  • События аудита системы целостности кода создаются при включении политики аудита системы. Политика аудита системы не включена по умолчанию.
  • Подробные события целостности кода — это события аналитики и отладки информационных событий, которые показывают все успешные проверки проверки образа при загрузке двоичных файлов в режиме ядра. Подробные события по умолчанию не включены.

События целостности кода можно просматривать в средстве просмотра событий, который является частью оснастки MMC управления компьютерами. (На кнопке "Пуск " щелкните правой кнопкой мыши компьютери выберите "Управление").

Поток событий целостности кода расположен в следующей иерархии:

Средство просмотра событий> — журналы приложений и служб> Майкрософт —> Windows —> CodeIntegrity

Bb530195.digitalsigskernmodules02(en-us,MSDN.10).gif

Рис. 2. События целостности кода

В журнале операций целостности кода отображаются события, созданные ядром, когда драйвер режима ядра завершает проверку подлинности образа при загрузке драйвера. Сбой проверки изображения может быть вызван рядом причин, включая следующие:

  • Драйвер был без знака, но установлен в системе администратором и целостностью кода не позволяет драйверу загружаться.
  • Драйвер был подписан, но файл образа драйвера был изменен или изменен, и изменение недействило подпись драйвера.
  • Устройство с системным диском может иметь ошибки устройства при чтении файла образа для устройства из плохих секторов дисков.

Запись операционного журнала для сбоя проверки образа без знака или измененного образа драйвера выглядит следующим образом:

Bb530195.digitalsigskernmodules03(en-us,MSDN.10).gif

Рис. 3. Запись в операционный журнал

Событие указывает, что драйвер тостера (toaster.sys) не удалось загрузить, так как он был без знака (или изображение toaster.sys, которое пытается загрузить, не совпадает с тем же, который был цифрово подписан издателем).
Все сообщения журнала событий целостности кода перечислены в разделе "Сообщения журнала событий целостности кода" ниже.

События журнала аудита системы

Целостность кода создает события журнала аудита системы, соответствующие событиям операционного предупреждения при сбое проверки образа драйвера режима ядра. События системного журнала доступны для просмотра в средстве просмотра событий в журналах Windows, представлении системного журнала.

События аудита системы могут не быть включены во всех системах Windows Vista. Используйте оснастку MMC "Локальные параметры безопасности", чтобы проверить или включить "События системы аудита" в параметрах локальных политик, политик аудита.

Информационные события в подробном журнале

Дополнительные информационные события целостности кода для всех проверок проверки образа в режиме ядра доступны с помощью подробного представления событий. Эти события показывают успешную проверку образа всех драйверов, загруженных в систему.

Ниже приведены действия по включению представления событий целостности кода.

  1. Щелкните представление операционной, чтобы отобразить текущие события целостности кода (если таковые есть).
  2. Щелкните узел целостности кода , чтобы задать фокус.
  3. Щелкните правой кнопкой мыши узел целостности кода , чтобы получить контекстное меню.
  4. Выберите вид.
  5. Выберите показать журналы аналитики и отладки.
  6. При этом создается вложенное дерево с двумя дополнительными узлами, операционными и узлом подробных.
  7. Щелкните правой кнопкой мыши узел подробных и выберите Свойства.
  8. Выберите лист общего и выберите параметр Включитьведение журнала. Это должно включать подробный режим ведения журнала.
  9. Перезагрузите систему, чтобы перезагрузить все двоичные файлы в режиме ядра.
  10. После перезагрузки откройте оснастку "Компьютеруправление" и просмотритесобытияцелостности кода.

Вы можете проверить правильность подписи toaster.sys следующим образом:

В этом случае toaster.sys является драйвером PnP и называется в файле каталога (tstamd64.cat в файле каталога "\src\general\тостер\toastpkg\toastcd". Используйте служебную программу SignTool, чтобы проверить правильность подписывания каталога toaster.sys с помощью следующей команды:

Signtool verify /kp /c tstamd64.cat toaster.sys

Параметры отладки проверки драйвера

В некоторых случаях разработчикам может потребоваться применить политику подписывания кода в обязательном режиме ядра, даже если отладчик подключен. Примером этого является то, что стек драйверов имеет неподписанный драйвер (например, драйвер фильтра), который не загружается, что может привести к недопустимости всего стека. Так как присоединение отладчика позволяет загружать драйвер без знака, проблема исчезает сразу после подключения отладчика. Отладка такого типа проблемы может оказаться сложной. Чтобы упростить отладку в этом случае, целостность кода поддерживает раздел реестра, который можно задать для принудительного применения принудительного применения подписывания режима ядра даже при присоединении отладчика.

В реестре есть два флага, которые управляют поведением целостности кода в отладчике. Флаги по умолчанию не определены.

Создайте значение реестра следующим образом:

Key:   HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CI
Value:   DebugFlags      REG_DWORD   

Возможные значения:

  • 00000001
    Результаты отладки в отладчике и драйвере без знака разрешены для загрузки с g.
  • 00000010
    CI игнорирует наличие отладчика и неподписанных драйверов блокируется загрузка.

Любое другое значение приводит к загрузке драйверов без знака— это политика по умолчанию.

Сообщения журнала событий целостности кода

Ниже приведены события предупреждения, зарегистрированные в журнале целостности кода:

  • "Целостность кода не может проверить целостность образа файла <имени файла>, так как хэш файла не найден в системе".
  • "Целостность кода обнаружила неподписанный драйвер".
  • "Это событие связано с мониторингом качества программного обеспечения (SQM)."

Ниже приведены события сведений, зарегистрированные в журнале целостности кода.

  • "Целостность кода обнаружила набор хэшей изображений на странице для имени файла <файла> в имени каталога <каталога>".
  • "Целостность кода обнаружила набор хэшей изображений на страницу для имени файла <имени файла> в внедренном сертификате образа".
  • "Целостность кода обнаружила хэш файла для имени файла файла вимени каталога имени каталога".
  • "Целостность кода обнаружила хэш файла для имени файла <файла> в внедренном сертификате образа".
  • "Целостность кода определила, что модуль ядра без знака <имя файла> загружается в систему. Обратитесь к издателю, чтобы узнать, доступна ли подписанная версия модуля ядра".
  • "Целостность кода не может проверить целостность изображения файла <имени файла>, так как набор хэшей изображений на странице не удалось найти в системе".
  • "Целостность кода не может проверить целостность изображения файла <имени файла>, так как набор хэшей изображений на странице не удалось найти в системе. Образ может загружаться, так как подключен отладчик режима ядра".
  • "Целостность кода не может проверить целостность изображения имени файла <файла>, так как хэш файла не найден в системе. Образ может загружаться, так как подключен отладчик режима ядра".
  • "Целостность кода не удалось загрузить имя файла <> каталога".
  • "Целостность кода успешно загружает имя файла <> каталога".

Ресурсы