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

SRUM

Що таке SRUM

Монітор використання системних ресурсів (System Resource Usage Monitor, SRUM) зберігає базу даних ESE про використання ресурсів програмами та службами. Залежно від версії Windows він записує мережеві байти, ідентифікатори інтерфейсів/профілів, підключення, процесорний час, активність на передньому плані/у фоновому режимі, дискову активність, енергоспоживання, push-сповіщення і дані хронології програм. Записи пов'язуються з ідентифікаторами програм і SID користувачів через SruDbIdMapTable.

SRUM особливо корисний, коли виконуваний файл було видалено: його ідентифікатор програми, користувач і рядки використання ресурсів можуть існувати довше за файл. Мережеві підсумки можуть підтверджувати гіпотезу про ексфільтрацію, але SRUM — це не перехоплення пакетів, і зазвичай він не визначає кожну віддалену кінцеву точку або переданий файл.

Найобґрунтованіший висновок: Windows віднесла записане використання ресурсів до програми/облікового запису протягом періоду вимірювання таблиці.

Розташування та збирання

C:\Windows\System32\sru\SRUDB.dat
C:\Windows\System32\config\SOFTWARE   (context for account and Wi-Fi names)

SRUM існує в Windows 8 і новіших версіях. Копіюйте SRUDB.dat у узгодженому стані, бажано зі знімка або за допомогою криміналістичного збирача. Також зберіть SOFTWARE і файли транзакцій/журналів ESE у каталозі sru.

Відповідний кущ SOFTWARE відокремлений від бази ESE: для куща у стані dirty Juntei автоматично застосовує в пам’яті сусідні журнали транзакцій реєстру SOFTWARE.LOG, .LOG1 і .LOG2. Збирайте їх також. Виводяться відомості про відновлення та попередження; без журналів назви облікових записів або Wi-Fi можуть бути неповними чи застарілими. Це не застосовує журнали бази SRUM.

«Брудні» бази даних

Juntei читає «брудний» SRUDB.dat у зібраному вигляді та повідомляє про це. Наразі він не відтворює SRU*.log, тому зміни, що існують лише в цих журналах, відсутні. Не описуйте мовчки «брудну» базу даних як повну.

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

  • Багато рядків представляють періодичне агрегування, зазвичай приблизно на межах годин, — а не точний час дії.
  • Підсумки в байтах самі по собі не визначають вміст, намір, протокол чи призначення.
  • Ідентичністю програми може бути шлях, служба, пакетна програма або об'єкт; перевіряйте AppType.
  • Імена користувачів і мереж Wi-Fi — це доповнення з відповідного куща SOFTWARE. Відсутність імен не означає, що відсутній відповідний ідентифікатор.
  • null, нуль, відсутні стовпці, непідтримувані типи та пошкоджені значення — це різні стани.
  • Схеми провайдерів відрізняються залежно від версії Windows. Зберігайте невідомі таблиці та оригінальні назви стовпців.
  • Фонові служби Windows цілком легітимно генерують великі підсумки використання ресурсів.

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

Usage: juntei parse-ese srum <INPUT> [OPTIONS]

Input:
  -d, --directory <DIR>  Recursively find SRUDB.dat
  -f, --file <FILE>      Parse one SRUDB.dat
  -r, --software <FILE>  Matching SOFTWARE hive for names

Output:
  -o, --output <PATH>        Directory of CSV tables, or JSON/JSONL file
  -t, --output-type <TYPE>   csv, json, or jsonl
      --include-value-state  Add per-value read state and raw bytes to JSON/JSONL
juntei parse-ese srum -f SRUDB.dat -r SOFTWARE -o srum-csv
juntei parse-ese srum -f SRUDB.dat -t jsonl \
  | jq 'select(.Provider == "NetworkUsages" and (.BytesSent // 0) > 100000000)'
juntei parse-ese srum -f SRUDB.dat -t jsonl --include-value-state \
  | jq '{Provider, Timestamp, ValueState, Raw}'

Таблиці виводу

CSV створює SRUM-IdentityMap.csv для SruDbIdMapTable і по одній таблиці на провайдера. Відомі назви виводу включають:

Провайдер/таблиця Призначення для розслідування
NetworkUsages Надіслані/отримані байти для кожної програми, користувача, інтерфейсу та профілю.
NetworkConnections Активність на кшталт кількості/тривалості підключень і час початку підключень.
AppResourceUseInfo Використання процесора, диска, мережі на передньому плані/у фоновому режимі та пов'язане використання програмами.
AppTimelineProvider Активність у хронології програм із полями часу завершення та стану використання.
EnergyUsage Коротко- та довгострокові вимірювання енергоспоживання/провайдера; IsLt розрізняє їх.
PushNotifications Активність push-сповіщень.
VfuProvider Провайдер vfuprov; його докладне призначення погано задокументоване, тому інтерпретуйте його поля обережно.
EnergyEstimation, TaggedEnergy Провайдери енергоспоживання та використання, специфічні для версії.
ProcessorTime, SizeInBytes, TotalUsed, NetworkBytes Таблиці провайдерів Windows Server.
Невідома назва таблиці Juntei зберігає невідомих провайдерів під їхнім GUID/назвою таблиці та виводить кожен стовпець каталогу.

Оскільки SRUM керується каталогом, а Windows додає стовпці провайдерів, фіксованого скінченного списку полів, специфічних для провайдерів, навмисно немає. Juntei виводить кожен стовпець, наявний у базі даних, із мітками полів Juntei у PascalCase. Наведені далі поля — це стабільний/спільний контракт виводу.

Категоризований вивід auto-parse

auto-parse розміщує кожну таблицю SRUM безпосередньо в її категорії розслідування. CSV, JSON і JSONL використовують той самий префікс імені файлу SRUM-; окремого каталогу SRUM/ немає.

