- •Безопасность
- •Аппаратное обеспечение
- •Программное обеспечение
- •Линии связи и сети
- •15.2. Защита
- •Защита памяти
- •Контроль доступа, ориентированный на пользователя
- •Контроль доступа, ориентированный на данные
- •15.3. Взломщики
- •Методы вторжения
- •Защита паролей
- •Уязвимость паролей
- •Контроль доступа
- •Стратегии выбора паролей
- •Выявление вторжений
- •15.4. Зловредное программное обеспечение
- •Зловредные программы
- •Логические бомбы
- •Троянские кони
- •Природа вирусов
- •Виды вирусов
- •Макровирусы
- •Подходы к борьбе с вирусами
- •Обобщенное дешифрование
- •Цифровая иммунная система
- •15.5. Системы с доверительными отношениями
- •Защита от троянских коней
- •15.6. Безопасность операционной системы windows 2000
- •15.7. Резюме, ключевые термины и контрольные вопросы
- •Контрольные вопросы
- •15.8. Рекомендуемая литература
- •Приложение. Шифрование
- •Стандартное шифрование
- •Стандарт шифрования данных
- •Тройной алгоритм шифрования данных
- •Улучшенный стандарт шифрования
- •Шифрование с открытым ключом
- •А.2. Архитектура протоколов tcp/ip
- •Уровни протокола tcp/ip
- •Приложения tcp/ip
- •Б.1. Мотивация
- •Б.З. Преимущества объектно-ориентированного подхода
- •Б.2. Объектно-ориентированные концепции
- •Структура объектов
- •Классы объектов
- •Наследование
- •Полиморфизм
- •Включение
- •Список литературы
Защита от троянских коней
Одним из путей, с помощью которых можно обезопаситься от атак с применением троянских коней, является использование безопасной операционной системы с доверительными отношениями. Один из примеров [ВОЕВ85] проиллюстрирован на рис. 15.10. В данном случае троянский конь используется для того, чтобы перехитрить стандартный механизм безопасности, используемый большинством систем управления файлами и операционных систем — список контроля доступа. В этом примере пользователь, которого зовут Боб, взаимодействует с помощью программы с файлом данных, в котором содержится секретная символьная строка "CPE170KS". Пользователь Боб создал файл с правами чтения и записи, предоставляемыми только тем программам, которые запускаются от его имени, так что доступ к файлу могут получать только те процессы, владельцем которых является Боб.
Атака с применением троянского коня начинается тогда, когда враждебно настроенный пользователь Алиса получает законный доступ к системе и устанавливает эту программу, а также личный файл, который будет использоваться в качестве "потайного кармана". Алиса предоставляет себе права чтения и записи при работе с этим файлом, а Бобу — право записи (рис. 15.10,а). Затем Алиса склоняет Боба к тому, чтобы он запустил троянского коня; для этого она, возможно, рекламирует программу как полезную утилиту. Когда программа обнаружит, что ее запустил Боб, она считает из его файла секретную символьную строку и скопирует ее в потайной файл Алисы (рис. 15.10,б). Обе операции -операция чтения и операция записи — не выходят за рамки ограничений, накладываемых списками контроля доступа. После этого Алисе остается только заглянуть в скопированный файл, чтобы узнать значение строки.
А теперь посмотрим, как в этой ситуации работает безопасная операционная система (рис. 15.10,в). При входе пользователя в систему ее субъектам присваиваются уровни безопасности; при этом в качестве критерия используется терминал, с которого осуществляется доступ к компьютеру, а также идентификатор и пароль пользователя, которому предоставляется доступ. В рассматриваемом примере применяются два уровня безопасности: секретный (серый цвет) и общедоступный (белый цвет). Уровни упорядочены так, что секретный уровень выше общедоступного. Процессам и файлу данных Боба присваивается секретный уровень безопасности, а файлу и процессам Алисы — общедоступный. Если Боб запускает программу-троянца (рис. 15.10,г), этой программе присваивается уровень безопасности Боба. Таким образом, она имеет возможность узнать значение секретной символьной строки. Однако при попытке сохранить эту строку в общедоступном файле (потайном файле Алисы) нарушается *-свойство, и монитор ссылок накладывает запрет на это действие. Таким образом, попытка записи в потайной файл заканчивается неудачей, несмотря на то что она не противоречит списку контроля доступа: политика безопасности превосходит по старшинству механизм списка управления доступом.
15.6. Безопасность операционной системы windows 2000
Хорошим примером реализации обсуждаемых концепций контроля доступа являются средства контроля доступа операционной системы Windows 2000 (W2K), в которых используются объектно-ориентированные концепции, обеспечивающие мощные и гибкие возможности контроля доступа.
Операционная система W2K предоставляет средства единообразного контроля доступа к процессам, потокам, файлам, семафорам, окнам и другим объектам. Контролем доступа управляют два элемента: маркер доступа, который связан с каждым процессом, и дескриптор защиты, связанный с каждым объектом, для которого возможно межпроцессное взаимодействие.
Схема контроля доступа
При входе пользователя система W2K использует для его аутентификации схему имя/пароль. Если пользователь успешно зарегистрирован, для него создается процесс, с которым ассоциируется маркер доступа. Этот маркер доступа, детали которого будут описаны далее, содержит идентификатор защиты (security ID — SID), по которому система безопасности идентифицирует данного пользователя. Когда начальный пользовательский процесс порождает какие-нибудь другие процессы, новый объект-процесс наследует тот же маркер доступа.
Маркер доступа имеет два предназначения.
1. Благодаря ему вся информация по безопасности хранится вместе, что способствует ускорению подтверждения доступа. Когда какой-нибудь связанный с пользователем процесс пытается получить доступ, подсистема безопасности может использовать связанный с процессом маркер, чтобы определить привилегии доступа, которыми обладает данный пользователь.
2. Наличие маркера доступа позволяет процессу в определенных рамках изменять свои характеристики безопасности, не влияя при этом на работу других процессов, запущенных от имени данного пользователя.
Основное значение второго пункта состоит в том, что маркер доступа должен иметь дело с привилегиями, которые могут быть связаны с пользователем. Маркер доступа указывает, какие привилегии разрешено иметь пользователю. Как правило, для каждой из этих привилегий маркер инициализируется состоянием запрета. Впоследствии, если одному из процессов пользователя нужно выполнить привилегированную операцию, этот процесс может включить соответствующую привилегию и попытаться получить доступ. Иногда нежелательно хранить всю информацию по безопасности, касающуюся пользователя, в одном месте системы, потому что в этом случае предоставление привилегии одному процессу приводит к тому, что данная привилегия предоставляется всем остальным процессам.
С каждым объектом, для которого возможен межпроцессный доступ, связан дескриптор защиты. Основным компонентом дескриптора защиты является список контроля доступа, в котором права доступа к данному объекту указываются для различных пользователей и для различных групп пользователей. Когда процесс пытается получить доступ к этому объекту, идентификатор защиты этого процесса сравнивается со списком управления доступом объекта и определяется, разрешен ли доступ.
Когда приложение открывает ссылку на подлежащий защите объект, W2K проверяет, предоставляет ли дескриптор защиты объекта доступ пользователю, которому принадлежит приложение. Если проверка проходит, система W2K помещает предоставленные в результате права доступа в кэш.
Важным аспектом безопасности операционной системы W2K является концепция заимствования прав, упрощающая использование безопасности в среде клиент/сервер. Если клиент и сервер общаются между собой с помощью вызова удаленных процедур, сервер может временно принять параметры клиента, чтобы суметь оценить возможность доступа с правами клиента. После обработки обращения сервер возвращается к своему собственному состоянию.
Маркер доступа
На рис. 15.11.а показана общая структура маркера доступа, в который входят такие параметры.
Идентификатор защиты. Уникальным образом идентифицирует пользователя в рамках всех машин сети. Идентификатор защиты, как правило, соответствует регистрационному имени пользователя.
Идентификаторы защиты групп. Список групп, в которые входит пользователь. Группа — это просто набор идентификаторов пользователей, который идентифицируется при контроле доступа как группа. Каждая группа обладает собственным идентификатором защиты. Доступ к объекту можно определять на основе группового идентификатора защиты, персонального идентификатора защиты или их комбинации.
Привилегии. Список системных сервисов, важных для безопасности, к которым может обратиться данный пользователь. Примером является создание маркера. Другой пример — назначение привилегий резервирования. Пользователям, обладающим этими привилегиями, разрешено пользоваться средствами создания резервных копий для резервного копирования файлов, которые им нельзя читать. Большинство пользователей не обладают никакими привилегиями.
Владелец по умолчанию. Если процесс создает другой объект, в данном поле указывается владелец нового объекта. Чаще всего пользователем нового процесса является пользователь родительского процесса. Однако пользователь может указать, что по умолчанию пользователем любого процесса, порожденного данным процессом, является идентификатор безопасности группы, к которой принадлежит пользователь.
Список контроля доступа по умолчанию. Это начальный список средств защиты, которые применяются к объекту, создаваемому данным пользователем. Впоследствии пользователь может изменить список контроля доступа любого объекта, которым он владеет или который принадлежит группе пользователя.
Дескрипторы безопасности
На рис. 15.11,6 показана общая структура дескриптора защиты, который содержит в себе такие параметры.
Флаги. Определяют тип и содержимое дескриптора защиты. Флаги указывают на наличие (или отсутствие) системного списка контроля доступа и списка разграничительного доступа, на то, помещены ли эти списки в объект по умолчанию и какая адресация используется в указателях дескриптора: абсолютная или относительная. Относительные дескрипторы требуются для объектов, которые передаются по сети. Примером такого объекта является информация, передаваемая при удаленном вызове процедуры,
Владелец. Вообще говоря, владелец может выполнить с дескриптором за щиты любое действие. В роли пользователя может выступать индивидуальный или групповой дескриптор защиты. Владелец имеет право изменять список разграничительного контроля доступа.
Системный список контроля доступа (System Access Control List — SACL). В этом списке указано, операции какого вида должны генерировать сообщения аудита. Чтобы выполнять операции чтения или записи с SACL какого-либо объекта, приложение должно иметь соответствующие привилегии в своем маркере доступа. Это нужно, чтобы предотвратить чтение несанкционированными приложениями системных списков контроля доступа (в результате чего они смогут избежать создания записей аудита), а также запись в них (что может привести к созданию слишком большого количества записей аудита, в которых затеряется запись о незаконной операции).
Список разграничительного контроля доступа (Discretionary Access Control List — DACL). Определяет, какие пользователи и группы могут получить доступ к данному объекту и для каких операций. Этот список состоит из записей контроля доступа (Access Control Entry — АСЕ).
Когда создается объект, процесс-создатель может в качестве владельца назначить этому объекту в его маркере доступа собственный идентификатор защиты или идентификатор защиты своей группы. Следовательно, любой процесс, которому предоставлено право изменять владельца объекта, могкет это делать, но с определенными ограничениями. Это ограничение нужно, чтобы пользователь не смог замести следы после того, как он попытается предпринять какие-нибудь несанкционированные действия.
Рассмотрим подробнее структуру списков контроля доступа, так как они лежат в основе средства контроля доступа операционной системы W2K (рис. 15.11,в). Каждый список состоит из общего заголовка и переменного количества элементов контроля доступа. В каждом элементе указан индивидуальный или групповой идентификатор защиты, а также маска доступа, в которой определены права, которые должны быть предоставлены данному идентификатору защиты. При попытке процесса получить доступ к объекту диспетчер объектов исполняющей системы W2K считывает в маркере доступа индивидуальные и групповые идентификаторы защиты, а затем просматривает список разграничительного контроля доступа объекта. Если обнаружено совпадение (т.е. если найден элемент контроля доступа, идентификатор защиты которого совпадает с идентификатором защиты, обнаруженным в маркере доступа), значит, этот процесс обладает правами доступа, установленными маской доступа данного элемента контроля доступа.
На рис. 15.12 показано содержимое маски доступа. В 16 младших значащих разрядах указываются права доступа, применяющиеся к объектам определенного типа. Например, в нулевом разряде объекта-файла задается доступ по чтению, а в нулевом разряде объекта-события задается доступ для запроса статуса события.
В 16 старших разрядах маски содержатся биты, применимые к объектам всех видов.
• Синхронизация. Разрешает синхронизацию выполнения с некоторым связанным с данным объектом событием. В частности, объект может быть использован в функции ожидания.
Разрешение на изменение владельца. Позволяет программе изменять владельца объекта. Иногда это оказывается полезным, так как владелец объекта всегда может менять защиту своего объекта (владельцу нельзя отказывать в доступе для записи параметров избирательного контроля доступа).
Разрешение на изменение списка избирательного контроля доступа. Позволяет приложению изменять DACL, меняя таким образом защиту объекта.
Контроль чтения. Позволяет приложению обращаться к полям в дескрипторе защиты, в которых указан владелец данного объекта и его DACL.
Разрешение на удаление. Позволяет приложению удалять объект.
Кроме того, в старшей половине маски доступа содержатся общие права доступа четырех видов. С помощью этих битов легко устанавливать специфические права доступа к различным объектам других типов. Предположим, например, что приложению нужно создать объекты нескольких видов таким образом, чтобы пользователи имели права доступа по чтению ко всем объектам, даже если само понятие "чтение" несколько изменяется в зависимости от типа объекта. Если бы приложению нужно было защищать каждый объект каждого вида, не используя биты общего доступа, оно должно было бы для объектов каждого вида создавать свой элемент контроля доступа, а затем аккуратно передавать его в качестве параметра при создании каждого объекта. Удобнее создать один элемент контроля доступа, в котором была бы выражена общая концепция разрешения чтения, а затем просто применять этот элемент контроля доступа к каждому создаваемому объекту. В этом и состоит предназначение битов общего доступа. Перечислим эти биты:
Generic_all — позволяет осуществлять все виды доступа;
Generic execute — позволяет запускать исполняемые файлы;
Generic_write — позволяет осуществлять доступ для записи;
Generic_read — позволяет осуществлять доступ для чтения.
Значения битов общего доступа также влияют на стандартные типы доступа. Например, для файлового объекта бит Generic_read отображается в стандартные биты Read_control и Synchronize, а также в специфические биты File_Read_Data, File_Read_Attributes и File_Read_EA.
Два оставшихся бита маски доступа имеют специальное значение. Бит Access_System_Security позволяет изменять контроль аудита и аварийного сигнала данного объекта. Однако недостаточно установить этот бит в элементе контроля доступа для идентификатора защиты. Кроме того, в маркере доступа процесса, обладающего этим идентификатором защиты, должна быть разрешена соответствующая привилегия.
Наконец, бит Maximum_Allowed — это не совсем бит доступа. Он изменяет алгоритм, по которому операционная система W2K сканирует список выборочного контроля доступа данного идентификатора безопасности. Обычно операционная система W2K просматривает список выборочного контроля доступа, пока не дойдет именно до того элемента контроля доступа, который предоставляет (бит установлен) или запрещает (бит не установлен) запрашиваемый процессом доступ, или пока она не дойдет до конца списка (в этом случае доступ запрещен). Бит Maximum__Al lowed позволяет владельцу объекта определять набор прав доступа, представляющий собой максимум того, что может быть позволено данному пользователю. Помня об этом, предположим, что у приложения нет информации обо всех выполняемых над объектом операциях, разрешение на которые ему нужно будет просить на протяжении сеанса работы. При выполнении запроса используются три возможности.
Попытка открыть объект для всех возможных видов доступа. Недостаток этого подхода состоит в том, что в доступе может быть отказано, даже если приложение обладает всеми правами доступа, которые нужны для этого сеанса.
Открытие объекта только для определенных видов доступа. При этом в объекте для каждого типа запроса открывается новый дескриптор, В большинстве случаев этот метод является предпочтительным, потому что при его использовании не бывает отказов в доступе без необходимости и не предоставляется больше доступа, чем нужно. Однако он требует дополнительных накладных расходов.
Попытка открыть объект для доступа, осуществляемого в такой мере, в какой это позволяет идентификатор защиты. Преимущество такого метода в том, что пользователь не получит "искусственного" отказа в доступе. Одна ко при этом приложение может иметь больший доступ, чем требуется. Эта ситуация может скрывать имеющиеся в приложении ошибки.
Важная особенность системы безопасности операционной системы W2K состоит в том, что приложение может использовать структуру безопасности этой операционной системы для объектов, заданных пользователем. Например, сервер базы данных мог бы создать свои собственные дескрипторы защиты и присоединять их к блокам базы данных. В дополнение к обычным ограничениям при доступе для чтения/записи сервер может позаботиться о защите таких специфических операций, выполняющихся в базе данных, как прокрутка результирующего множества или выполнение объединения. На сервер может быть возложена ответственность по определению значения особых прав и выполнению проверок доступа. Однако эти проверки будут выполняться в обычном контексте с использованием системных учетных записей пользователей/групп пользователей и контрольных журналов. Расширяемая модель безопасности может оказаться полезной при реализации внешних файловых систем.