Защита файловой системы

Ясно, что наибольшее внимание в проблеме защиты операционной системы должно уделяться защите файловой системы.

Файловая система в UNIX имеет древовидную структуру. Том пря­мого доступа делится на несколько областей:

начальный загрузчик;

суперблок;

область индексных дескрипторов;

область файлов;

область, не используемая для файловой системы (например, область

для выгрузки процессов).

Суперблок состоит из следующих полей:

размер файловой системы;

количество свободных блоков в файловой системе;

заголовок списка свободных блоков, имеющихся в файловой системе;

номер следующего элемента в списке свободных блоков;

размер области индексов;

количество свободных индексов в файловой системе;

список свободных индексов в файловой системе;

следующий свободный индекс в списке свободных индексов;

заблокированные поля для списка свободных блоков и свободных

индексов; « флаг, показывающий, что в суперблок были внесены изменения.

При монтировании (команда mount) файловой системы суперблок записывается в оперативную память и переписывается обратно при раз-монтировании (команда unmount). Для того чтобы обеспечивалась согла­сованность с данными, хранящимися в файловой системе, ядро периоди­чески (через 30 с) переписывает суперблок на диск (системный вызов sync, запускаемый из процесса update в SCO UNIX).

Каждый файл в системе UNIX имеет уникальный индекс. Индекс -это управляющий блок. В литературе он также называется индексным де­скриптором, i-node или i-узлом. Индекс содержит информацию, необходи­мую любому процессу для того, чтобы обратиться к файлу, например пра­ва собственности на файл, права доступа к файлу, размер файла и рас­положение данных файла в файловой системе. Процессы обращаются к файлам, используя четко определенный набор системных вызовов и идентифицируя файл строкой символов, выступающих в качестве составного имени файла. Каждое составное имя однозначно определяет файл, бла­годаря чему ядро системы преобразует это имя в индекс файла.

Индексы существуют на диске в статической форме, и ядро считы­вает их в память прежде, чем начать с ними работать. Индексы содержат следующие поля.

1. Идентификатор владельца файла и идентификатор группы.

2. Тип файла. Файл может быть файлом обычного типа, каталогом, специальным файлом (соответствующим устройствам ввода-вывода сим­волами или блоками, а также абстрактным файла канала, организующим обслуживание запросов в порядке поступления "первым пришел - первым вышел").

3. Права доступа к файлу. Права доступа к файлу разделены между индивидуальным владельцем, группой пользователей, в которую входит владелец файла, и всеми остальными. Суперпользователь (пользователь с именем root) имеет право доступа ко всем файлам в системе. Каждому классу пользователей выделены определенные права на чтение, запись и выполнение файла, которые устанавливаются индивидуально. Поскольку каталоги как файлы не могут быть исполнены, разрешение на исполнение в данном случае интерпретируется как право производить поиск в каталоге по имени файла, а право записи - как право создавать и уничтожать в нем файлы.

4. Временные сведения, характеризующие работу с файлом: время внесения последних изменений в файл, время последнего обращения к файлу, время внесения последних изменений в индекс.

5. Число указателей индекса, означающее количество имен файлов, ссылающихся на данный файл.

6. Таблицу адресов дисковых блоков, в которых располагается ин­формация файла. Хотя пользователи трактуют информацию в файле как логический поток байтов, ядро располагает эти данные в несмежных дис­ковых блоках.

7. Размер файла в байтах.

Обратим внимание, что в индексе отсутствует составное имя фай­ла, необходимое для доступа к файлу.

Содержимое файла меняется только тогда, когда в файл про­изводится запись. Содержимое индекса меняется при изменении как со­держимого файла, так и владельца файла, прав доступа и т.д. Изменение содержимого файла автоматически вызывает коррекцию индекса, однако коррекция индекса еще не означает изменение содержимого файла.

