- •7.5.2. Трехфазное подтверждение
- •7.6. Восстановление
- •7.6.1. Основные понятия
- •7.6.2. Создание контрольных точек
- •7.6.3. Протоколирование сообщений
- •7.7. Итоги
- •Глава 8
- •8.1. Общие вопросы защиты
- •8.1.1. Угрозы, правила и механизмы
- •8.1.2. Вопросы разработки
- •8.1.3. Криптография
- •8.2. Защищенные каналы
- •8.2.1. Аутентификация
- •8.2.2. Целостность и конфиденциальность сообщений
- •8.2.3. Защищенное групповое взаимодействие
- •8.3. Контроль доступа
- •8.3.1. Общие вопросы контроля доступа
- •8.3.2. Брандмауэры
- •8.3.3. Защита мобильного кода
- •8.4. Управление защитой
- •8.4.1. Управление ключами
- •8.4.2. Управление защищенными группами
- •8.4.3. Управление авторизацией
- •8.5. Пример — Kerberos
- •8.6. Пример — sesame
- •8.6.1. Компоненты системы sesame
- •8.6.2. Сертификаты атрибутов привилегий
- •8.7. Пример — электронные платежные системы
- •8.7.1. Электронные платежные системы
- •8.7.2. Защита в электронных платежных системах
- •8.7.3. Примеры протоколов
- •8.8. Итоги
- •Глава 9
- •9.1. Corba
- •9.1.1. Обзор
- •9.1.2. Связь
- •9.1.3. Процессы
- •9.1.4. Именование
- •9.1.5. Синхронизация
- •9.1.6. Кэширование и репликация
- •9.1.7. Отказоустойчивость
- •9.1.8. Защита
- •9.2. Dcom
- •9.2.1. Обзор
- •9.2.2. Связь
- •9.2.3. Процессы
- •9.2.4. Именование
- •Синхронизация
- •Репликация
- •Отказоустойчивость
- •9.2.8. Защита
- •9.3. Globe
- •9.3.1. Обзор
- •9.3.2. Связь
- •9.3.3. Процессы
- •9.3.4. Именование
- •9.3.5. Синхронизация
- •9.3.6. Репликация
- •Отказоустойчивость
- •9.4. Сравнение систем corba, dcom и Globe
- •9.4.1. Философия
- •Процессы
- •9.4.4. Именование
- •Синхронизация
- •Кэширование и репликация
- •Отказоустойчивость
8.3. Контроль доступа
В модели клиент-сервер, которую мы рассматривали все это время, после создания между клиентом и сервером защищенного канала клиент создавал запросы, которые передавались серверу. Запросы включали операции над ресурсами, контролируемые сервером. Стандартная ситуация предполагала, что сервер объектов управляет несколькими объектами. Запрос клиента обычно содержал обращение к методу конкретного объекта. Такой запрос мог быть выполнен только в том случае, если клиент обладал достаточными для такого обращения правами доступа (access rights).
Формально подтверждение прав доступа называется контролем доступа (access control), в то время как для выдачи прав доступа применяется термин авторизация (authorization). Эти два понятия тесно связаны друг с другом, и нередко одно из них используется вместо другого. Существует множество методов контроля доступа. Мы начнем с обсуждения некоторых общих вопросов, а потом займемся различными моделями контроля доступа. Один из особенно значимых методов контроля доступа к ресурсам — это создание брандмауэра, защищающего приложение или даже всю сеть целиком. Брандмауэры мы обсудим отдельно. В связи с повышением мобильности кода контроль доступа становится невозможно осуществлять только традиционными методами. Для этого были разработаны новые технологии, которые мы также обсудим в этом разделе.
8.3.1. Общие вопросы контроля доступа
Чтобы разобраться в различных аспектах контроля доступа, рассмотрим простую модель, представленную на рис. 8.22. Она состоит из субъектов (subjects), которые посылают запросы на доступ к объекту (object). Этот объект очень похож на те объекты, которые мы уже обсуждали. Мы можем думать об инкапсуляции его внутреннего состояния и реализации операций внутри этого состоянии. Операции объекта, запросы на выполнение которых посылаются субъектами, доступны через интерфейсы. Лучше всего представлять, что субъекты осуществляют по заданию пользователей процессы, но могут также быть и объектами, которые для выполнения своей работы нуждаются в помощи других объектов.
Управление доступом к объектам — это все то, что защищает объекты от обращений субъектов, не имеющих прав на вызов соответствующих методов, а возможно, и вовсе не имеющим прав на вызов каких бы то ни было методов. Кроме того, защита может относиться и к некоторым аспектам управления объектами,
таким как создание, переименование или удаление объектов. Защита часто реализуется при помощи программы под названием монитор ссылок (reference monitor). Монитор ссылок записывает, что может делать тот или иной субъект, и решает, допустимо ли для данного субъекта выполнение конкретной операции. Этот монитор вызывается (например, базовой доверенной операционной системой) при любых обращениях к объекту. Таким образом, очень важно, чтобы монитор ссылок сам по себе имел повышенную защиту от атак: злоумышленник должен быть не в состоянии его обмануть.
Матрица контроля доступа
Общепринятый подход к моделированию прав доступа субъекта по отношению к объектам состоит в построении матрицы контроля доступа (access control matrix). Каждый субъект представлен строкой этой матрицы, каждый объект — столбцом. Если ввести для матрицы обозначение М, то элемент M[s,o] точно определяет, выполнения каких операций субъект s может требовать от объекта о. Другими словами, если субъект s пытается обратиться к методу т объекта о, монитор ссылок должен проверить, указан ли метод т в M[s,o]. Если т в M[s,o] отсутствует, вызова не произойдет.
Учитывая, что системе может потребоваться поддерживать тысячи пользователей и миллионы требующих защиты объектов, реализация матрицы контроля доступа в виде реальной матрицы представляется не лучшей из идей. Большинство элементов матрицы будут пустыми, поскольку один субъект обычно имеет доступ к относительно небольшому числу объектов. Поэтому для реализации матрицы контроля доступа используются более эффективные способы.
Один из широко применяемых способов состоит в том, что каждый из объектов поддерживает список прав доступа субъектов, которые желают иметь доступ к этому объекту. Это означает, что матрица разбивается на столбцы, которые распределяются по объектам, при этом пустые элементы отбрасываются. Такой способ реализации приводит нас к так называемому списку контроля доступа (Access Control List, ACL). Предполагается, что каждый объект имеет собственный, ассоциированный только с ним список ACL.
Другой подход состоит в том, что матрица разбивается по строкам и каждый субъект получает список мандатов (capabilities) для каждого из объектов. Другими словами, мандат соответствует элементу в матрице контроля доступа. Отсутствие для конкретного объекта мандата означает, что субъект не имеет прав на доступ к этому объекту.
Мандат можно сравнить с талоном — тот, кто им владеет, имеет определенные права, записанные в этом талоне. Понятно также, что талон должен быть защищен от попыток владельца модифицировать его. Один из способов, подходящий для распределенных систем и активно используемый в системе Amoeba, состоит в защите мандатов (списка мандатов) с помощью подписи [449]. Мы вернемся к этому и другим вопросам позже при рассмотрении вопросов управления защитой.
Разницу между использованием для защиты объектов списков контроля доступа и списков мандатов иллюстрирует рис. 8.23. В случае списков контроля доступа клиент посылает запрос на сервер, монитор ссылок выясняет, что ему известно про этого клиента, и если клиенту разрешается выполнять запрошенную операцию, она будет выполнена, что и показано на рис. 8.23, а.
При использовании списка мандатов клиент просто передает свой запрос вместе со списком мандатов на сервер. Сервер не хранит сведений о клиенте, список мандатов и так скажет ему все необходимое. Таким образом, сервер должен просто проверить, имеется ли в запросе корректный список мандатов и указана ли запрашиваемая операция в этом списке. Такой способ защиты объектов — на основании мандатов — иллюстрирует рис. 8.23, б.
Защищенный домен
Списки ACL и мандаты помогают успешно реализовать матрицу контроля доступа с исключенными пустыми элементами. Тем не менее если не принимать никаких дополнительных мер, и списки контроля доступа, и списки мандатов в конце концов могут стать слишком большими.
Один из основных способов уменьшить размер списка ACL — использование защищенных доменов. Защищенный домен (protection domain) — это набор пар (объект, права доступа). Каждая пара идентифицирует операции, которые для данного объекта разрешается выполнять [391]. Запросы на выполнение операции всегда разрешаются внутри домена. Таким образом, когда субъект запрашивает у объекта выполнение операции, монитор ссылок сначала находит защищенный домен, связанный с этим запросом. Затем, выбрав домен, он проверяет, может ли быть выполнен указанный запрос. Существуют различные методы использования защищенных доменов.
Один из подходов состоит в построении групп (groups) пользователей. Рассмотрим, например, web-страницу внутренней сети компании. К этой странице должны иметь доступ все сотрудники компании, и никто кроме них. Вместо того чтобы добавлять в ACL по элементу на каждого сотрудника, можно создать отдельную группу, содержащую список всех текущих сотрудников. Каждый раз при попытке обращения пользователя к web-странице монитор ссылок должен будет только проверить, является ли пользователь сотрудником. Пользователи, включенные в группу сотрудников, должны быть перечислены в отдельном списке (разумеется, защищенном от неавторизованного доступа).
Схема станет более гибкой, если сделать структуру групп иерархической. Так, например, если организация имеет три различных филиала, скажем, в Амстердаме, Нью-Йорке и Сан-Франциско, она может пожелать разбить группу сотрудников на три подгруппы, по одной для каждого города, что приведет нас к структуре, представленной на рис. 8.24.
Доступ к web-странице внутренней сети компании может быть разрешен всем ее работникам. Однако изменять, например, web-страницы, относящиеся к амстердамскому филиалу, может быть позволено только подмножеству сотрудников из Амстердама. Если пользователь Дик из Амстердама захочет почитать web-страницу внутренней сети, монитор ссылок должен будет сначала найти подгруппы Сотрудники_Лмстердам} Сотрудники _Нъю-Йорк и Сотрудники_Сап-Фран~ циско, которые вместе образуют группу Сотрудники. После этого надо будет проверить, входит ли Дик в одну из этих подгрупп. Преимущество иерархической организации групп состоит в том, что управлять членством в группе становится значительно легче. Кроме того, появляется возможность эффективного построения очень больших групп. Основной минус такой структуры в том, что поиск элемента группы изрядно затрудняется, особенно если база данных о членстве в группах является распределенной.
Вместо того чтобы заставлять монитор ссылок делать всю работу в одиночку, мы можем заставить каждого субъекта хранить сертификат (certificate) со списком групп, в которые он входит. Таким образом, когда Дик захочет почитать web-страницу внутренней сети компании, он предъявит монитору ссылок свой сертификат, показывающий, что он является членом подгруппы Сотрудники_ Амстердам. Чтобы гарантировать, что этот сертификат настоящий, не поддельный, его можно защитить, например, цифровой подписью. Сертификаты немного похожи на списки мандатов. Мы вернемся к этой теме позже.
Кроме использования групп, защищенные домены можно также реализовать в виде ролей (roles). В случае контроля доступа на основе ролей пользователь всегда входит в систему под определенной ролью, которая обычно связана с его полномочиями в организации [396]. Пользователь может иметь несколько ролей. Так, например, Дик может одновременно быть начальником отдела, менеджером проекта и членом группы по поиску сотрудников. В зависимости от роли, выбранной им при подключении, он может получить определенные права. Другими словами, его роль определяет защищенный домен (то есть группу), в котором он будет состоять.
Присваивая роли пользователям и требуя, чтобы во время подключения пользователь выступал под одной из них, мы позволяем пользователю при необходимости изменить свою роль. Так, например, можно потребовать, чтобы Дик, войдя в систему начальником отдела, перешел затем к своей роли менеджера проекта. Отметим, что эти переходы нелегко осуществить, если защищенные домены реализованы только в виде групп.
Кроме использования защищенных доменов производительность можно повысить путем иерархической или какой-либо другой группировки объектов на основании операций, которые они осуществляют. Так, например, независимо от самих объектов, объекты можно группировать по предоставляемым ими интерфейсам, возможно, используя подтипы (также называемые унаследованные интерфейсы, [157]) для построения иерархии. В этом случае, если субъект запрашивает операцию, которую должен выполнить объект, монитор ссылок ищет, в каком интерфейсе находится операция над этим объектом. Затем, вместо того чтобы проверять право субъекта вызывать операции данного объекта, он проверяет, имеет ли субъект право вызывать операции, принадлежащие к данному интерфейсу.
Также допускается и комбинирование защищенных доменов и групп объектов. В [170] описано, как, используя оба этих приема вместе со специальными структурами данных и защищенными операциями объектов, реализовать списки ACL в очень больших наборах объектов цифровых библиотек.
