Проблема: идентификация пользователей и устройств, подключавшихся через USB


Отсутствие прямого лога «кто воткнул флешку». Windows фиксирует факт подключения устройства (VID/PID, серийный номер), но не привязывает его к учётной записи пользователя напрямую в одном событии.

Причины


1. Архитектура PnP (Plug and Play): Драйверы и службы (например, `USBSTOR`) работают на уровне ядра, а не в контексте пользовательского сеанса.
2. Стандартные настройки аудита: По умолчанию Windows не логирует успешные входы в систему или смену пользователей с привязкой к USB-событию.
3. Удалённые или отформатированные логи: Злоумышленник мог очистить `Event Viewer` (журналы `Microsoft-Windows-DriverFrameworks-UserMode/Operational` и `System`).

Решение


Комбинируем три источника данных для детального анализа USB-подключений и определения пользователя.

#### Метод 1: Event Viewer + Microsoft-Windows-DriverFrameworks-UserMode/Operational

Этот журнал содержит timestamp и контекст процесса (через который шло взаимодействие с USB).

1. Откройте `Event Viewer` → `Applications and Services Logs` → `Microsoft` → `Windows` → `DriverFrameworks-UserMode` → `Operational`.
2. Фильтр по источнику `DriverFrameworks-UserMode` или ИД события 2003 (подключение), 2004 (отключение).
3. Извлечение User SID:
В деталях события найдите поле `User` или `Security ID` (SID).
Если поле пустое — смотрите на `ProcessId`. Сопоставьте PID с активным процессом в момент подключения (например, `explorer.exe` от конкретного пользователя). Команда PowerShell:
powershell
Get-WmiObject Win32_Process -Filter "ProcessId = " | Select-Object 

Результат покажет владельца процесса (`GetOwner()`).

#### Метод 2: Анализ файла реестра `SYSTEM` (сбор логов USB-устройств)

Устройства, когда-либо подключённые, хранятся в `HKLM\SYSTEM\CurrentControlSet\Enum\USBSTOR`.

1. Просмотр истории подключений (какие флешки были):
Ветка `USBSTOR\Disk&Ven_...&Prod_...\...\Properties\{83da6326-97a6-4088-9453-a1923f573b29}\0064`.
`0064` — первый подключ, `0065` — последний (может быть несколько ключей).
2. Определение времени конкретного подключения:
Ищите в этом ключе значение `(Default)`. Время его изменения — не дата первого подключения, а дата последнего изменения конфигурации (например, смена буквы диска).
Для точного времени используйте `USBSTOR\...\Device Parameters`. Значение `LastInsertionTime` (только в XML-логах или через инструменты вроде `USBDeview`).
3. Связь с пользователем:
Зная точное время (timestamp из `System` event log `Event ID 20001`), откройте `Security` event log.
Фильтр по `Event ID 4624` (успешный вход) за 30 секунд до/после. Логин пользователя — владелец сессии.
Либо откройте `Microsoft-Windows-TerminalServices-LocalSessionManager/Operational` (события `21` и `24` для RDP и локальных сессий).

#### Метод 3: PowerShell — скрипт для массового сбора логов

Этот скрипт выведет все USB-подключения, время и имя пользователя (требуется права администратора):

powershell
<h2 id="get-usb-history-from-system-log">Get USB history from System log</h2>
$events = Get-WinEvent -FilterHashtable @{LogName='Microsoft-Windows-DriverFrameworks-UserMode/Operational'; ID=2003}

$result = @()

foreach ($event in $events) {
$time = $event.TimeCreated
# Extract process ID
$pid = $event.Properties[4].Value # Usually index 4 for PID
# Find user for this PID
$process = Get-CimInstance Win32_Process -Filter "ProcessId = $pid"
$user = if ($process) { ($process.GetOwner()).User } else { "N/A" }

$result += [PSCustomObject]@{
Timestamp = $time
User = $user
DeviceID = ($event.Properties[1].Value) # Class GUID of device
}
}

$result | Format-Table -AutoSize


Важное предупреждение (законодательство РФ)


Используйте эти методы ТОЛЬКО на собственных или арендованных устройствах. Согласно ст. 138.1 УК РФ «Неправомерный оборот средств для негласного получения информации», сбор логов без согласия владельца или служебной необходимости может быть признан незаконным. Не применяйте для мониторинга третьих лиц без их ведома и согласия.