При открытии файла индекс копируется в память и записывается обратно на диск, когда последний процесс, использующий этот файл, за­кроет его. Копия индекса в памяти содержит кроме полей дискового индек­са следующие поля.

1. Состояние индекса в памяти, отражающее:

• заблокирован ли индекс;

• ждет ли снятия блокировки с индекса какой-либо процесс;

• отличается ли представление индекса в памяти от своей дисковой копии в результате изменения содержимого индекса;

• отличается ли представление индекса в памяти от своей дисковой копии в результате изменения содержимого файла;

• находится ли указатель файла в начале.

2. Логический номер устройства файловой системы, содержащей файл.

3. Номер индекса. Так как индексы на диске хранятся в линейном массиве, ядро идентифицирует номер дискового индекса по его местопо-ложению в массиве. В дисковом индексе это поле не нужно.

4. Указатели других индексов в памяти.

5. Счетчик ссылок, соответствующий количеству активных (откры­тых) экземпляров файла.

Многие поля в копии индекса, с которой ядро работает в памяти, аналогичны полям в заголовке буфера, и управление индексами похоже на управление буферами. Индекс также блокируется, в результате чего дру­гим процессам запрещается работа с ним. Эти процессы устанавливают в индексе специальный флаг, информирующий о том, что выполнение об­ратившихся к индексу процессов следует возобновить, как только блоки­ровка будет снята. Установкой других флагов ядро отмечает расхождение между дисковым индексом и его копией в памяти. Когда ядру нужно будет записать изменения в файл или индекс, оно перепишет копию индекса из памяти на диск только после проверки этих флагов.

Каталоги (справочники) являются файлами, из которых строится ие­рархическая структура файловой системы. Они играют важную роль в пре­вращении имени файла в номер индекса. Каталог - это файл, содержи­мым которого является набор записей, состоящих из номера индекса и имени файла, включенного в каталог. Составное имя - это строка симво­лов, завершающаяся пустым символом и разделяемая наклонной чертой (Т) на несколько компонентов. Каждый компонент, кроме последнего, должен быть именем каталога, но последний компонент может быть име­нем файла, не являющегося каталогом. Имя корневого каталога - "/". В ОС UNIX длина каждого компонента определяется 14 символами. Таким обра­зом, вместе с 2 байтами, отводимыми для номера индекса, размер записи каталога составляет, как правило, 16 байт.

Традиционно в файловых системах ОС UNIX за доступ ко всем ти­пам файлов (файлы, справочники и специальные файлы) отвечают 9 бит, которые хранятся в i-узле. Первая группа из 3 бит определяет права дос­тупа к файлу для его владельца, вторая - для членов группы владельца, третья - для всех остальных пользователей.

Например, права доступа "rwxr-xr-" к файлу означают, что владелец файла имеет полный доступ, члены группы имеют возможность чтения и выполнения, все остальные имеют возможность только читать данный файл. Для справочника установка бита выполнения "х" означает возмож­ность поиска (извлечения) файлов из этого справочника.

Такая система защиты файлов существует достаточно давно и не вызывает нареканий. Действительно, для того чтобы вручную, т.е. не ис-

пользуя системные вызовы и команды, изменить права доступа к файлу, следует иметь доступ к области i-узлов. Для того чтобы иметь доступ к об­ласти i-узлов, следует изменить права доступа специального файла (на­пример, /dev/root), биты доступа которого также хранятся в области i-узлов. Иными словами, если случайно или умышленно не испортить права досту­па ко всем файлам системы, установленные по умолчанию (обычно пра­вильно) при инсталляции, то можно с большой степенью вероятности га­рантировать безопасность работы системы.

Согласно принципам построения ОС UNIX необходим еще четвер­тый-бит, определяющий права на выполнение исполняемого файла. Чет­вертый бит в самом общем случае интерпретируется как возможность смены идентификатора пользователя. Его смысловая нагрузка меняется в зависимости от того, в какой группе битов доступа он установлен. Если четвертый бит установлен в группе битов прав доступа владельца (setuid), то данная программа выполняется для любого пользователя с правами владельца этого файла.

