Дескриптори безпеки ($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. Власником
файлу зазвичай є обліковий запис, який його створив, але адміністратор, інсталятор або програма,
що перебирає право власності, можуть його змінити.
Розташування та збирання¶
Збирайте його криміналістичним інструментом із прямим доступом до тому; у зібраних даних він зазвичай має назву $Secure_$SDS, оскільки :
не може входити до імені файлу. Разом із ним збирайте $MFT того самого тому.
Застереження для аналітика¶
- Власник — це SID. Назви отримують лише добре відомі SID (
NT AUTHORITY\SYSTEM,BUILTIN\Administrators,NT SERVICE\TrustedInstaller, …) і вбудовані облікові записи комп'ютера або домену (-500Administrator, …). Інші визначайте за допомогою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 у вигляді списку.
Стратегія розслідування¶
- Проаналізуйте
$MFTтого самого тому й об'єднайте йогоSIDз цим виводом: кожен файл отримає свого власника та ACL. - Перегляньте власників, які є обліковими записами користувачів (
S-1-5-21-…): якими файлами володіє підозрілий обліковий запис і які облікові записи володіють файлами в системних каталогах. - Шукайте надто дозвільні ACL на каталогах, з яких запускаються або завантажуються програми:
Everyone,Authenticated UsersабоUserз(F),(M)або(W), а також NULL DACL. - Дескриптор, який використовує лише один файл або незвичний набір файлів, може вказати на файли, що були створені або змінені поза звичайним встановленням.
- Підтверджуйте зміни власника та дозволів записами журналу подій Security (4670, 4663 за наявності
SACL) і записами
SECURITY_CHANGEжурналу USN.
Додаткові відомості¶
- Microsoft: дескриптори безпеки
- Microsoft Open Specifications: MS-DTYP (дескриптори безпеки, ACE, умовні вирази)
- Microsoft: формат рядка дескриптора безпеки (SDDL)
- Microsoft: icacls
- libfsntfs: документація формату NTFS (
$Secure) - ys-ntfs-parser (його крейт
secure)
Якщо структурований вивід надсилається в stdout (-t без -o), попередження про відновлення на рівні потоку виводяться в stderr, тож канали зберігають придатні для читання CSV/JSON/JSONL, не приховуючи пошкоджених або відновлених ділянок.