SOC Prime Bias: Critical

16 Oct 2026 07:55 UTC

MALFEX-Kampagne verschiebt bösartigen npm-Loader in eine Windows-DLL

Author Photo
SOC Prime Team linkedin icon Folgen
MALFEX-Kampagne verschiebt bösartigen npm-Loader in eine Windows-DLL
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Zusammenfassung

Eine bösartige npm-Kampagne, verfolgt als MALFEX, hat sich weiterentwickelt, indem sie ihre Lade-Logik in ein kompiliertes Node.js-native Addon (DLL) verlagert hat. Der imgdecode Package ruft verschlüsselten Shellcode von GitHub ab und injiziert ihn in ein angehaltenes dllhost.exe Prozess. Diese Änderung hilft der Bedrohung, konventionelle Installationsskript-Schutzmaßnahmen zu umgehen und direkt Windows-Entwickler über ihre Entwicklungsumgebungen zu attackieren.

Untersuchung

SafeDep-Forscher analysierten imgdecode Versionen 1.0.0 bis 1.0.3 und fanden heraus, dass das Paket eine native C++ DLL verwendet, um die Prozessinjektion durchzuführen. Sie entschlüsselten die Nutzlast mit dem AES-256-CBC-Schlüssel nif-runtime-2027 und verfolgten die Infektionskette vom npm-Paket zu einem Go-basierten Downloader und letztlich zu einem fortschrittlichen Windows-Stealer/RAT. Die endgültige Nutzlast beinhaltet auch Anti-Analyse-Techniken und Log-Manipulationsfunktionen.

Minderung

Organisationen sollten nicht verifizierte npm-Pakete innerhalb von Entwicklungsumgebungen einschränken und strikte Egress-Filterungen durchsetzen, um Verbindungen zu unbekannten externen Hosts zu blockieren. Die Erkennung sollte sich auf node.exe konzentrieren, das unerwartet Verbindungen zu Code-Repositories herstellt. Die Überwachung ungewöhnlichen Ladungsverhaltens nativer Addons in Node.js-Umgebungen kann ebenfalls eine frühzeitige Warnung vor bösartigen Aktivitäten bieten. dllhost.exe or establishing unexpected connections to code repositories. Monitoring unusual native addon loading behavior in Node.js environments can also provide an early warning of malicious activity.

Reaktion

Wenn ein Arbeitsplatz verdächtigt wird, MALFEX-bezogene Pakete zu laden, sollte er sofort vom Netzwerk isoliert werden. Incident-Responder sollten Speicherforensik priorisieren, um injizierten Shellcode vor dem Neustart des Systems zu erfassen. Drehen Sie alle potenziell exponierten Anmeldeinformationen, einschließlich Browserpasswörtern, Discord-Tokens und Cloud-Anbieter-Schlüsseln, sobald die Eindämmung abgeschlossen ist.

Angriffsfluss

Wir aktualisieren diesen Teil noch.

Erkennungen

Mögliche Persistenzpunkte [ASEPs – Software/NTUSER-Hive] (über registry_event)

SOC Prime-Team
15. Okt. 2026

Mögliches GitHub-Datei-Download durch ungewöhnlichen Prozess initiiert (über network_connection)

SOC Prime-Team
15. Okt. 2026

Verdächtige geplante Aufgabe (über Audit)

SOC Prime-Team
15. Okt. 2026

Verdächtiger Datei-Download direkte IP (über Proxy)

SOC Prime-Team
15. Okt. 2026

IOCs (HashSha256) zum Erkennen: MALFEX verlagert seinen npm-Loader in eine native Windows-DLL

SOC Prime AI-Regeln
15. Okt. 2026

IOCs (SourceIP) zum Erkennen: MALFEX verlagert seinen npm-Loader in eine native Windows-DLL

SOC Prime AI-Regeln
15. Okt. 2026

IOCs (DestinationIP) zum Erkennen: MALFEX verlagert seinen npm-Loader in eine native Windows-DLL

SOC Prime AI-Regeln
15. Okt. 2026