В любой системе UNIX таких команд очень много. Тривиальный пример использования незарегистрированного файла с установленным битом setuid заключается в следующем:

• один раз, узнав пароль какого-либо пользователя, злоумышленник со­здает копию командного интерпретатора в своем домашнем справочнике или еще где-нибудь, чтобы его не узнали, например в глубоком дереве в /usr/tmp (заметим, что рекурсивная работа с деревом весьма ограничена по глубине, которая для SCO UNIX равна примерно 15);

• делает владельцем файла другого пользователя и его правами устанавливает бит setuid;

• до тех пор пока данный файл не будет уничтожен, злоумышленник будет пользоваться правами другого пользователя.

В этом примере очевидно, что если злоумышленник случайно один раз узнает пароль суперпользователя, то он будет обладать полностью его правами. Поэтому необходимо регулярно проверять все файловые систе­мы на наличие незарегистрированных файлов с установленным битом se­tuid.

Если четвертый бит установлен в группе бит прав доступа членов группы (setgid), то данная программа выполняется для любого пользова­теля с правами членов группы этого файла.

Бит setgid в системах UNIX используется гораздо реже, чем бит setuid, однако все сказанное относительно возможных угроз при установке бита setuid справедливо для бита setgid. Если бит setgid установлен для справочника, то это означает, что для всех файлов, создаваемых пользо­вателем в этом справочнике, групповой идентификатор будет установлен таким же, как у справочника.

Если четвертый бит установлен в группе битов прав доступа всех остальных пользователей (бит sticky), то это указывает операционной системе делать специальный текстовый образ выполняемого файла. На сегодняшний день для выполняемого файла бит sticky обычно не исполь­зуется. Он используется только для справочников. Его установка для справочника означает, что пользователи не имеют права удалять или пе­реименовывать файлы других пользователей в этом справочнике.

Это необходимо прежде всего для справочников /tmp и /usr/tmp, чтобы один пользователь случайно или специально не смог повредить ра­боте другого пользователя. Следует напомнить, что самой распространен­ной ошибкой администратора является установка в переменную окруже­ния PATH значения текущего справочника, что делается для удобства, чтобы не набирать перед каждой командой текущего справочника символы ".Г. Хуже всего, если это значение установлено в начале. Например, PATH=.:/bin:/usr/bin:/etc. В этом случае достаточно злоумышленнику по­местить в справочник /tmp или /usr/tmp собственные образы наиболее рас­пространенных команд (Is, ps и т.п.) - и последствия набора безобидной последовательности команд (например, cd /tmp; Is) будут трудно предска­зуемы. Обычно по умолчанию в переменной окружения PATH текущий справочник не установлен. Аналогично плохо для системы могут закон­читься попытки запуска неизвестных пользовательских программ из их до­машних или общих справочников.

Бит sticky для справочника может установить только администра­тор. Очевидно, что он может и удалить файлы любого пользователя в этом справочнике. Для повышения надежности функционирования системы следует установить биты sticky для всех общих справочников.

Важной особенностью реализации системы защиты информации является очистка битов setuid, setgid и sticky для файлов, в которые производится запись. При этом очистка битов делается даже для файлов, если в них произведена запись владельца. Очистка перечисленных битов для справочников не производится.

Некоторые системы UNIX (например, Solaris) предоставляют допол­нительные возможности по управлению правами доступа к файлам путем использования списков управления доступом (Access Control List). Данный механизм позволяет для каждого пользователя или для отдельной группы установить индивидуальные права доступа к заданному файлу. При этом списки доступа сохраняются всеми системными средствами копирования и архивирования. Нельзя сказать, что введение этого механизма принципи­ально улучшает защиту файлов. Тем не менее он вносит некоторую гиб­кость в процедуру формирования прав доступа к файлам.

