
Тестирование / tsure052
.pdf1.3.БЕЗОПАСНОСТЬ ОССЕМЕЙСТВА UNIX
Кнастоящему времени создано несколько десятков различных клонов ОС UNIX: AIX, BSD, HP/UX, Ultrix, SINIX, SVR4, SunOS, Solaris, LINUX и многие другие. ОС семейства UNIX широко используются в различных областях с повышенными требованиями к надежности функционирования системы. По своей идеологии они достаточно полно обеспечивают безопасность системы при помощи стандартных механизмов защиты. Достаточно отметить, что значительная часть реализаций ОС UNIX либо сертифицирована по классу безопасности С2 (или более высокому), либо совместима с ним (Под совместимостью в данном контексте подразумевается декларируемое производителем соответствие операционной системы требованиям данного класса безопасности). Среди всех сертифицированных в США операционных систем в настоящее время наиболее высокие классы безопасности имеют UNIXподобные ОС XTS-300 STOP 4.За компании Wang Federal (класс безопасности ВЗ) и Trusted XENIX 4.0 компании Trusted Information Systems (класс безопасности В2).
ОС семейства UNIX значительно различаются по своей организации.Рассмотрим идеологию построения системы защиты в ОС семейства UNIX без подробного рассмотрения особенностей различных реализаций.
Система безопасности ОС UNIX представляет собой комплекс механизмов, обеспечивающих:
•конфиденциальность - защиту ресурсов от несанкционированного доступа;
•целостность - защиту ресурсов системы от несанкционированного изменения;
•доступность - защиту от несанкционированного захвата и удержания ресурсов. Стандартами на построение ОС семейства UNIX в значительной мере
оговариваются подсистемы управления доступом, обеспечения целостности,
регистрации и учета. Подсистема идентификации и аутентификации пользователя
выполняет функции защиты от попыток НСД и обеспечения доступности ресурсов для зарегистрированных пользователей. Результатом ее работы является подготовленная для работы пользователя среда, защищаемая от несанкционированного изменения с помощью присвоенных процессам системы пользовательских и групповых идентификаторов и поставленных в соответствие значениям идентификаторов правил доступа к ресурсам системы.
Механизмы функционирования файловой системы ОС UNIX позволяют защитить
51
ресурсы сиcтемы от несанкционированного доступа и изменения, основываясь на правах доступа к ним для разных классов пользователей и установленных на этапе подготовки среды значениях пользовательских и групповых идентификаторов процессов.
Подсистема регистрации и учета обеспечивает неотказуемость выполненных пользователем действий в системе, мониторинг функционирования как системы безопасности, так и всей системы в целом. Такая подсистема необходима для отслеживания возникающих проблем в работе приложений, сигнализации о попытках преодоления системы безопасности и ведения журналов событий для последующего исследования причин их возникновения.
1.3.1.СРЕДСТВА ИДЕНТИФИКАЦИИ И АУТЕНТИФИКАЦИИ
1.3.1.1.Угрозы системе аутентификации
Работа пользователя многопользовательской ОС начинается с этапа идентификации и аутентификации. На данном этапе выполняется первоначальный контроль доступа к системным ресурсам. Система идентификации и аутентификации обычно построена на основе паролей. Для начала сеанса работы в UNIX любой пользователь должен выполнить процедуру входа в систему. При этом операционной системой устанавливаются идентификатор сеанса и права доступа к ресурсам для данного пользователя.
Процесс входа в систему выводит приглашение на терминал пользователя для запроса системного входного имени, а затем запрос на ввод пароля. Совокупность входного имени пользователя и секретного пароля служит для организации авторизованного доступа к системе и определяет учетную запись пользователя. Процесс подключения пользователя к системе UNIX продолжается проверкой наличия входного имени в файле зарегистрированных пользователей и проверкой введенного пароля.
В целях безопасности пароли пользователей в системе не хранятся. Хранится значение функции необратимого криптографического преобразования некоторой строки символов, которое служит криптографической контрольной суммой секретного пароля. Ключом данного необратимого криптографического преобразования является пароль пользователя. При подключении к системе на введенном пользователем пароле шифруется строка и результат затем сравнивается с эталонным значением криптографической контрольной суммы. По совпадению зашифрованной строки с
52
эталоном делается вывод о правильности введенного пароля.
Длина входных имен пользователей в UNIX обычно ограничена восемью символами. Входное имя может состоять из произвольной последовательности символов. В некоторых системах на набор символов, из которого допустимо составлять входные имена, накладываются дополнительные ограничения. Часто входное имя пользователя должно состоять только из строчных букв и цифр, обязательно начинаясь с буквы. Очевидно, что в одной системе имена пользователей для входа должны быть уникальными.
Требование уникальности не распространяется на пароли, но совпадение паролей разных пользователей показывает, что пользователи выбрали "слабый" пароль, который может быть подобран злоумышленником. Пароли в ОС семейства UNIX обычно ограничены длиной в восемь символов. В некоторых современных реализациях допустимы более длинные пароли. Для расширения множества возможных ключей строчные и прописные буквы в пароле различаются и разрешается использование практически любых символов. Существует опасность дешифровки и подбора пароля злоумышленником при получении доступа к базе данных с эталонными значениями криптографических контрольных сумм паролей зарегистрированных пользователей. Для ограничения доступа к такой информации в современных системах UNIX эталонные значения выносят в отдельные скрытые от обычных пользователей "теневые" файлы контрольных сумм паролей.
Использование стандартной процедуры авторизации с постоянным паролем остается одним из слабых мест ОС семейства UNIX. Подбор или перехват паролей является одним из широко используемых методов при несанкционируемых проникновениях в систему UNIX. В большинстве систем UNIX для снижения возможных последствий такого проникновения системному администратору запрещен вход с правами суперпользователя с удаленного терминала.
Следует регулярно менять пароли, используемые в системе. В некоторых версиях UNIX администратор может включить в выполняющийся при входе пользователя в систему сценарий команду, заставляющую пользователя сменить пароль при каждом подключении к системе. В системах семейства UNIX для защиты от подбора пароля злоумышленником, ограничивается максимальное число последовательных неверных попыток входа в систему пользователем. Действия системы в ситуации, когда такое
53
число достигнуто, зависят от реализации.
Внекоторых версиях UNIX, если превышено число неуспешных попыток входа в систему, учетная запись пользователя будет заблокирована. Это означает, что любые дальнейшие попытки входа в систему с данным входным именем будут игнорироваться системой даже при вводе верного пароля. Разблокировать учетную запись может только системный администратор. Блокировка учетной записи выполняет две важные функции: защищает систему от злоумышленников, пытающихся подобрать пароль, и сообщает пользователю, что кто-то пытался получить доступ к его учетной записи. Практика показывает, что подобная автоматическая блокировка учетной записи малополезна. Система автоматической блокировки может быть использована злоумышленником для выполнения атак, направленных на нарушение доступности ресурсов системы для зарегистрированных пользователей. Значительно лучшие результаты по защите пароля пользователя от попыток его подбора дает метод увеличения задержки вывода приглашения к вводу пароля между последовательными неверными попытками подключения к системе. После нескольких неуспешных попыток может быть установлена увеличивающаяся задержка между очередными выдаваемыми приглашениями к входу или вводу пароля. Реализация подобного механизма должна сохранять время последней попытки входа для данной учетной записи и число неуспешных попыток для учета возможности кратковременного отключения злоумышленника от системы авторизации и повторного входа.
Всистемах, отделенных от общедоступных сетей, система аутентификации по паролю достаточно эффективна. Однако приобретают популярность системы, построенные на использовании одноразовых сеансовых паролей, передача которых криптографически защищена.
1.3.1.2.Иерархия пользователей и групп системы UNIX
Информация о всех пользователях системы хранится в специализированном файле - базе данных учетных записей. Таким файлом для стандартных ОС семейства UNIX является файл /etc/passwd. Файлы /etc/passwd и /etc/group являются одними из важнейших в ОС UNIX, поскольку определяют базу зарегистрированных пользователей, с которыми связаны права на ресурсы системы. В каждой строке файла /etc/passwd, кроме входного имени пользователя и криптографической контрольной суммы для проверки введенного пароля, хранится значение пользовательского идентификатора
54
(UID), групповой идентификатор пользователя (GID), реальное имя пользователя, путь к начальному каталогу пользователя и путь к командной оболочке UNIX, запускаемой при входе данного пользователя в систему.
Пример полей записи из файла /etc/passwd: Stud1:Fixx2XB23eaBs:505:100:Student 1:/home/stud1:/bin/bash
_____ ____________ ___ ___ _______ __________ _______
Вх.имя Контр.сумма Ид-р Ид-р Имя Нач.каталог Ком.оболочка пароля п-ля гр. п-ля
Все поля, кроме системного имени и значений пользовательского и группового идентификаторов в строках файла учетных записей пользователей ОС UNIX, необязательны.
Некоторые входные имена, описанные в первой записи каждой строки файла паролей, являются зарезервированными системными именами UNIX и непосредственно связаны со строением системы безопасности. ОС семейства UNIX используют различные зарезервированные имена для выполнения системных функций. Ниже перечислены наиболее общие системные имена, используемые в различных реализациях
UNIX: |
|
root |
суперпользователь, управляет доступом в систему и низкоуровневыми |
|
системными функциями; |
daemon |
управление некоторыми сетевыми процессами, в некоторых реализациях |
или sys |
отвечает также за другие системные сервисы; |
guest |
используется для посетителей, не имеющих собственных учетных записей; |
ftp |
используется для анонимного доступа к системе по протоколу передачи |
|
файлов FTP; |
uucp |
управление системой UUCP-сервиса, отвечающего за передачу почты; |
news |
используется системой новостей Usenet; |
nobody |
пользователь, не имеющий собственных файлов в системе, часто используется |
|
по умолчанию для непривилегированных действий. |
Перечисленные системные учетные записи не имеют реальных имен пользователей в соответствующих полях файла учетных записей. Знак "*" в поле, хранящем контрольную сумму пароля для учетной записи, предотвращает возможность подключения пользователей к UNIX под подобными системными именами.
Необходимо отметить особый статус пользователя root со значением
55
идентификатора учетной записи UID равным нулю. Пользователя root в ОС семейства UNIX называют суперпользователем, и он изначально имеет все права по отношению ко всем ресурсам операционной системы, Обычно под данной учетной записью работает главный системный администратор ОС UNIX.
Все права пользователей по отношению к ресурсам системы в системе UNIX связаны не с входными именами учетных записей, а со значением UID, а также значением группового идентификатора - GID. Это означает, что пользователь с входным именем, отличным от root, может иметь все права суперпользователя, если будет иметь идентификатор пользователя равный нулю. И наоборот, учетная запись с входным именем root не будет иметь особых привилегий, если ее UID не установлен в ноль.
Пользовательские идентификаторы представляются шестнадцатибитными целыми беззнаковыми числами и могут принимать значения от 0 до 65535. В операционных системах семейства UNIX нулевое значение пользовательского идентификатора зарезервировано за суперпользователем. Соответствующая учетная запись обычно используется для целей системного администрирования. Однако некоторые приложения могут использовать учетную запись суперпользователя для гарантированного доступа к ресурсам. Идентификаторы от 1 до 9 обычно используются для системных функций. Идентификаторы рядовых пользователей, как правило, начинаются с 20, 100 или 500. Некоторые новые реализации UNIX поддерживают тридцатидвухбитные идентификаторы пользователей.
Поскольку система UNIX после регистрации пользователя в системе и присвоения пользовательскому процессу группового и пользовательского идентификаторов контролирует только значения этих идентификаторов, но не входное имя пользователя, вполне возможно установление (ручным редактированием файла учетных записей пользователей) одного идентификатора для разных учетных записей системы с различными входными именами и паролями. Эти пользователи смогут свободно читать и удалять файлы друг друга, завершать процессы, запущенные другими пользователями с таким же пользовательским идентификатором, поскольку система безопасности UNIX не будет каким-либо образом различать таких пользователей между собой.
Так как система безопасности в UNIX основана на персональной ответственности, то описанное присвоение одного идентификатора разным пользователям не является вполне корректным. При регистрации нового пользователя системными средствами
56
обычно не допускается многократных повторений идентификаторов UID для разных учетных записей.
Каждый пользователь ОС UNIX входит в одну или несколько групп. С точки зрения системы безопасности в ОС UNIX под группой следует понимать совокупность общих атрибутов, определяющих права доступа к ресурсам операционной системы, присущую некоторому числу пользователей системы. Группы в UNIX предназначены для организации равноправного доступа части пользователей системы к каким-либо общим файлам или устройствам и облегчения администрирования. Путем помещения пользователя в соответствующую группу можно дополнить или ограничить его полномочия над какими-нибудь системными ресурсами. Как и в случае с отдельными пользователями, любая группа имеет имя и идентификационный номер (GID) - целое шестнадцатибитное число. Каждый пользователь входит в первичную группу, GID которой указан в файле /etc/passwd для каждой учетной записи.
Данные по всем группам пользователей в системе, соответствующие им групповые идентификаторы и данные о принадлежности пользователей к той или иной группе содержатся в файле описания групп /etc/group. Пользователи UNIX являются членами групп, описанных в /etc/group в дополнение к первичной группе, указанной в /etc/passwd. Описание соответствия группового идентификатора GID и имени пользователя в /etc/group сделано для удобства пользователей и администратора.
Во многих системах UNIX группа с нулевым идентификатором имеет специальное значение и обычно называется wheel. Только входящие в группу wheel пользователи могут получить права системного администратора. Такое дополнительное условие положительно сказывается на защищенности системы безопасности от попыток несанкционированного получения полномочий суперпользователя зарегистрированными пользователями системы.
В процессе подключения любого пользователя к системе, просматривается база групп в файле /etc/group и определяется первичная группа из файла учетных записей /etc/passwd. При проверке прав доступа пользователя к каким-либо ресурсам системы проверяются права доступа для всех групп, в которые входит пользователь.
С точки зрения системы безопасности, файлы /etc/passwd и /etc/group являются одними из важнейших в ОС UNIX. Если злоумышленник получит возможность изменить содержимое /etc/passwd, то он сможет легко получить права суперпользователя, либо
57
изменив содержимое контрольной суммы поля пароля системного администратора, чтобы войти под его учетной записью с паролем, контрольная сумма которого записана, либо изменив значение своего пользовательского идентификатора на нулевое и тем самым указав свою учетную запись как учетную запись суперпользователя.
Если злоумышленник получит возможность изменить содержимое файла /etc/group, то он сможет добавить себя в любую группу. Путем добавления себя в соответствующую группу, злоумышленник сможет получить доступ к файлу /etc/passwd и затем получить права суперпользователя.
Уже отмечалось, что проверка прав доступа к ресурсам в системе UNIX организована на основе контроля значений пользовательского (UID) и группового (GID) идентификаторов процесса. Процессы в системе UNIX, в действительности, имеют два класса пользовательских и групповых идентификаторов одновременно. Это позволяет гибко делегировать права на отдельные ресурсы системы под контролем специального приложения, не давая пользователю всех прав на несанкционированные (запрещенные в рамках работы данного приложения) действия с данными ресурсами. Некорректное использование этих мощных механизмов может привести к полной компрометации системы. Идеология работы этих методов основана на существовании двух классов пользовательских и групповых идентификаторов. Подробнее об этих механизмах будет рассказано ниже.
Каждому процессу системы поставлены в соответствие действительные и эффективные пользовательские и групповые идентификаторы. Действительные идентификаторы показывают UID и GID пользователя, под которыми пользователь был зарегистрирован в системе. Эффективные значения идентификаторов определяют права, присвоенные выполняемому процессу. Обычно действительные и эффективные значения идентификаторов процессов совпадают. Это означает, что выполняемый пользователем процесс имеет права, совпадающие с правами самого пользователя, полученными в момент подключении. Нередко для контроля доступа к ресурсам, обычно недоступным, пользователю бывает необходимо переустановить идентификатор пользовательского процесса. Для выполнения команд с правами другого пользователя можно выйти из системы, а затем снова подключиться под требуемой учетной записью. После этого, для запускаемых пользователем процессов будут устанавливаться новые значения действительных и эффективных идентификаторов пользователя и группы. Система
58
будет считать, что работает новый пользователь. Для временного изменения действительного значения UID и изменения текущей учетной записи пользователя, можно воспользоваться утилитой /bin/su. Эта утилита запрашивает входное имя и пароль требуемой учетной записи, проверяет их и запускает новую командную оболочку с действительным пользовательским идентификатором требуемого пользователя. После завершения работы с особыми правами доступа пользователь должен вернуться к старой оболочке со старым значением действительного UID при помощи команд exit, bye или logout.
Множество системных утилит UNIX требуют своего выполнения с наивысшими правами суперпользователя, поскольку работают с важнейшими ресурсами операционной системы. Иногда необходимо обеспечить возможность запуска одной из подобных утилит помощнику системного администратора или простому пользователю. При этом не всегда разумно давать пользователю полный доступ ко всей системе с такими правами и раскрывать ему пароль суперпользователя. Проблема решается с использованием специальных атрибутов у программ, при выполнении которых происходит переопределение значений эффективных пользовательских или групповых идентификаторов на заданные. По завершению процессов с атрибутами переопределения эффективных пользовательского или группового идентификаторов происходит восстановление исходных значений идентификаторов.
ОС UNIX контролирует права доступа процесса, исходя из эффективных значений идентификаторов. При выполнении задач с атрибутами переопределения эффективных идентификаторов устанавливается эффективное значение пользовательского или группового идентификатора процесса, равное значению UID или GID владельца программы. Процессы с атрибутами переопределения эффективных пользовательских или групповых идентификаторов называют setuidили SUID-процессами и setgidили SGID-процессами. При этом, действительные значения идентификаторов остаются равными значению идентификатора пользователя, запустившего данный процесс и позволяют при необходимости различать статус пользователя процесса.
1.3.1.3.Статус суперпользователя
Суперпользователь ОС UNIX не связан никакими ограничениями по доступу к ресурсам системы и потому обладает особым статусом в системе UNIX, являясь важнейшим звеном системы безопасности.
59
Стандартным входным именем суперпользователя в ОС UNIX является имя root. Учетная запись root используется операционной системой для выполнения своих основных функций. Процессы подключения пользователей к системе и их выхода, ведения журналов системных событий и управления устройствами ввода-вывода выполняются с правами пользователя root. На процессы суперпользователя не действует большинство ограничений подсистемы безопасности. Суперпользователь имеет полный контроль над всей системой и получение злоумышленником прав суперпользователя означает полную компрометацию системы UNIX.
При таких значительных возможностях суперпользователь ограничен некоторыми системными требованиями. Выделим главное из того, на что он не имеет права:
•выполнять изменения в файловой системе, смонтированной в режиме "только для чтения" (однако, суперпользователь может изменять данные прямо на физическом уровне устройства или перемонтировать файловую систему в режиме чтениязаписи, обеспечивающем возможность записи);
•размонтировать файловую систему, содержащую открытые файлы или файловую систему, в которой установлены текущие каталоги выполняющихся процессов;
•узнать пароль пользователя по шифрованному значению контрольной суммы пароля из файла учетных записей /etc/passwd (однако может его изменить),
Учетная запись суперпользователя root не предназначена для персонального использования системным администратором. Большинство проверок и предупреждений системы безопасности отключены для процессов имеющих UID суперпользователя, и ошибка администратора может вызвать крах всей системы UNIX. Поэтому для действий, не требующих всех прав суперпользователя, рекомендуется работать под учетной записью обычного пользователя, наделенного минимально необходимыми для данной задачи полномочиями.
Для повышения защищенности операционной системы в UNIX используется возможность запрета подключения под именем суперпользователя с удаленного терминала. Для получения полномочий пользователя root системный администратор должен войти в систему под своим персональным системным именем, а затем изменить свой статус на статус суперпользователя командой /bin/su, введя его пароль. По окончанию административных работ необходимо выйти из привилегированной командной оболочки. Такой метод организации доступа позволяет легко отслеживать,
60