SOC Prime Bias: Hoch

13 Feb. 2026 17:05

OysterLoader Enthüllt: Einblick in einen Mehrstufigen Tarnlader

Author Photo
Ruslan Mikhalov Leiter der Bedrohungsforschung bei SOC Prime linkedin icon Folgen
OysterLoader Enthüllt: Einblick in einen Mehrstufigen Tarnlader
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Zusammenfassung

OysterLoader ist ein C++-Multi-Stage-Loader, der verwendet wird, um Ransomware und generische Malware wie Vidar bereitzustellen. Er verbreitet sich über kompromittierte Websites, die legitime Softwareinstallationsprogramme imitieren, und wird als Microsoft Installer (MSI) geliefert. Um die Analyse zu erschweren, verwendet er API-Call-Flooding, eine benutzerdefinierte dynamische API-Auflösung, Anti-Debug-Checks und eine benutzerdefinierte LZMA-Dekomprimierungsroutine. Der Loader kommuniziert mit einer gestaffelten HTTPS C2-Infrastruktur unter Verwendung verschleierter HTTP-Header und einer proprietären Base64-ähnlichen Kodierung.

Untersuchung

Der Bericht skizziert vier Stufen: einen gepackten Verschleierer (TextShell), eine Shellcode-Ebene, die Inhalte mit LZMA entpackt, einen Downloader, der Umgebungsprüfungen durchführt und ein Mutex erstellt, und eine letzte Phase, die eine DLL ablegt und eine geplante Aufgabe installiert. C2-Kommunikation basiert auf fest codierten IPs/Domains, benutzerdefinierten User-Agents und steganografischer Payload-Übertragung über PNG-Icons. Persistenz wird durch eine geplante Aufgabe aufrechterhalten, die alle 13 Minuten ausgeführt wird.

Abschwächung

Blockieren Sie nicht signierte MSI-Installationsprogramme aus unzuverlässigen Quellen und überwachen Sie die Erstellung bekannter Mutex-Muster. Alarmieren Sie bei bekannten Mustern von geplanten Aufgabennamen und der Verwendung von rundll32.exe, um DLLs aus %APPDATA% zu laden. Wo möglich, erzwingen Sie TLS-Inspektion, um die benutzerdefinierten HTTP-Header und User-Agents des Loaders zu identifizieren.

Reaktion

Wenn erkannt, isolieren Sie den Host, beenden Sie die geplante Aufgabe und entfernen Sie die abgelegte Datei COPYING3.dll. Suchen Sie nach zusätzlichen Payloads, listen Sie Prozesse auf, die zu den Mutex-Werten passen, blockieren Sie die aufgelisteten C2-Domains/IPs und aktualisieren Sie die Erkennungen für das Verhalten des API-Floodings und die benutzerdefinierte Base64-Kodierung.

graph TB %% Klassendefinitionen classDef action fill:#99ccff classDef malware fill:#ffcc99 classDef process fill:#ffeb99 classDef persistence fill:#c2f0c2 classDef c2 fill:#d9b3ff %% Knoten initial_access[„<b>Erstzugriff</b> – <b>T1218.007 Systembinary-Proxy-Ausführung: Msiexec</b><br/>Signiertes bösartiges MSI über kompromittierte Website bereitgestellt.“] class initial_access action process_msiexec[„<b>Prozess</b> – msiexec.exe<br/>Führt bösartiges MSI aus“] class process_msiexec process stage1[„<b>Stufe 1</b> – Packer/Obfuskator<br/><b>Techniken</b>: T1027 Verschleierte Dateien oder Informationen, T1027.007 Dynamische API-Auflösung, T1614.001 Systemsprachenerkennung, T1480.002 Ausführungs-Guardrails: Gegenseitiger Ausschluss, T1497.002 Virtualisierungs-/Sandbox-Umgehung: Benutzeraktivitätsbasierte Prüfungen“] class stage1 malware stage2[„<b>Stufe 2</b> – Shellcode<br/><b>Techniken</b>: T1140 Dateien deobfuskieren/dekodieren (RC4), LZMA-Dekomprimierung“] class stage2 malware stage3[„<b>Stufe 3</b> – Downloader & C2<br/><b>Techniken</b>: T1102 Webdienst, T1001.003 Protokoll- oder Dienst-Imitation, T1001.002 Steganografie, T1102.001 Dead-Drop-Resolver“] class stage3 malware c2_server[„<b>C2</b> – HTTPS-Server<br/>Benutzerdefinierte Header und gefälschter User-Agent“] class c2_server c2 dll_payload[„<b>Malware</b> – Abgelegte DLL<br/>Gespeichert in %APPDATA%“] class dll_payload malware process_rundll32[„<b>Prozess</b> – rundll32.exe<br/>Führt DLL über DllRegisterServer aus“] class process_rundll32 process task_schtasks[„<b>Persistenz</b> – Geplante Aufgabe<br/>Startet rundll32 mit der abgelegten DLL“] class task_schtasks persistence stage4[„<b>Stufe 4</b> – Persistenz & Ausführung<br/><b>Techniken</b>: T1546.009 Ereignisgesteuerte Ausführung: AppCert-DLLs, T1027.003 Steganografie, T1102.002 Bidirektionale Kommunikation“] class stage4 malware %% Verbindungen initial_access –>|führt aus| process_msiexec process_msiexec –>|liefert| stage1 stage1 –>|erzeugt| stage2 stage2 –>|lädt herunter| stage3 stage3 –>|kommuniziert mit| c2_server c2_server –>|liefert Payload an| stage3 stage3 –>|schreibt DLL nach| dll_payload dll_payload –>|verwendet von| process_rundll32 process_rundll32 –>|ausgelöst durch| task_schtasks task_schtasks –>|geplant von| stage4