Отдельно следует рассмотреть значение системной переменной umask. С ее помощью устанавливаются по умолчанию права доступа к файлу при его создании. Значение переменной umask устанавливает, ка­кие биты будут маскироваться. Например, в SCO UNIX значение перемен­ной umask по умолчанию установлено 022. Это означает, что для любого созданного файла по умолчанию будут установлены права доступа "rwxr-xr-х". Если значение переменной umask по каким-либо причинам будет изменено, то это может привести к непредсказуемым последствиям. В си­лу этого каждому пользователю необходимо явным образом прописать значение переменной umask в стартовом файле (.profile или .cshrc или т.п.).

В данном пособии не рассматриваются возможности закрытия фай­лов командой crypt, реализующей Data Encryption Standard (DES), по­скольку данная системная команда в Россию не поставляется.

Необходимо подчеркнуть важность правильной установки прав дос­тупа к специальным файлам. При этом надо помнить, что для одного и того же физического устройства могут существовать несколько специаль­ных файлов (в зависимости от способа доступа). Например, /dev/root и /dev/rroot.

Следует обратить внимание на обеспечение режима защиты ин­формации при импортировании данных из других систем. В самом общем случае архивные программы сбрасывают режимы доступа к файлам, кото­рые могут повлиять на безопасность системы. Тем не менее количество версий архивных программ и их реализаций в различных системах UNIX весьма значительно. Так, ряд версий команды tar поддерживает опции, при которых не изменяется принадлежность файла владельцу и группе. Некоторые системы UNIX позволяют копировать специальные файлы с помощью команды tar, а некоторые не позволяют. С особым вниманием следует пользоваться командой cpio, поскольку с ее помощью можно сде­лать копии файлов, сохраняя все биты (setuid, setgid и sticky) и права доступа к файлам.

При монтировании файловых систем, созданных или обрабатывав­шихся на других системах, могут возникнуть те же проблемы, что и для импортированных файлов. Для файловых систем имеются еще и дополни­тельные проблемы. Первая из них - файловая система, перенесенная с другой системы, может быть испорчена. Попутно заметим, что логические ошибки в файловой системе могут быть исправлены командой fsck перед монтированием. Гораздо хуже ОС UNIX относится к физическим сбоям на дисках. В обоих случаях монтирование дефектной файловой системы мо­жет привести систему к фатальному сбою, вызвать дальнейшее повреж­дение данных в импортированной файловой системе или повреждение других файловых систем из-за побочных эффектов.

Вторая проблема с импортированными файловыми системами мо­жет возникнуть из-за установленных прав доступа к файлам и справочни­кам, которые могут быть недопустимы для вашей системы. В этом случае для выявления установок различных битов (setuid, setgid, sticky) можно воспользоваться соответствующей командой (например, ncheck для SCO). Для поиска неправильных установок для файлов владельцев и групп в им­портированной файловой системе можно предложить только ручной про­смотр.

 

Контроль целостности системы

Известно, что стоимость восстановления системы выше стоимости ее сопровождения. В задачи сопровождения ОС входит, в частности, кон­троль целостности системы. В ОС UNIX контроль целостности системы выполняется рядом команд. Например, для контроля и поддержки целостности SCO UNIX основной перечень команд системы следующий: integrity, authck, fixmog, cps, tcbck, smmck, authckrc, fsck. Практика показывает, что данный набор команд является достаточно полным.

Стандартная последовательность действий после возникновения сбоя в системе или каких-либо других отклонений следующая:

• проверка файловой системы;

• составление контрольного отчета;

• проверка базы данных аутентификации;

• проверка разрешений для системных файлов.

Следует отметить, что системные средства восстановления це­лостности системы работают до определенного предела. Авторами был проведен следующий эксперимент для SCO UNIX Release 5.0:

• всем файлам системы был назначен владелец root;

