Робота з об'єктами системи безпеки, windows it pro

Реєстрація на конференцію

Які ж механізми включаються, коли ми вибираємо пункт меню «Безпека» з діалогового вікна властивостей файлу? У даній статті я постараюся відповісти на це питання. Як приклад візьмемо технології отримання списку логічних дискових розділів, локальних ресурсів, що розділяються, а також розглянемо дві зручні утиліти, одна з яких входить в поставку NT, а друга - в Resource Kit.

У моделі обмеження доступу Win32 існує два базових поняття:

Access tokens - маркери доступу (МД), що містять інформацію про користувача;

Security descriptors - описатели захисту, що містять інформацію про права тих чи інших облікових записів на доступ до об'єкта.

При реєстрації користувача в системі після успішної перевірки імені та пароля створюється маркер доступу. Для кожного процесу, виконуваного далі в контексті цього користувача, створюється копія МД. Маркер доступу містить безліч ідентифікаторів безпеки (security identifiers, SID), що визначають облікові записи користувача і тих груп, в які він входить. Крім того, МД містить список привілеїв (privilege) - прав на доступ до тих чи інших об'єктів, що надаються тій чи іншій облікового запису. За допомогою цієї інформації операційна система визначає можливості доступу користувача до ресурсів.

При створенні захищеного об'єкта ОЗ привласнює йому описатель захисту (security descriptor, SD) - тієї захисту, яка є у користувача, що створює об'єкт, або ж тій, що задана за замовчуванням. Додатки Win32 можуть використовувати функції API як для отримання, так і для зміни інформації про доступ до об'єктів.

Security descriptor містить інформацію про власника об'єкта, а також може включати наступні списки контролю доступу Access-Contol List (ACL):

Discretionary access-control list (DACL) - розмежувальні списки контролю доступу, в яких містяться користувачі і групи з відповідними правами на доступ до об'єкта;

System access-control list (SACL) - системні списки контролю доступу, які визначають, як здійснюється аудит спроб доступу до об'єкта.

Список контролю доступу містить список записів контролю доступу (access-control entries, ACEs). Кожен запис містить набір бітових прапорів і ідентифікатор SID піклувальника (trustee) - користувача або групи, до якої ці права застосовані.

Зупинимося на згаданих об'єктах більш докладно.

Security Descriptor

Ці об'єкти містять інформацію про безпеку, співвіднесені з тим чи іншим захищеним об'єктом. Фізично цей об'єкт являє собою структуру SECURITY_DESCRIPTOR, описану в файлі Windows.h:

Структура SECURITY_DESCRIPTOR використовується для доступу до інформації про безпеку об'єктів. Але змінювати поля безпосередньо в даній структурі неможливо. Для цього необхідно використовувати спеціальні функції (наприклад, SetSecurityDescriptorOwner (...)). Крім того, Win32 API надає інтерфейс для створення і ініціалізації описателя SD для нових об'єктів.

Access token

Access token (маркер доступу) - це об'єкт операційної системи, який описує контекст обмеження доступу до процесу або потоку. Він містить привілеї, відповідні облікового запису користувача, асоційованого з виборчим процесом чи потоком. Маркер доступу створюється після успішної ідентифікації користувача в системі. Після цього кожен процес, який так чи інакше запускається даними користувачем, супроводжується копією його маркера.

Ідентифікатор захисту SID

Унікальний параметр змінної довжини, що визначає обліковий запис (account) і зберігається в базі даних системи безпеки Windows NT, - ось що таке SID. На початку кожного сеансу, як тільки користувач ідентифікований в системі, його SID витягується з БД і поміщається в маркер доступу. Далі це значення використовується операційною системою при всіх діях користувача з захищеними об'єктами.

Існує кілька стандартних SID, що застосовуються для облікових записів:

NULL - S-1-0-0 - SID групи, до якої не входять користувачі. Використовується лише тоді, коли SID невідомий;

World - S-1-1-0 - група, що включає в себе всіх користувачів;

Local - S-1-2-0 - користувачі, які мають безпосередній, фізичний доступ до системи;

Creator Owner ID - S-1-3-0 - SID, яким замінюється SID користувача, який створив об'єкт. Цей SID використовується для успадкованих записів ACE (див. Нижче);

Creator Group ID - S-1-3-1 - значення, що заміняє SID основної групи, до якої належить користувач, який створив об'єкт. Цей SID, як і попередній, використовується для успадкованих записів ACE.

Список управління доступом ACL

