Перейти до змісту

Служби Windows

Що фіксує конфігурація служб

Служби та драйвери ядра Windows налаштовуються в кожному наборі керування (control set) SYSTEM. Записи містять виконуваний файл/драйвер або DLL служби, режим запуску, тип служби, обліковий запис, групу порядку завантаження, відкладений запуск, реакцію на помилки та дії, які Windows виконує після збою.

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

Найобґрунтованіший висновок: розібраний набір керування налаштовував службу/драйвер так, як показано. Сама лише конфігурація не доводить, що служба успішно запустилася.

Розташування

SYSTEM\ControlSet00N\Services\<ServiceName>
SYSTEM\Select\Current   (which control set Windows used)

Збирайте SYSTEM разом із журналами транзакцій. Події з ідентифікаторами, як-от System 7045 і Security 4697, можуть фіксувати встановлення; події керування службами та процесів можуть підтверджувати фактичний запуск/виконання.

Застереження для аналітика

  • ImagePath може містити змінні середовища, лапки, аргументи, шляхи до пристроїв або шлях без лапок із пробілами. Зберігайте його точно в початковому вигляді перед нормалізацією.
  • ServiceDll має критичне значення для служб, розміщених у svchost.exe; ImagePath сам по собі може називати лише хост-процес.
  • StartType=automatic не доводить, що служба запустилася або залишалася ввімкненою.
  • ObjectName — це налаштований обліковий запис, а не обов'язково користувач, який установив службу.
  • Драйвери та служби режиму користувача використовують різні прапорці ServiceType і різні угоди щодо шляхів.
  • Дії в разі збою можуть виконувати команду від імені облікового запису служби після збою; це поверхня закріплення, яку легко пропустити.
  • Інші набори керування можуть зберігати попередню конфігурацію; використовуйте IsCurrentControlSet.

Аналіз за допомогою Juntei

Usage: juntei parse-registry services <INPUT> [OPTIONS]

Input:
  -d, --directory <DIR>  Recursively find SYSTEM hives
  -f, --file <FILE>      Parse one SYSTEM hive
      --log1/--log2      Supply transaction logs explicitly
      --no-logs          Do not replay logs

Filtering:
      --service <NAME>    Only this service name
      --all-control-sets  Parse every ControlSet00N

Output:
  -o, --output <FILE>       Save records
  -t, --output-type <TYPE>  csv, json, or jsonl
juntei parse-registry services -f SYSTEM -o services.csv
juntei parse-registry services -f SYSTEM --all-control-sets -t jsonl \
  | jq 'select(.FailureCommand != null or (.ImagePath? | test("temp|public"; "i")))'

Поля виводу

Поле Інтерпретація
Host, SourcePath Ідентифікація системи та вхідний кущ реєстру. Зберігайте між збираннями.
ControlSet, IsCurrentControlSet Вихідний набір керування і те, чи називає його Select\Current. Для тверджень про активний стан надавайте перевагу поточному.
ServiceName Ключ реєстру/внутрішня назва служби. Надійна точка переходу до подій і команд Service Control Manager.
DisplayName, Description Текст для користувача; може бути посиланням на ресурс або контролюватися зловмисником.
ImagePath Команда виконуваного файлу/драйвера в налаштованому вигляді. Розбирайте лапки, аргументи, змінні середовища та шляхи до пристроїв.
ServiceDLL DLL, яку завантажує служба-хост. Часто саме вона є справжнім корисним навантаженням для служб зі спільним процесом.
StartType, StartValue Зрозумілий/необроблений режим запуску: boot (0), system (1), automatic (2), manual (3), disabled (4).
DelayedAutostart Автоматична служба запускається після початкової фази завантаження; усе одно придатна для закріплення.
ServiceType, TypeValue Декодовані/необроблені прапорці: драйвер ядра, драйвер файлової системи, власний/спільний процес, служба користувача тощо.
ErrorControl Рівень обробки помилок під час завантаження/запуску. Переважно експлуатаційний контекст.
ObjectName Налаштований обліковий запис служби або ім'я об'єкта драйвера. Не ідентифікує того, хто встановив.
Group Група порядку завантаження; особливо важлива для драйверів boot/system.
FailureResetPeriod Кількість секунд до скидання лічильника збоїв; 4294967295 означає «ніколи».
FailureCommand Команда, налаштована для дії в разі збою run_command. Дуже цінне поле для виявлення закріплення.
FailureActions Повний декодований список дій (restart, reboot, run_command, none) і затримок.
FailureActionType, FailureActionDelayMs Перша дія у пласкому вигляді для фільтрування; перевіряйте також повний список.
FailureActionsRaw Вихідні байти, якщо декодування неповне або дані пошкоджені.
KeyLastWrittenUTC Остання зміна ключа служби, а не обов'язково час встановлення/запуску.
TransactionLogStatus, LogsApplied Контекст відтворення журналів реєстру.
Problems Невідповідність типу, пошкоджена структура дій у разі збою або відсутні/нечитабельні поля.

Стратегія розслідування

  1. Перевірте нестандартні шляхи, каталоги з правом запису, незвичайні облікові записи, нові часові позначки ключів і команди в разі збою.
  2. Розгортайте змінні середовища з урахуванням конфігурації досліджуваного хоста, а не комп'ютера аналітика.
  3. Обчисліть хеш і перевірте підпис фактичного виконуваного файлу або DLL, якщо їх зібрано.
  4. Зіставляйте назву/шлях служби з подіями 7045/4697, створенням процесів, Prefetch, $MFT і USN.
  5. Порівнюйте поточний і непоточні набори керування, щоб виявити змінене/видалене закріплення.

Додаткові відомості