Как анализировать подозрительные PowerShell-скрипты: практическое руководство без паники

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

Я занимаюсь расследованием инцидентов уже давно и скажу вам честно: PowerShell — это самый мощный инструмент в арсенале как системного администратора, так и хакера. Он есть в каждой современной Windows по умолчанию, обладает огромными правами и часто игнорируется классическими защитами. Но бояться его не нужно. Нужно уметь его читать.

В этой статье я не буду пересказывать синтаксис языка программирования. Моя цель — дать вам методику, как взять подозрительный скрипт, разобрать его на части и понять: это вредонос, легитимная админская утилита или просто чей-то неудачный эксперимент. Мы пройдем путь от первого взгляда на код до запуска в безопасной среде.

Первые признаки: когда стоит насторожиться

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

  • Скрипт пришел по почте или в мессенджере. Если вам прислали файл invoice.ps1 или check_document.ps1 от незнакомого отправителя — это почти гарантированно вредонос. Легитимные скрипты так не распространяются.
  • Файл лежит в странном месте. Скрипты администратора обычно хранятся в C:\Scripts, C:\Program Files или в профилях пользователей системных служб. Если вы нашли update.ps1 в папке Downloads или во временной папке AppData\Local\Temp — это плохой знак.
  • Имя файла пытается обмануть. Названия вроде invoice.pdf.ps1 (где реальное расширение скрыто) или WindowsUpdate.ps1 (имитация системного файла) — классика социальной инженерии.
  • Запуск скрытый. Если скрипт запускается через планировщик задач с флагом -WindowStyle Hidden или через powershell.exe -nop -w hidden, кто-то очень не хочет, чтобы вы видели, что происходит на экране.

Если вы столкнулись с любым из этих пунктов, не запускайте скрипт двойным кликом. Даже если вы просто нажмете «Выполнить», он может начать действовать. Ваша задача — изучить его статически, то есть без исполнения.

Этап 1: Визуальный осмотр и деобфускация

Откройте файл в обычном блокноте или, что лучше, в редакторе кода вроде VS Code или Notepad++. Сразу оцените читаемость.

Читаемый код

Если вы видите понятные команды, вроде Get-Process, Copy-Item, Invoke-WebRequest с понятными аргументами — это хорошо. Вы можете быстро пробежаться глазами и понять логику. Например, скрипт скачивает файл с корпоративного сервера и кладет его в папку. Это подозрительно только если сервер неизвестен.

Обфусцированный код (каша)

Злоумышленники редко оставляют код читаемым. Вы увидите нечто подобное:

a = 'I','E','X';b = -join a; &b ('Write-Host "Hello"')

Или еще хуже — огромная строка из случайных символов:

powershell -enc SQBFAFgAKABOAGUAdwAtAE8AYgBqAGUAYwB0ACAATgBlAHQALgBXAGUAYgBDAGwAaQBlAG4AdAApAC4ARABvAHcAbgBsAG8AYQBk... 

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

Что делать с кашей? Ваша задача — привести код к читаемому виду. Это называется деобфускация. Не нужно быть хакером. Часто достаточно просто скопировать строку и вставить её в сам PowerShell (в режиме ISE или VS Code), но не нажимать Enter. Просто подсветите переменную и посмотрите, чему она равна.

Например, если вы видите конструкцию:

x = "Start";y = "Process"; z =x + y; &z notepad

Вы понимаете, что $z превратится в команду Start-Process, которая запустит блокнот. Злоумышленники используют такие приемы, чтобы скрыть реальные команды от простого поиска по тексту.

Кодировка Base64

Самый частый трюк — запуск PowerShell с ключом -EncodedCommand или -enc. В самом скрипте вы увидите длинную строку букв и цифр. Чтобы её расшифровать:

  1. Скопируйте эту строку.
  2. Откройте онлайн-декодер Base64 (их много, гуглится за секунду) или используйте команду в своем безопасном PowerShell: [System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String("ВАША_СТРОКА")).
  3. Вуаля — перед вами реальный код, который планировалось выполнить.

Этап 2: Поиск опасных команд (IoC)

Когда код стал более-менее понятен, начинаем охоту за конкретными командами. В PowerShell сотни командлетов (cmdlets), но для злоумышленников интерес представляют лишь десятки. Ищите в тексте следующие ключевые слова:

1. Скачивание и выполнение (Download & Execute)

Это база любого вируса. Скрипт должен где-то взять полезную нагрузку.

  • Invoke-WebRequest (или алиас iwr, wget)
  • Invoke-RestMethod
  • New-Object Net.WebClient
  • DownloadFile, DownloadString

На что смотреть: Куда идет запрос? Если адрес ведет на странный IP, домен с набором букв (например, x7z-temp-hosting.ru) или сервис вроде Pastebin/GitHub Gist, где хранят код — это почти 100% malware. Легитимный скрипт будет качать файлы с внутренних серверов компании или официальных репозиториев.

2. Запуск процессов

После скачивания файл нужно запустить.

  • Start-Process (алиас saps)
  • Invoke-Expression (алиас iex) — особо опасная команда. Она берет строку и выполняет её как код. Если вы видите iex (New-Object Net.WebClient).DownloadString(...) — это классическая формула заражения.
  • Invoke-Command

3. Работа с реестром и автозагрузкой

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

  • Set-ItemProperty (часто меняет ключи Run, RunOnce)
  • New-Item в путях реестра HKCU\Software\Microsoft\Windows\CurrentVersion\Run
  • ScheduledTasks — создание новых задач в планировщике.

4. Сбор данных и скрытность

  • Get-Credential — кража паролей.
  • Protect-CmsMessage — шифрование данных (может быть частью ransomware).
  • Add-MpPreference — добавление исключений в защитник Windows (чтобы антивирус не ругался на сам вирус).
  • Set-MpPreference -DisableRealtimeMonitoring $true — отключение защиты.

