Лекция 16. Защитные механизмы операционных систем.
Предыдущая глава | Программа курса
Перейдем к рассмотрению системы защиты операционных систем. Ее основными задачами являются идентификация, аутентификация, разграничение доступа пользователей к ресурсам, протоколирование и аудит самой системы. Более подробную информацию об этом можно получить в [15,30].
16.1 Идентификация и аутентификация
Обычно каждый пользователь в системе имеет уникальный идентификатор. Идентфикаторы пользователей применяются с теми же целями, что и идентификаторы любых других объектов, файлов, процессов. Идентификация заключается в сообщении пользователем своего идентификатора. Для того чтобы установить, что пользователь именно тот, за кого себя выдает, то есть что именно ему принадлежит введенный идентификатор, в информационных системах предусмотрена процедура аутентификации (authentication, опознавание, в переводе с латинского означает установление подлинности), задача которой - предотвращение доступа к системе нежелательных лиц.
Обычно аутентификация базируется на одном или более из трех пунктов:
то, чем пользователь владеет (ключ или магнитная карта),
то, что пользователь знает (пароль),
атрибуты пользователя (отпечатки пальцев, подпись, голос).
16.1.1 Пароли, уязвимость паролей
Наиболее простой подход к аутентификации - использование пользовательского пароля.
Когда пользователь идентифицирует себя при помощи уникального идентификатора или имени, у него запрашивается пароль. Если пароль, сообщенный пользователем, совпадает с паролем, хранимым в системе, система предполагает, что пользователь легитимен.
Пароли часто используются для защиты объектов в компьютерной системе в отсутствие более сложных схем защиты.
Проблемы паролей связаны с трудностью хранить пароль в секрете. Пароли могут быть скомпрометированы путем угадывания, случайно показаны или нелегально переданы авторизованным пользователем неавторизованному
Есть два общих способа угадать пароль. Один для нарушителя, который знает пользователя или информацию о пользователе. Люди обычно используют очевидную информацию (типа имен кошек) в качестве паролей. Для иллюстрации важности разумной политики назначения идентификаторов и паролей можно привести данные исследований, проведенных в AT&T, показывающие, что из 500 попыток несанкционированного доступа около 300 составляют попытки угадывания паролей или беспарольного входа по пользовательским именам guest, demo и т.д.
Другой способ - грубой силы - попытаться перебрать все возможные комбинации букв, чисел и пунктуации. Например, четыре десятичные цифры дают только 10000 вариантов, более длинные пароли, введенные с учетом регистра символов и пунктуации, менее уязвимы.
Хотя имеются проблемы с их использованием, пароли, тем не менее, распространены, так как они легки для понимания и использования.
Шифрование пароля
Для хранения секретного списка паролей на диске многие ОС используют криптографию. Система использует одностороннюю функцию, которую чрезвычайно трудно (дизайнеры надеются, что невозможно) инвертировать, но просто вычислить. Хранятся только кодированные пароли. В процессе аутентификации представленный пользователем пароль кодируется и сравнивается с хранящимися на диске. Т.о., файл паролей нет необходимости держать в секрете.
При удаленном доступе к ОС нежелательно путешествие пароля по сети в открытом виде. Одним из типовых решений является использование криптографических протоколов. В качестве примера можно рассмотреть протокол опознавания с подтверждением установления связи путем вызова - CHAP (Challenge Handshake Authentication Protocol)
Опознавание достигается за счет проверки того, что у пользователя, осуществляющего доступ к серверу, имеется секретный пароль, который уже известен серверу.
Сервер посылает пользователю запрос (вызов), состоящий из идентифицирующего кода, случайного числа и имени узла сервера или имени пользователя. При этом пользовательское оборудование в результате затребования пароля пользователя отвечает следующим ответом, зашифрованным с помощью алгоритма одностороннего хэширования, наиболее распространенным видом которого является MD5. После получения ответа сервер при помощи той же функции с теми же аргументами шифрует собственную версию пароля пользователя. В случае совпадения результатов разрешается вход в систему. Существенно, что незашифрованный пароль при этом не посылается по каналу связи.
В микротелефонных трубках используется аналогичный метод.
16.2 Авторизация. Разграничение доступа к объектам ОС
После того, как легальный пользователь вошел в систему необходимо осуществить авторизацию (authorization)- предоставление субъекту прав на доступ к объекту. Средства авторизации контролируют доступ легальных пользователей к ресурсам системы, предоставляя каждому из них именно те права, которые были определены администратором, а также осуществляют контроль возможности выполнения пользователем различных системных функций.
Как уже говорилось, компьютерная система может быть смоделирована как набор субъектов (процессы, пользователи) и объектов. Под объектами мы понимаем как ресурсы оборудования (процессор, сегменты памяти, принтер, диски и ленты), так и программные (файлы, программы, семафоры). Каждый объект имеет уникальное имя, отличающее его от других объектов в системе, и каждый из них может быть доступен через хорошо определенные и значимые операции. Объекты - абстрактные типы данных.
Операции зависят от объектов. Hапример, процессор может только выполнять команды. Сегменты памяти могут быть записаны и прочитаны, тогда как считыватель карт может только читать. Файлы данных могут быть записаны, прочитаны, переименованы и т.д.
Очевидно, что процессу может быть разрешен доступ только к тем ресурсам, к которым он имеет авторизованный доступ. Желательно добиться того, чтобы он имел доступ только к тем ресурсам, которые ему нужны для выполнения его задачи. Это требование имеет отношение только к принципу минимизации привилегий, полезному с точки зрения ограничения количества повреждений, которые процесс может нанести системе. Hапример, когда процесс P вызывает процедуру А, ей должен быть разрешен доступ только к переменным и формальным параметрам, переданным ей, она должна быть не в состоянии влиять на другие переменные процесса. Аналогично компилятор не должен оказывать влияния на произвольные файлы, а только на их хорошо определенное подмножество (типа исходных файлов, листингов и др.), имеющих отношение к компиляции. С другой стороны, компилятор может иметь личные файлы, используемые для оптимизационных целей, к которым процесс Р не имеет доступа.
Различают дискреционный (избирательный) способ управления доступом и полномочный (мандатный). При дискреционном доступе определенные операции над определенным ресурсом запрещаются или разрешаются субъектам или группам субъектов. С концептуальной точки зрения текущее состояние прав доступа при дискреционном управлении описывается матрицей, в строках которой перечислены субъекты, а в столбцах - объекты.
Полномочный подход заключается в том, что вся информация делится на уровни в зависимости от степени секретности, а все пользователи также делятся на группы, образующие иерархию в соответствии с уровнем допуска к этой информации.
Большинство операционных систем реализуют именно дискреционное управление доступом. Главное его достоинство - гибкость, главные недостатки - рассредоточенность управления и сложность централизованного контроля, а также оторванность прав доступа от данных, что позволяет копировать секретную информацию в общедоступные файлы.
Чтобы развить эту схему мы введем концепцию домена безопасности (protection domain). Процесс оперирует с доменом безопасности, который специфицирует ресурсы, к которым процесс может иметь доступ. Каждый домен определяет набор объектов и типов операций, которые могут быть осуществлены над каждым объектом. Возможность выполнять операции над объектом есть права доступа. Домен есть набор прав доступа, каждое из которых есть упорядоченная пара <object-name, rights-set>. Hапример, если домен D имеет права доступа <file F, {read, write}>, это означает, что процесс, выполняемый в домене D, может читать или писать в файл F, но не может выполнять других операций над этим объектом.
Рис. 16.1 Специфицирование прав доступа к ресурсам.
Связь процессов с доменами может быть статической и динамической. Организация динамической связи сложнее.
Заметим, что домен может быть реализован различными способами:
Каждый пользователь может быть доменом. В этом случае набор объектов, к которым может быть организован доступ, зависит от идентификации пользователя. Переключение между доменами имеет место, когда меняется пользователь (один входит в систему, другой выходит из нее).
Каждый процесс может быть доменом. В этом случае набор доступных объектов определяется идентификацией процесса. Переключение между доменами происходит, когда один из процессов посылает сообщение другому и ждет отклика.
Каждая процедура может быть доменом. В этом случае набор доступных объектов соответствует локальным переменным, определенным внутри процедуры. Переключение между доменами происходит, когда процедура выполнена.
Рассмотрим стандартную двух режимную модель выполнения ОС. Когда процесс выполняется в режиме системы (kernel mode), он может выполнять привилегированные инструкции и иметь полный контроль над компьютерной системой. С другой стороны, если процесс выполняется в пользовательском режиме, он может вызывать только непривилегированные инструкции. Следовательно, он может выполняться только внутри предопределенного пространства памяти. Наличие этих двух режимов позволяет защитить ОС (monitor domain) от пользовательских процессов (выполняющихся в user domain). В мультипрограммных системах двух доменов недостаточно, так как появляется необходимость защиты пользователей друг от друга. Поэтому требуется лучше разработанная схема.
В ОС Unix домен связан с пользователем. Переключение доменов соответствует смене пользователя. Это изменение реализуется через файловую систему.
Модель безопасности, таким образом, выглядит как матрица, называемая матрицей доступа.
Какова может быть эффективная реализация матрицы доступа. В общем случае она будет разреженной, то есть большинство клеток будут пустыми. Хотя существуют структуры данных для представления разреженной матрицы, они не слишком полезны для приложений, использующих возможности защиты.
Список прав доступа. Access control list.
Каждая колонка в матрице может быть реализована как список доступа для одного объекта. Очевидно, что пустые клетки могут не учитываться. В результате для каждого объекта имеем список упорядоченных пар <domain, rights-set>, который определяет все домены с непустыми наборами прав для данного объекта.
Список прав доступа может быть дополнен дефолтным набором прав.
Пример Unix. Все субъекты разделены на три группы, для членов каждой группы контролируются три операции (rwx), в итоге имеем ACL 9-битный код.
Capability list
Если матрицу доступа хранить по строкам, то есть каждый субъект хранит список объектов и для каждого объекта список допустимых операций, то такой способ хранения называется capability list.
Примерами систем такого рода являются Hydra, Cambridge CAP System.
Иногда применяется комбинированный способ. Например, в том же Unix на этапе открытия файла происходит анализ ACL. В случае благоприятного исхода (у процесса были соответствующие права) файл заносится в список открытых файлов, и при последующих операциях чтения и записи проверки прав доступа не происходит. Список открытых файлов можно рассматривать как capability list.
Существуют другие общие методы, используемые для смены домена в ОС, в которой идентификаторы пользователей используется для определения домена. Почти все системы нуждаются в таком механизме. Этот механизм используется, когда некая привилегированная возможность необходима большому количеству пользователей. Hапример, может быть желательно разрешить пользователям иметь доступ к сети без того, чтобы заставлять их писать собственные сетевые программы. Для этого случая в ОС Unix устанавливается бит setuid в сетевой программе, заставляя меняться домен на время ее выполнения. Таким образом, рядовой пользователь может получить нужные привилегии для доступа к сети.
Механизм Lock-Key.
Схема lock-key - компромисс между access lists и capability lists. Каждый объект имеет список уникальных битовых шаблонов (patterns), называемых locks. Аналогично, каждый домен имеет список уникальных битовых шаблонов, называемых ключами. Процесс, выполняющийся в домене, может иметь доступ к объекту, только если домен имеет ключ, который соответствует одному из locks объекта.
Как и в случае capability lists, список ключей для домена должен управляться ОС. Пользователям не разрешено проверять или модифицировать списки ключей (или locks) непосредственно.
16.2.3 Недопустимость повторного использование объектов
Контроль за повторным использованием объекта предназначен для предотвращения попыток незаконного получения конфиденциальной информации, остатки которой могли сохраниться в некоторых объектах, ранее использованных и освобожденных другим пользователем. Безопасность повторного использования должна гарантироваться для областей оперативной памяти (в частности, для буферов с образами экрана, расшифрованными паролями и т.п.), для дисковых блоков и магнитных носителей в целом. Очистка должна производиться путем записи маскирующей информации в объект при его освобождении (перераспределении). Hапример, для дисков на практике применяется способ двойной перезаписи удаленных файлов случайной битовой последовательностью.
16.3 Аудит, учет использования системы защиты
Аудит - заключается в регистрации специальных данных о различных типах событий, происходящих в системе и так или иначе влияющих на состояние безопасности компьютерной системы. К числу таких событий относятся:
вход или выход из системы;
операции с файлами (открыть, закрыть, переименовать, удалить);
обращение к удаленной системе;
смена привилегий или иных атрибутов безопасности (режима доступа, уровня благонадежности пользователя и т.п.).
Если фиксировать все события, объем регистрационной информации, скорее всего, будет расти слишком быстро, а ее эффективный анализ станет невозможным. Следует предусматривать наличие средств выборочного протоколирования, как в отношении пользователей, когда слежение осуществляется только за подозрительными личностями, так и в отношении событий. Слежка важна в первую очередь как профилактическое средство. Можно надеяться, что многие воздержатся от нарушений безопасности, зная, что их действия фиксируются.
Помимо протоколирования можно сканировать систему периодически на наличие брешей в системе безопасности. Такое сканирование может проверить разнообразные аспекты системы:
Короткие или легкие пароли
Hеавторизованные set-uid программы, если система поддерживает этот механизм
Hеавторизованные программы в системных директориях
Долго выполняющиеся программы
Нелогичная защита как пользовательских, так и системных директорий, системных файлов данных, таких как файлы паролей, драйверов, ядра
Потенциально опасные списки поиска файлов, могущие привести к запуску троянского коня.
Изменения в системных программах, обнаруженные при помощи контрольных сумм.
Любая проблема, обнаруженная сканером безопасности, может быть, как исправлена автоматически, так и доложена менеджеру системы.
16.4 Анализ некоторых популярных ОС с точки зрения их защищенности.
Итак, ОС должна способствовать реализации мер безопасности или прямо поддерживать их. Примеры подобных решений в рамках аппаратуры и операционной системы - разделение команд по уровням привилегированности, защита различных процессов от взаимного влияния за счет выделения каждому своего виртуального пространства, особая защита ядра ОС, контроль за повторным использованием объекта.
Большое значение имеет структура файловой системы. Hапример, в ОС с дискреционным контролем доступа каждый файл должен храниться вместе с дискреционным списком прав доступа к нему, а, например, при копировании файла все атрибуты, в том числе и ACL, должны быть автоматически скопированы вместе с телом файла.
В принципе меры безопасности не обязательно должны быть заранее встроены в ОС - достаточно принципиальной возможности дополнительной установки защитных продуктов. Так, сугубо ненадежная система MS-DOS может быть улучшена за счет средств проверки паролей доступа к компьютеру и/или жесткому диску, за счет борьбы с вирусами путем отслеживания попыток записи в загрузочный сектор CMOS-средствами и т.п. Тем не менее, по-настоящему надежная система должна изначально проектироваться с акцентом на механизмы безопасности.
Среди архитектурных решений, с точки зрения информационной безопасности, целесообразны также следующие:
деление аппаратных и системных функций по уровням привилегированности и контроль обмена информацией между уровнями;
защита различных процессов от взаимного влияния за счет механизма виртуальной памяти;
наличие средств управления доступом;
структурированность системы, явное выделение надежной вычислительной базы, обеспечение компактности этой базы;
следование принципу минимизации привилегий - каждому компоненту дается ровно столько привилегий, сколько необходимо для выполнения им своих функций;
сегментация (в частности, сегментация адресного пространства процессов) как средство повышения надежности компонентов.
ОС MS-DOS функционирует в реальном режиме (real-mode) процессора i80x86. В ней невозможно выполнение требования, касающегося изоляции программных модулей (отсутствует аппаратная защита памяти). Уязвимым местом для защиты является также файловая система FAT, не предполагающая в файлах наличие атрибутов, связанных с разграничением доступа к ним. Таким образом, MS-DOS, не будучи защищенной, находится на самом нижнем уровне в иерархии защищенных ОС
Замечания об отсутствии изоляции модулей друг от друга справедливо и относительно рабочей станции NetWare. Однако NetWare - сетевая ОС, поэтому к ней возможно применение и иных критериев. Это на данный момент единственная сетевая ОС, сертифицированная по классу C2 (следующей, по-видимому, будет Windows 2000). При этом важно изолировать наиболее уязвимый участок системы безопасности NetWare - консоль сервера и тогда следование определенной практике поможет увеличить степень защищенности этой сетевой операционной системы. Возможность создания безопасных систем обусловлена тем, что число работающих приложений фиксировано и пользователь не имеет возможности запуска своих приложений.
OS/2 работает в защищенном режиме (protected-mode) процессора i80x86. Изоляция программных модулей реализуется при помощи встроенных в этот процессор механизмов защиты памяти. Поэтому она свободна от вышеуказанного коренного недостатка систем типа MS-DOS. Но OS/2 была спроектирована и разработана без учета требований по защите от несанкционированного доступа. Это сказывается, прежде всего, на файловой системе. В файловых системах OS/2 HPFS (high performance file system) и FAT нет места ACL. Кроме того, пользовательские программы имеют возможность запрета прерываний. Следовательно, сертификация OS/2 на соответствие какому-то классу защиты не представляется возможной.
Считается, что такие операционные системы, как MS-DOS, MacOS, Windows, OS/2, имеют уровень защищенности D (по оранжевой книге). Но если быть совершенно точным, нельзя считать эти ОС даже системами уровня безопасности D, ведь они никогда не представлялись на тестирование.
Рост популярности Unix и все большая осведомленность о проблемах безопасности привели к осознанию необходимости достичь приемлемого уровня безопасности ОС, сохранив при этом мобильность, гибкость и открытость программных продуктов. В Unix есть несколько уязвимых с точки зрения безопасности мест, хорошо известным искушенным пользователям, вытекающими из самой природы Unix и открывающими двери для нападения. (см., например, раздел Типичные объекты атаки хакеров в книге [23]). Однако, хорошее системное администрирование может ограничить эту уязвимость.
Существуют противоречивые сведения относительно защищенности Unix. В Unix изначально были заложены идентификация пользователей и разграничение доступа. Как оказалось, средства защиты данных в Unix могут быть доработаны, и сегодня можно утверждать, что многие клоны Unix по всем параметрам соответствуют классу безопасности C2.
Обычно, говоря о защищенности Unix, рассматривают защищенность автоматизированных систем, одним из компонентов которых является Unix сервер. Безопасность такой системы увязывается с защитой глобальных и локальных сетей, безопасностью удаленных сервисов типа telnet и rlogin/rsh и аутентификацией в сетевой конфигурации, безопасностью X Windows приложений. Hа системном уровне важно наличие средств идентификации и аудита.
В Unix существует список именованных пользователей, в соответствии с которым может быть построена система разграничения доступа.
Все пользователи, которым разрешена работа в системе, учитываются в файле пользователей /etc/passwd. Группы пользователей учитываются в файле /etc/group. Каждому пользователю назначается целочисленный идентификатор и пароль.
Когда пользователь входит в систему и предъявляет свое имя (процедура login), отыскивается запись в учетном файле /etc/passwd. В этой записи имеются такие поля как: имя пользователя, имя группы, к которой принадлежит данный пользователь, целочисленный идентификатор пользователя, целочисленный идентификатор группы, зашифрованный пароль пользователя.
В ОС Unix, считается, что информация, нуждающаяся в защите, находится главным образом в файлах.
По отношению к конкретному файлу все пользователи делятся на три категории:
владелец файла
члены группы владельца
прочие пользователи
Для каждой из этих категорий режим доступа определяет права на операции с файлом, а именно:
Право на чтение
Право на запись
Право на выполнение (для каталогов - право на поиск)
Стандартная команда ls -l выдает список файлов с правами доступа к ним, например:
rwxr-x--- ... filename
Здесь символы rwx означают наличие прав на чтение, запись и исполнение соответственно, а символ - - отсутствие такого права.
Указанных видов прав достаточно, чтобы определить допустимость любой операции с файлами. Например, для удаления файла необходимо иметь право на запись в соответствующий каталог.
Наличие всего трех видов субъектов доступа: владелец, группа, все остальные - затрудняет задание прав с точностью до пользователя, особенно в случае больших конфигураций. В популярной разновидности Unix - Solaris имеется возможность использовать списки управления доступом (ACL), позволяющие с помощью команды setfacl индивидуально устанавливать права доступа отдельных пользователей или групп.
Среди всех пользователей особое положение занимает пользователь root, обладающий максимальными привилегиями. Обычные правила разграничения доступа к нему не применяются - ему доступна вся информация на компьютере.
В Unix имеются инструменты системного аудита - хронологическая запись событий, имеющих отношение к безопасности. К таким событиям обычно относят: обращения программ к отдельным серверам; события, связанные с входом/выходом в систему и другие. Обычно регистрационные действия выполняются специализированным syslog-демоном, который проводит запись событий в регистрационный журнал в соответствии с текущей конфигурацией. Syslog-демон стартует в процессе загрузки системы.
Таким образом, безопасность ОС Unix может быть доведена до соответствия классу C2. Однако разработка на ее основе автоматизированных систем более высокого класса защищенности может быть сопряжена с большими трудозатратами.
С момента выхода версии 3.1 осенью 1993 года в Windows NT гарантировалось соответствие уровню безопасности C2. В настоящее время (точнее в 1999) сертифицирована версия NT 4 с Service Pack 6a с использованием файловой системы NTFS в автономной и сетевой конфигурации. Следует помнить, что этот уровень безопасности не подразумевает защиту информации, передаваемой по сети, и не гарантирует защищенности от физического доступа. Компоненты защиты NT частично встроены в ядро, а частично реализуются подсистемой защиты. Подсистема защиты регистрирует правила контроля доступа и контролирует учетную информацию.
Кроме того, Windows NT имеет встроенные средства, такие как поддержка резервных копий данных и управление источниками бесперебойного питания, которые не требуются Оранжевой книгой, но в целом повышают общий уровень безопасности.
Microsoft Windows NT - относительно новая ОС, которая была спроектирована для поддержки разнообразных защитных механизмов от минимальных до C2. Дефолтный уровень называется минимальным, но он легко может быть доведен системным администратором до желаемого уровня. Утилита C2config.exe помогает администратору сделать нужные установки. ...
Система защиты ОС Windows NT состоит из следующих компонентов:
Процедуры регистрации (Logon Processes), которые обрабатывают запросы пользователей на вход в систему. Они включают в себя начальную интерактивную процедуру, которая отображает начальный диалог с пользователем на экране и удаленные процедуры входа, которые позволяют удаленным пользователям получить доступ с рабочей станции сети к серверным процессам Windows NT.
Подсистемы локальной авторизации (Local Security Authority, LSA), которая гарантирует, что пользователь имеет разрешение на доступ в систему.
Эта компонента - центральная для системы защиты Windows NT. Она порождает маркеры доступа, управляет локальной политикой безопасности и предоставляет интерактивным пользователям аутентификационные услуги. LSA также контролирует политику аудита и ведет журнал, в котором сохраняются аудитные сообщения, порождаемые диспетчером доступа.
Менеджера учета (Security Account Manager, SAM), который управляет базой данных учета пользователей. Эта база данных содержит информацию обо всех пользователях и группах пользователей. SAM предоставляет услуги по легализации пользователей, которые используются в LSA.
Диспетчера доступа (Security Reference Monitor, SRM), который проверяет, имеет ли пользователь право на доступ к объекту и на выполнение тех действий, которые он пытается совершить с объектом. Эта компонента проводит в жизнь легализацию доступа и политику аудита, определяемые LSA. Она предоставляет услуги для программ супервизорного и пользовательского режимов для того, чтобы гарантировать, что пользователи и процессы, осуществляющие попытки доступа к объекту, имеют необходимые права. Эта компонента также порождает аудитные сообщения, когда это необходимо.
Ключевая цель системы защиты Windows NT - мониторинг и контроль того, кто и к каким объектам осуществляет доступ. Система защиты хранит информацию, относящуюся к безопасности для каждого пользователя, группы пользователей и объекта. Она может идентифицировать попытки доступа, которые производятся прямо пользователем или непрямо программой или другим процессом, инициированным пользователем. Windows NT также отслеживает и контролирует доступ и к тем объектам, которые пользователь может видеть посредством пользовательского интерфейса (такие как файлы и принтеры), и к объектам, которые пользователь не может видеть (такие как процессы и именованные каналы).
Информационная безопасность относится к числу дисциплин, развивающихся чрезвычайно быстрыми темпами. Только комплексный, систематический, современный подход способен успешно противостоять нарастающим угрозам.
Ключевые понятия информационной безопасности: конфиденциальность, целостность и доступность информации, а любое действие, направленное на их нарушение называется угрозой.
Основные понятия, связанные с безопасностью регламентированы в основополагающих документах.
Существует несколько базовых технологий безопасности, среди которых можно выделить криптографию.
Решение вопросов безопасности операционных систем обусловлено их архитектурными особенностями и связано с правильной организацией аутентификации, авторизации и аудита.