
- •Архитектуры и модели программ и знаний
- •Содержание
- •Пример: проблемы с безопасностью
- •Источники проблем с
- •Более ранние
- •Решение проблем безопасности
- •Содержание
- •Общие определения
- •Общие определения 2/3
- •Общие определения
- •Содержание
- •Виды полномочий
- •Интерфейс
- •Полномочия для управления полномочиями
- •Пример: Использование полномочий безопасности
- •Пример (2)
- •Декларативные проверки полномочий
- •Содержание
- •Использование ролей
- •Подмена главного пользователя
- •Использование WindowsPrincipal
- •Подмена пользователя (impersonation)
- •Содержание
- •Безопасность доступа
- •Прогулка по стеку
- •Модификаторы стека
- •Интерфейс IStackWalk
- •Создание своих собственных полномочий для проверки кода
- •Содержание
- •Безопасность, основанная на свидетельствах
- •Свидетельства
- •Политика безопасности
- •Уровни безопасности
- •Внутренняя структура политики
- •полномочий
- •Запросы со стороны сборок
- •Общая картина
- •Содержание
- •Настройка системы безопасности
- •Резюме
- •Литература по .NET
- •Вопросы и домашнее задание к лекции 22

Использование WindowsPrincipal
Установка для приложения той разновидности главного пользователя, которая будет применяться:
AppDomain.CurrentDomain.SetPrincipalPolicy
(PrincipalPolicy.WindowsPrincipal)
Определение главного пользователя:
WindowsPrincipal MyPrincipal = (WindowsPrincipal) Thread.CurrentPrincipal
(C) Сафонов В.О. 2012

Подмена пользователя (impersonation)
С помощью системных вызовов можно получить пользовательский маркер:
например, LogonUser из advapi32.dll
Создать экземпляр WindowsIdentity:
WindowsIdentity ImpersonatedIdentity =
new WindowsIdentity(hToken)
Подменить пользователя:
WindowsImpersonationContext
MyImpersonation =
ImpersonatedIdentity.Impersonate()
По окончании работы вернуться к прежнему пользователю:
MyImpersonation.Undo()
(C) Сафонов В.О. 2012

Содержание
Общие определенияВиды полномочийИспользование ролей
Безопасность доступа к кодуПолитики безопасностинастройка системы безопасности
(C) Сафонов В.О. 2012

Безопасность доступа
к коду
Доступ к ресурсам ограничивается для некоторого фрагмента кода
ГибкостьНадежность
Полномочия проверяются на стеке вызовов (проверяется динамическая цепочка вызванных методов)
Нет возможности скрыть истинные полномочия
Принцип минимальных полномочий (привилегий)
(C) Сафонов В.О. 2012

Прогулка по стеку
Каждая сборка имеет свой набор прав
Стек растет вниз
Метод в A4 потребовал
полномочий P
P
Assembly A1
Assembly A2
Assembly A3 |
Assembly A4
G1 |
P |
G2 P
G3 |
P |
G4 |
P сравнивается с |
правами каждой |
|
|
сборки на стеке |
|
выше A4 |
(C) Сафонов В.О. 2012

Модификаторы стека
Управление текущим состоянием процесса проверки и присваивания прав при прогулке по стекуПример: управляемая обертка для неуправляемых ресурсов
Текущая сборка требует соответствующих полномочий от вызывающей сборки
Гарантируется безопасность вызова неуправляемого кода
Исполняется неуправляемый код
(C)Сафонов В.О. 2012

Интерфейс IStackWalk
Demand
Проверка вызывающей сборки
Deny / PermitOnly
Добровольное ограничение прав сборки
Assert
Я доверяю всем, кто меня вызвал. В дальнейших полномочиях необходимости нет
CodeAccessPermission.RevertXxx
Удалить модификатор стека из фрейма (записи активации на стеке)
(C) Сафонов В.О. 2012

Создание своих собственных полномочий для проверки кода
CodeAccessPermission:
DBDataPermission – доступ к базе данных
IsolatedStoragePermission – доступ к изолированному храналищу данных
ResourcePermissionBase – доступ к системным ресурсам
(C) Сафонов В.О. 2012

Содержание
Общие определенияВиды полномочийИспользование ролей
Безопасность доступа к кодуПолитики безопасностиНастройка системы безопасности
(C) Сафонов В.О. 2012

Безопасность, основанная на свидетельствах
Полномочия
Объекты для авторизации
Политика
Определяет набор полномочий, предоставленных сборке
Свидетельство
Информация о сборке из различных источников (автор, компания- разработчик и т.д.) для предоставления набора полномочий сборке
Все три вида полностью расширяемы
(C) Сафонов В.О. 2012