Открыть сервисСервис

Цифровая подпись драйвера

Цифровая подпись драйвера — это электронная метка, добавляемая к файлу драйвера устройства операционной системы, которая подтверждает его подлинность, целостность и происхождение от конкретного разработчика (издателя). Цифровая подпись создаётся с использованием криптографических методов (инфраструктуры открытых ключей, PKI) и позволяет операционной системе проверять, что драйвер не был изменён после подписания и что он исходит от доверенного источника. В современных операционных системах (Microsoft Windows, macOS, Linux с Secure Boot) наличие действительной цифровой подписи является обязательным условием для загрузки и установки драйвера в режиме ядра.

Назначение и цели

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

Цифровая подпись решает несколько задач:

  • Аутентификация издателя: подтверждает, что драйвер выпущен конкретной компанией или разработчиком, чей сертификат был проверен удостоверяющим центром.
  • Целостность файла: гарантирует, что драйвер не был модифицирован после подписания (например, вирусом или при передаче по сети).
  • Доверие системы: операционная система может автоматически блокировать неподписанные драйверы или драйверы с отозванными сертификатами, снижая риск заражения.

История

До середины 2000-х годов в Windows отсутствовала обязательная проверка цифровых подписей для драйверов. Это привело к распространению руткитов и других вредоносных программ, которые маскировались под драйверы. В ответ на угрозы Microsoft ввела программу Windows Hardware Quality Labs (WHQL) и требования к подписанию драйверов.

  • Windows Vista (2006): впервые введено обязательное подписание 64-разрядных драйверов для режима ядра. Неподписанные драйверы могли быть установлены только с предупреждением.
  • Windows 7 (2009): усилены требования — по умолчанию блокировалась установка неподписанных драйверов в 64-разрядных версиях.
  • Windows 8 (2012): введена поддержка Secure Boot и обязательное подписание драйверов для загрузки в режиме UEFI.
  • Windows 10 (2015) и позже: Microsoft ужесточила политику, требуя подписания драйверов через портал Microsoft Partner Center, а также ввела обязательное использование расширенных сертификатов (EV) для драйверов режима ядра.

В macOS аналогичные требования появились с версии OS X 10.9 (Mavericks) в рамках системы Gatekeeper, а в Linux — с внедрением Secure Boot в дистрибутивах, поддерживающих UEFI.

Типы цифровых подписей

Цифровые подписи драйверов классифицируются по типу сертификата и способу подписания.

По типу сертификата

  • Стандартная подпись (Standard): используется сертификат, выпущенный удостоверяющим центром, аккредитованным Microsoft. Применяется для большинства драйверов пользовательского режима и некоторых драйверов режима ядра.
  • Расширенная подпись (Extended Validation, EV): сертификат с более строгой проверкой юридического лица издателя. Требуется для драйверов режима ядра, которые загружаются до загрузки операционной системы (boot-start drivers) и для драйверов, подписываемых через программу Windows Hardware Developer Center Dashboard.
  • Корпоративная подпись (Enterprise): используется внутри организаций для подписания драйверов с помощью собственного удостоверяющего центра (например, Active Directory Certificate Services). Действительна только в пределах доверенной сети.

По способу подписания

  • Подпись файла (Embedded signature): цифровая подпись встраивается непосредственно в файл драйвера (например, .sys или .dll). Этот метод используется для драйверов режима ядра.
  • Каталожная подпись (Catalog signature): подпись хранится в отдельном файле-каталоге (.cat), который содержит хеши нескольких драйверов. Каталог подписывается сертификатом, а сами файлы остаются неподписанными. Этот метод применяется для драйверов пользовательского режима и пакетов драйверов (INF-файлов).

Процесс подписания

Процесс получения цифровой подписи драйвера включает несколько этапов:

  1. Разработка драйвера: создание файла драйвера (например, .sys, .dll, .inf).
  2. Получение сертификата: разработчик обращается к удостоверяющему центру (например, DigiCert, GlobalSign, Sectigo), аккредитованному Microsoft, и получает сертификат подписи кода (Code Signing Certificate). Для драйверов режима ядра требуется EV-сертификат.
  3. Подписание драйвера: с помощью инструментов (например, SignTool из Windows SDK) разработчик подписывает файл. Для драйверов режима ядра подпись должна быть встроенной.
  4. Отправка на проверку (для WHQL): драйвер может быть отправлен в Microsoft для тестирования и получения подписи WHQL. Это необязательно, но повышает доверие системы.
  5. Распространение: подписанный драйвер распространяется через официальные каналы (например, Windows Update, сайт производителя).