Angriffsfluss

Simulation Ausführung

Voraussetzung: Der Telemetrie & Baseline Pre‑flight Check muss erfolgreich gewesen sein.

Begründung: Dieser Abschnitt beschreibt die präzise Ausführung der gegnerischen Technik (TTP), die zur Auslösung der Erkennungsregel entwickelt wurde. Die Befehle und Erzählungen MÜSSEN die identifizierten TTPs direkt widerspiegeln und darauf abzielen, genau die Telemetrie zu erzeugen, die von der Erkennungslogik erwartet wird. Abstrakte oder nicht relevante Beispiele führen zu Fehldiagnosen.

  • Angriffserzählung & Befehle:
    Der Gegner, der einen ersten Zugriff auf den Endpunkt erlangt hat, setzt die OysterLoader-Payload ein.

    1. DLL-Registrierung über Rundll32 – Der Loader kopiert eine bösartige DLL (COPYING3.dll) in das temporäre Verzeichnis und registriert sie mit rundll32.exe mit dem DllRegisterServer Einstiegspunkt, was zu einer Befehlszeile führt, die übereinstimmt mit Auswahl1.
    2. Anti-Debug-Prüfung – Um einer Analyse zu entgehen, lädt die Payload ntdll.dll und ruft IsDebuggerPresentauf. Dies erzeugt einen Prozessdatensatz, bei dem Image enthält ntdll.dll und die Befehlszeile enthält IsDebuggerPresent, was mit Auswahl2.
    3. Speicherzuweisung – Für die im Speicher ausgeführte Ausführung ruft der Loader NtAllocateVirtualMemory via ntdll.dllauf. Das daraus resultierende Ereignis der Prozesserstellung enthält NtAllocateVirtualMemory in der Befehlszeile, was mit Auswahl3.
  • Regressionstest-Skript:

    # OysterLoader-Erkennungsvalidierungsskript – PowerShell
    # ----------------------------------------------------
    # 1. Erstellen Sie eine Dummy-schädliche DLL (leere Datei zur Simulation)
    $dllPath = "$env:TEMPCOPYING3.dll"
    New-Item -Path $dllPath -ItemType File -Force | Out-Null
    
    # 2. Auswahl1 auslösen – rundll32 mit DllRegisterServer
    Write-Host "Ausführung von Auswahl1 (rundll32 DLL-Registrierung)..."
    Start-Process -FilePath "rundll32.exe" -ArgumentList "`"$dllPath`" DllRegisterServer" -NoNewWindow
    
    # 3. Auswahl2 auslösen – ntdll mit IsDebuggerPresent
    Write-Host "Ausführung von Auswahl2 (IsDebuggerPresent)..."
    $scriptBlock = {
        Add-Type -MemberDefinition @"
            [DllImport("ntdll.dll", SetLastError = true)]
            public static extern bool IsDebuggerPresent();
    "@ -Namespace WinAPI -Name NativeMethods
        [WinAPI.NativeMethods]::IsDebuggerPresent() | Out-Null
    }
    Start-Job -ScriptBlock $scriptBlock | Wait-Job | Receive-Job
    
    # 4. Auswahl3 auslösen – ntdll mit NtAllocateVirtualMemory
    Write-Host "Ausführung von Auswahl3 (NtAllocateVirtualMemory)..."
    $scriptBlock2 = {
        Add-Type -MemberDefinition @"
            [DllImport("ntdll.dll", SetLastError = true)]
            public static extern int NtAllocateVirtualMemory(
                IntPtr ProcessHandle,
                ref IntPtr BaseAddress,
                IntPtr ZeroBits,
                ref UIntPtr RegionSize,
                uint AllocationType,
                uint Protect);
    "@ -Namespace WinAPI -Name NativeMethods
        $process = [System.Diagnostics.Process]::GetCurrentProcess()
        $handle = $process.Handle
        $base = [IntPtr]::Zero
        $size = [UIntPtr]::Zero
        [WinAPI.NativeMethods]::NtAllocateVirtualMemory($handle, [ref]$base, [IntPtr]::Zero, [ref]$size, 0x1000, 0x04) | Out-Null
    }
    Start-Job -ScriptBlock $scriptBlock2 | Wait-Job | Receive-Job
    
    # Bereinigung
    Remove-Item -Path $dllPath -Force
    Write-Host "Simulation abgeschlossen."
  • Bereinigung Befehle:

    # Stellen Sie sicher, dass verbliebene rundll32- oder Jobprozesse beendet werden
    Get-Process -Name "rundll32" -ErrorAction SilentlyContinue | Stop-Process -Force
    Get-Job | Remove-Job -Force
    # Löschen Sie die temporäre DLL, falls noch vorhanden
    $tempDll = "$env:TEMPCOPYING3.dll"
    if (Test-Path $tempDll) { Remove-Item $tempDll -Force }