Безопасность
Опасные расширения файлов: что нельзя открывать без проверки
Список опасных расширений, таблица риска и проверка вложения перед открытием — какие форматы нельзя запускать без проверки.
Скачали установщик с сайта, антивирус молчит — но хочется убедиться, что EXE или MSI действительно выпустил тот разработчик, за которого он себя выдаёт, а не кто-то, кто подменил файл по дороге. Для этого у исполняемых файлов и инсталляторов Windows есть встроенный механизм — цифровая подпись Authenticode. Разбираем, что именно она подтверждает, как её проверить тремя способами и как не перепутать с совсем другой сущностью — файлом формата .sig.
Коротко: цифровую подпись EXE/MSI проверяют через «Свойства» файла → вкладка «Цифровые подписи», через PowerShell-команду Get-AuthenticodeSignature или через signtool verify. Статус «Действительна» подтверждает издателя и то, что файл не менялся после подписания — но НЕ гарантирует безопасность содержимого: подписанные вредоносные программы существуют.

Технология, которой подписаны исполняемые файлы и инсталляторы Windows, называется Authenticode. Издатель получает код-сайнинг-сертификат у доверенного центра сертификации, подписывает им EXE или MSI — и в файл встраивается криптографическая подпись, которую Windows умеет проверять без обращения к издателю напрямую.
Подпись отвечает ровно на два вопроса: кто выпустил этот файл и не менялось ли его содержимое после подписания. Если хотя бы один байт файла изменился — подпись становится недействительной, и Windows сообщит об этом. Это делает Authenticode удобным инструментом для обнаружения подмены файла при пересылке или взломе сайта-источника.
Действительная подпись подтверждает издателя и целостность файла, но ничего не говорит о том, что внутри файла нет вредоносного кода. Известны случаи, когда код-сайнинг-сертификаты крали или получали мошенническим путём, и ими подписывали малварь — антивирусные компании периодически отзывают такие сертификаты. Подпись — один из сигналов доверия, а не окончательный вердикт.
Самый быстрый способ для обычного пользователя — штатное окно свойств файла, без установки дополнительных программ.
Если результат наверху окна — «Эта цифровая подпись действительна», файл прошёл базовую проверку целостности и происхождения. Любая другая формулировка требует дополнительного внимания — полный разбор статусов ниже.
PowerShell-команда Get-AuthenticodeSignature (разберём её в следующем разделе) возвращает один из пяти статусов — они же, по сути, описывают и то, что можно увидеть в окне «Свойства».
| Статус | Что означает | Что делать |
|---|---|---|
| Valid | Подпись действительна: цепочка сертификатов доверенная, содержимое файла не менялось после подписания | Можно доверять происхождению файла; дополнительно сверьте имя издателя |
| NotSigned | Файл не содержит цифровой подписи вообще | Не приговор сам по себе — многие безопасные программы не подписаны (см. ниже); проверяйте файл другими способами |
| HashMismatch | Подпись есть, но контрольная сумма файла не совпадает с той, что была на момент подписания — содержимое изменили после подписания | Не запускать файл: это прямой признак подмены или повреждения |
| NotTrusted | Сертификат издателя не входит в цепочку доверия системы (например, самоподписанный или от неизвестного ЦС) | Запускать с осторожностью, только если издатель заведомо известен и ожидаем |
| UnknownError | Подпись есть, но проверить её не удалось — например, сертификат отозван или истёк срок его действия | Выяснить причину отдельно (отзыв сертификата — серьёзный повод для подозрений), не запускать файл не глядя |
PowerShell даёт более подробный и удобный для копирования результат, чем окно «Свойства», и его проще применить сразу к нескольким файлам.
Get-AuthenticodeSignature "C:\путь\к\файлу.exe" — замените путь на реальный, с кавычками, если в пути есть пробелы.Get-ChildItem "C:\Downloads\*.exe","C:\Downloads\*.msi" | Get-AuthenticodeSignature — команда построчно покажет статус каждого файла в папке.Документация команды с полным списком параметров и возвращаемых полей — у Microsoft Learn.
SignTool — утилита из Windows SDK, которой обычно подписывают файлы сами разработчики, но она же умеет и проверять подпись с более строгими настройками, чем штатный графический интерфейс. Это удобно в сборочных и CI-процессах, где нужен машинно читаемый результат.
signtool verify /pa "C:\путь\к\файлу.exe" — ключ /pa проверяет подпись по политике Authenticode, используемой по умолчанию в Windows.0 — подпись успешно проверена; 1 — подпись не прошла проверку; другие коды соответствуют конкретным ошибкам (отсутствие подписи, проблема с цепочкой сертификатов и т. д.).SignTool дополнительно проверяет, что цепочка сертификатов ведёт к доверенному корневому центру сертификации, и учитывает отзыв сертификата через список CRL — это строже, чем базовая проверка через окно «Свойства». Полный синтаксис и перечень ключей — в официальной документации Microsoft Learn.
Сама по себе подпись бесполезна без доверия к тому, кто её поставил. Поэтому Windows проверяет не только криптографическую корректность подписи, но и цепочку сертификатов: сертификат издателя должен быть выдан промежуточным центром сертификации, а тот, в свою очередь, — одним из корневых ЦС, которым доверяет операционная система.
В окне «Просмотреть сертификат» (см. раздел про «Свойства») вкладка «Путь сертификации» показывает всю цепочку — от сертификата издателя до корневого ЦС. Если рядом с каким-то звеном цепочки стоит красный крестик, цепочка доверия нарушена, и Windows не сможет подтвердить подлинность издателя, даже если сама подпись технически корректна.
Также стоит обращать внимание на срок действия сертификата издателя и на временную метку (timestamp) подписи — если она присутствует, подпись остаётся действительной и после истечения срока действия самого сертификата, потому что фиксирует момент, когда файл был подписан, а не момент проверки.
Да — MSI-файлы подписываются и проверяются по тому же механизму Authenticode, что и EXE: через «Свойства» → «Цифровые подписи» или через Get-AuthenticodeSignature, та же таблица статусов, те же выводы. Разница с EXE скорее практическая: MSI часто распространяют корпоративные инсталляторы, которые ставят ПО через групповые политики, и там подпись дополнительно подтверждает, что пакет не подменили перед массовым развёртыванием на множество компьютеров. Если нужно разобраться, что такое формат MSI в целом и чем он отличается от обычного EXE-установщика, — отдельный разбор в статье файл MSI: что это и как его открыть.
Отсутствие подписи само по себе не означает, что файл опасен. Код-сайнинг-сертификат стоит денег и требует ежегодного продления, поэтому многие небольшие open-source-проекты и бесплатные утилиты энтузиастов распространяются без подписи — у разработчика просто нет бюджета на сертификат. Внутренний корпоративный софт, который компания пишет и использует только у себя, тоже часто остаётся неподписанным: его и так распространяют по контролируемым каналам, а не через открытый интернет.
Команды, которые разрабатывают и поставляют клиентам собственное ПО, обычно сами подписывают свои установщики цифровой подписью — так заказчик видит подтверждённого издателя уже при первом запуске, без дополнительных объяснений. Этим, в частности, занимается команда YuSMP Group при заказной разработке и аудите ПО.
Windows покажет «Эта цифровая подпись действительна» для ЛЮБОГО корректно подписанного файла — включая тот, что подписан сертификатом неизвестной компании с похожим на бренд названием. Статус «действительна» проверяет криптографию, а не то, стоит ли доверять конкретному издателю: имя в сертификате нужно сверять самостоятельно.
Отсутствие подписи — это нейтральный факт, а не диагноз. Большая часть легитимного бесплатного и open-source софта не подписана именно из-за стоимости сертификата, а не из-за злого умысла разработчика.
Если инсталлятор распространяется и как EXE, и как MSI, подпись нужно смотреть у того файла, который вы реально запускаете, — встроенный лаунчер и сам MSI-пакет технически являются разными файлами и могут быть подписаны (или не подписаны) по-разному.
Статус вроде UnknownError, вызванный отзывом сертификата издателя, — это не техническая мелочь, а сигнал, что сам центр сертификации или издатель посчитали сертификат скомпрометированным. Такой файл не стоит запускать, пока не выяснится причина отзыва.
Не путайте проверку встроенной Authenticode-подписи EXE/MSI с файлами формата .sig — отдельным контейнером детач-подписи (например, в GPG), который хранится рядом с проверяемым файлом отдельным документом. Если у вас на диске лежит именно файл с расширением .sig и его нужно открыть, это другая задача и другой инструмент — разбор в статье чем открыть файл .sig.
Это означает, что файл вообще не содержит встроенной цифровой подписи — в терминах PowerShell это статус NotSigned. Сам по себе это не признак опасности: часть легитимного бесплатного и open-source софта распространяется без подписи, потому что код-сайнинг-сертификат стоит денег и требует продления.
Отсутствие подписи не делает файл автоматически опасным, но и не подтверждает его происхождение. Для файла без подписи стоит дополнительно проверить источник загрузки, прогнать файл через онлайн-антивирус и, если возможно, сверить контрольную сумму с опубликованной разработчиком.
Цифровая подпись подтверждает издателя файла и то, что содержимое не менялось после подписания, — это проверка происхождения и целостности. Антивирус анализирует само содержимое файла на признаки вредоносного кода. Это разные и дополняющие друг друга проверки: подписанный файл теоретически может содержать малварь, если сертификат был украден или скомпрометирован.
Точно так же, как и для EXE: через «Свойства» файла → вкладку «Цифровые подписи» или командой Get-AuthenticodeSignature "C:\путь\к\файлу.msi" в PowerShell. Если инсталлятор идёт в виде EXE-лаунчера и отдельного MSI-пакета, подпись стоит проверить у обоих файлов — это разные файлы, которые могут быть подписаны по-разному.
Сверьте название издателя в сертификате с ожидаемым разработчиком программы — например, с тем, что указано на официальном сайте. Названия, похожие на известный бренд, но с мелкими отличиями в написании, — повод отказаться от запуска файла и скачать его из проверенного источника заново.
Саму криптографическую подпись подделать практически невозможно без закрытого ключа издателя, но известны случаи кражи или мошеннического получения код-сайнинг-сертификатов, которыми затем подписывали вредоносные программы. Поэтому действительная подпись — сильный, но не абсолютный сигнал доверия: отозванные по этой причине сертификаты как раз и дают статус UnknownError при проверке.
Скрипты тоже можно подписывать и проверять той же командой Get-AuthenticodeSignature, но в отличие от EXE/MSI, скриптовые файлы технически способны выполняться и без подписи — если политика выполнения PowerShell это разрешает. Подробный разбор проверки именно .bat/.vbs/.ps1-файлов перед запуском — в статье как проверить скрипт перед запуском.