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

Дескриптори безпеки ($Secure:$SDS)

Що таке $SDS

Кожен файл і каталог у NTFS має дескриптор безпеки: власника, основну групу, DACL (хто й що може з ним робити) і SACL (який доступ підлягає аудиту, а також мітку цілісності). NTFS зберігає кожен окремий дескриптор один раз — у потоці $SDS файлу $Secure (запис MFT 9) — і призначає йому ідентифікатор безпеки (security ID). $STANDARD_INFORMATION файлу записує лише цей ідентифікатор безпеки: стовпець SID команди parse-ntfs mft. $SDS перетворює його на власника та ACL.

$SDS складається з блоків по 256 KiB, за кожним із яких іде його копія (дзеркало). Кожен запис має хеш свого дескриптора, за яким NTFS знаходить уже наявний дескриптор ($SDH), і ідентифікатор безпеки (його індексує $SII).

Найобґрунтованіший висновок: файли, SID яких указує на дескриптор, на момент останнього запису їхнього запису $MFT мали цього власника та ці ACL. Власником файлу зазвичай є обліковий запис, який його створив, але адміністратор, інсталятор або програма, що перебирає право власності, можуть його змінити.

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

C:\$Secure:$SDS   (MFT entry 9, the $SDS data stream)

Збирайте його криміналістичним інструментом із прямим доступом до тому; у зібраних даних він зазвичай має назву $Secure_$SDS, оскільки : не може входити до імені файлу. Разом із ним збирайте $MFT того самого тому.

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

  • Власник — це SID. Назви отримують лише добре відомі SID (NT AUTHORITY\SYSTEM, BUILTIN\Administrators, NT SERVICE\TrustedInstaller, …) і вбудовані облікові записи комп'ютера або домену (-500 Administrator, …). Інші визначайте за допомогою SAM хоста (облікові записи SAM), його списку профілів (Відомості про систему) або домену.
  • Дескриптор спільний для всіх файлів з однаковими власником і ACL і зазвичай залишається в $SDS після видалення цих файлів. Дескриптор без файлів у $MFT сам по собі не є видаленим файлом.
  • ACE — це не історія доступу. DACL показує, хто може отримувати доступ до файлу; журнали подій та інші артефакти показують, хто це робив. Записи аудиту SACL описують конфігурацію, а не те, що було зафіксовано в журналі.
  • ACE перелічуються в тому порядку, у якому вони розташовані в ACL. Juntei не обчислює фактичний доступ: значення мають записи заборони, успадкування, членство в групах, привілеї та неявні права власника.
  • DACL і SACL записують кожен ACE так, як це робить icacls. SDDL представляє підтримувані дозволи з масками в шістнадцятковому вигляді та обліковими записами у вигляді SID. Це не побайтова копія двійкового дескриптора; якщо умовний текст неможливо представити, поле залишається порожнім, а проблема діагностується.

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

Usage: juntei parse-ntfs secure-sds <INPUT> [OPTIONS]

Input:
  -d, --directory <DIR>  Recursively find $SDS streams (with $SDS in their name, or starting with an $SDS entry)
  -f, --file <FILE>      Parse one $Secure:$SDS stream (often exported as $Secure_$SDS)

Output:
  -o, --output <FILE>       Save every security descriptor
  -t, --output-type <TYPE>  csv, json, or jsonl
juntei parse-ntfs secure-sds -f '$Secure_$SDS'
juntei parse-ntfs secure-sds -d evidence/ -o sds.csv
juntei parse-ntfs secure-sds -f '$Secure_$SDS' -t jsonl

Підсумок підраховує дескриптори та перелічує їхніх власників із кількістю дескрипторів у кожного, дескриптори з NULL DACL (без жодних обмежень) і будь-які пошкодження.

Поля виводу CSV

