Аналогично устроено управление доступом и к другим ресурсам ОС: очередям сообщений, семафорам и т.д.
От всех современных мультипользовательских систем требуется предоставление некоторой степени безопасности. Традиционный Unix - тоже, однако, наличие весьма чувствительных данных или активных злонамеренных пользователей требует более убедительного набора возможностей защиты. Как раз здесь регулярный Unix чувствует себя неуверенно.
Регулярный Unix не содержит внятного механизма, который гарантировал бы сохранность пользовательских программ, файлов и системных ресурсов. В регулярном Unix`е есть несколько уязвимых с точки зрения безопасности мест, хорошо известным искушенным пользователям, вытекающими из самой природы UNIX и открывающими двери для нападения. Однако, хорошее системное администрирование может ограничить эту уязвимость.
Например, традиционный Unix не обеспечивает контроль доступа, способный разрешить/запретить доступ для конкретного пользователя. Хотя он обеспечивает доступ, основанный на понятиях группы и владельца, нет механизма, запрещающего доступ для группы или отдельного пользователя. Например, нельзя указать, что данный пользователь имеет право только читать файл, хотя все остальные члены его группы имеют право на чтение и запись.
Регулярный Unix также не ограждает пользователей, создающих файлы и каталоги. Неаккуратные пользователи могут установить подразумеваемый режим доступа к файлам, обеспечивающий общий доступ, в то время как предполагается монопольный.
Unix очень просто позволяет получить привилегии суперпользователя. Суперпользователь же имеет полный доступ к данным всех пользователей, системным программам, другим системным ресурсам. Системный администратор должен предпринять определенные усилия, чтобы ограничить возможности суперпользователя (нерадивые администраторы, к сожалению, встречающиеся часто, этого не делают).
Регулярный Unix не имеет действенных средств учета. Если нет соответствующих средств проверки полномочий, очень трудно определить, какой пользователь (какая программа) обращался к критичным ресурсам.
Примеры безопасных версий ОС Unix
AT&T System V/MLS была первой версией Unix`а, аттестованной NCSC как принадлежащая к классу В1 (это произошло в 1989 году). SunOS MLS - также пример операционной системы класса В1.
Большинство версий ОС Unix ориентируются на требования С2, что удовлетворяет потребности основной массы коммерческих пользователей. По данным Sun, более половины государственных контрактов этой фирмы на 1992-93 годы ограничиваются уровнем С; банки на уровень В и не заглядывают. Эксперты Sun предполагают, что В-уровень будет нужен десяткам, сотням, но не тысячам пользователей.
Операционные системы Solaris 2.0 и SCO Unix предоставляют возможности уровня С2. Unix SVR4.2 и HP-UX 9.0 - кандидаты в класс В2.
Средства обеспечения безопасности уровня С2
Механизмы обеспечения безопасности разных версий Unix во многом схожи. Рассмотрим подробнее одну из них - SCO Unix, по всей видимости, наиболее доступную в России Unix-систему современного образца. Данная система спроектирована в соответствии с требованиями уровня безопасности С2 по Оранжевой Книге.
В типичном Unix`е каждый процесс имеет реальный и действующий идентификаторы пользователя (то же самое для группы). Процесс с действующим идентификатором суперпользователя может произвольным образом эти идентификаторы изменить. Уровень С2, однако, требует, чтобы ТСВ могла уникальным образом идентифицировать каждого пользователя. Для этого в надежных Unix-системах вводится еще один идентификатор пользователя - входной. Это несмываемый штамп для каждого процесса, он не изменяется в течение всего сеанса работы; порожденные процессы наследуют LUID у предка.
Избирательный Контроль Доступа. DAC определяет, имеет ли пользователь доступ к требуемым данным. В большинстве Unix-систем защита основывается на понятиях владельца и группы и режимов доступа к объектам. Надежный Unix расширяет стандартный механизм, ограничивая для пользователя возможности:
- устанавливать бит переустановки идентификатора
- изменять владельца файла
- злоупотреблять битами переустановки и битом "несговорчивости" (эти биты сбрасываются, если файл модифицируется; т.о. пользователь не может подменить программу)
Бит «несговорчивости» для каталогов означает, что удалять файлы из этого каталога может только его владелец и суперпользователь; установить данный бит может только суперпользователь.
Полномочие - атрибут пользователя, требующийся для выполнения определенных действий. Большинство Unix-систем принимают решения о возможности доступа на основании простых прав доступа; процессы суперпользователя всегда получают доступ. TCB выделяет два типа полномочий: полномочия ядра и полномочия подсистем. Полномочия ядра ассоциируются с процессами. Они позволяют процессу выполнить определенные действия, если процесс обладает необходимой привилегией. Полномочия подсистем ассоциируются с пользователями. Они позволяют пользователю выполнять определенное действие посредством команд, отнесенных к подсистеме. Подсистема - набор файлов, устройств и команд, служащих определенной цели. Например, подсистема lp состоит из файлов накопления печати, принтеров и команд типа lpadmin(ADM).
Полномочия ядра заносятся в "множество полномочий", ассоциированное с каждым процессом. Полномочия устанавливаются по умолчанию; пользователь может их и переустановить.
Идентификация и проверка подлинности. Когда пользователь входит в не надежную ОС, имеет мето ограниченная идентификация и проверка подлинности. Система по входному имени проверяет пароль в базе данных паролей /etc/passwd. Если имя найдено, система опознает пользователя путем зашифрованного пароля с содержимым соответствующего поля в базе данных паролей.
Надежная система расширяет стандартный механизм. Есть определенные правила, ограничивающие допустимые пароли, новые процедуры для генерации и изменения паролей. Расположение и защита определенных частей базы данных паролей изменены. Администратор имеет больший контроль над процессом входа. Этот аспект системы поддерживает отдельный пользователь - администратор опознавания (полномочие подсистемы auth.
Учет. Большинство Unix-систем ограничено поддерживают записи о действиях системы. Система подотчетности делает одну запись после завершения каждого пользовательского процесса. Надежная ОС предоставляет полный «след» действий - журнал учета. Журнал содержит в себе записи о каждой попытке доступа субъекта к субъекту (и успешные, и неудачные), о каждом изменении субъекта, объекта, характеристик системы. Подсистема учета управляется специальным администратором учета (полномочие audit). Администратор учета решает, как много информации записывается, насколько надежно, и управляет собранной информацией. Информация помогает администратору выяснить, что случилось с системой, когда и кто в этом участвовал.
Защищенные подсистемы. Unix-системы обеспечивают механизм переустановки идентификаторов пользователя или группы. Это позволяет конструировать программы, имеющие дело с приватной информацией: доступ к ней возможен посредством только операций, предусмотренных в этих программах. TCB определяет несколько защищенных подсистем. Каждая состоит из набора приватной информации устройств и утилит. Надежная система расширяет понятие защищенной подсистемы:
- обеспечивает более точный контроль за пользователями и группами, которые имеют дело с определенной приватной информацией;
- поддерживает отдельную базу данных пользователей, которым можно выполнять программы, затрагивающие приватную информацию.
В надежной Unix-системе административные задачи разделены на несколько различных ролей; каждая из них может быть поручена одному лицу или разным. Каждой роли соответствуют отдельные полномочия; такое соответствие помогает отслеживать происходящее.
Один из важных аспектов надежной системы - локализация потенциальных проблем, связанных с безопасностью. Ограничительный механизм распадается на три части:
- парольные ограничения;
- ограничения на использование терминалов;
- входные ограничения.
Администратор опознавания может позволять пользователям самостоятельно вводить пароли или использовать сгенерированные пароли. Пароль может подвергаться проверке на очевидность. Для паролей контролируется "время жизни"; выделяются следующие состояния:
- пароль корректен;
- пароль просрочен (пользователь может войти в систему и изменить пароль - если у него есть на это полномочие);
- пароль мертв (пользователь заблокирован; необходима помощь администратора).
Пользователи часто пытаются сопротивляться принудительной периодической смене паролей, немедленно восстанавливая предыдущее значение. Чтобы помешать этому, кроме максимального устанавливается еще и минимальное время жизни паролей.
Терминал - это дверь в систему. терминалы могут быть защищены от попыток вторжения в систему. Можно установить максимальное число неудачных попыток входа в систему. После того, как это число исчерпано, терминал блокируется; разблокировать его может только администратор. Кроме того, можно специфицировать интервал между двумя попытками входа.
С каждым зарегистрированным пользователем можно связать те же ограничения на попытки входа, что и с терминалом.
Если пользователь в течение длительного времени не вводит никаких команд, он, скорее всего, закончил работу и просто забыл выйти из системы. надежная система позволяет специфицировать отрезок времени, по истечении которого бездействующие пользователи принудительно «выводятся» из системы.
Поддерживается возможность генерировать отчеты о различных аспектах функционирования системы: пароли, терминалы, входы.
Импорт файлов и файловых систем, если он осуществляется неаккуратно, может представлять угрозу для системы. Следует контролировать режимы доступа и владельцев импортируемых файлов. Поврежденные файловые системы при монтировании могут привести к разрушению системы перед первым монтированием обязательно должны быть проверены.