Цифровая подпись драйвера¶
Цифровая подпись драйвера — это электронная метка, добавляемая к файлу драйвера устройства операционной системы, которая подтверждает его подлинность, целостность и происхождение от конкретного разработчика (издателя). Цифровая подпись создаётся с использованием криптографических методов (инфраструктуры открытых ключей, 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-файлов).
¶Процесс подписания
Процесс получения цифровой подписи драйвера включает несколько этапов:
- Разработка драйвера: создание файла драйвера (например, .sys, .dll, .inf).
- Получение сертификата: разработчик обращается к удостоверяющему центру (например, DigiCert, GlobalSign, Sectigo), аккредитованному Microsoft, и получает сертификат подписи кода (Code Signing Certificate). Для драйверов режима ядра требуется EV-сертификат.
- Подписание драйвера: с помощью инструментов (например, SignTool из Windows SDK) разработчик подписывает файл. Для драйверов режима ядра подпись должна быть встроенной.
- Отправка на проверку (для WHQL): драйвер может быть отправлен в Microsoft для тестирования и получения подписи WHQL. Это необязательно, но повышает доверие системы.
- Распространение: подписанный драйвер распространяется через официальные каналы (например, 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).