Как проверить подлинность цифровой подписи установочного пакета MSI

Вы скачали установщик .msi — может быть, с официального сайта, а может, с зеркала или файлообменника. И теперь хочется уверенности: пакет не подменён, не перехвачен, не дописан кем-то по пути. Именно для этого существует цифровая подпись. Разберёмся, как её проверить — от самого простого способа в Windows до продвинутых инструментов, которые используют в корпоративных средах.

Зачем вообще проверять подпись MSI

MSI-пакет — это не просто архив с файлами. При установке он часто получает повышенные привилегии, прописывает службы, драйверы, записи в реестр. Если подпись отсутствует или не валидна, вы не знаете, кто собрал этот пакет и что в нём на самом деле. Проверка подписи отвечает на три вопроса:

  • Пакет выпущен тем, кто заявил себя как издатель?
  • С момента подписания пакет не изменялся?
  • Сертификат издателя действителен и не отозван?

Если хотя бы один ответ «нет» — ставить такой пакет без веской причины не стоит.

Быстрая проверка через свойства файла

Самый простой способ, не требующий ничего, кроме проводника Windows.

  1. Кликните правой кнопкой мыши по файлу .msi и выберите Свойства.
  2. Перейдите на вкладку Цифровые подписи.
  3. Если вкладка есть — в списке должна отображаться подпись. Выберите её и нажмите Подробно.
  4. В окне сведений ищите строку вроде Этот цифровой подписной достоверен или Срок действия сертификата истёк.

Если вкладки «Цифровые подписи» нет — пакет вообще не подписан. Это не всегда признак вредоносного ПО, но повод насторожиться, особенно если вы ожидали увидеть подпись от конкретного разработчика.

Что означают статусы проверки

Windows может показать несколько разных состояний. Вот как их читать:

  • OK / Подпись достоверна — всё в порядке: подпись валидна, сертификат прошёл проверку цепочки доверия, срок не истёк.
  • Сертификат истёк или не вступил в силу — подпись математически корректна, но сертификат уже не действует. Такое бывает с старыми дистрибутивами. Риск зависит от контекста: если это драйвер 2015 года — одно дело, если свежий софт — подозрительно.
  • Сертификат отозван — издатель или удостоверяющий центр аннулировали сертификат. Обычно это происходит при компрометации ключа. Ставить такой пакет нельзя.
  • Подпись не может быть проверена — не удалось построить цепочку доверия до корневого сертификата. Возможно, на компьютере не установлены нужные корневые сертификаты, либо подпись вообще от неизвестного издателя.
  • Подпись не является доверенной — цепочка построена, но конечный сертификат не находится в хранилище «Доверенные корневые центры сертификации». Часто бывает с самоподписанными сертификатами.

Проверка через PowerShell — быстрее и информативнее

Если нужно проверить один файл или прогнать целую папку с MSI, PowerShell подходит лучше, чем клики в свойствах.

Откройте PowerShell и выполните:

Get-AuthenticodeSignature -FilePath "C:\path\to\your.msi" | Format-List

Вывод покажет статус, имя издателя, срок действия сертификата, тип подписи. Ключевой параметр — Status. Значение Valid означает, что подпись прошла проверку.

Чтобы проверить все MSI в папке и подпапках:

Get-ChildItem -Path "C:\Downloads" -Filter "*.msi" -Recurse | ForEach-Object { Get-AuthenticodeSignature $_.FullName } | Select-Object Path, Status, SignerCertificate | Format-Table -AutoSize

Это удобно, когда вы скачали несколько пакетов и хотите быстро увидеть, у каких подпись валидна, а у каких — нет.

Проверка сертификата без установки пакета

Иногда нужно посмотреть, что за сертификат стоит у MSI, не запуская проверку через систему. Для этого подходит утилита signtool.exe, которая входит в состав Windows SDK.

Если SDK не установлен, можно использовать встроенную утилиту или установить signtool отдельно — он входит в пакет Windows SDK и доступен бесплатно.

Команда для проверки:

signtool verify /pa "C:\path\to\your.msi"

Ключ /pa заставляет использовать стандартный проверяющий движок Authenticode. Если добавить /v, вывод будет подробным — с цепочкой сертификатов и временными метками.

Если подпись прошла проверку, вы увидите сообщение вроде The file is successfully verified. Если нет — конкретную ошибку: истёкший сертификат, отозванный, недоверенный корень.

Что такое временная метка подписи и почему она важна

Когда разработчик подписывает MSI, в подпись может быть внесена временная метка (timestamp) от доверенного сервера меток. Это фиксирует момент, когда подпись была создана.

Зачем это нужно: без метки подпись перестаёт считаться валидной, как только истекает срок действия сертификата подписи. С меткой — остаётся валидной, потому что можно доказать, что подпись была поставлена, пока сертификат ещё действовал.

Проверить наличие метки можно в том же выводе Get-AuthenticodeSignature — смотрите свойство TimeStamperCertificate. Если оно заполнено — метка есть.

Практический вывод: если вы видите, что подпись «истекла», но при этом есть временная метка — пакет всё ещё можно считать доверенным, при условии, что сам сертификат не был отозван.

Сравнение способов проверки