ACL представлений структурою, описаною в Windows.h:

Для Windows NT версій 3.5, 3.51, 4.0 визначено максимальне число записів управління доступом, що задаються списком управління доступом (див. Статтю Q166348 в базі знань Microsoft). Воно дорівнює 1820.

Запис управління доступом ACE

Перше поле AceType визначає тип структури. Очевидно, що покажчик на будь-яку структуру _ACE можна перетворити в покажчик на ACE_HEAER, отримати тип ACE, після чого цей покажчик перетворити в покажчик на відповідну отриманому типу структуру даних. Зауважу, що такий прийом широко використовується в різних API продуктів Microsoft.

Список розділів дискових пристроїв

У коді лістингу 1 викликається написана мною функція GetParti-tionTypeEx. Вона отримує параметри дискового накопичувача, повертає найменування файлової системи, на ньому встановленої, і перевіряє, чи підтримує файлову систему контроль обмеження доступу (див. Лістинг 2).

У Win32 API для отримання інформації про дисковий розділі використовується функція

Її параметри описані в Таблиці 2. Трохи докладніше розглянемо параметр lpFileSystemFlags. Це набір бітових прапорів. Серед інших визначено прапор FS_PERSISTENT_ACLS. Наявність цього прапора означає, що папки і файли розділу є природоохоронними об'єктами. Перед тим як отримувати списки ACE для того чи іншого об'єкта, непогано переконатися, що файлова система їх підтримує. Тепер ми знаємо, як це робиться.

Список записів управління доступом для захищених об'єктів

Щоб отримати структуру ACL для іменованого об'єкта, потрібно задіяти функцію GetNmedSe-curityInfo. Серед інших значень вона повертає покажчики на DACL і SACL. Нас цікавить перший з них. Тепер у нас є вся інформація для створення списку ACE. Функція GetAce дозволяє пройти по всьому списку заголовків ACE_HEADER, відповідних ACL. Цій функції передаються три параметра. Перший - покажчик на ACL, другий - порядковий номер ACE, покажчик на який повертається в третьому параметрі (cм. Лістинг 3).

Список поділюваних ресурсів і прав для них

Останнє питання, яке я хочу детально розглянути, стосується отримання списку локальних ресурсів загального доступу (shares) і прав доступу до них. Процедура отримання прав на об'єкти ідентична описаній процедурі отримання прав на доступ до файлових об'єктів. Тому що реалізує її код включений в код процедури, представленої в лістингу 4. і окремо не обговорюється. Це характерно для API системи безпеки, яка надає узагальнений інтерфейс до всіх захищених об'єктів. Дійсно, з точки зору системи обмеження доступу Windows розділяється ресурс - такий же іменований об'єкт, як, наприклад, і файл. Тому алгоритми роботи з ними одні й ті ж.

Список поділюваних ресурсів надається функцією

Для отримання SD ресурсу використовується функція

Для отримання списку ACE використовується поле shi502_security_descriptor, що містить необхідний Security Descriptor.

Відновлення параметрів безпеки

Параметри команди такі:

Filename - без інших параметрів виводить на екран список користувачів і їх прав на доступ до об'єкта Filename.

/ T - змінює список записів управління доступом до об'єкту, а якщо це папка, то до всіх вкладених папок.

/ E - замінює список записів управління доступом.

/ C - дозволяє продовжити роботу в разі помилки відмови в доступі.

/ G user: perm - встановлює для користувача, що визначається параметром user, права на доступ до об'єкта, що визначаються параметром perm:

N - немає; R - читання; W - запис; C - зміна; F - повний контроль.

/ R user - видаляє для зазначеного користувача права на доступ до об'єкта.

/ P user: perm - змінює для наданого в секції user користувача права на доступ до об'єкта, які описуються параметром perm і можуть бути наступними:

N - немає; R - читання; W - запис; C - зміна; F - повний контроль.

/ D user - забороняє застосовувати користувачеві доступ до зазначеного об'єкту.

Утиліта дозволяє застосовувати маски, наприклад *. *, В іменах файлів і папок, а також вказувати в одній команді кілька користувачів. У Knowledge Base описаний метод використання утиліти cacls.exe для зміни прав доступу не тільки користувачів, але і груп до об'єктів файлової системи. В цьому випадку синтаксис зберігається, але імена груп беруться в лапки (Q162786).

Active Directory і доступ до інформації про безпеку

Поділіться матеріалом з колегами і друзями

Схожі статті