Проверка подписи операционной системой

Операционная система проверяет цифровую подпись драйвера в несколько этапов:

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

В Windows, если драйвер не имеет действительной подписи, система может:

  • Заблокировать установку (в 64-разрядных версиях Windows по умолчанию).
  • Выдать предупреждение (в 32-разрядных версиях).
  • Отключить загрузку драйвера при включённом Secure Boot.

Проблемы и критика

Несмотря на очевидные преимущества, система цифровой подписи драйверов имеет ряд недостатков:

  • Сложность для разработчиков: получение EV-сертификата требует времени и затрат (от нескольких сотен до тысяч долларов в год). Это затрудняет разработку драйверов для небольших компаний и энтузиастов.
  • Отзыв сертификатов: если сертификат издателя был скомпрометирован, все драйверы, подписанные им, становятся недействительными. Это может привести к массовым сбоям.
  • Ограничения для открытого ПО: драйверы с открытым исходным кодом (например, для Linux) сложно подписывать, так как процесс требует закрытого ключа, который должен храниться в секрете. Это создаёт проблемы для дистрибутивов, использующих Secure Boot.
  • Уязвимости в процессе: в 2020-х годах были выявлены случаи, когда вредоносные драйверы получали действительные подписи через украденные или поддельные сертификаты. Например, инцидент с драйверами Netfilter и VirtualBox в 2022 году, когда подписанные драйверы использовались для обхода защиты.

Применение в различных операционных системах

Microsoft Windows

В Windows цифровая подпись драйвера является обязательной для 64-разрядных версий, начиная с Windows Vista. Для 32-разрядных версий подпись рекомендуется, но не обязательна. Подпись требуется для драйверов режима ядра (kernel-mode drivers) и для драйверов, загружаемых до загрузки ОС (boot-start drivers). Пользовательские драйверы (user-mode drivers) могут быть подписаны каталожной подписью.

macOS

В macOS, начиная с версии 10.9, все драйверы (kext) должны быть подписаны сертификатом, выпущенным Apple. Процесс включает регистрацию разработчика в программе Apple Developer и получение сертификата. Без подписи драйвер не загружается в системе с включённым Gatekeeper.

Linux

В Linux цифровая подпись драйвера не является обязательной, но требуется для загрузки модулей ядра при включённом Secure Boot. Дистрибутивы, такие как Ubuntu и Fedora, предоставляют механизм подписания модулей с помощью ключа Machine Owner Key (MOK), который можно добавить вручную. Для драйверов, распространяемых через репозитории, подпись обычно выполняется дистрибутивом.

Интересные факты

  • В 2019 году Microsoft объявила, что все драйверы режима ядра, подписанные после 1 января 2021 года, должны использовать EV-сертификаты. Это требование было отложено до 2023 года из-за пандемии COVID-19.
  • В 2022 году компания NVIDIA выпустила драйвер с подписью, которая была отозвана из-за уязвимости, что привело к временной блокировке обновлений на некоторых системах.
  • В России требования к цифровой подписи драйверов регулируются законодательством о сертификации средств криптографической защиты информации (СКЗИ), но на практике для драйверов, распространяемых через Windows Update, применяются международные стандарты.

Источники

  • Microsoft Docs: «Driver Signing Requirements for Windows» (2023).
  • Microsoft Security Blog: «Securing the Windows Kernel with Driver Signing» (2021).
  • Статья «Code Signing Certificate» на сайте DigiCert.
  • Документация Apple: «System Integrity Protection and Kernel Extension Signing».
  • Linux Foundation: «Secure Boot and Kernel Module Signing» (2022).
  • Отчёт «The State of Driver Signing in 2023» (Journal of Cybersecurity Research).
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru