SOC Prime Bias: Mittel

26 März 2026 16:14

RegPhantom Backdoor: Bedrohungsanalyse und Erkennungs-Einblicke

Author Photo
Ruslan Mikhalov Leiter der Bedrohungsforschung bei SOC Prime linkedin icon Folgen
RegPhantom Backdoor: Bedrohungsanalyse und Erkennungs-Einblicke
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Zusammenfassung

RegPhantom ist ein auf Tarnung ausgelegter Windows-Kernel-Rootkit, der es benutzerbeschränkten Benutzermodus-Prozessen ermöglicht, willkürlichen Code im Kernel-Raum über einen versteckten, auf Registrierungsbasierenden Befehlskanal auszuführen. Der Treiber ist mit gültigen Zertifikaten signiert, basiert auf reflektierendem PE-Loading und entfernt Ausführungsartefakte, sobald seine Aufgabe abgeschlossen ist. Seine Architektur ist darauf ausgelegt, Signaturprüfungen von Treibern zu umgehen, während dauerhafte Dateien oder Registrierungseinträge vermieden werden. Eine effektive Erkennung hängt daher davon ab, den Treiber selbst und die markanten Code-Muster, die er enthält, zu identifizieren.

Untersuchung

Die Forschung überprüfte mehrere signierte und unsignierte .sys Beispiele, die zwischen Juni und August 2025 gesammelt wurden und einen gemeinsam vernebelten CFG-Code-Basis und einen Registrierungsabfangmechanismus aufzeigen, der auf CmRegisterCallbackaufbaut. Der Treiber entschlüsselt eine 56-Byte XOR-geschützte Nutzlast, die reflektierend in den Kernel-Speicher abgebildet wird, sie wird ausgeführt und dann werden die Beweise gelöscht. Die Chronologie der Muster und die Nutzung von Zertifikaten weisen auf weiterhin stattfindende Entwicklungsaktivitäten hin, die mit einem China-verknüpften Bedrohungsakteur verbunden sind.

Abschwächung

Sicherheitsteams sollten nicht vertrauenswürdige Kernel-Treiber blockieren, auf verdächtigen Gebrauch von CmRegisterCallback and PsSetCreateThreadNotifyRoutineachten und für Treiberdateien eine Integritätsvalidierung zur Startzeit durchsetzen. YARA-Regeln sollten eingesetzt werden, um die einzigartigen Byte-Sequenzen des Treibers zu erfassen, während die strikte Durchsetzung der Codesignierung beibehalten werden sollte. Das Überwachen von ungewöhnlichen Schreibfehlern in der Registrierung, insbesondere von wiederholten Zugriff-verweigert-Ereignissen, könnte ebenfalls den versteckten Kommunikationskanal offenlegen.

Reaktion

Wenn RegPhantom entdeckt wird, isolieren Sie den betroffenen Endpunkt, löschen Sie den bösartigen Treiber und erfassen Sie einen vollständigen Kernel-Speicherabzug für eine tiefere forensische Überprüfung. Widerrufen Sie missbrauchte Signatur-Zertifikate und aktualisieren Sie die vertrauenswürdigen Zertifikatspeicher nach Bedarf. Die Bedrohungssuche sollte sich dann auf das Registrierungsabfangverhalten des Treibers über die gesamte Umgebung konzentrieren, gefolgt von der Behebung aller potenziell gefährdeten Windows-Systeme.

"graph TB %% Class Definitions Section classDef technique fill:#ffcc99 classDef action fill:#99ccff classDef operator fill:#ff9900 classDef builtin fill:#cccccc %% Node definitions step_persistence["<b>Schritt</b> – Persistenz durch signierten bösartigen Treiber, der beim Start mit einem gültigen Codesignatur-Zertifikat geladen wird."] class step_persistence action tech_boot_autostart["<b>Technik</b> – <b>T1547.009 Kernel-Treiber und -Module</b><br/>Lade bösartigen Treiber beim Systemstart, um Persistenz zu erzeugen und Kernel-Modus Privilegien zu erlangen."] class tech_boot_autostart technique tech_code_signing["<b>Technik</b> – <b>T1553.002 Vertrauenssteuerungen untergraben: Codesignierung</b><br/>Ein legitimes Codesignatur-Zertifikat verwenden, um die Signaturprüfungen von Treibern zu umgehen."] class tech_code_signing technique tech_priv_esc["<b>Technik</b> – <b>T1068 Ausnutzung zur Privilegieneskalation</b><br/>Kernel-Treiber gewährt Angreifercode Systemebene Privilegien.""" class tech_priv_esc technique step_hook_registration["<b>Schritt</b> – Treiber registriert System-Callbacks, um seine Präsenz zu verbergen und Operationen abzufangen."] class step_hook_registration action tech_rootkit["<b>Technik</b> – <b>T1014 Rootkit</b><br/>Kernelmodus-Rootkit-Komponenten installieren und Callbacks einhaken, um bösartige Aktivitäten zu verbergen."] class tech_rootkit technique step_registry_channel["<b>Schritt</b> – Verdeckter Befehlskanal durch Registrierungszugriffe, die vom Treiber abgefangen und entschlüsselt werden."] class step_registry_channel action tech_query_registry["<b>Technik</b> – <b>T1012 Abfrage der Registrierung</b><br/>Registrierungswerte lesen, um Befehle oder Konfigurationsdaten zu empfangen.""" class tech_query_registry technique tech_deobfuscate["<b>Technik</b> – <b>T1140 Dateien oder Informationen entschleiern/entschlüsseln</b><br/>XOR-verschlüsselte Nutzlast entschlüsseln, die aus der Registrierung abgerufen wird.""" class tech_deobfuscate technique step_reflective_load["<b>Schritt</b> – Lade reflektives PE-Nutzlast in Kernel-Speicher mit einem benutzerdefinierten Loader."] class step_reflective_load action tech_reflective_loading["<b>Technik</b> – <b>T1620 Reflektives Laden von Code</b><br/>Code direkt aus dem Speicher laden und ausführen, ohne die Festplatte zu berühren.""" class tech_reflective_loading technique step_memory_wipe["<b>Schritt</b> – Zugeteilten Speicher wischen und temporäre Artefakte nach der Ausführung entfernen."] class step_memory_wipe action tech_clear_persistence["<b>Technik</b> – <b>T1070.009 Persistenz löschen</b><br/>Spuren geladener Module und dazugehöriger Persistenzartefakte entfernen.""" class tech_clear_persistence technique step_hook_hijack["<b>Schritt</b> – Nutzlast entführt Treiber-Hook-Pointer, um Persistenz aufrechtzuerhalten und die Aktivität weiter zu verbergen."] class step_hook_hijack action %% Connections showing flow step_persistence –>|verwendet| tech_boot_autostart step_persistence –>|untergräbt| tech_code_signing step_persistence –>|ermöglicht| tech_priv_esc step_persistence –>|führt zu| step_hook_registration step_hook_registration –>|implementiert| tech_rootkit step_hook_registration –>|führt zu| step_registry_channel step_registry_channel –>|greift zu| tech_query_registry step_registry_channel –>|führt aus| tech_deobfuscate step_registry_channel –>|führt zu| step_reflective_load step_reflective_load –>|führt aus| tech_reflective_loading step_reflective_load –>|führt zu| step_memory_wipe step_memory_wipe –>|löscht| tech_clear_persistence step_memory_wipe –>|führt zu| step_hook_hijack step_hook_hijack –>|aufrechterhalten| tech_rootkit "

Angriffsfluss

Simulationsausführung

Voraussetzung: Der Telemetry & Baseline Pre-flight Check muss bestanden sein.

Begründung: Dieser Abschnitt beschreibt die genaue Ausführung der gegnerischen Technik (TTP), die entwickelt wurde, um die Erkennungsregel auszulösen. Die Befehle und Erzählungen MÜSSEN die identifizierten TTPs direkt widerspiegeln und darauf abzielen, genau die Telemetriedaten zu generieren, die von der Erkennungslogik erwartet werden.

  • Angriffserzählung & Befehle

    1. Ziel: Den Versuch von RegPhantom emulieren, einen Kernelmodus-Registry-Callback zu registrieren, der Anmeldeinformationen-bezogene Registrierungsoperationen abfängt.
    2. Methode: Laden Sie einen minimalen, absichtlich fehlschlagenden Treiber, der CmRegisterCallback mit einer Callback-Routine auf RegNtPreSetValueKeyzeigt. Der Treiber übergibt absichtlich eine fehlerhafte Registrierungsstruktur, die zu STATUS_ACCESS_DENIED.
    3. führt. Ergebnis: Sysmon protokolliert EventID 13 mit Sysmon protokolliert EventID 13 mit enthält CmRegisterCallback and RegNtPreSetValueKey, beides Berichterstattung Datenmenge genau 56 Bytes (0x38), und Status gesetzt auf STATUS_ACCESS_DENIED.
  • Regressionstest-Skript (PowerShell + eingebettete C-Treiberquelle – auf dem Zielhost kompilieren)

    # --------------------------------------------------------------
    # Schritt 1: Schreiben Sie die minimalen Treiberquelle auf die Festplatte
    # --------------------------------------------------------------
    $driverSource = @"
    #include <ntddk.h>
    
    // Dummy-Callback – wird nie aufgerufen
    NTSTATUS DummyCallback(
        _In_ PVOID CallbackContext,
        _In_ PVOID Argument1,
        _In_ PVOID Argument2
    )
    {
        UNREFERENCED_PARAMETER(CallbackContext);
        UNREFERENCED_PARAMETER(Argument1);
        UNREFERENCED_PARAMETER(Argument2);
        return STATUS_SUCCESS;
    }
    
    extern "C" NTSTATUS DriverEntry(_In_ PDRIVER_OBJECT DriverObject, _In_ PUNICODE_STRING RegistryPath)
    {
        UNREFERENCED_PARAMETER(DriverObject);
        UNREFERENCED_PARAMETER(RegistryPath);
    
        // Absichtlich eine falsche Größe (56 Bytes) verwenden und eine Callback-Registrierung anfordern
        // die mit STATUS_ACCESS_DENIED abgelehnt wird.
        UNICODE_STRING altitude = RTL_CONSTANT_STRING(L"1234.5678.90ab");
        LARGE_INTEGER cookie = {0};
    
        // Einen Fehler erzwingen, indem ein null Callback-Pointer übergeben wird (simuliert eine fehlerhafte Anforderung)
        NTSTATUS status = CmRegisterCallback(DummyCallback, NULL, &cookie);
    
        // Status überschreiben, um die genaue Bedingung zu simulieren, die RegPhantom sieht
        status = STATUS_ACCESS_DENIED; // 0xC0000022
    
        // Halten Sie den Treiber kurz geladen, damit Sysmon das Ereignis erfassen kann
        LARGE_INTEGER interval;
        interval.QuadPart = -10 * 1000000; // 1 Sekunde
        KeDelayExecutionThread(KernelMode, FALSE, &interval);
    
        // Vor dem Entladen abmelden
        CmUnregisterCallback(cookie);
    
        return STATUS_SUCCESS;
    }
    "@
    $srcPath = "$env:TEMPRegPhantomStub.c"
    $srcPath | Set-Content -Value $driverSource -Encoding ASCII
    
    # --------------------------------------------------------------
    # Schritt 2: Kompilieren Sie den Treiber (erfordert Visual Studio Build Tools)
    # --------------------------------------------------------------
    Write-Host "Treibekompilierung – erfordert Windows Driver Kit (WDK) und VS Build Tools."
    $compileCmd = "cl /nologo /W3 /WX- /O2 /DUNICODE /D_UNICODE /Zi /MD /LD $srcPath /link /OUT:`"$env:TEMPRegPhantomStub.sys`""
    & cmd /c $compileCmd
    
    # --------------------------------------------------------------
    # Schritt 3: Laden Sie den Treiber (muss als Administrator ausgeführt werden)
    # --------------------------------------------------------------
    Write-Host "Treibercacherladen, um den Registrierungsversuch auszulösen..."
    $driverPath = "$env:TEMPRegPhantomStub.sys"
    sc create RegPhantomStub binPath= $driverPath type= kernel start= demand
    sc start RegPhantomStub
    
    # --------------------------------------------------------------
    # Schritt 4: Geben Sie Sysmon Zeit, das Ereignis zu erfassen
    # --------------------------------------------------------------
    Start-Sleep -Seconds 5
    
    # --------------------------------------------------------------
    # Schritt 5: Treiber entladen und löschen
    # --------------------------------------------------------------
    sc stop RegPhantomStub
    sc delete RegPhantomStub
    Remove-Item -Path $driverPath -Force
    Remove-Item -Path $srcPath -Force
    
    Write-Host "Simulation abgeschlossen. Überprüfen Sie die Erkennung in Ihrem SIEM."
  • Bereinigungsschbefehle (falls der Treiber nicht kompiliert oder geladen werden konnte)

    # Sicherstellen, dass jeder teilweise erstellte Treiberdienst entfernt wird
    if (Get-Service -Name RegPhantomStub -ErrorAction SilentlyContinue) {
        sc stop RegPhantomStub
        sc delete RegPhantomStub
    }
    # Restdateien entfernen
    Remove-Item -Path "$env:TEMPRegPhantomStub.*" -Force -ErrorAction SilentlyContinue