Основы операционных систем 169 нистратором, а также осуществляют контроль возможности выполнения пользователем различных сис- темных функций. Система контроля базируется на общей модели, называемой матрицей доступа. Рас- смотрим ее более подробно. Как уже говорилось в предыдущей лекции, компьютерная система может быть смоделирована как набор субъектов (процессы, пользователи) и объектов. Под объектами мы понимаем как ресурсы оборудования (процессор, сегменты памяти, принтер, диски и ленты), так и программные ресурсы (файлы, программы, семафоры), то есть все то, доступ к чему контролируется. Каждый объект имеет уникальное имя, отли- чающее его от других объектов в системе, и каждый из них может быть доступен через хорошо опреде- ленные и значимые операции. Операции зависят от объектов. Hапример, процессор может только выполнять команды, сегменты памя- ти могут быть записаны и прочитаны, считыватель магнитных карт может только читать, а файлы дан- ных могут быть записаны, прочитаны, переименованы и т. д. Желательно добиться того, чтобы процесс осуществлял авторизованный доступ только к тем ресурсам, которые ему нужны для выполнения его задачи. Это требование минимума привилегий, уже упомянутое в предыдущей лекции, полезно с точки зрения ограничения количества повреждений, которые процесс может нанести системе. Hапример, когда процесс P вызывает процедуру А, ей должен быть разрешен доступ только к переменным и формальным параметрам, переданным ей, она не должна иметь возмож- ность влиять на другие переменные процесса. Аналогично компилятор не должен оказывать влияния на произвольные файлы, а только на их хорошо определенное подмножество (исходные файлы, листинги и др.), имеющее отношение к компиляции. С другой стороны, компилятор может иметь личные файлы, ис- пользуемые для оптимизационных целей, к которым процесс Р не имеет доступа. Различают дискреционный (избирательный) способ управления доступом и полномочный (мандатный). При дискреционном доступе, подробно рассмотренном ниже, определенные операции над конкретным ресурсом запрещаются или разрешаются субъектам или группам субъектов. С концептуальной точки зрения текущее состояние прав доступа при дискреционном управлении описывается матрицей, в стро- ках которой перечислены субъекты, в столбцах - объекты, а в ячейках - операции, которые субъект может выполнить над объектом. Полномочный подход заключается в том, что все объекты могут иметь уровни секретности, а все субъек- ты делятся на группы, образующие иерархию в соответствии с уровнем допуска к информации. Иногда это называют моделью многоуровневой безопасности, которая должна обеспечивать выполнение сле- дующих правил. • Простое свойство секретности. Субъект может читать информацию только из объекта, уровень секретности которого не выше уровня секретности субъекта. Генерал читает документы лейтенан- та, но не наоборот. • *-свойство. Субъект может записывать информацию в объекты только своего уровня или более высоких уровней секретности. Генерал не может случайно разгласить нижним чинам секретную информацию. Некоторые авторы утверждают [Таненбаум, 2002], что последнее требование называют *-свойством, по- тому что в оригинальном докладе не смогли придумать для него подходящего названия. В итоге во все последующие документы и монографии оно вошло как *-свойство. Отметим, что данная модель разработана для хранения секретов, но не гарантирует целостности данных. Например, здесь лейтенант имеет право писать в файлы генерала. Более подробно о реализации подоб- ных формальных моделей рассказано в [Столлингс, 2002], [Таненбаум, 2002]. Большинство операционных систем реализуют именно дискреционное управление доступом. Главное его достоинство - гибкость, основные недостатки - рассредоточенность управления и сложность централизо- ванного контроля. Основы операционных систем 170 Домены безопасности Чтобы рассмотреть схему дискреционного доступа более детально, введем концепцию домена безопас- ности (protection domain). Каждый домен определяет набор объектов и типов операций, которые могут производиться над каждым объектом. Возможность выполнять операции над объектом есть права досту- па, каждое из которых есть упорядоченная пара <object-name, rights-set>. Домен, таким образом, есть на- бор прав доступа. Hапример, если домен D имеет права доступа <file F, {read, write}>, это означает, что процесс, выполняемый в домене D, может читать или писать в файл F, но не может выполнять других операций над этим объектом. Пример доменов можно увидеть на рис.16.1. Рис. 16.1. Специфицирование прав доступа к ресурсам Связь конкретных субъектов, функционирующих в операционных системах, может быть организована следующим образом. • Каждый пользователь может быть доменом. В этом случае набор объектов, к которым может быть организован доступ, зависит от идентификации пользователя. • Каждый процесс может быть доменом. В этом случае набор доступных объектов определяется идентификацией процесса. • Каждая процедура может быть доменом. В этом случае набор доступных объектов соответствует локальным переменным, определенным внутри процедуры. Заметим, что когда процедура выпол- нена, происходит смена домена. Рассмотрим стандартную двухрежимную модель выполнения ОС. Когда процесс выполняется в режиме системы (kernel mode), он может выполнять привилегированные инструкции и иметь полный контроль над компьютерной системой. С другой стороны, если процесс выполняется в пользовательском режиме, он может вызывать только непривилегированные инструкции. Следовательно, он может выполняться только внутри предопределенного пространства памяти. Наличие этих двух режимов позволяет защитить ОС (kernel domain) от пользовательских процессов (выполняющихся в user domain). В мультипрограмм- ных системах двух доменов недостаточно, так как появляется необходимость защиты пользователей друг от друга. Поэтому требуется более тщательно разработанная схема. В ОС Unix домен связан с пользователем. Каждый пользователь обычно работает со своим набором объ- ектов. Матрица доступа Модель безопасности, специфицированная в предыдущем разделе (см. рис. 16.1), имеет вид матрицы, ко- торая называется матрицей доступа. Какова может быть эффективная реализация матрицы доступа? В общем случае она будет разреженной, то есть большинство ее клеток будут пустыми. Хотя существуют структуры данных для представления разреженной матрицы, они не слишком полезны для приложений, использующих возможности защиты. Поэтому на практике матрица доступа применяется редко. Эту матрицу можно разложить по столбцам, в результате чего получаются списки прав доступа (access control list - ACL). В результате разложения по строкам получаются мандаты возможностей (capability list или capability tickets). Список прав доступа. Access control list Основы операционных систем 171 Каждая колонка в матрице может быть реализована как список доступа для одного объекта. Очевидно, что пустые клетки могут не учитываться. В результате для каждого объекта имеем список упорядочен- ных пар <domain, rights-set>, который определяет все домены с непустыми наборами прав для данного объекта. Элементами списка могут быть процессы, пользователи или группы пользователей. При реализации ши- роко применяется предоставление доступа по умолчанию для пользователей, права которых не указаны. Например, в Unix все субъекты-пользователи разделены на три группы (владелец, группа и остальные), и для членов каждой группы контролируются операции чтения, записи и исполнения (rwx). В итоге имеем ACL - 9-битный код, который является атрибутом разнообразных объектов Unix. Мандаты возможностей. Capability list Как отмечалось выше, если матрицу доступа хранить по строкам, то есть если каждый субъект хранит список объектов и для каждого объекта - список допустимых операций, то такой способ хранения назы- вается "мандаты" или "перечни возможностей" (capability list). Каждый пользователь обладает несколь- кими мандатами и может иметь право передавать их другим. Мандаты могут быть рассеяны по системе и вследствие этого представлять большую угрозу для безопасности, чем списки контроля доступа. Их хра- нение должно быть тщательно продумано. Примерами систем, использующих перечни возможностей, являются Hydra, Cambridge CAP System [Denning, 1996]. Другие способы контроля доступа Иногда применяется комбинированный способ. Например, в том же Unix на этапе открытия файла про- исходит анализ ACL (операция open). В случае благоприятного исхода файл заносится в список откры- тых процессом файлов, и при последующих операциях чтения и записи проверки прав доступа не проис- ходит. Список открытых файлов можно рассматривать как перечень возможностей. Существует также схема lock-key, которая является компромиссом между списками прав доступа и пе- речнями возможностей. В этой схеме каждый объект имеет список уникальных битовых шаблонов (patterns), называемых locks. Аналогично каждый домен имеет список уникальных битовых шаблонов, называемых ключами (keys). Процесс, выполняющийся в домене, может получить доступ к объекту, только если домен имеет ключ, который соответствует одному из шаблонов объекта. Как и в случае мандатов, список ключей для домена должен управляться ОС. Пользователям не разреша- ется проверять или модифицировать списки ключей (или шаблонов) непосредственно. Более подробно данная схема изложена в [Silberschatz, 2002]. Смена домена В большинстве ОС для определения домена применяются идентификаторы пользователей. Обычно пере- ключение между доменами происходит, когда меняется пользователь. Но почти все системы нуждаются в дополнительных механизмах смены домена, которые используются, когда некая привилегированная возможность необходима большому количеству пользователей. Hапример, может понадобиться разре- шить пользователям иметь доступ к сети, не заставляя их писать собственные сетевые программы. В та- ких случаях для процессов ОС Unix предусмотрена установка бита set-uid. В результате установки этого бита в сетевой программе она получает привилегии ее создателя (а не пользователя), заставляя домен ме- няться на время ее выполнения. Таким образом, рядовой пользователь может получить нужные привиле- гии для доступа к сети. Недопустимость повторного использования объектов Контроль повторного использования объекта предназначен для предотвращения попыток незаконного получения конфиденциальной информации, остатки которой могли сохраниться в некоторых объектах, ранее использовавшихся и освобожденных другим пользователем. Безопасность повторного применения должна гарантироваться для областей оперативной памяти (в частности, для буферов с образами экрана, Основы операционных систем 172 расшифрованными паролями и т. п.), для дисковых блоков и магнитных носителей в целом. Очистка должна производиться путем записи маскирующей информации в объект при его освобождении (пере- распределении). Hапример, для дисков на практике применяется способ двойной перезаписи освободив- шихся после удаления файлов блоков случайной битовой последовательностью. Выявление вторжений. Аудит системы защиты Даже самая лучшая система защиты рано или поздно будет взломана. Обнаружение попыток вторжения является важнейшей задачей системы защиты, поскольку ее решение позволяет минимизировать ущерб от взлома и собирать информацию о методах вторжения. Как правило, поведение взломщика отличается от поведения легального пользователя. Иногда эти различия можно выразить количественно, например подсчитывая число некорректных вводов пароля во время регистрации. Основным инструментом выявления вторжений является запись данных аудита. Отдельные действия пользователей протоколируются, а полученный протокол используется для выявления вторжений. Аудит, таким образом, заключается в регистрации специальных данных о различных типах событий, происходящих в системе и так или иначе влияющих на состояние безопасности компьютерной системы. К числу таких событий обычно причисляют следующие: • вход или выход из системы; • операции с файлами (открыть, закрыть, переименовать, удалить); • обращение к удаленной системе; • смена привилегий или иных атрибутов безопасности (режима доступа, уровня благонадежности пользователя и т. п.). Если фиксировать все события, объем регистрационной информации, скорее всего, будет расти слишком быстро, а ее эффективный анализ станет невозможным. Следует предусматривать наличие средств выбо- рочного протоколирования как в отношении пользователей, когда слежение осуществляется только за подозрительными личностями, так и в отношении событий. Слежка важна в первую очередь как профи- лактическое средство. Можно надеяться, что многие воздержатся от нарушений безопасности, зная, что их действия фиксируются. Помимо протоколирования, можно периодически сканировать систему на наличие слабых мест в систе- ме безопасности. Такое сканирование может проверить разнообразные аспекты системы: • короткие или легкие пароли; • неавторизованные set-uid программы, если система поддерживает этот механизм; • неавторизованные программы в системных директориях; • долго выполняющиеся программы; • нелогичная защита как пользовательских, так и системных директорий и файлов. Примером нело- гичной защиты может быть файл, который запрещено читать его автору, но в который разрешено записывать информацию постороннему пользователю; • потенциально опасные списки поиска файлов, которые могут привести к запуску "троянского ко- ня"; • изменения в системных программах, обнаруженные при помощи контрольных сумм. Любая проблема, обнаруженная сканером безопасности, может быть как ликвидирована автоматически, так и передана для решения менеджеру системы. Анализ некоторых популярных ОС с точки зрения их защищенности Итак, ОС должна способствовать реализации мер безопасности или непосредственно поддерживать их. Примерами подобных решений в рамках аппаратуры и операционной системы могут быть: • разделение команд по уровням привилегированности; • сегментация адресного пространства процессов и организация защиты сегментов; Основы операционных систем 173 • защита различных процессов от взаимного влияния за счет выделения каждому своего виртуаль- ного пространства; • особая защита ядра ОС; • контроль повторного использования объекта; • наличие средств управления доступом; • структурированность системы, явное выделение надежной вычислительной базы (совокупности защищенных компонентов), обеспечение компактности этой базы; • следование принципу минимизации привилегий - каждому компоненту дается ровно столько при- вилегий, сколько необходимо для выполнения им своих функций. Большое значение имеет структура файловой системы. Hапример, в ОС с дискреционным контролем доступа каждый файл должен храниться вместе с дискреционным списком прав доступа к нему, а, на- пример, при копировании файла все атрибуты, в том числе и ACL, должны быть автоматически скопиро- ваны вместе с телом файла. В принципе, меры безопасности не обязательно должны быть заранее встроены в ОС - достаточно прин- ципиальной возможности дополнительной установки защитных продуктов. Так, сугубо ненадежная сис- тема MS-DOS может быть усовершенствована за счет средств проверки паролей доступа к компьютеру и/или жесткому диску, за счет борьбы с вирусами путем отслеживания попыток записи в загрузочный сектор CMOS-средствами и т. п. Тем не менее по-настоящему надежная система должна изначально про- ектироваться с акцентом на механизмы безопасности. MS-DOS ОС MS-DOS функционирует в реальном режиме (real-mode) процессора i80x86. В ней невозможно вы- полнение требования, касающегося изоляции программных модулей (отсутствует аппаратная защита па- мяти). Уязвимым местом для защиты является также файловая система FAT, не предполагающая у фай- лов наличия атрибутов, связанных с разграничением доступа к ним. Таким образом, MS-DOS находится на самом нижнем уровне в иерархии защищенных ОС. NetWare, IntranetWare Замечание об отсутствии изоляции модулей друг от друга справедливо и в отношении рабочей станции NetWare. Однако NetWare - сетевая ОС, поэтому к ней возможно применение и иных критериев. Это на данный момент единственная сетевая ОС, сертифицированная по классу C2 (следующей, по-видимому, будет Windows 2000). При этом важно изолировать наиболее уязвимый участок системы безопасности NetWare - консоль сервера, и тогда следование определенной практике поможет увеличить степень за- щищенности данной сетевой операционной системы. Возможность создания безопасных систем обу- словлена тем, что число работающих приложений фиксировано и пользователь не имеет возможности запуска своих приложений. OS/2 OS/2 работает в защищенном режиме (protected-mode) процессора i80x86. Изоляция программных моду- лей реализуется при помощи встроенных в этот процессор механизмов защиты памяти. Поэтому она сво- бодна от указанного выше коренного недостатка систем типа MS-DOS. Но OS/2 была спроектирована и разработана без учета требований по защите от несанкционированного доступа. Это сказывается прежде всего на файловой системе. В файловых системах OS/2 HPFS (high performance file system) и FAT нет места ACL. Кроме того, пользовательские программы имеют возможность запрета прерываний. Следова- тельно, сертификация OS/2 на соответствие какому-то классу защиты не представляется возможной. Считается, что такие операционные системы, как MS-DOS, Mac OS, Windows, OS/2, имеют уровень за- щищенности D (по оранжевой книге). Но, если быть точным, нельзя считать эти ОС даже системами уровня безопасности D, ведь они никогда не представлялись на тестирование. Unix Основы операционных систем 174 Рост популярности Unix и все большая осведомленность о проблемах безопасности привели к осознанию необходимости достичь приемлемого уровня безопасности ОС, сохранив при этом мобильность, гиб- кость и открытость программных продуктов. В Unix есть несколько уязвимых с точки зрения безопасно- сти мест, хорошо известных опытным пользователям, вытекающих из самой природы Unix (см., напри- мер, раздел "Типичные объекты атаки хакеров" в книге [Дунаев, 1996]). Однако хорошее системное ад- министрирование может ограничить эту уязвимость. Относительно защищенности Unix сведения противоречивы. В Unix изначально были заложены иденти- фикация пользователей и разграничение доступа. Как оказалось, средства защиты данных в Unix могут быть доработаны, и сегодня можно утверждать, что многие клоны Unix по всем параметрам соответст- вуют классу безопасности C2. Обычно, говоря о защищенности Unix, рассматривают защищенность автоматизированных систем, од- ним из компонентов которых является Unix-сервер. Безопасность такой системы увязывается с защитой глобальных и локальных сетей, безопасностью удаленных сервисов типа telnet и rlogin/rsh и аутентифи- кацией в сетевой конфигурации, безопасностью X Window-приложений. Hа системном уровне важно на- личие средств идентификации и аудита. В Unix существует список именованных пользователей, в соответствии с которым может быть построена система разграничения доступа. В ОС Unix считается, что информация, нуждающаяся в защите, находится главным образом в файлах. По отношению к конкретному файлу все пользователи делятся на три категории: • владелец файла; • члены группы владельца; • прочие пользователи. Для каждой из этих категорий режим доступа определяет права на операции с файлом, а именно: • право на чтение; • право на запись; • право на выполнение (для каталогов - право на поиск). В итоге девяти (3х3) битов защиты оказывается достаточно, чтобы специфицировать ACL каждого фай- ла. Аналогичным образом защищены и другие объекты ОС Unix, например семафоры, сегменты разделяе- мой памяти и т. п. Указанных видов прав достаточно, чтобы определить допустимость любой операции с файлами. Напри- мер, для удаления файла необходимо иметь право на запись в соответствующий каталог. Как уже гово- рилось, права доступа к файлу проверяются только на этапе открытия. При последующих операциях чте- ния и записи проверка не выполняется. В результате, если режим доступа к файлу меняется после того, как файл был открыт, это не сказывается на процессах, уже открывших этот файл. Данное обстоятельство является уязвимым с точки зрения безопасности местом. Наличие всего трех видов субъектов доступа: владелец, группа, все остальные - затрудняет задание прав "с точностью до пользователя", особенно в случае больших конфигураций. В популярной разновидности Unix - Solaris имеется возможность использовать списки управления доступом (ACL), позволяющие ин- дивидуально устанавливать права доступа отдельных пользователей или групп. Среди всех пользователей особое положение занимает пользователь root, обладающий максимальными привилегиями. Обычные правила разграничения доступа к нему не применяются - ему доступна вся ин- формация на компьютере. Основы операционных систем 175 В Unix имеются инструменты системного аудита - хронологическая запись событий, имеющих отноше- ние к безопасности. К таким событиям обычно относят: обращения программ к отдельным серверам; со- бытия, связанные с входом/выходом в систему и другие. Обычно регистрационные действия выполняют- ся специализированным syslog-демоном, который проводит запись событий в регистрационный журнал в соответствии с текущей конфигурацией. Syslog-демон стартует в процессе загрузки системы. Таким образом, безопасность ОС Unix может быть доведена до соответствия классу C2. Однако разра- ботка на ее основе автоматизированных систем более высокого класса защищенности может быть со- пряжена с большими трудозатратами. Windows NT/2000/XP С момента выхода версии 3.1 осенью 1993 года в Windows NT гарантировалось соответствие уровню безопасности C2. В настоящее время (точнее, в 1999 г.) сертифицирована версия NT 4 с Service Pack 6a с использованием файловой системы NTFS в автономной и сетевой конфигурации. Следует помнить, что этот уровень безопасности не подразумевает защиту информации, передаваемой по сети, и не гарантиру- ет защищенности от физического доступа. Компоненты защиты NT частично встроены в ядро, а частично реализуются подсистемой защиты. Под- система защиты контролирует доступ и учетную информацию. Кроме того, Windows NT имеет встроен- ные средства, такие как поддержка резервных копий данных и управление источниками бесперебойного питания, которые не требуются "Оранжевой книгой", но в целом повышают общий уровень безопасно- сти. ОС Windows 2000 сертифицирована по стандарту Common Criteria. В дальнейшем линейку продуктов Windows NT/2000/XP, изготовленных по технологии NT, будем называть просто Windows NT. Ключевая цель системы защиты Windows NT - следить за тем, кто и к каким объектам осуществляет дос- туп. Система защиты хранит информацию, относящуюся к безопасности для каждого пользователя, группы пользователей и объекта. Единообразие контроля доступа к различным объектам (процессам, файлам, семафорам и др.) обеспечивается тем, что с каждым процессом связан маркер доступа, а с каж- дым объектом - дескриптор защиты. Маркер доступа в качестве параметра имеет идентификатор пользо- вателя, а дескриптор защиты - списки прав доступа. ОС может контролировать попытки доступа, кото- рые производятся процессами прямо или косвенно инициированными пользователем. Windows NT отслеживает и контролирует доступ как к объектам, которые пользователь может видеть посредством интерфейса (такие, как файлы и принтеры), так и к объектам, которые пользователь не мо- жет видеть (например, процессы и именованные каналы). Любопытно, что, помимо разрешающих запи- сей, списки прав доступа содержат и запрещающие записи, чтобы пользователь, которому доступ к како- му-либо объекту запрещен, не смог получить его как член какой-либо группы, которой этот доступ пре- доставлен. Система защиты ОС Windows NT состоит из следующих компонентов: • Процедуры регистрации (Logon Processes), которые обрабатывают запросы пользователей на вход в систему. Они включают в себя начальную интерактивную процедуру, отображающую началь- ный диалог с пользователем на экране и удаленные процедуры входа, которые позволяют удален- ным пользователям получить доступ с рабочей станции сети к серверным процессам Windows NT. • Подсистемы локальной авторизации (Local Security Authority, LSA), которая гарантирует, что пользователь имеет разрешение на доступ в систему. Этот компонент - центральный для системы защиты Windows NT. Он порождает маркеры доступа, управляет локальной политикой безопасно- сти и предоставляет интерактивным пользователям аутентификационные услуги. LSA также кон- тролирует политику аудита и ведет журнал, в котором сохраняются сообщения, порождаемые диспетчером доступа. • Менеджера учета (Security Account Manager, SAM), который управляет базой данных учета поль- зователей. Эта база данных содержит информацию обо всех пользователях и группах пользовате- лей. SAM предоставляет услуги по легализации пользователей, применяющиеся в LSA. Основы операционных систем 176 • Диспетчера доступа (Security Reference Monitor, SRM), который проверяет, имеет ли пользователь право на доступ к объекту и на выполнение тех действий, которые он пытается совершить. Этот компонент обеспечивает легализацию доступа и политику аудита, определяемые LSA. Он предос- тавляет услуги для программ супервизорного и пользовательского режимов, для того чтобы га- рантировать, что пользователи и процессы, осуществляющие попытки доступа к объекту, имеют необходимые права. Данный компонент также порождает сообщения службы аудита, когда это необходимо. Microsoft Windows NT - относительно новая ОС, которая была спроектирована для поддержки разнооб- разных защитных механизмов, от минимальных до C2, и безопасность которой наиболее продумана. Де- фолтный уровень называется минимальным, но он легко может быть доведен системным администрато- ром до желаемого уровня. Заключение Решение вопросов безопасности операционных систем обусловлено их архитектурными особенностями и связано с правильной организацией идентификации и аутентификации, авторизации и аудита. Наиболее простой подход к аутентификации - применение пользовательского пароля. Пароли уязвимы, значительная часть попыток несанкционированного доступа в систему связана с компрометацией паро- лей. Авторизация связана со специфицированием совокупности аппаратных и программных объектов, нуж- дающихся в защите. Для защиты объекта устанавливаются права доступа к нему. Набор прав доступа оп- ределяет домен безопасности. Формальное описание модели защиты осуществляется с помощью матри- цы доступа, которая может храниться в виде списков прав доступа или перечней возможностей. Аудит системы заключается в регистрации специальных данных о различных событиях, происходящих в системе и так или иначе влияющих на состояние безопасности компьютерной системы. Среди современных ОС вопросы безопасности лучше всего продуманы в ОС Windows NT