привілеї
Число привілеїв, які визначаються в операційній системі, з часом виросло. B відміну від прав користувачів, які вводяться в дію в одному місці службою LSA, різні привілеї визначаються різними компонентами і ними ж застосовуються. Скажімо, привілей налагодження, що дозволяє процесу обходити перевірки прав доступу при відкритті описателя іншого процесу через API-функцію OpenProcess, перевіряється диспетчером процесів. Повний список привілеїв наведено в таблиці 8-5.
Компонент, яким потрібно перевірити маркер на наявність якоїсь привілеї, звертається до API-функції PrivilegeCheck або LsaEnumerateAccountRights, якщо він виконується в режимі користувача, або до SeSingle-PrivilegeCbeck або SePrivilegeCbeck, якщо він працює в режимі ядра. API-функції, що працюють з привілеями, нічого не знають про права облікових записів, але API-функцій, які оперують з правами, привілеї відомі.
B відміну від прав облікового запису привілеї можна ввімкнути або вимкнути. Щоб перевірка привілеї пройшла успішно, цей привілей повинна знаходитися в зазначеному маркере і повинна бути включена. Сенс такої схеми в тому, що привілеї повинні включатися тільки при реальному їх використанні, і в тому, щоб процес не міг випадково виконати привілейовану операцію.
ЕКСПЕРИМЕНТ: спостереження за включенням привілеї
Наступна процедура дозволить побачити, як аплет Date and Time (Дата і час) з Control Panel включає привілей SeSystemTime-Privilege, виходячи з того, що його інтерфейс буде використаний для зміни дати або часу на комп'ютері.
2. Запуск Process Explorer і виберіть для частоти оновлення значення Paused.
3. Відкрийте вкладку Security у вікні властивостей будь-якого процесу, наприклад Explorer. Ви повинні побачити, що привілей SeChange-SystemTimePrivilege відключена.
4. Запустіть аплет Date and Time з Control Panel і обновіть вікно Process Explorer. B списку з'явиться новий процес Rundll, виділений зеленим кольором.
5. Відкрийте вікно властивостей для процесу Rundll (двічі клацнувши ім'я цього процесу) і переконайтеся, що командний рядок містить текст «Timedate.Cpl». Наявність цього аргументу повідомляє Rundll (хост-процесу Control Panel DLL) завантажити DLL, що реалізує UI, який дозволяє змінювати дату і час.
6. Перейдіть на вкладку Security у вікні властивостей процесу Rundll і ви побачите, що привілей SeSystemTimePrivilege включена.
ЕКСПЕРИМЕНТ: привілей Bypass Traverse Checking
Якщо ви є системним адміністратором, то повинні знати про привілеї Bypass Traverse Checking (Обхід перехресної перевірки) * (її внутрішнє назва - SeNotifyPrivilege) і про те, які наслідки тягне за собою її включення. Цей експеримент демонструє, що нерозуміння її поведінки може привести до серйозного порушення безпеки.
1. Створіть папку, а в ній - новий текстовий файл з яким-небудь текстом.
2. Перейдіть в Explorer до нового файлу і відкрийте вкладку Security (Безпека) в його вікні властивостей. Натисніть кнопку Advanced (Додатково) і скиньте прапорець, керуючий спадкуванням. Виберіть Сміттю (Копіювати), коли з'явиться запит з пропозицією видалити або скопіювати успадковані дозволу.
3. Далі зробіть так, щоб по вашому профілі не можна було отримати доступ до цієї нової папці. Для цього виберіть свій обліковий запис і в списку дозволів виберіть всі прапорці типу Deny (відхилити або заборонити).
4. Запустіть Notepad і спробуйте через його UI перейти в нову папку. Ви не зможете цього зробити.
5. B поле File Name (Ім'я файлу) діалогового вікна Open (Відкрити) введіть повний шлях до нового файлу. Файл повинен відкритися. Якщо в вашому профілі немає привілеї Bypass Traverse Checking, NTFS перевірятиме права доступу до кожного каталогу в шляху до файлу, коли ви спробуєте відкрити цей файл. І тільки в такому випадку вам буде відмовлено в доступі до даного файлу.
* Так цей привілей називається в російській версії Windows XP, але насправді ніякої перехресної перевірки немає - перевіряються проміжні каталоги в шляху до файлу. Тому такий привілей було б назвати «Обхід проміжних перевірок». - Прим. перев.