Способ Сложность Что показывает Когда использовать
Свойства файла → Цифровые подписи Минимальная Наличие подписи, базовый статус Быстрая проверка одного файла
PowerShell: Get-AuthenticodeSignature Низкая Полный статус, сертификат, цепочка Массовая проверка, автоматизация
signtool verify Средняя Детальная верификация с временными метками Анализ подозрительных пакетов, аудит
Сервисы вроде VirusTotal Минимальная Подпись + антивирусная проверка Быстрая оценка доверия к файлу

Проверка через VirusTotal — быстро, но с оговорками

VirusTotal показывает, подписан ли файл, кто указан как издатель, и не был ли сертификат отозван. Загрузите MSI на сайт и откройте вкладку «Details» — там будет раздел о цифровой подписи.

Плюс: не нужно ничего устанавливать, видна информация из десятков антивирусов. Минус: вы загружаете файл третьей стороне, что не всегда допустимо по политике безопасности организации. Для проприетарного или внутреннего ПО этот способ не подходит.

Как проверить цепочку сертификатов вручную

В окне свойств подписи нажмите «Подробно» → «Просмотреть сертификат». Затем перейдите на вкладку «Путь сертификации». Вы увидите иерархию:

  • Ваш сертификат издателя (внизу)
  • Промежуточный сертификат удостоверяющего центра
  • Корневой сертификат (вверху)

Каждый элемент должен быть действительным. Если на каком-то уровне стоит красный крестик — цепочка не доверена. Часто проблема в том, что на компьютере не установлен актуальный корневой сертификат. Обновите корневые сертификаты через Windows Update или загрузите их с сайта Microsoft.

Частые ошибки при проверке

Ошибка 1: «Нет подписи — значит вирус». Отсутствие подписи не делает файл автоматически вредоносным. Многие легитимные пакеты, особенно от небольших разработчиков, не подписаны. Но и доверять такому файлу вслепую нельзя — проверяйте источник, хеш-суммы, отзывы.

Ошибка 2: «Подпись есть — значит безопасно». Подпись подтверждает только, что пакет подписан конкретным издателем и не изменялся после подписания. Если сам издатель распространяет малварь или его сертификат украли — подпись будет валидной, а файл — вредоносным.

Ошибка 3: Игнорирование отзыва сертификата. Если сертификат отозван, подпись считается недействительной, даже если математически она корректна. Всегда проверяйте статус отзыва — в свойствах подписи это обычно отображается явно.

Ошибка 4: Проверка только хеша без подписи. Сверка хеш-сумма (SHA-256) с заявленным на сайте разработчика подтверждает целостность, но не подлинность издателя. Хеш могли подделать вместе с файлом на сайте. Цифровая подпись решает эту проблему, потому что её нельзя подделать без закрытого ключа издателя.

Что делать в зависимости от ситуации

Ситуация 1: Вы обычный пользователь, скачали программу.

Откройте свойства MSI → вкладка «Цифровые подписи». Если подпись есть и статус «OK» — можно устанавливать. Если подписи нет — проверьте, есть ли она у других версий на официальном сайте. Сверьте хеш-сумму, если разработчик её публикует.

Ситуация 2: Вы администратор, разворачиваете ПО в компании.

Используйте PowerShell для массовой проверки всех дистрибутивов перед развёртыванием. Убедитесь, что сертификат издателя присутствует в хранилище «Доверенные издатели» на целевых машинах. Если используется самоподписанный сертификат — добавьте его в доверенные через групповую политику.

Ситуация 3: Подпись не проходит проверку, но пакет нужен.

Сначала выясните причину. Обновите корневые сертификаты. Проверьте системное время — если оно сбито, проверка подписи может не сработать. Если проблема остаётся — свяжитесь с разработчиком и запросите переподписанный пакет. Не отключайте проверку подписи через политики — это плохая практика.

Ситуация 4: Подпись валидна, но издатель неизвестен.

Проверьте имя издателя в сертификате. Часто там указано название компании, а не название программы. Поищите информацию о сертификате в интернете. Если издатель не идентифицируется — относитесь к пакету как к непроверенному.

Как настроить автоматическую проверку в корпоративной среде

Если вы отвечаете за безопасность в организации, ручная проверка не масштабируется. Вот что можно сделать:

  • AppLocker / Windows Defender Application Control (WDAC) — настройте правила, разрешающие установку только подписанных MSI от доверенных издателей. Это самый надёжный подход.
  • Групповая политика — запретите установку неподписанных пакетов через политику ограничения программного обеспечения.
  • Скрипт предварительной проверки — запускайте PowerShell-скрипт перед развёртыванием, который проверяет подпись и отклоняет пакеты с невалидной подписью.
  • SIEM-система — настройте сбор событий установки и проверки подписи для аудита.

Итог: пошаговый чек-лист

  1. Откройте свойства MSI → «Цифровые подписи». Убедитесь, что подпись есть.
  2. Проверьте статус — должно быть «OK» или «Подпись достоверна».
  3. Откройте сертификат и проверьте имя издателя, срок действия, путь сертификации.
  4. Убедитесь, что сертификат не отозван.
  5. Если подпись истекла — проверьте наличие временной метки. С меткой пакет всё ещё можно считать доверенным.
  6. Если подпись отсутствует — сверьте хеш-сумму с официальным источником и оцените репутацию сайта.
  7. В корпоративной среде — автоматизируйте проверку через PowerShell или AppLocker.

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

Оцените статью
PEFile — Безопасность и технологии простым языком