Каждый драйвер, который встаёт в систему, по идее должен нести цифровую подпись, своего рода печать подлинности от проверенного издателя. Подпись подтверждает, что пакет выпущен именно тем, кто заявлен, и не был подменён по дороге. Но реальность пёстрая. На компьютере годами накапливаются драйверы разного происхождения, и среди них нередко затёсываются неподписанные, для экзотической периферии, старого оборудования или самодельных утилит. Иногда такой драйвер совершенно безобиден, а иногда именно он становится причиной нестабильности или дырой в защите.
Узнать, какие драйверы в системе обходятся без подписи, полезно по нескольким причинам. Это и диагностика загадочных сбоев, и проверка безопасности, и просто наведение порядка перед важной работой. Windows хранит эту информацию и охотно делится ею, нужно лишь знать, какими инструментами спросить. Встроенные средства показывают полную картину подписей за пару команд, без сторонних программ и без копания в свойствах каждого драйвера вручную.
Зачем драйверу подпись и чем грозит её отсутствие
Чтобы понимать смысл проверки, стоит разобраться, что вообще даёт цифровая подпись. Драйвер работает на самом глубоком уровне системы, в режиме ядра, где у него практически неограниченная власть над компьютером. Вредоносный или просто кривой драйвер на этом уровне способен обрушить систему, открыть лазейку для атаки или незаметно следить за происходящим. Подпись это механизм доверия: издатель ставит свою криптографическую печать, а система проверяет её и убеждается, что пакет подлинный и неизменённый.
Отсутствие подписи само по себе не приговор. Многие добросовестные производители выпускают неподписанные драйверы для нишевого оборудования, потому что сертификация стоит денег и времени, а рынок устройства узок. Смартфоны на отдельных чипсетах, старые трекболы, специфические контроллеры, у всего этого драйверы порой идут без подписи и при этом работают исправно. Так что неподписанный драйвер это повод присмотреться, а не паниковать.
Тревогу вызывает другое. Если подпись пропала у драйвера, который раньше был подписан, или если неподписанный драйвер появился без ведома пользователя, это уже сигнал. За таким может скрываться повреждение файла, подмена вредоносной программой или сбой при обновлении. Поэтому ценность проверки не в том, чтобы заклеймить все неподписанные драйверы, а в том, чтобы знать о них и понимать, откуда каждый взялся.
Стоит различать два типа подписи, которые встречаются на практике. Одни драйверы подписаны самим производителем оборудования его собственным сертификатом, другие несут подпись Microsoft, выданную после прохождения программы сертификации совместимости. Вторая разновидность считается более весомой, потому что означает проверку драйвера лабораторией, а не только заявление издателя о своём авторстве. Для пользователя разница обычно несущественна, оба варианта подписи система принимает как доверенные. Но при разборе спорных случаев понимание, кто именно поставил подпись, помогает оценить степень доверия к конкретному пакету.
Проверка подписей встроенной утилитой sigverif
Самый наглядный способ найти неподписанные файлы заложен в графической утилите sigverif, которая присутствует в Windows издавна. Она специально создана для поиска файлов без цифровой подписи и работает предельно просто, без необходимости помнить параметры командной строки. Запускают её через окно выполнения команд, набрав имя:
sigverif
Откроется окно мастера с предложением начать сканирование. После запуска утилита проходит по системным файлам и драйверам, проверяя у каждого наличие действительной подписи. Процесс занимает некоторое время, по завершении которого мастер показывает список файлов, не имеющих подписи. Именно эти файлы и есть предмет интереса, остальное система сочла подписанным и доверенным. Преимущество мастера в наглядности: не нужно помнить ключи и форматы, достаточно нажать кнопку и дождаться готового перечня.
Самое ценное у sigverif это журнал результатов. Утилита сохраняет подробный отчёт в текстовый файл с именем sigverif.txt, который лежит в папке общих документов всех пользователей системы. В этом журнале перечислены проверенные файлы со статусом подписи, датой установки, версией и расположением. Открыв его, человек получает полную опись: что подписано, что нет, когда установлено и откуда. Этот файл удобно сохранить и сравнить с более поздней проверкой, чтобы заметить, не появилось ли новых неподписанных файлов.
Список драйверов и их подписей через driverquery
Тем, кто предпочитает командную строку, доступен мощный инструмент driverquery. Эта утилита перечисляет все установленные в системе драйверы и умеет показывать массу сведений о каждом. Простой вызов без параметров выдаёт базовый список драйверов с их именами и типами:
driverquery
Для интересующей нас задачи ключевую роль играет особый параметр, отвечающий за информацию о подписях. С ним утилита показывает, какие драйверы подписаны, а какие нет, что и требуется при поиске неподписанных:
driverquery /si
Вывод этой команды прямо отвечает на главный вопрос, отделяя подписанные драйверы от тех, что обходятся без печати. Чтобы результат было удобно сохранить и разобрать, его выводят в формате с разделением запятыми, который открывается в табличном редакторе. Заодно можно убрать строку заголовков, если список передаётся на дальнейшую обработку скриптом:
driverquery /si /fo csv
Здесь параметр формата задаёт вывод в виде, пригодном для таблиц, а сам список превращается в готовый материал для анализа. Для общего обзора драйверов с подробностями применяют развёрнутый формат списком, который показывает имя производителя, состояние и прочие детали по каждому драйверу. Стоит учесть нюанс: подробный режим и режим информации о подписях не совмещаются в одной команде, это два разных взгляда на драйверы, и каждый запускают отдельно.
Как pnputil показывает состояние подписи пакетов
Знакомая по работе с драйверами утилита pnputil тоже причастна к теме подписей, хотя и под иным углом. Когда она перечисляет сторонние пакеты драйверов из хранилища, в выводе по каждому пакету присутствует строка, говорящая о состоянии его подписи. Команда перечисления уже знакома:
pnputil /enum-drivers
В выводе для каждого пакета oemN.inf видны поставщик, класс, версия, дата и пометка о подписи. Эта пометка показывает, заверен ли пакет доверенным издателем. Так перечисление драйверов заодно служит проверкой подписей именно для сторонних пакетов, добавленных поверх системных. Разница с предыдущими инструментами в охвате: sigverif и driverquery смотрят шире, на все драйверы системы, тогда как pnputil сосредоточен на сторонних пакетах в хранилище.
Это разделение удобно использовать осознанно. Когда нужна тотальная картина по всем драйверам, включая системные, берут sigverif или driverquery. Когда же интересуют именно добавленные сторонние пакеты, например после установки драйверов с непонятного источника, быстрее заглянуть в вывод pnputil. Сторонний неподписанный пакет в хранилище это первый кандидат на проверку происхождения, ведь системные драйверы Microsoft подписаны всегда.
Проверка подписи отдельного файла средствами PowerShell
Когда нужно проверить не всю систему скопом, а конкретный файл драйвера, например тот самый подозрительный пакет, удобнее всего обратиться к PowerShell. У него есть командлет, который вытаскивает статус подписи любого файла с подробностями о том, кто и чем его заверил. Проверка одного файла драйвера выглядит так:
Get-AuthenticodeSignature C:\Windows\System32\drivers\mydriver.sys
В ответ командлет показывает статус подписи и сведения о подписавшем. Статус, говорящий о действительности подписи, означает, что файл заверен корректно и не изменён. Статус о том, что файл не подписан, прямо указывает на отсутствие печати. Бывают и промежуточные состояния, когда подпись есть, но сертификат не вызывает доверия или истёк, и это отдельный повод присмотреться.
Сила PowerShell в том, что проверку легко поставить на поток. Командлет натравливают сразу на целую папку драйверов, отбирая только те файлы, чья подпись не в порядке. Так за один запуск выявляются все проблемные пакеты в каталоге, что выручает при разборе свежескачанного набора драйверов перед установкой. Результат при желании выгружают в таблицу для спокойного анализа, и картина по подписям выстраивается без единого клика мышью. Этот способ дополняет sigverif и driverquery, давая точечный и скриптуемый инструмент там, где графический мастер избыточен.
Что делать с найденными неподписанными драйверами
Обнаружить неподписанный драйвер это только начало, дальше встаёт вопрос, что с ним делать. Ответ зависит от того, узнаёт ли человек этот драйвер и помнит ли, откуда тот взялся. Логика разбора проста и сводится к нескольким развилкам, которые проходят по очереди.
Первый вопрос, знаком ли драйвер. Если это пакет известного устройства, которое заведомо комплектуется неподписанным драйвером, скажем нишевый контроллер или старая периферия, то отсутствие подписи ожидаемо и тревоги не вызывает. Такой драйвер оставляют как есть, отметив для себя, что он легитимен. Если же неподписанный драйвер незнаком и непонятно, к чему он относится, это повод копнуть глубже. Выясняют, к какому устройству он привязан и когда появился, через перечисление драйверов с датами.
Второй вопрос, не повреждён ли файл. Бывает, что драйвер был подписан, а подпись слетела из-за повреждения или модификации файла. На этот случай у системы есть проверка целостности системных файлов, которая чинит повреждённые компоненты. Запускают её отдельной командой проверки, которая просканирует и восстановит затронутые файлы:
sfc /scannow
Если же неподписанный драйвер оказался ненужным или подозрительным, его убирают из системы знакомой командой удаления pnputil по имени пакета. После удаления имеет смысл повторить проверку подписей, чтобы убедиться, что подозрительный пакет действительно покинул систему и не оставил следов.
Осознанный взгляд на подписи и безопасность системы
Проверка подписей это не разовая акция, а полезная привычка, особенно для тех, кто ставит драйверы из разных источников. Современные версии Windows по умолчанию требуют подпись для драйверов режима ядра и не дают неподписанному пакету встать просто так, без особых ухищрений. Это серьёзный барьер на пути случайной или вредоносной установки, и обходить его без веской причины не стоит.
Иногда обойти проверку всё же приходится, когда единственный доступный драйвер для нужного устройства не подписан, а производитель не предложил альтернативы. Windows позволяет временно отключить требование подписи для установки такого драйвера, и делается это через особый режим загрузки с дополнительными параметрами, где среди вариантов есть отключение обязательной проверки подписи. Такой режим действует до следующей перезагрузки, чего достаточно, чтобы установить нужный пакет. Это сознательный компромисс, на который идут с пониманием рисков. После установки доверенного, пусть и неподписанного драйвера защиту возвращают на место, чтобы система снова отсекала всё неизвестное.
Главный вывод из работы с подписями прагматичен. Неподписанный драйвер это не клеймо, а метка внимания. Большинство таких драйверов честны и работают годами, но именно среди них прячутся редкие проблемные экземпляры, повреждённые файлы и подделки. Регулярная проверка через sigverif или driverquery, сверка находок с тем, что человек сам устанавливал, и удаление по-настоящему лишних пакетов держат систему в порядке. Знание о том, что и кем подписано, превращает мутную картину доверия в ясный список, где каждому драйверу есть объяснение.