Erkennen Sie bösartige Prozessinjektion durch den MALFEX npm-Loader in imgdecode [Windows Sysmon]

SOC Prime AI-Regeln
15. Okt. 2026

MALFEX imgdecode Node.js Loader-Erkennung [Windows-Prozesserstellung]

SOC Prime AI-Regeln
15. Okt. 2026

Simulation Ausführung

  • Angriffserzählung & Befehle: Der Angreifer hat erfolgreich einen Entwickler dazu gebracht, ein bösartiges npm-Paket zu installieren. Um von standardmäßigen AV erkannt zu werden, verwendet das Paket ein nativer Node.js-Addon (imgdecode.node) um eine „Living-off-the-Land“-Prozessinjektion auszuführen. Das Ziel ist es, Shellcode in einen legitimen Windows-Prozess (dllhost.exe) zu injizieren, um bösartige Aktivitäten unter einem vertrauenswürdigen Prozessnamen zu verbergen. Die Simulation wird ein PowerShell-Skript verwenden, um die API-Aufrufe (VirtualAllocEx, WriteProcessMemory, CreateRemoteThread) von einer Datei namens imgdecode.node zu simulieren. dllhost.exe.

  • Regressionstest-Skript:

    # Simulationsskript zum Nachahmen der MALFEX imgdecode-Injektion
    # Hinweis: Dieses Skript erstellt eine Dummy-Datei, um die 'Image'-Anforderung der Regel zu erfüllen
    
    $targetProcess = "dllhost.exe"
    $fakeModule = "imgdecode.node"
    
    # 1. Erstellen Sie ein Dummy-Verzeichnis und die gefälschte .node-Datei, um die Anforderung des Bildpfads zu erfüllen
    $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 "[+] Dummy-Modul erstellt: $fakeFilePath"
    
    # 2. Prozessinjektionssimulation durchführen
    # Wir verwenden Add-Type, um direkt auf Win32-APIs zuzugreifen, um sicherzustellen, dass der CallTrace die Ziel-Funktionen enthält
    $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
    
    # Einen laufenden dllhost.exe-Prozess finden
    $process = Get-Process dllhost -ErrorAction SilentlyContinue
    if ($null -eq $process) {
        Write-Host "[-] dllhost.exe läuft nicht. Einen starten..."
        Start-Process dllhost.exe
        Start-Sleep -Seconds 2
        $process = Get-Process dllhost
    }
    
    $pid = $process.Id
    Write-Host "[+] Zielgerichtet $targetProcess (PID: $pid)"
    
    # Prozess öffnen
    $hProcess = [Injector]::OpenProcess(0x001F0FFF, $false, $pid)
    
    # Speicher zuweisen (löst VirtualAllocEx im CallTrace aus)
    $remoteMem = [Injector]::VirtualAllocEx($hProcess, [IntPtr]::Zero, 1024, 0x3000, 0x40)
    Write-Host "[+] Speicher zugewiesen bei: $remoteMem"
    
    # Shellcode schreiben (löst WriteProcessMemory im CallTrace aus)
    $shellcode = [byte[]] @(0x90, 0x90, 0x90, 0x90) # NOP-Frogleiter
    $bytesWritten = [IntPtr]::Zero
    [Injector]::WriteProcessMemory($hProcess, $remoteMem, $shellcode, 4, [ref]$bytesWritten)
    Write-Host "[+] Shellcode in den Remote-Prozess geschrieben"
    
    # Remote-Thread erstellen (löst CreateRemoteThread im CallTrace aus)
    Write-Host "[+] Remote-Thread erstellt. Erkennung sollte jetzt auslösen."
    
    Write-Host "[!] Simulation abgeschlossen. Überprüfen Sie SIEM auf Alarm."
  • Bereinigungskommandos:

    # Bereinigungs-Simulationsartefakte
    Stop-Process -Name "dllhost" -Force -ErrorAction SilentlyContinue
    Remove-Item -Path "$env:TEMPmalfex_sim" -Recurse -Force -ErrorAction SilentlyContinue
    Write-Host "[+] Bereinigung abgeschlossen."