Служби Windows¶
Що фіксує конфігурація служб¶
Служби та драйвери ядра Windows налаштовуються в кожному наборі керування (control set) SYSTEM. Записи містять
виконуваний файл/драйвер або DLL служби, режим запуску, тип служби, обліковий запис, групу порядку завантаження, відкладений
запуск, реакцію на помилки та дії, які Windows виконує після збою.
Зловмисники створюють або змінюють служби для закріплення, підвищення привілеїв, завантаження драйверів і латерального переміщення. Легітимне програмне забезпечення використовує точно такий самий механізм, тому значення мають шляхи, облікові записи, підписи, контекст створення та докази фактичного виконання.
Найобґрунтованіший висновок: розібраний набір керування налаштовував службу/драйвер так, як показано. Сама лише конфігурація не доводить, що служба успішно запустилася.
Розташування¶
Збирайте 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 |
Невідповідність типу, пошкоджена структура дій у разі збою або відсутні/нечитабельні поля. |
Стратегія розслідування¶
- Перевірте нестандартні шляхи, каталоги з правом запису, незвичайні облікові записи, нові часові позначки ключів і команди в разі збою.
- Розгортайте змінні середовища з урахуванням конфігурації досліджуваного хоста, а не комп'ютера аналітика.
- Обчисліть хеш і перевірте підпис фактичного виконуваного файлу або DLL, якщо їх зібрано.
- Зіставляйте назву/шлях служби з подіями 7045/4697, створенням процесів, Prefetch,
$MFTі USN. - Порівнюйте поточний і непоточні набори керування, щоб виявити змінене/видалене закріплення.