Этап 3: Анализ сетевой активности

Если в скрипте есть сетевые запросы, нужно проверить адреса. Не переходите по ним в браузере! Используйте сервисы вроде VirusTotal, Whois или просто посмотрите на домен.

Признаки плохого домена:

  • Домен зарегистрирован вчера или позавчера.
  • Имя домена не имеет смысла (набор букв).
  • Используется бесплатный хостинг (например, поддоменыblogspot, wix, или дешевые VPS), если это не корпоративный ресурс.
  • IP-адрес находится в другой стране, где у вашей компании нет бизнеса.

Часто хакеры используют сервисы сокращения ссылок (bit.ly, tinyurl) или файлообменники, чтобы скрыть конечный адрес. В таком случае скрипт сначала идет на сокращатель, получает редирект и только потом качает вирус. В коде это выглядит как цепочка запросов.

Инструментарий: где и как проверять

Не нужно устанавливать сложные системы для разового анализа. Вот мой базовый набор:

  1. VS Code с расширением PowerShell. Дает подсветку синтаксиса, помогает видеть структуру и переменные. Удобнее блокнота в разы.
  2. Pester. Это фреймворк для тестирования, но его можно использовать для безопасного прогона частей скрипта, если вы умеете изолировать окружение.
  3. Песочница (Sandbox). Если вы не уверены, запустите скрипт на виртуальной машине без сети или в изолированной среде (например, Windows Sandbox, встроенная в Win 10/11 Pro). Никогда не запускайте подозрительный скрипт на основной рабочей машине!
  4. Process Monitor (ProcMon). Запустите его перед запуском скрипта в песочнице. Он покажет все действия в реальном времени: какие файлы созданы, какие ключи реестра изменены, куда пошли сетевые запросы.

Сценарии: что делать в разных ситуациях

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

Ситуация / Признаки Вероятный вердикт Рекомендуемое действие
Код читаемый, делает бэкап файлов в сетевую папку компании Легитимный админский скрипт Проверить автора (кто создал файл). Если это коллега — ок. Если нет — уточнить назначение.
Использует Invoke-Expression + скачивание с Pastebin/GitHub Высокий риск (Trojan/Loader) Не запускать. Удалить файл. Проверить журналы событий на предмет предыдущих запусков.
Скрипт зашифрован (Base64) или сильно обфусцирован Подозрительно (90% malware) Деобфусцировать. Если после расшифровки видны команды отключения антивируса — это вирус.
Пытается отключить Defender или добавить исключения Критический риск Изолировать машину от сети. Запустить полное сканирование сторонним антивирусом. Анализировать, что успело выполниться.
Запрашивает ввод пароля через Get-Credential в неожиданном месте Фишинг / Кража учетных данных Не вводить данные. Сменить пароль учетной записи, если ввод уже произошел.

Частые ошибки при анализе

Даже опытные специалисты иногда ошибаются. Вот список граблей, на которые лучше не наступать:

1. Запуск «просто посмотреть» на основной машине.
Самая фатальная ошибка. PowerShell имеет доступ ко всей системе. Скрипт может удалиться сам после выполнения, оставив только бэкдор. Всегда используйте виртуалку или песочницу.

2. Игнорирование алиасов.
Злоумышленники знают, что вы будете искать слово Invoke-WebRequest. Поэтому они пишут iwr или wget. Или используют полную запись метода: (New-Object Net.WebClient).DownloadFile(...). Ищите по сути действия, а не только по именам команд.

3. Доверие цифровой подписи.
То, что скрипт подписан, не значит, что он безопасен. Сертификаты часто воруют, или подписывают вредоносный код украденными ключами. Всегда смотрите на содержимое, а не только на статус подписи.

4. Анализ только одного файла.
Часто основной скрипт — это лишь «загрузчик» (дроппер). Он маленький и безобидный на вид, но его задача — скачать основной вирус. Если вы удалили только скрипт, но не проверили, что он успел скачать и запустить, проблема осталась.

Как лучше сделать: пошаговый алгоритм

Если вы нашли подозрительный файл прямо сейчас, действуйте по этому алгоритму:

  1. Изоляция. Отключите компьютер от сети (выдерните кабель или отключите Wi-Fi). Это предотвратит передачу данных хакеру или скачивание дополнительных модулей.
  2. Копирование. Скопируйте файл на флешку или в изолированную папку для анализа. Оригинальный файл пока не удаляйте — он может понадобиться для изучения хеша или передачи специалистам.
  3. Статический анализ. Откройте файл в блокноте. Поищите ключевые слова (скачивание, реестр, запуск процессов). Попробуйте декодировать Base64 строки.
  4. Проверка IoC. Найденные URL или IP-адреса пробейте через VirusTotal. Не переходите по ним!
  5. Динамический анализ (опционально). Если статический анализ не дал ясности, запустите файл в виртуальной машине с включенным ProcMon. Посмотрите, какие файлы создаются и куда идут соединения.
  6. Вердикт и зачистка.
    • Если это вирус: удалите файл, проверьте автозагрузку, реестр и планировщик задач на следы этого скрипта. Смените пароли.
    • Если это легитимный скрипт: выясните, почему он оказался в подозрительном месте.

Итог

Анализ PowerShell-скриптов — это не магия, а внимательность. Вам не нужно знать язык в совершенстве, достаточно понимать основные команды и логику работы системы. Главный принцип: доверяй, но проверяй. Любой скрипт, пришедший извне или найденный в неожиданном месте, должен считаться враждебным, пока не доказано обратное.

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

И помните: самый безопасный скрипт — это тот, который вы написали сами или получили из доверенного источника, и который вы понимаете от первой до последней строки.

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

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