
- •Лабораторна робота №4. Функції роботи з ідентифікаторами безпеки. Теоретична частина
- •1. Основні поняття
- •2. Структура ідентифікатора безпеки
- •3. Створення ідентифікатора безпеки
- •4. Визначення облікового запису по ідентифікатору безпеки
- •5. Визначення ідентифікатора безпеки по імені облікового запису
- •6. Отримання характеристик ідентифікатора безпеки
- •Практичне завдання:
Лабораторна робота №4. Функції роботи з ідентифікаторами безпеки. Теоретична частина
1. Основні поняття
Операційна система NT була розроблена так, щоб відповідати рівню С2 вимог безпеки Міністерства оборони США (DOD 5200.28-STD), Оранжевої книги. Цей стандарт вимагає наявність у операційних систем певних властивостей, що дозволяють відносити дані системи достатньо надійним для виконання військових завдань певного роду. Хоча при розробці операційної системи Windows NTне ставилося особливій меті відповідності вимогам рівня С2, вона успадкувала безліч властивостей безпеки від NT, включаючи наступні:
1. Безпечна реєстрація в системі із запобіжними засобами проти спроб застосування фальшивої програми реєстрації.
2. Дискреційне управління доступом.
3. Управління привілейованим доступом.
4. Захист адресного простору для кожного процесу.
5. Обнулення сторінок перед виділенням їх процесу.
6. Аудит безпеки.
Безпечна реєстрація означає, що системний адміністратор може зажадати від всіх користувачів наявність пароля для входу в систему. Програма, що імітує реєстрацію в системі, використовувалася раніше на деяких системах зловмисниками з метою вивідати пароль користувача. Така програма запускалася в надії, що користувач сяде за комп'ютер і введе своє ім'я і пароль. Ім'я і пароль записувалися на диск, після чого користувачеві повідомлялося, що в реєстрації йому відмовлено. У операційній системі Windows NT подібний обман користувача неможливий, оскільки користувач для входу в систему повинен натиснути комбінацію клавіш CTRL+ALT+DEL. Ця комбінація клавіш завжди перехоплюється драйвером клавіатури, який викликає при цьому справжню програму реєстрації. Призначений для користувача процес не може сам перехопити цю комбінацію клавіш або відмінити її обробку драйвером.
Дискреційне управління доступом дозволяє власникові файлу або іншого об'єкту вказати, хто може користуватися об'єктом і яким чином. Засоби управління привілейованим доступом дозволяють системному адміністраторові діставати доступ до об'єкту, не дивлячись на встановлені його власником дозволу доступу. Під захистом адресного простору є на увазі лише те, що у кожного процесу є власний захищений віртуальний адресний простір, недоступний для будь-якого неавторизованого процесу. Следующий пункт означает, что при увеличении стека выделяемые для него страницы заранее обнуляются, так что процесс не может обнаружить в них информации, помещенной предыдущим владельцем страницы памяти (страницы подаются процессам из списка обнуленных страниц, показанного на рис. 11.14). Наконец, аудит безопасности следует понимать как регистрацию системой в журнале определенных событий, относящихся к безопасности. Впоследствии этот журнал может просматривать системный администратор.
У кожного користувача (і групи) операційної системи Windows NTесть ідентифікатор безпеки SID (Security IDentifier), по якому операційна система відрізняє його від інших користувачів. Ідентифікатори безпеки є двійковими числами з коротким заголовком, за яким йде довгий випадковий компонент. Кожен SID має бути унікальний в межах усієї планети. Коли користувач запускає процес, цей процес і його потоки працюють під ідентифікатором користувача. Велика частина системи безпеки спроектована так, щоб гарантувати надання доступу до кожного об'єкту тільки потокам з авторизованими ідентифікаторами безпеки.
У кожного процесу є маркер доступу, в якому вказується SID і інші властивості. Як правило, він призначається при реєстрації в системі процедурою winlogon. Структура маркера доступу показана на мал. 1. Щоб отримати цю інформацію, процес повинен викликати функцію GetTokenInformation, оскільки вона може змінитися з часом. Заголовок маркера містить деяку адміністративну інформацію. За значенням поля терміну дії можна визначити, коли маркер перестане бути дійсним, але нині це поле не використовується. Поле Groups (групи) вказує групи, до яких належить процес. Це поле потрібне для відповідності вимогам стандарту POSIX. Поле Default DACL (DACL за умовчанням, Discretionary Access Control List -список розмежувального контролю доступу) є списком управління доступом, що призначається об'єктам, створеним процесом, якщо не визначені інші списки ACL. Ідентифікатор безпеки користувача вказує користувача, що володіє процесом. Обмежені ідентифікатори SID дозволяють ненадійним процесам брати участь в завданнях разом з надійними процесами, але з меншими повноваженнями і меншими можливостями спричинення збитку.
Заголовок |
Термін дії |
Групи |
DACL |
Обмежені ідентифікатори SID |
SID користувача |
SID групи |
Привілеї |
Рисунок 1 – Структура маркера доступу
Нарешті, перераховані в маркері привілеї (якщо вони перераховані) дають процесу особливі повноваження, такі як право вимикати комп'ютер або діставати доступ до файлів, до яких інакше в цьому доступі процесу було б відмовлено. Привілеї дозволяють розбити повноваження системного адміністратора на окремі права, які можуть надаватися процесам окремо. Таким чином, користувачеві може бути надана частина повноважень суперкористувача, але не усі його повноваження. Отже, маркер доступу містить інформацію про той, хто володіє процесом і які умовчання і повноваження асоційовані з ним.
Коли користувач реєструється в системі, процес winlogon призначає маркер доступу початковому процесу. Наступні процеси, як правило, наслідують цей маркер. Маркер доступу процесу спочатку застосовується до усіх потоків процесу. Проте потік під час виконання може отримати інший маркер доступу. В цьому випадку маркер доступу потоку перекриває маркер доступу процесу. Зокрема, клієнтський потік може передати свій маркер доступу серверному потоку, щоб сервер міг дістати доступ до захищених файлів і інших об'єктів клієнта. Такий механізм називається перевтіленням.
Іншим основним поняттям є дескриптор захисту. У кожного об'єкту є асоційований з ним дескриптор захисту, список, що містить, користувачів і груп, що мають доступ до цього об'єкту. Дескриптор захисту складається із заголовка, за яким йде список DACL з одним або декількома елементами АСОВІ (Access Control Entry - елемент списку контролю доступу ACL). Два основні типи елементів списку - це дозвіл і заборона доступу. Дозволяючий елемент містить SID користувача або групи і бітовий масив, що визначає набір операцій, які процеси з цим ідентифікатором SID можуть виконувати з певним об'єктом. Заборонний елемент працює аналогічно, але збіг ідентифікаторів означає, що процес, що звертається, не може виконувати перераховані операції.
Окрім списку DACL у дескриптора захисту є також список SACL (System Access Control List - системний список контролю доступу), який схожий на DACL, тільки замість користувачів і груп, що мають доступ до об'єкту, в нім перераховуються операції з цим об'єктом, що реєструються в спеціальному журналі.
Виклики API захисту
У основі більшої частини механізмів управління доступом в Windows NTлежат дескриптори захисту. Як правило, коли процес створює об'єкт, він передає функції CreateProcess, CreateFile або іншій функції як одного з параметрів дескриптор захисту. Цей дескриптор захисту потім стає дескриптором захисту, приєднаним до об'єкту. Якщо при створенні об'єкту не надається дескриптора захисту, використовується дескриптор захисту зухвалого процесу за умовчанням (см. рис. 1).
Для управління дескрипторами захисту існує безліч викликів Win32 API. Найбільш важливі виклики перераховані в таблиці 1. Щоб створити дескриптор захисту, для нього спочатку виділяється місце зберігання, після чого він ініціалізувався за допомогою виклику InitializeSecurityDescriptor. Цей виклик заповнює заголовок. Якщо SID власника невідомий, він може бути знайдений по імені за допомогою виклику LookupAccountSid. Потім він може бути вставлений в дескриптор захисту. Те ж саме справедливе для SID групи, якщо група існує. Як правило, використовується SID зухвалого процесу, а також SID одній з груп зухвалого процесу, але системний адміністратор може записати в дескриптор захисту будь-якої SID.
Список DACL або SACL дескриптора захисту може бути проинициализирован за допомогою функції InitializeAcl. Елементи списку ACL можуть бути додані за допомогою функцій AddAccessAllowedAce і AddAccessDeniedAce. До цих викликів можна звертатися багаторазово, щоб додати стільки записів АСОВІ, скільки необхідно. Видалення запису відбувається за допомогою функції DeleteAce. Коли список ACL готів, його можна приєднати до дескриптора захисту за допомогою функції SetSecurityDescriptorDacl. Нарешті, коли об'єкт створений, до нього можна приєднати новенький дескриптор захисту.
Таблиця 1
Основні функцииWin32 API для управління захистом
Функція |
Опис |
InitializeSecurityDescriptor |
Підготувати новий дескриптор захисту |
LookupAccountSid |
Знайти SID по заданому імені користувача |
SetSecurityDescriptorOwner |
Ввести SID власника в дескриптор захисту |
SetSecurityDescriptorGroup |
Ввести SID групи в дескриптор захисту |
InitializeAcl |
ИнициализироватьDACL або SACL |
AddAccessAllowedAce |
Додати до DACL або SACL новий АСОВІ з дозволом доступу |
AddAccessDeniedAce |
Додати до DACL або SACL новий АСОВІ із забороною доступу |
DeleteAce |
Видалити АСОВІ з DACL або SACL |
SetSecurityDescriptorDacl |
Додати DACL до дескриптора захисту |
Реалізація захисту
Захист в автономній системі Windows NTреализуется за допомогою декількох компонентів, велику частину яких ми вже розглянули (питання мережевої безпеки є зовсім іншою історією і виходить за рамки цього курсу). Реєстрацією в системі управляє програма winlogon, а аутентифікацією займаються Lsass і msgina.dll. Результатом успішної реєстрації в системі є нова оболонка з асоційованим з нею маркером доступу. Цей процес використовує в реєстрі ключі SECURITY і SAM. Перший ключ визначає загальну політику безпеки, а другий ключ містить інформацію про захист для індивідуальних користувачів.
Як тільки користувач реєструється в системі, виконується операція захисту при відкритті об'єкту. Для кожного виклику ОреnХХХ вимагається ім'я об'єкту, що відкривається, і набір прав доступу до нього. Під час обробки процедури відкриття об'єкту менеджер безпеки перевіряє наявність у зухвалого процесу відповідних прав доступу. Для цього він переглядає усі маркери доступу зухвалого процесу, а також список DACL, що асоціюється з об'єктом. Він переглядає по черзі елементи списку ACL. Як тільки він знаходить запис, відповідний ідентифікатору SID зухвалого процесу або одній з його груп, пошук прав доступу вважається закінченим. Якщо зухвалий процес має необхідні права, об'єкт відкривається, інакше у відкритті об'єкту відмовляється.
Окрім дозволяючих записів, списки DACL можуть також містити заборонні записи. Оскільки менеджер безпеки припиняє пошук, наткнувшись на перший запис з вказаним ідентифікатором, заборонні записи поміщаються в початок списку DACL, щоб користувач, якому строго заборонений доступ до якого-небудь об'єкту, не зміг отримати його як член якої-небудь групи, якою цей доступ наданий.
Після того, як об'єкт відкритий, дескриптор об'єкту повертається зухвалому процесу. При наступних зверненнях перевіряється тільки, чи входить ця операція в число операцій, дозволених у момент відкриття об'єкту, щоб, наприклад, не допустити запису у файл, відкритий для читання.