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/об'єкта, який використовують рядки провайдерів.
Стратегія розслідування¶
- Визначте програму за
EXE-Info,AppTypeіAppID; не плутайтеIdз PID. - Групуйте мережеві рядки за програмою, користувачем, профілем, інтерфейсом і часовим інтервалом.
- Порівнюйте надіслані/отримані байти зі звичайними базовими показниками та іншими хостами.
- Зіставляйте підозрілі інтервали з Prefetch, журналами подій, даними DNS/проксі/брандмауера та доступом до файлів.
- Повідомляйте про стан «брудної» бази даних і відсутність відтворення журналів транзакцій як про обмеження збирання.