Authenticode
Authenticode — это технология цифровой подписи, разработанная корпорацией Microsoft, предназначенная для подтверждения подлинности и целостности программного обеспечения, распространяемого в виде исполняемых файлов, библиотек динамической загрузки (DLL), драйверов устройств, установочных пакетов (MSI) и других компонентов для операционных систем Windows. Технология позволяет разработчикам подписывать свой код цифровой подписью, что даёт конечным пользователям и операционной системе возможность проверить, что файл не был изменён после подписания и что он исходит от конкретного, удостоверенного издателя.
История
Технология Authenticode была впервые представлена в 1996 году как часть платформы Internet Explorer 3.0 и операционной системы Windows 95 с пакетом обновления OSR2. Первоначально она предназначалась для подписи элементов управления ActiveX, которые могли выполняться в браузере, что было связано с высокими рисками безопасности. Подпись должна была гарантировать, что пользователь загружает код от известного разработчика, а не от злоумышленника.
В последующих версиях Windows, начиная с Windows 2000 и Windows XP, поддержка Authenticode была расширена на все исполняемые файлы. В Windows Vista и Windows 7 технология стала обязательной для драйверов устройств в режиме ядра (kernel-mode drivers) — без корректной цифровой подписи такие драйверы не загружались. В Windows 10 и Windows 11 требования ужесточились: для драйверов в режиме ядра требуется подпись, полученная через портал Microsoft Hardware Developer Center с использованием расширенной проверки (EV — Extended Validation). Кроме того, с 2019 года Microsoft требует, чтобы все новые исполняемые файлы и установщики, распространяемые через интернет, были подписаны сертификатом, выпущенным в соответствии с требованиями стандарта CA/Browser Forum Baseline Requirements.
Принцип работы
Authenticode основан на инфраструктуре открытых ключей (PKI). Процесс подписания включает несколько этапов:
- Получение сертификата. Разработчик приобретает цифровой сертификат у доверенного удостоверяющего центра (Центра сертификации, CA), аккредитованного Microsoft. Сертификат содержит открытый ключ разработчика и информацию о его личности.
- Хеширование содержимого. Инструмент подписания (например,
SignTool.exeиз Windows SDK) вычисляет криптографический хеш (дайджест) от всего содержимого файла (исполняемого кода, ресурсов, метаданных). Используется алгоритм SHA-1, SHA-256 или SHA-384. - Шифрование хеша. Полученный хеш шифруется закрытым ключом разработчика, который хранится на его локальном компьютере или в аппаратном модуле безопасности (HSM). Зашифрованный хеш представляет собой цифровую подпись.
- Встраивание подписи. Цифровая подпись вместе с сертификатом разработчика (содержащим открытый ключ) встраивается в специальную секцию файла — в конец PE-файла (Portable Executable). Эта секция называется «Certificate Table» и не влияет на исполняемый код.
При проверке подписи операционная система или приложение (например, браузер) выполняет обратные действия:
- Извлекает из файла цифровую подпись и сертификат.
- Вычисляет хеш текущего содержимого файла.
- Расшифровывает подпись с помощью открытого ключа из сертификата, получая исходный хеш.
- Сравнивает оба хеша. Если они совпадают, файл считается подлинным и неизменённым. Если нет — подпись недействительна.
- Проверяет цепочку сертификатов: удостоверяется, что сертификат разработчика подписан доверенным корневым центром, не истёк и не отозван.
Классификация сертификатов
Существует два основных типа сертификатов для Authenticode:
Стандартный сертификат (Code Signing Certificate)
- Требования к получению: Подтверждение личности разработчика (обычно через проверку организации или физического лица). Процесс занимает от нескольких часов до нескольких дней.
- Область применения: Подпись большинства приложений, библиотек и установщиков, не требующих повышенного уровня доверия.
- Особенности: При первом запуске неподписанного или подписанного стандартным сертификатом приложения Windows может выводить предупреждение «Windows защитила ваш компьютер» (SmartScreen), если у приложения низкая репутация.
Расширенный сертификат (Extended Validation — EV Code Signing Certificate)
- Требования к получению: Строгая проверка юридического лица (компании) через нотариально заверенные документы, подтверждение физического адреса и телефонного номера. Процесс может занимать от нескольких дней до нескольких недель. Закрытый ключ обязательно хранится на аппаратном токене (USB-ключе).
- Область применения: Подпись драйверов в режиме ядра, критически важных системных компонентов, приложений, распространяемых через интернет с высокими требованиями к доверию.
- Особенности: Приложения, подписанные EV-сертификатом, получают более высокий рейтинг в системе SmartScreen, что снижает количество предупреждений. Для драйверов в режиме ядра подпись EV обязательна с 2019 года.
Применение
Authenticode используется в нескольких ключевых областях:
- Подпись исполняемых файлов (.exe, .dll, .ocx, .sys). Это основное применение. Подпись позволяет системе Windows проверять файл при загрузке.
- Подпись установочных пакетов (.msi, .appx). Установщики, подписанные Authenticode, считаются более надёжными. Windows Installer может блокировать установку неподписанных пакетов в зависимости от политик безопасности.
- Подпись драйверов устройств. Для драйверов в режиме ядра подпись обязательна, начиная с Windows Vista (64-разрядные версии). Для драйверов в режиме пользователя подпись рекомендуется, но не обязательна.
- Подпись элементов управления ActiveX. В Internet Explorer (до прекращения поддержки в 2022 году) подпись была обязательна для загрузки и выполнения ActiveX-компонентов.
- Подпись макросов в Microsoft Office. Хотя это не Authenticode в чистом виде, технология цифровой подписи VBA-проектов в Office основана на тех же принципах PKI.
Инструменты для работы
Для подписания файлов с помощью Authenticode используются следующие инструменты:
- SignTool.exe — консольная утилита, входящая в состав Windows SDK (Software Development Kit). Позволяет подписывать файлы, проверять подписи, добавлять метки времени и управлять сертификатами.
- MakeCert.exe — утилита для создания тестовых сертификатов (не предназначена для производственного использования).
- CertMgr.exe — диспетчер сертификатов, позволяющий просматривать и управлять сертификатами в хранилище Windows.
- Visual Studio — интегрированная среда разработки имеет встроенную поддержку подписания через настройки проекта (вкладка «Подпись»).
Критика и ограничения
Технология Authenticode не лишена недостатков:
- Уязвимость к краже закрытых ключей. Если злоумышленник получает доступ к закрытому ключу разработчика, он может подписывать вредоносное ПО от имени легитимного издателя. Известны случаи кражи сертификатов у компаний (например, у Adobe и NVIDIA) для распространения троянов.
- Проблемы с отзывом сертификатов. Если сертификат скомпрометирован, его необходимо отозвать. Однако не все системы и приложения корректно проверяют статус отзыва (CRL — Certificate Revocation List или OCSP — Online Certificate Status Protocol). Это может привести к тому, что вредоносная программа с отозванным сертификатом продолжит работать.
- Сложность для малого бизнеса. Стоимость сертификата (особенно EV) может быть значительной (от нескольких сотен до тысяч долларов в год), что является барьером для небольших разработчиков.
- Недостаточная защита от модификации после подписания. Authenticode защищает только от изменений, которые не затрагивают структуру PE-файла. Существуют методы (например, изменение секции ресурсов или добавление новой секции), которые могут обойти проверку подписи, если система не проверяет подпись при каждой загрузке.
- Зависимость от доверенных центров сертификации. Безопасность всей системы зависит от надёжности CA. Компрометация корневого центра (например, DigiNotar в 2011 году) позволяет подписывать любое ПО.
Альтернативы
В современных версиях Windows (начиная с Windows 10) Microsoft активно продвигает альтернативные механизмы распространения приложений, которые снижают зависимость от Authenticode:
- Microsoft Store. Приложения, распространяемые через магазин, подписываются корпорацией Microsoft, а не разработчиком. Это упрощает проверку для пользователя.
- AppLocker и WDAC (Windows Defender Application Control). Эти технологии позволяют администраторам задавать политики, разрешающие запуск только подписанных определённым образом приложений, но они не заменяют Authenticode, а дополняют его.
- NuGet и другие менеджеры пакетов. Для распространения библиотек и компонентов в среде .NET используется подпись пакетов через NuGet, которая основана на тех же принципах PKI, но имеет свою специфику.
Источники
- Microsoft Docs: "SignTool.exe" (Windows SDK documentation)
- Microsoft Docs: "Digital Signatures for Kernel Modules on Windows"
- CA/Browser Forum: "Baseline Requirements for the Issuance and Management of Publicly-Trusted Code Signing Certificates"
- Microsoft Security Response Center: "Best Practices for Code Signing"
- Windows Internals, Part 1 (7th Edition) by Pavel Yosifovich, Mark Russinovich, David Solomon, Alex Ionescu
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →