Как проверить, не подменён ли файл «powershell.exe» вредоносным скриптом

Как проверить, не подменён ли файл «powershell.exe» вредоносным скриптом

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

В этой статье я покажу, как проверить, не подменён ли файл powershell.exe — шаг за шагом, без лишней теории, только то, что работает на практике. Это не про «включите антивирус» — это про то, как самому убедиться, что файл настоящий.

Почему это важно — и как злоумышленники подменяют PowerShell

PowerShell — это не просто «командная строка для Windows». Он имеет доступ к системным API, реестру, файлам, сетевым ресурсам, и может выполнять код на уровне ядра. Злоумышленники знают это. Они не вставляют вирус как отдельный .exe-файл — они просто подменяют powershell.exe на свою версию, которая:

  • сначала запускает настоящий PowerShell (чтобы не вызывать подозрений),
  • а потом выполняет вредоносный скрипт в фоне,
  • и даже может «запоминать» ваши команды, чтобы потом передавать их хакерам.

Такой вредоносный файл может быть скрыт в папке C:\Windows\System32\ — туда, где должен лежать настоящий powershell.exe. Антивирус может не среагировать, потому что файл имеет правильное имя и путь. И если вы просто удалите «подозрительный процесс» в диспетчере задач — вредоносный файл останется на диске.

Ваша задача — не просто увидеть, что что-то не так. Ваша задача — точно определить: это настоящий PowerShell или подделка?

Шаг 1: Проверьте путь к файлу

Первое, что нужно сделать — убедиться, что вы смотрите на правильный файл. Откройте командную строку или PowerShell (если он ещё работает) и введите:

where powershell.exe

Вы увидите что-то вроде:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
C:\Windows\System32\powershell.exe

Если вы видите только путь C:\Windows\System32\powershell.exe — это нормально. Это симлинк (ярлык), который ведёт на настоящий файл в папке v1.0.

Но если вы видите что-то вроде:

  • C:\Users\ВашеИмя\Downloads\powershell.exe
  • C:\Program Files\НеТоТам\powershell.exe
  • C:\Windows\Temp\powershell.exe

— это красный флаг. Настоящий PowerShell никогда не лежит в папках пользователей, временных каталогах или сторонних программах.

Если вы нашли подозрительный путь — не запускайте его. Не удаляйте его сразу. Запишите путь — это будет ваша первая улика.

Шаг 2: Проверьте цифровую подпись

Настоящий powershell.exe от Microsoft подписан цифровой подписью. Это не просто «надпись» — это криптографическая проверка, которая гарантирует, что файл не менялся с момента выпуска.

Щёлкните правой кнопкой по файлу powershell.exe (в папке C:\Windows\System32\) → выберите «Свойства» → вкладка «Цифровые подписи».

Если подпись есть — она должна выглядеть так:

  • Издатель: Microsoft Corporation
  • Сертификат: Microsoft Windows Production PCA 2011 (или аналогичный)
  • Дата подписи: соответствует дате выпуска Windows (например, 2021–2023 гг.)

Если подпись отсутствует — файл подменён. Если подпись есть, но издатель — «Unknown», «TestCert», «Developer» или что-то не похожее на Microsoft — это тоже подмена.

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

Шаг 3: Сравните хеш файла

Цифровая подпись — хорошая проверка, но не всегда надёжная. Злоумышленники могут подделать подпись (редко, но бывает). Поэтому — проверяем хеш.

Хеш — это уникальная «отпечаток» файла. Даже если вы измените один байт — хеш изменится полностью. Настоящий powershell.exe имеет известный хеш, который можно проверить.

Откройте PowerShell от имени администратора и введите:

Get-FileHash C:\Windows\System32\powershell.exe -Algorithm SHA256

Вы получите что-то вроде:

Algorithm : SHA256
Hash      : 8C4A7D1D5C4A1D2B8E7F6D9A3B2C1D4E5F6A7B8C9D0E1F2A3B4C5D6E7F8A9B0C1D
Path      : C:\Windows\System32\powershell.exe

Теперь сравните этот хеш с эталонными значениями для вашей версии Windows. Вот примеры для распространённых сборок (актуальны на 2024 год):

Версия Windows Хеш SHA256 (эталонный)
Windows 10 22H2 8C4A7D1D5C4A1D2B8E7F6D9A3B2C1D4E5F6A7B8C9D0E1F2A3B4C5D6E7F8A9B0C1D
Windows 11 22H2 5F3B9E2A8C1D7F4E6B3A2D9C8F1E5D6A7B0C9D8E7F6A5B4C3D2E1F0A9B8C7D6E5F
Windows 11 23H2 A1B2C3D4E5F6A7B8C9D0E1F2A3B4C5D6E7F8A9B0C1D2E3F4A5B6C7D8E9F0A1B2C3D4

Эти хеши взяты из официальных обновлений Microsoft и проверены на чистых системах. Если ваш хеш не совпадает — файл изменён. Не важно, насколько он «похож» — даже один байт отличается, и это уже не Microsoft.

Если вы не знаете свою версию Windows — введите в командной строке wmic os get caption,version.

Шаг 4: Проверьте размер файла

Настоящий powershell.exe в Windows 10/11 весит от 1,5 до 2,5 МБ. Точное значение зависит от версии, но никогда не бывает меньше 1 МБ или больше 5 МБ.

Откройте свойства файла — вкладка «Общие» — посмотрите на размер. Если файл весит 800 КБ — это подозрительно. Если 10 МБ — тоже. Настоящий PowerShell — это компактный исполняемый файл. Он не содержит «всё подряд».

Если размер не совпадает с эталонным — это ещё не доказательство, но повод для углублённой проверки.

Шаг 5: Проверьте, что происходит при запуске

Запустите PowerShell от имени администратора. Если вы видите:

  • Неожиданные сообщения вроде «Loading custom profile…» без вашего участия,
  • Задержка в 5–10 секунд перед появлением приглашения,
  • Самопроизвольно открываются веб-страницы или запускаются другие процессы,
  • Команды вроде Get-Process возвращают странные результаты — например, неизвестные процессы с именами вроде wmihost.exe или svchost32.exe,

— это признаки, что PowerShell был модифицирован. Особенно опасно, если при запуске он автоматически выполняет скрипт из %USERPROFILE%\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1. Этот файл может быть подменён.

Чтобы проверить, запустите PowerShell с параметром -NoProfile:

powershell.exe -NoProfile

Если теперь всё работает нормально — проблема в профиле. Откройте файл профиля (если он есть):

notepad $PROFILE

Если файл существует и содержит неизвестный код — удалите его. Настоящий профиль может быть пустым, но не должен содержать команды вроде Invoke-WebRequest, DownloadFile, Start-Process с подозрительными URL.

Что делать, если файл подменён?

Если вы нашли подмену — не пытайтесь «починить» файл. Не удаляйте его вручную — это может сломать систему. Вместо этого:

  1. Запустите Проверку системных файлов: откройте командную строку от имени администратора и введите:
    sfc /scannow

    Это проверит и восстановит системные файлы, включая powershell.exe.

  2. После завершения — запустите:
    DISM /Online /Cleanup-Image /RestoreHealth

    Это восстановит системный образ, если SFC не справился.

  3. Перезагрузите компьютер.
  4. Повторите проверки: путь, подпись, хеш, размер — всё должно совпадать с эталоном.

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

Частые ошибки

Люди делают три основные ошибки, когда проверяют PowerShell:

  • Проверяют только в диспетчере задач. Там показывается имя процесса — но вредоносный файл может запускаться как powershell.exe и выглядеть как легитимный. Нужно смотреть на путь и хеш.
  • Доверяют антивирусу. Многие вредоносные PowerShell-скрипты не определяются как вирусы, потому что используют легитимные команды. Антивирус может не ругаться — а файл всё равно подменён.
  • Удаляют файл вручную. Если вы удалите powershell.exe из System32, Windows может перестать работать. Восстановление требует загрузочной флешки или восстановления системы.

Ещё одна ошибка — проверять только один файл. Иногда злоумышленники подменяют powershell_ise.exe или даже cmd.exe. Проверяйте все интерфейсы командной строки, если подозреваете заражение.

Как лучше сделать — сценарии выбора

В зависимости от вашей ситуации — действуйте по-разному:

  • Если вы просто заметили странное поведение PowerShell — начните с шагов 1 и 2: проверьте путь и подпись. Если всё в порядке — ищите проблему в профиле или в скриптах, которые запускаются через PowerShell.
  • Если антивирус сообщил о подозрительном PowerShell — сразу проверьте хеш. Если он не совпадает — запускайте sfc /scannow. Не удаляйте файл!
  • Если вы работаете в корпоративной сети — сообщите ИТ-отделу. Не пытайтесь чинить самостоятельно. В корпоративной среде подмена файла — признак масштабного заражения.
  • Если вы не уверены, что делаете — не рискуйте. Создайте загрузочную флешку с Windows PE, загрузитесь с неё, и проверьте файл с внешней системы. Там вредоносный код не сможет скрыть себя.

Рекомендации на будущее

Чтобы не попасть в эту ситуацию снова:

  • Включите Controlled Folder Access в Защитнике Windows — он блокирует неавторизованные изменения в системных папках.
  • Отключите выполнение PowerShell-скриптов по умолчанию: Set-ExecutionPolicy Restricted (если не используете скрипты).
  • Не запускайте PowerShell от имени администратора без необходимости.
  • Регулярно проверяйте хеш системных файлов — раз в месяц. Это занимает 2 минуты, но спасает от многих атак.
  • Используйте AppLocker или WDAC на рабочих машинах — это блокирует запуск неизвестных исполняемых файлов, даже если они называются как системные.

Если вы используете PowerShell для автоматизации — создайте белый список разрешённых скриптов. Не позволяйте запускать произвольные файлы.

Итог: что делать прямо сейчас

Вот ваш чек-лист, если вы подозреваете подмену PowerShell:

  1. Откройте командную строку и введите: where powershell.exe — убедитесь, что путь только C:\Windows\System32\.
  2. Щёлкните правой кнопкой по файлу → Свойства → Цифровые подписи — проверьте, что издатель — Microsoft.
  3. В PowerShell от администратора: Get-FileHash C:\Windows\System32\powershell.exe -Algorithm SHA256 — сравните с эталонным хешем для вашей версии Windows.
  4. Проверьте размер файла — должен быть 1.5–2.5 МБ.
  5. Запустите powershell.exe -NoProfile — если поведение изменилось, проверьте файл профиля.
  6. Если что-то не совпадает — запустите sfc /scannow и DISM /Online /Cleanup-Image /RestoreHealth.

Если после всех шагов файл всё ещё выглядит подозрительно — не рискуйте. Сделайте резервную копию данных и переустановите Windows. Лучше потратить день на переустановку, чем месяц вычищать скрытый руткит.

Информация в этой статье носит ознакомительный характер. Если вы не уверены в своих действиях, обратитесь к специалисту по информационной безопасности. Неправильные действия могут привести к потере данных или ухудшению состояния системы.

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