Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Загальна архітектура безпеки
Архітектури безпеки Windows XP [14] містять такі основні компоненти. ♦ Процес реєстрації користувачів (logon process, winlogon) обробляє запити користувачів на реєстрацію у системі та приймає дані від них. ♦ Менеджер аутентифікації (Local Security Authority Subsystem, LSASS) безпосередньо проводить аутентифікацію користувача. Цей компонент — центральний у підсистемі безпеки. Крім аутентифікації, він контролює політику аудиту, про яку йтиметься у розділі 18.6. ♦ Менеджер облікових записів (Security Accounts Manager, SAM) підтримує базу даних облікових записів (базу даних SAM), що містить імена локальних користувачів і груп, а також паролі. Під час перевірки прав користувача SAM взаємодіє із менеджером аутентифікації. ♦ Довідковиймонітор захисту (Security Reference Monitor, SRM) перевіряє права користувача на доступ до об'єкта і виконує необхідну дію з об'єктом за наявності цих прав. Це єдиний компонент, що виконується в режимі ядра, він реалізує політику контролю доступу, визначену менеджером аутентифікації. SRM гарантує, що будь-який користувач або процес, що дістав доступ до об'єкта, має всі права на нього. Ця архітектура реалізована у системах, що не використовують мережної аутентифікації. Для неї інформація про облікові записи має зберігатися не у базі даних SAM, а у спеціальному централізованому сховищі даних - активному каталозі (Active Directory). Під час мережної аутентифікації менеджер аутентифікації звертається до служби активного каталогу віддаленого комп'ютера, на якому розташований цей каталог. База даних SAM, однак, є у будь-якій установці OC лінії Windows XP — у ній зберігають облікові записи для локальної аутентифікації. Подальший виклад торкатиметься локальної аутентифікації.
Аутентифікація Windows XP вимагає, щоб кожному користувачу відповідав обліковий запис. Він пов'язаний із профілем захисту, який є набором інформації щодо контролю доступу (ім'я користувача, список його груп, пароль тощо). Профілі захисту зберігають у базі даних SAM і використовують для аутентифікації. Розглянемо послідовність кроків реєстрації користувача у системі. Процес winlogon очікує введення від користувача. Потік цього процесу виявляє спробу користувача ввійти у систему (натискання комбінації клавіш Ctrl+Alt+Del) і пропонує йому ввести ім'я облікового запису та пароль. При цьому для реалізації такого введення winlogon звертається до спеціальної DLL графічної ідентифікації та аутентифікації (GINA). Стандартне вікно введення даних користувача реалізоване у msgina.dll, програміст може встановити свою версію цієї динамічної бібліотеки, що реалізує альтернативний метод аутентифікації (наприклад, на основі смарт-карт або біометричних даних).
Дані від користувача передаються процесу winlogon, і аутентифікація із використанням бази даних SAM (за яку відповідає LSASS) відбувається відповідно до протоколу «виклик-відповідь». Можна використати і протокол Керберос (цей підхід тут не розглядатиметься). Якщо аутентифікація пройшла успішно, створюють об'єкт, що унікальним чином визначає цього користувача в усіх його подальших діях. Цей об'єкт, який називають маркером доступу (access token), відіграє ключову роль у підсистемі захисту: він визначає, до яких системних ресурсів мають доступ потоки, створені цим користувачем. Після успішної аутентифікації користувача LSASS створює процес і приєднує до нього маркер доступу користувача. Цей процес передають підсистемі Win32, що запускає в його адресному просторі застосування, визначене у реєстрі як оболонка системи (за замовчуванням ним є стандартна оболонка explorer.exe). Застосування формує візуальне відображення параметрів робочого столу для користувача.
Ідентифікатори безпеки Із кожним користувачем і групою у Windows XP пов'язують унікальний ідентифікатор безпеки (Security Identifier, SID). Це цілочислове значення, що складається із заголовка і випадкової частини. Система безпеки звертається до користувачів і груп тільки за їхнім SID. Win32 API надає ряд функцій для роботи із SID [32]. Для отримання SID користувача або групи за іменем використовують функцію LookupAccountName(): BOOL LookupAccountName (LPCTSTR sname. LPCTSTR username. PSID sid. LPDWORD sidsize. LPTSTR dname. LPDW0RD dsize. PSID_NAME_USE sidtype);
де: username - ім'я користувача; sid — покажчик на буфер пам'яті, у який записується отриманий SID, відображений спеціальною структурою SID (цей буфер звичайно розміщують у динамічній ділянці пам'яті); sidsize — розмір буфера (якщо його недостатньо для розміщення SID1 у дану змінну записується необхідний розмір, а буфер sid не заповнюється); dname — покажчик на буфер пам'яті, у який записується ім'я домена, де зареєстрований користувач (для локального користувача — ім'я комп'ютера), dsize -розмір цього буфера;
sidtype — покажчик на змінну, що задає тип SID (вона може набувати значень SidTypeUser - SID користувача, SidTypeGroup — SID групи). Наведемо приклад отримання SID користувача за його ім'ям:
DWORD sidsize = 1024. domsize = 1024: char username[] - "ivanov". domname[1024]; SID_NAME_USE sidtype = SidTypeUser: PSID sid = (PSID)HeapAlloc (GetProcessHeap(). 0. sidsize); LookupAccountName (NULL. username, sid, &sidsize. domname, &domsize. &sidtype): //... робота з sid FreeSid (sid);
Для перетворення структури SID у рядковий формат, придатний для відображення, використовують функцію ConvertSidToStringSid():
#include <sddl.h> char *ssid = NULL: // PSIDsid: LookupAccountName(... sid....): ConvertSidToStringSid( sіd. &ssi d); // пам'ять для ssid буде виділено автоматично printf("*sW. ssid): // S-1 -5-21 -1844237615-1682526488-1202660629-1002 LocalFree (ssid);
Маркери доступу Маркер доступу користувача пов'язують з усіма процесами, які він створює. Маркер є «посвідченням особи» процесу, коли той намагається використати який-не-будь системний ресурс, і містить таку інформацію: ♦ SID користувача, із правами якого виконується процес; ♦ список груп, до яких належить цей користувач; ♦ список привілеїв, якими володіє користувач; ♦ список контролю доступу за замовчуванням, який визначає первісні права доступу для об'єктів, створюваних процесами цього користувача (про структуру такого списку йтиметься у пункті 18.5.3). У разі спроби процесу відкрити дескриптор об'єкта диспетчер об'єктів звертається до SRM. SRM отримує маркер доступу, пов'язаний із процесом, та використовує його SID і список груп, щоб визначити, чи має процес право доступу до об'єкта. Фактично маркер доступу відповідає ідентифікатору eui d для UNIX. Для отримання маркера доступу процесу використовують функцію Open-ProcessToken():
BOOL OpenProcessToken (HANDLE ph. DWORD access. PHANDLE ptoken): де: ph — дескриптор процесу; access — тип доступу до маркера (T0KEN_QUERY — читання інформації); ptoken - покажчик на змінну, в яку записується дескриптор маркера доступу. Ось приклад отримання маркера доступу поточного процесу:
HANDLE mytoken; OpenProcessToken(GetCurrentProcessO. TOKENQUERY. &mytoken);
Інформація, що зберігається у маркері доступу, може бути отримана за допомогою функції GetTokenInformation():
BO0L GetTokenInformation (HANDLE token. T0KEN_INF0RMATI0N_CLASS tclass, LPV0ID tibuf. DWORD tisize. PDW0RD realsize);
де: token - дескриптор маркера доступу; tclass — значення, що визначає тип отримуваної інформації (TokenUser — інформація про обліковий запис користувача, TokenGroups - список груп); ti buf — буфер для розміщення інформації (якщо tcl ass дорівнює TokenUser, цей буфер містить структуру типу T0KEN_USER із полем User, що відображає структуру із полем Sid, яке містить SID цього користувача); tisize - розмір буфера; realsize - покажчик на змінну, що містить розмір буфера, необхідного для розміщення інформації (якщо tisize недостатньо, функція поверне FALSE і запише в цю змінну потрібний розмір). Наведемо приклад отримання SID з маркера доступу:
GetTokenInformation (mytoken. TokenUser. buf. sizeof(buf). &size); ConvertSi dToStri ngSid((( PT0KEN_USER)buf)->User.Si d. &s s і d): printf("ls\n". ssid);
Запозичення прав Окремі потоки процесу можуть виконуватися із правами користувачів, які відрізняються від прав творця цього процесу. Такий підхід називають запозиченням прав (impersonation), за своїм призначенням він відповідає системному виклику setuid() в UNIX-системах. Як і setuid(), запозичення прав найчастіше використовують у серверах, які виконує користувач із адміністративними привілеями. У цьому разі потоки, що обслуговують запити користувачів, можуть виконуватися із меншими правами.
Потік, для якого задано запозичення прав, отримує окремий маркер доступу, який називають маркером режиму запозичення прав (impersonation token). Подальшу перевірку прав доступу виконують із використанням цього маркера. Для отримання маркера доступу довільного користувача необхідно здійснити програмний вхід у систему для цього користувача. Такий вхід реалізує функція LogonUser():
B00L LogonUser (LPTSTR username. LPTSTR domain. LPTSTR passwd. DWORD logon_type. DWORD logon_provider. PHANDLE ptoken);
де: username — ім'я користувача, domain — домен або комп'ютер, у якому зареєстрований користувач (для локальної системи задають "."), passwd — пароль користувача; logon_type — тип входу у систему (для звичайного користувача потрібно задавати L0G0N32_L0G0N_INTERACTIVE); logon_provider — алгоритм аутентифікації, який використовують для входу (L0G0N32_PR0VI0ER_DEFAULT - стандартний алгоритм); ' ptoken - покажчик на змінну, у яку поміщається маркер доступу цього користувача. Наведемо приклад коду, що здійснює програмний вхід у систему: HANDLE itoken; LogonUser ("ivanov". "ivanov_pwd", L0G0N32_L060N_INTERACTIVE. L0G0N32_PR0VIDER_DEFAULT, &itoken):
Реалізацію запозичення прав у користувача, що присутній у системі, здійснюють задопомогою функції ImpersonateLoggedOnUser():
ImpersonateLoggedOnUser( і token); //... потік виконується з правами користувача, що володіє itoken
Маркер доступу потоку може бути отриманий за допомогою функції Open-ThreadToken(), аналогічної до OpenProcessToken():
OpenThreadToken(GetCurrentThread(). TOKENQUERY. TRUE, &ttoken); //... GetTokenInformation (ttoken,...) і т. д.
Для повернення до виконання із колишніми правами використовують функцію RevertToSelf():
RevertToSelf(): Керування доступом Під час створення будь-якого об'єкта Windows XP1 який може бути використаний більш як одним процесом (включаючи файли, поіменовані канали, синхронізаційні об'єкти тощо), йому присвоюють дескриптор захисту (security descriptor). До найважливіших елементів дескриптора захисту належать: ♦ SID власника об'єкта (власник завжди може змінювати атрибутибезпеки об'єкта, навіть якщо в нього немає прав на доступ до його даних); ♦ список контролю доступу (ACL), що визначає права доступу до об'єкта. Кожний елемент списку контролю доступу (ACE) містить такі елементи:
♦ тип ACE (виділяють, зокрема, дозволяючі і забороняючі АСЕ); ♦ ідентифікатор безпеки (SID); ♦ набір прав доступу (читання, записування, повний контроль тощо). Сума прав доступу, наданих окремими АСЕ, формує загальний набір прав доступу, наданих ACL. Розглянемо спрощений приклад ACL для файлового об'єкта (рис. 18.2). Якщо файловий об'єкт володіє таким ACL, користувач може чигати з відповідного файла, коли: ♦ під час пошуку в ACL файлового об'єкта знайдено АСЕ, що містить SID цього користувача або однієї із груп, куди він входить; ♦ цей ACE дозволяє доступ; ♦ у ньому є право на читання даних.
Щоб визначити, який ACL має призначатися новому об’єкту, система захисту застосовує три правила в такому порядку. новому об'єкту, система захисту застосовує три правила в такому порядку. 1. Якщо ACL явно задано під час створення об'єкта, то система захисту присвоює його об'єкту. 2. Якщо ACL не задано, і в об'єкта є ім'я, система захисту шукає ACL каталогу об'єктів, де збережеться ім'я цього об'єкта (для файла таким каталогом буде каталог файлової системи). Деякі ACE каталогу можуть бути позначені як «успадковувані». Це означає, що вони присвоюються новим об'єктам, створеним у цьому каталозі. Якщо такі успадковувані ACE є, із них складають ACL, що призначають новому об'єкту. 3. Якщо жоден із перших двох випадків не стався, об'єкту присвоюють ACL за замовчуванням із маркера доступу процесу, що робив виклик.
|
||||||||
Последнее изменение этой страницы: 2017-02-06; просмотров: 150; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.190.156.212 (0.044 с.) |