Кампанія MALFEX Переміщує Шкідливий Завантажувач npm у Windows DLL
Detection stack
- AIDR
- Alert
- ETL
- Query
Резюме
Шкідлива кампанія npm, що відстежується як MALFEX, зазнала еволюції, перемістивши логіку завантажувача у скомпільоване Node.js рідне доповнення (DLL). imgdecode пакет отримує зашифрований шелкод з GitHub і впроваджує його в призупинений dllhost.exe процес. Ця зміна допомагає загрозі обійти звичайні захисти інсталяційних скриптів і безпосередньо націлити Windows-розробників через їхні середовища розробки.
Розслідування
Дослідники SafeDep проаналізували imgdecode версії з 1.0.0 по 1.0.3 і виявили, що пакет використовує рідну C++ DLL для реалізації впровадження в процес. Вони розшифрували навантаження за допомогою ключа AES-256-CBC nif-runtime-2027 і відстежили ланцюг інфекції від пакета npm до завантажувача на основі Go і в кінцевому підсумку до вдосконаленого злодія Windows/шкідливого програмного забезпечення RAT. Остаточний код також включає техніки проти аналізу та функціональність спотворення журналу.
Пом’якшення
Організації слід обмежити використання неперевірених npm-пакетів у середовищах розробки та посилити режими вихідної фільтрації, щоб заблокувати з’єднання з невідомими зовнішніми хостами. Виявлення повинно зосереджуватися на node.exe запуску dllhost.exe або встановленні неочікуваних з’єднань з кодовими репозиторіями. Моніторинг незвичного завантаження рідних доповнень у середовищах Node.js також може надати ранній сигнал про шкідливу активність.
Відповідь
Якщо є підозра, що робоча станція завантажує пакети, пов’язані з MALFEX, негайно ізолюйте її від мережі. Відповідальні за інцидент повинні пріоритизувати судову експертизу пам’яті для захоплення впровадженого шелкоду до перезавантаження системи. Змістьте всі потенційно піддані ризику облікові дані, включаючи паролі браузера, токени Discord і ключі хмарних провайдерів, як тільки ізоляція буде завершена.
Атака Флоу
Ми все ще оновлюємо цю частину.
Виявлення
Можливі точки стійкості [ASEPs – Software/NTUSER Hive] (через подію реєстру)
Можливе завантаження файлів з GitHub, ініційоване незвичайним процесом (через підключення до мережі)
Підозріла запланована задача (через аудит)
Підозріле завантаження файлу за прямою IP-адресою (через проксі)
Індикатори компрометації (HashSha256) для виявлення: MALFEX перемістив свій npm-завантажувач у рідний DLL для Windows
Індикатори компрометації (SourceIP) для виявлення: MALFEX перемістив свій npm-завантажувач у рідний DLL для Windows
Індикатори компрометації (DestinationIP) для виявлення: MALFEX перемістив свій npm-завантажувач у рідний DLL для Windows
Виявити шкідливе впровадження процесів завантажувачем MALFEX npm у imgdecode [Windows Sysmon]
Виявлення завантажувача Node.js MALFEX imgdecode [створення процесів Windows]
Імітаційне виконання
-
Опис атаки та команди: Противник успішно обманув розробника і встановив шкідливий npm-пакет. Щоб уникнути виявлення стандартними AV, пакет виконує впровадження процесу за допомогою рідного додатку Node.js (
imgdecode.node), щоб виконувати процес впровадження «Живучи з землі». Мета полягає у впровадженні шелкоду в легітимний Windows-процес (dllhost.exe), щоб приховати шкідливу активність під іменем довіреного процесу. Імітація використовуватиме скрипт PowerShell для імітації викликів API (VirtualAllocEx,WriteProcessMemory,CreateRemoteThread) з файлу під назвоюimgdecode.nodeщоб націлитиdllhost.exe. -
Скрипт регресійного тестування:
# Скрипт імітації для імітації впровадження MALFEX imgdecode # Примітка: Цей скрипт створює фіктивний файл для відповідності вимогам "Зображення" правила $targetProcess = "dllhost.exe" $fakeModule = "imgdecode.node" # 1. Створення фіктивного каталогу та фіктивного файлу .node для задоволення вимоги до шляху зображення $tempDir = Join-Path $env:TEMP "malfex_sim" New-Item -ItemType Directory -Force -Path $tempDir | Out-Null $fakeFilePath = Join-Path $tempDir $fakeModule New-Item -ItemType File -Force -Path $fakeFilePath | Out-Null Write-Host "[+] Створено фіктивний модуль: $fakeFilePath" # 2. Виконання імітації впровадження процесу # Ми використовуємо Add-Type для прямого доступу до API Win32, щоб гарантувати, що CallTrace містить цільові функції $code = @" using System; using System.Runtime.InteropServices; public class Injector { [DllImport("kernel32.dll")] public static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId); [DllImport("kernel32.dll")] public static extern IntPtr VirtualAllocEx(IntPtr hProcess, IntPtr lpAddress, uint dwSize, uint flAllocationType, uint flProtect); [DllImport("kernel32.dll")] public static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, uint nSize, out IntPtr lpNumberOfBytesWritten); [DllImport("kernel32.dll")] public static extern IntPtr CreateRemoteThread(IntPtr hProcess, IntPtr lpThreadAttributes, uint dwStackSize, IntPtr lpStartAddress, IntPtr lpParameter, uint dwCreationFlags, IntPtr lpThreadId); [DllImport("kernel32.dll")] public static extern uint GetCurrentProcessId(); } "@ Add-Type -TypeDefinition $code # Знайти виконуваний процес dllhost.exe $process = Get-Process dllhost -ErrorAction SilentlyContinue if ($null -eq $process) { Write-Host "[-] dllhost.exe не працює. Запускаємо..." Start-Process dllhost.exe Start-Sleep -Seconds 2 $process = Get-Process dllhost } $pid = $process.Id Write-Host "[+] Націлювання на $targetProcess (PID: $pid)" # Відкрити процес $hProcess = [Injector]::OpenProcess(0x001F0FFF, $false, $pid) # Виділити пам'ять (запускає VirtualAllocEx в CallTrace) $remoteMem = [Injector]::VirtualAllocEx($hProcess, [IntPtr]::Zero, 1024, 0x3000, 0x40) Write-Host "[+] Виділено пам'ять на: $remoteMem" # Записати шелкод (запускає WriteProcessMemory в CallTrace) $shellcode = [byte[]] @(0x90, 0x90, 0x90, 0x90) # NOP Sled $bytesWritten = [IntPtr]::Zero [Injector]::WriteProcessMemory($hProcess, $remoteMem, $shellcode, 4, [ref]$bytesWritten) Write-Host "[+] Шелкод записано у віддалений процес" # Створити віддалений потік (запускає CreateRemoteThread в CallTrace) Write-Host "[+] Створено віддалений потік. Виявлення повинно бути запущено зараз." Write-Host "[!] Імітація завершена. Перевірте SIEM для сповіщення." -
Команди очищення:
# Очищення артефактів імітації Stop-Process -Name "dllhost" -Force -ErrorAction SilentlyContinue Remove-Item -Path "$env:TEMPmalfex_sim" -Recurse -Force -ErrorAction SilentlyContinue Write-Host "[+] Очищення завершено."