Перед запуском любого исполняемого файла, драйвера или скрипта, полученного из внешнего источника, полезно убедиться, что он обладает действительной цифровой подписью. Подпись подтверждает, что файл не был изменён после выпуска и что его издатель контролирует соответствующий сертификат. Ниже описано, как получить и интерпретировать сведения о сертификате файла, какие инструменты доступны и на что обращать внимание при оценке результата.
- Зачем проверять сертификат файла
- Где находится информация о сертификате
- Через свойства файла в проводнике
- Через PowerShell
- Через Sysinternals Sigcheck
- Через signtool (часть Windows SDK)
- Как интерпретировать результаты проверки
- Подпись действительна (Valid)
- Подпись неизвестна (UnknownError или NotTrusted)
- Подпись отсутствует (NotSigned)
- Подпись повреждена (HashMismatch)
- Срок действия сертификата истёк (Expired)
- Сертификат отозван (Revoked)
- Метка времени отсутствует
- Ограничения и нюансы проверки
- Практический порядок действий перед открытием файла
- Сравнение способов проверки
- Типичные ошибки и как их избежать
- Что делать дальше после проверки
Зачем проверять сертификат файла
Цифровая подпись решает две основные задачи:
- Обеспечивает целостность файла – любое изменение содержимого после подписи приведёт к несоответствию подписи.
- Подтверждает источник – подпись связана с сертификатом, выданным доверенным центром сертификации (ЦС) или внутренним ЦС организации.
Если подпись отсутствует или недействительна, файл может быть изменён злоумышленником или опубликован неизвестным издателем. В таких случаях рекомендуется проявлять особую осторожность.
Где находится информация о сертификате
Для файлов формата PE (исполняемые .exe, .dll, драйверы .sys) и некоторых скриптов (PowerShell, VBA) цифровая подпись хранится в специальном атрибуте Authenticode. Доступ к этим сведениям можно получить несколькими способами.
Через свойства файла в проводнике
- Щёлкните правой кнопкой мыши по файлу и выберите «Свойства».
- Перейдите на вкладку «Цифровые подписи». Если вкладка отсутствует – файл не подписан.
- Выберите подпись в списке и нажмите «Сведения».
- В окне «Сведения о подписи» нажмите «Просмотреть сертификат».
В окне сертификата вы увидите:
- Кому выдан (Subject) – обычно название издателя.
- Кем выдан (Issuer) – имя центра сертификации.
- Срок действия (Valid from – Valid to).
- Назначение (Intended purposes) – например, «Проверка кода» (Code Signing).
- Серийный номер и отпечаток (SHA‑1 или SHA‑256).
- Status – значение может быть Valid, UnknownError, NotSigned, HashMismatch, Invalid, Expired, NotTrusted, Revoked и др.
- SignerCertificate – объект сертификата подписанта, из которого можно извлечь Subject, Issuer, ValidFrom, ValidTo.
- TimestampCertificate – сертификат метки времени, если она присутствует.
- SignatureDescription – описание алгоритма хеширования.
- -u – показать только неподписанные файлы.
- -v – подробный вывод, включая детали сертификата и метку времени.
- -e – проверить цепочку сертификатов до доверенного корня.
- Результат проверки подписи.
- Информацию о метке времени.
- Статус проверки отзыва (если доступен).
- Центр сертификации, выдавший сертификат, не находится в доверенном хранилище пользователя или системы.
- Система не смогла построить цепочку до доверенного корня (например, отсутствует промежуточный сертификат).
- Проверка отзыва завершилась ошибкой из‑за недоступности сервера OCSP/CRL.
- Самоподписанные сертификаты (self‑signed) не обеспечивают доверия со стороны третьих лиц, так как не привязаны к общепризнанному ЦС. Их можно использовать только в закрытой инфраструктуре, где сертификат явно добавлен в доверенные хранилища.
- Проверка отзыва (CRL/OCSP) по умолчанию в Windows выполняется только при явном запросе (signtool verify /v или sigcheck -e). Если сервер отзыва недоступен, вывод может показывать подпись как действительную, хотя на самом деле она отозвана.
- Сертификат может быть выдан легитимному ЦС, но закрытый ключ мог быть скомпрометирован без немедленного отзыва. В этом случае подпись остаётся технически валидной, но файл может быть вредоносным.
- Некоторые файлы (например, скрипты .ps1) могут быть подписаны, но выполнение всё равно блокируется политикой выполнения PowerShell. Требуется отдельная проверка политики.
- Антивирусные решения могут всё равно flag‑ить файл как подозрительный из‑заheuristic‑анализа, независимо от подписи.
- Получите файл из надёжного источника (официальный сайт, проверенный репозиторий, корпоративное хранилище). Если источник сомнителен, будьте особенно внимательны.
- Сохраните файл во временную папку, не запуская его сразу.
- Проверьте наличие цифровой подписи через свойства файла или один из перечисленных инструментов.
- Если подпись отсутствует:
- Найдите официальный хеш (SHA‑256 или SHA‑1) файла на сайте издателя и сравните его с хешем загруженного файла (можно вычислить через certutil -hashfile или PowerShell Get-FileHash).
- Запустите файл в изолированной среде (песочница, виртуальная машина) или проверьте антивирусом.
Через PowerShell
PowerShell предоставляет командлет Get-AuthenticodeSignature, который выводит структурированные данные о подписи.
Get-AuthenticodeSignature -FilePath «C:\Путь\к\файлу.exe»
Вывод включает поля:
Для получения более читаемого вывода можно использовать форматирование:
Get-AuthenticodeSignature -FilePath «C:\Путь\к\файлу.exe» |
Select-Object Status,
@{N=’Подписант’;E={$_.SignerCertificate.Subject}},
@{N=’ЦС’;E={$_.SignerCertificate.Issuer}},
@{N=’Действителен с’;E={$_.SignerCertificate.NotBefore}},
@{N=’Действителен по’;E={$_.SignerCertificate.NotAfter}},
Timestamp |
Format-List
Через Sysinternals Sigcheck
Утилита sigcheck.exe (часть набора Sysinternals) показывает информацию о подписи и проверяет её против доверенных корневых сертификатов Windows.
sigcheck -q «C:\Путь\к\файлу.exe»
Ключ -q подавляет вывод хеша и показывает только статус подписи. Дополнительные опции:
Через signtool (часть Windows SDK)
Если установлен Windows SDK, утилита signtool.exe позволяет выполнить верификацию подписи и вывести подробный журнал.
signtool verify /pa /v «C:\Путь\к\файлу.exe»
Ключ /pa указывает использовать только доверенные корневые сертификаты Windows (без доверия к пользовательскому хранилищу). Ключ /v включает подробный вывод, где можно увидеть:
Как интерпретировать результаты проверки
Получив сведения о сертификате, необходимо оценить их надёжность. Ниже перечислены типичные статусы и их значение.
Подпись действительна (Valid)
Файл не был изменён после подписи, цепочка сертификатов доверена, срок действия не истёк, отзыв не обнаружен (если проверка отзыва выполнена). Такой файл можно рассматривать как pochodящий от заявленного издателя с высокой степенью доверия.
Подпись неизвестна (UnknownError или NotTrusted)
Причины могут быть:
В таком случае стоит вручную проверить, доверяете ли вы издателю. Можно импортировать промежуточный сертификат в доверенное хранилище, если вы уверены в его подлинности.
Подпись отсутствует (NotSigned)
Файл не содержит цифровой подписи. Это типично для многих утилит с открытым исходным кодом, внутренних скриптов или старых программ. Отсутствие подписи не автоматически делает файл опасным, но повышает риск несанкционированного изменения. Рекомендуется дополнительно проверить хеш файла по официальному источнику и запустить антивирусную проверку.
Подпись повреждена (HashMismatch)
Хеш файла не соответствует хешу, зашифрованному в подписи. Это явный признак того, что файл был изменён после подписи (возможно, вредоносным образом). Такой файл следует считать ненадёжным и не запускать без дополнительного анализа.
Срок действия сертификата истёк (Expired)
Подпись была действительна на момент подписи, но сертификат уже не действителен. Если присутствует метка времени (timestamp) и она подтверждает, что подпись была сделана до истечения срока, файл всё ещё можно считать целостным. Без метки времени доверять подписи нельзя.
Сертификат отозван (Revoked)
Центр сертификации объявил сертификат недействительным до истечения срока (например, из‑за компрометации закрытого ключа). Файл с такой подписью следует рассматривать как потенциально опасный, даже если хеш совпадает.
Метка времени отсутствует
Если метка времени не присутствует, после истечения срока действия сертификата подпись теряет доверие. Наличие метки времени позволяет проверить, что подпись была действительна в момент создания файла.
Ограничения и нюансы проверки
Проверка цифровой подписи – полезный, но не абсолютный критерий доверия. Следует учитывать следующие ограничения:
Практический порядок действий перед открытием файла
Сравнение способов проверки
Ниже приведено качественное сравнение наиболее часто используемых методов. Оценки основаны на типичных характеристиках утилит и не являются абсолютными числами.
| Метод | Доступность | Глубина проверки | Необходимость установки | Удобство для быстрой проверки |
|---|---|---|---|---|
| Свойства файла (проводник) | Встроено в Windows | Базовая (видимость сертификата, срок) | Не требуется | Высокое |
| PowerShell Get-AuthenticodeSignature | Встроено в Windows 7+ | Средняя (статус, детали сертификата, метка времени) | Не требуется | Среднее | Sysinternals Sigcheck | Бесплатная утилита от Microsoft | Высокая (полная цепочка, проверка отзыва, вывод хеша) | Требует загрузки | Среднее |
| Signtool (Windows SDK) | Входит в SDK (можно установить отдельно) | Высокая (подробный журнал, проверка отзыва, поддержка метки времени) | Требует установки SDK | Низкое (из‑за необходимости командной строки) |
Типичные ошибки и как их избежать
- Полагаться только на отсутствие предупреждений SmartScreen. SmartScreen может пропустить неизвестное ПО, особенно если оно новое или редко встречается. Всегда проверяйте подпись дополнительно.
- Считать, что самоподписанный сертификат надёжен. Без предварительного добавления такого сертификата в доверенные хранилища он не обеспечивает проверку сторонних сторон.
- Игнорировать метку времени. Если сертификат истёк, а метки времени нет, подпись потеряла доверие, даже если файл не изменён.
- Не проверять отзыв сертификата. Отзыв может произойти после выпуска файла; без проверки вы можете ложно принять отозванный сертификат за действительный.
- Запускать файл с правами администратора «на всякий случай». Превышение привилегий увеличивает потенциальный ущерб от вредоносного ПО. Запускайте с минимально необходимыми правами.
Что делать дальше после проверки
Если подпись подтверждена и файл считается безопасным:
- Запустите файл в обычном режиме.
- После первого запуска наблюдайте за поведением (сетевая активность, создание процессов, изменение файлов). При подозрениях повторите анализ в изолированной среде.
- Обновляйте программу только с официальных источников, где подпись регулярно обновляется.
Если проверка выявила проблемы:
- Не открывайте файл.
- Удалите загруженную копию.
- Если файл был получен от известного контакта, уточните у него, действительно ли он отправлял данный файл и каков его источник.
- При необходимости сообщите о подозрительном файле в службу безопасности вашей организации или в антивирусный вендор.
Данная статья носит информационный характер. Она не заменяет консультацию специалиста по информационной безопасности и не гарантирует отсутствие рисков. При работе с файлами из непроверенных источников рекомендуется использовать дополнительные средства защиты (песочница, антивирус, ограничение прав) и, при сомнениях, обращаться к квалифицированному специалисту.