• у всех файлов системы были установлены права доступа со значением по умолчанию системной переменной umask.

В результате этих действий системными средствами не удалось восстановить нормальные права доступа и владельцев файлов. Такой эксперимент имеет жизненную основу, например размножение системы на другие компьютеры по сети. Поэтому единственным способом дублирова­ния системы на другие компьютеры следует считать использование ко­манды cpio. Также следует отметить, что в SCO Release 3.2 и Release 5.0 права доступа и владельцы некоторых файлов по умолчанию не соот­ветствуют базе данных контроля целостности системы. Авторами не ис­следовались вопросы влияния этих несоответствий на безопасность и це­лостность работы системы.

 

3. Средства аудита

Будем считать, что действие контролируется, если можно опреде­лить реального пользователя, который его осуществил. Концептуально при построении ОС UNIX некоторые действия нельзя контролировать на уров­не действий реального пользователя. Например, пользовательские бюд­жеты, такие как Ip, cron или uucp, используются анонимно, и их действия можно обнаружить только по изменениям в системной информации.

Система контроля регистрирует события в операционной системе, связанные с защитой информации, записывая их в контрольный журнал. В контрольных журналах возможна фиксация проникновения в систему и неправильного использования ресурсов. Контроль позволяет просматри­вать собранные данные для изучения видов доступа к объектам и наблю­дения за действиями отдельных пользователей и их процессов. Попытки нарушения защиты и механизмов авторизации контролируются. Использо­вание системы контроля дает высокую степень гарантии обнаружения по­пыток обойти механизмы обеспечения безопасности. Поскольку события, связанные с защитой информации, контролируются и учитываются вплоть до выявления конкретного пользователя, система контроля служит сдер­живающим средством для пользователей, пытающихся некорректно ис­пользовать систему.

В соответствии с требованиями по надежности операционная сис­тема должна создавать, поддерживать и защищать журнал регистрацион­ной информации, относящейся к доступу к объектам, контролируемым системой. При этом должна быть возможность регистрации следующих событий:

• использования механизма идентификации и аутентификации;

• внесения объектов в адресное пространство пользователя (например, открытие файла);

• удаления объектов;

• действий администраторов;

• других событий, затрагивающих информационную безопасность.

Каждая регистрационная запись должна включать следующие поля:

• дата и время события;

• идентификатор пользователя;

• тип события;

• результат действия.

Для событий идентификации и аутентификации регистрируется так­же идентификатор устройства. Для действий с объектами регистрируются имена объектов.

Типы контролируемых событий, поддерживаемые в SCO Release 5.0, приведены в табл. 1.

Система контроля использует системные вызовы и утилиты для классификации действий пользователей, подразделяя их на события раз­личного типа. Например, при возникновении события типа "DAC Denials" (отказ доступа при реализации механизма избирательного разграничения доступа) регистрируются попытки такого использования объекта, которые не допускаются разрешениями для этого объекта. Иными словами, если пользовательский процесс пытается писать в файл с доступом "только для чтения", то возникает событие типа "DAC Denials". Если просмотреть кон­трольный журнал, то легко можно увидеть повторяющиеся попытки досту­па к файлам, на которые не получены разрешения.

Существенно повышает эффективность контроля наличие регист­рационного идентификатора пользователя (LUID). После прохождения пользователем процедур идентификации и аутентификации, т.е. непо­средственного входа в систему, каждому процессу, создаваемому пользо­вателем, присваивается регистрационный идентификатор пользователя. Данный идентификатор сохраняется, несмотря на переходы от одного пользовательского бюджета к другому, с помощью таких команд, как su.

Каждая контрольная запись, генерируемая системой контроля, со­держит для каждого процесса регистрационный идентификатор наряду с эффективным и реальным идентификаторами пользователя и группы. Та­ким образом, оказывается возможным учет действий пользователя.