Категорія Файли CSV
NetworkActivity SRUM-NetworkConnections.csv, SRUM-NetworkUsages.csv, SRUM-NetworkBytes.csv, SRUM-PushNotifications.csv
ProcessExecution SRUM-AppResourceUseInfo.csv, SRUM-AppTimelineProvider.csv, SRUM-ProcessorTime.csv
SystemInformation SRUM-EnergyUsage.csv, SRUM-EnergyEstimation.csv, SRUM-TaggedEnergy.csv, SRUM-SizeInBytes.csv, SRUM-TotalUsed.csv, SRUM-IdentityMap.csv, SRUM-VfuProvider.csv і таблиці невідомих провайдерів

Експортуються лише таблиці, наявні в зібраних даних. Мережеві лічильники та записи сповіщень розміщуються відповідно до їхнього основного використання в розслідуванні; це не твердження, що кожен рядок описує віддалене підключення. Карта ідентичностей обслуговує кілька категорій. VFU і невідомі провайдери залишаються в SystemInformation, оскільки сама їхня наявність не встановлює факту виконання.

SystemInformation/SRUM-logs.txt містить діагностику парсера та відповідність між оригінальним і кінцевим виводом. Обидва маніфести перелічують фактичні шляхи таблиць в OutputFiles; Output завдання SRUM — це каталог комп'ютера, а Category визначає розташування його спільного журналу/метаданих.

За наявності кількох баз даних імена файлів отримують -Source1, -Source2 тощо перед розширенням. Журнал зберігає оригінальні псевдоніми зібраних даних, а рядки JSON/JSONL зберігають відомості про походження: SourceFile, Table, Provider, Comp і Artifact. Жодна таблиця не копіюється в кілька категорій. Об'єднана хронологія SIEM -j включає кожен збережений запис SRUM один раз.

Окрема команда parse-ese srum зберігає запитане розташування виводу. Її файли таблиць CSV також мають префікс SRUM-; явно задані імена файлів виводу JSON/JSONL залишаються на вибір аналітика.

Спільні поля виводу

Поле Інтерпретація
SourceFile Вхідна база даних; наявне в JSON/JSONL і корисне під час роботи з кількома хостами.
Table Оригінальна назва/GUID таблиці ESE. Зберігайте під час порівняння версій або невідомих провайдерів.
Provider Зручна назва провайдера/виводу або оригінальна назва таблиці, якщо провайдер невідомий.
ID AutoIncId рядка; ідентифікатор рядка бази даних, а не ідентифікатор процесу.
Timestamp Коли SRUM записав/агрегував показники, з округленням до мілісекунд. Зазвичай не точний час події.
EXE-Info Розв'язана ідентичність програми/служби/пакета з AppID. Основна точка опори для програми.
EXE-InfoDescription Опис, вилучений зі складених назв програм SRUM. Лише контекст.
EXE-Timestamp Час, вбудований у складену ідентичність програми, якщо є; не час використання рядка.
AppType NormalApp, Service, ModernApp або Object; визначає, як слід інтерпретувати EXE-Info.
SID Розв'язаний SID облікового запису з UserID. Надійна точка опори для ідентичності користувача/служби.
User Зручне ім'я профілю, доповнене з SOFTWARE; може бути null, тоді як SID залишається дійсним.
UserID, AppID Сирі числові посилання на SruDbIdMapTable; зберігайте для нерозв'язаних або повторюваних назв.
IsLt true для довгострокової таблиці EnergyUsage, false — для короткострокової.
InterfaceLUID Сирий LUID мережевого інтерфейсу з рядків провайдера.
InterfaceType Декодований клас інтерфейсу (наприклад IF_TYPE_IEEE80211); це клас, а не унікальний адаптер.
L2ProfileID Числове посилання на мережевий профіль.
ProfileName Назва Wi-Fi/профілю, доповнена з SOFTWARE; потенційно чутлива і не є доказом поточного підключення.
ConnectStartTime, EventTimestamp, EndTime, StartTime Відомі стовпці FILETIME провайдерів, декодовані в UTC. Їхнє точне значення визначає провайдер; це не універсальний час виконання.
Стовпці, специфічні для провайдера Експортовані стовпці провайдерів, як-от BytesSent, BytesReceived (стовпець бази даних BytesRecvd), лічильники процесора/диска, тривалості, кількості, прапорці або оцінки. Інтерпретуйте одиниці відповідно до провайдера та порівнюйте рядки в межах однієї схеми.

Діагностичні поля (--include-value-state)

Поле Інтерпретація
ValueState Відображення поля бази даних на parsed, null, absent, unsupported або damaged. Це відокремлює відсутність доказів від збою парсера.
Raw Оригінальні байти в шістнадцятковому вигляді для значень, які мають байти. Використовуйте для перевірки та майбутнього декодування.

SRUM-IdentityMap.csv (з SruDbIdMapTable) містить IdIndex, IdType і IdBlob: сирий індекс, категорію ідентичності та декодований текст програми/SID/об'єкта, який використовують рядки провайдерів.

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

  1. Визначте програму за EXE-Info, AppType і AppID; не плутайте Id з PID.
  2. Групуйте мережеві рядки за програмою, користувачем, профілем, інтерфейсом і часовим інтервалом.
  3. Порівнюйте надіслані/отримані байти зі звичайними базовими показниками та іншими хостами.
  4. Зіставляйте підозрілі інтервали з Prefetch, журналами подій, даними DNS/проксі/брандмауера та доступом до файлів.
  5. Повідомляйте про стан «брудної» бази даних і відсутність відтворення журналів транзакцій як про обмеження збирання.

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