Поле Інтерпретація
SourcePath Вхідний файл.
SecurityID Ідентифікатор безпеки: об'єднуйте його з SID команди parse-ntfs mft для того самого тому.
Hash Хеш, записаний разом із дескриптором.
EntryOffset Розташування запису в потоці.
FromMirror True для копії, прочитаної з дзеркального блоку: копії, що відрізняється від свого запису (наводиться після нього), або копії пошкодженого запису.
Size Розмір запису, включно з його 20-байтовим заголовком.
Owner, OwnerName SID власника та його назва, якщо він добре відомий.
Group, GroupName SID основної групи та її назва, якщо вона добре відома. Windows не використовує її для перевірок доступу.
Control Прапорці керування дескриптора: SE_DACL_PRESENT, SE_DACL_PROTECTED (успадкування заблоковано), SE_DACL_AUTO_INHERITED, …, об'єднані через |.
DACL-ACE-Count, DACL Записи DACL, розділені ;. Порожнє, якщо DACL немає; NULL DACL: no restriction, якщо дескриптор надає всім усі права.
SACL-ACE-Count, SACL Записи SACL: записи аудиту, мітка обов'язкової цілісності, мітки довіри процесів і атрибути ресурсів.
SDDL Увесь дескриптор у форматі SDDL. Порожнє лише тоді, коли щось у ньому не декодовано.
Problems Хеш, що не відповідає дескриптору, частини, які неможливо декодувати, ACE невідомого типу.

Кожен запис DACL і SACL записується так, як його записує icacls: обліковий запис, тип, якщо це не запис дозволу, прапорці успадкування та права.

Частина Значення
Обліковий запис Добре відома назва або SID.
(DENY), (AUDIT), (ACCESS_ALLOWED_CALLBACK), … Тип ACE, якщо це не запис дозволу. Для обов'язкової мітки тип не показується.
(I) Успадковано від батьківського каталогу.
(OI), (CI), (IO), (NP) Успадковується файлами (успадкування об'єктами), каталогами (успадкування контейнерами), лише ними, але не цим об'єктом (лише успадкування), і лише на один рівень нижче (без поширення).
(SA), (FA) Запис аудиту для успішного або невдалого доступу.
(F), (M), (RX), (R), (W) Повний доступ, змінення, читання та виконання, читання, запис.
(RD,WD,AD,…) Інакше — окремі права: читання даних, запис даних, додавання даних, читання та запис розширених атрибутів (REA, WEA), виконання (X), видалення дочірніх об'єктів (DC), читання та запис атрибутів (RA, WA), видалення (DE), читання дозволів (RC), запис DAC (WDAC), зміна власника (WO), синхронізація (S), а також загальні права GA, GR, GW, GE. N означає відсутність доступу.
(NW), (NR), (NX) Політика обов'язкової мітки: заборона запису вгору, читання вгору, виконання вгору.
if (…) Умова callback-ACE, як-от (WIN://SYSAPPID Contains "…"): запис застосовується лише до процесів, для яких вона істинна. Windows використовує їх, щоб надати доступ пакетам контейнерів програм (app container).

Мітки довіри процесів і атрибути ресурсів показують свою маску в шістнадцятковому вигляді, а атрибут ресурсу — ще й своє твердження (claim) (("IMAGELOAD",TU,0x0,1)).

JSON/JSONL мають ті самі поля та назви, але з числами у вигляді чисел, null для порожніх значень і Problems у вигляді списку.

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

  1. Проаналізуйте $MFT того самого тому й об'єднайте його SID з цим виводом: кожен файл отримає свого власника та ACL.
  2. Перегляньте власників, які є обліковими записами користувачів (S-1-5-21-…): якими файлами володіє підозрілий обліковий запис і які облікові записи володіють файлами в системних каталогах.
  3. Шукайте надто дозвільні ACL на каталогах, з яких запускаються або завантажуються програми: Everyone, Authenticated Users або User з (F), (M) або (W), а також NULL DACL.
  4. Дескриптор, який використовує лише один файл або незвичний набір файлів, може вказати на файли, що були створені або змінені поза звичайним встановленням.
  5. Підтверджуйте зміни власника та дозволів записами журналу подій Security (4670, 4663 за наявності SACL) і записами SECURITY_CHANGE журналу USN.

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

Якщо структурований вивід надсилається в stdout (-t без -o), попередження про відновлення на рівні потоку виводяться в stderr, тож канали зберігають придатні для читання CSV/JSON/JSONL, не приховуючи пошкоджених або відновлених ділянок.