Отдельно следует рассмотреть реализацию механизма контроля для работы в режиме ядра. Данный механизм генерирует контрольные записи по результатам выполнения пользовательских процессов с помо­щью системных вызовов ядра. Каждый системный вызов ядра содержит строку в таблице, в которой указывается связь системного вызова с кон­тролем защиты информации и тип события, которому он соответствует.

Таблица 1

Тип Содержание
1. Startup/Shutdown Старт (загрузка)/выгрузка системы
2. Login/Logout Успешный вход и выход из системы
3. Process Create/Delete Создание/уничтожение процесса
4. Make Object Available Сделать объект доступным (открыть файл, открыть сообщения, открыть семафор, монтировать файло­вую систему и т.п.)
5. Map Object to Subject Отобразить объект в субъект (выполнение про­граммы)
6. Object Modification Модификация объекта (запись в файл и т.п.)
7. Make Object Unavailable Сделать объект недоступным (закрыть файл, за­крыть сообщение, закрыть семафор, размонти­ровать файловую систему и т.п.)
8. Object Creation Создание объекта (создание фай­ла/сообщения/семафора и т.п.)
9. Object Deletion Удаление объекта (удаление фай­ла/сообщения/семафора и т.п.)
10. DAC Changes Изменение разграничения доступа (изменение дос­тупа к файлу, сообщению, семафору, изменение владельца и т.п.)
11. DAC Denials Отказ доступа (отсутствие прав доступа к какому-либо объекту)
12. Admin/Operator Actions Действия (команды) системных администраторов и операторов
13. Insufficient Authorization Процессы, которые пытаются превысить свои пол­номочия
14. Resource Denials Отказы в ресурсах (отсутствие необходимых фай­лов, превышение размеров памяти и т.п.)
15. IPC Functions Посыпка сигналов и сообщений процессам
16. Process Modifications Модификации процесса (изменение эффективного идентификатора процесса, текущего справочника процесса и т.п.)
17. Audit Subsystem Events События системы контроля (разреше­ние/запрещение системного контроля и модифика­ция событий контроля)
18. Database Events События базы данных (изменение данных безопас­ности системы и их целостности)
19. Subsystem Events События подсистемы (использование защищенных подсистем)
20. Use of Authorization Использование привилегий (контроль действий с использованием различных привилегий)

Кроме того, используется таблица кодов ошибок, позволяющая классифицировать системные вызовы как конкретные события, связанные с защитой информации.

Например, системный вызов open классифицируется как событие "Сделать объект доступным". Если пользователь выполняет системный вызов open для файла /unix и данный системный вызов завершается ус пешно, то генерируется контрольная запись об этом событии. Однако если системный вызов open заканчивается неудачно в силу того, что пользова­тель запросил в системном вызове доступ на запись файла /unix, не имея разрешения, то это действие классифицируется как событие "Отказ досту­па" для данного пользователя и объекта /unix. Следовательно, системный вызов можно отобразить в несколько типов событий, в зависимости от объекта, к которому осуществляется доступ, и (или) результата вызова.

Некоторые системные вызовы не имеют отношения к защите ин­формации. Например, системный вызов getpid получает идентификатор процесса и не определяет никакого события, связанного с защитой ин­формации. Таким образом, данный системный вызов не подлежит контро­лю.

Механизм контроля ядра выдает внутренний вызов в драйвер уст­ройства для занесения записи в контрольный журнал. Отметим, что ин­формацию контроля система записывает непосредственно на диск, не до­жидаясь синхронизации суперблоков в оперативной памяти и на диске. Этим достигается полная защита от разрушения информации контроля. Однако следует иметь в виду, что при включении всех событий контроля и при активной работе пользователей объем записываемой информации может достигать нескольких мегабайтов на одного пользователя в час. Поэтому контроль следует рассматривать не как превентивную меру, а как меру пресечения.

 








Дата добавления: 2015-09-07; просмотров: 2867;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.022 сек.