Настройка безопасности SELinux

Автор работы: Пользователь скрыл имя, 20 Марта 2015 в 05:22, курсовая работа

Описание работы

Мир операционных систем предоставляет пользователям достаточно большое их количество. ОС выступает в качестве программы, которая управляет ресурсами вычислительной системы и процессами, использующих эти ресурсы при вычислениях. Условно ОС можно разделить на серверные и пользовательские, обслуживаемые и нет, встраиваемые (Embedded) и загружаемые, ОС реального времени с гарантированным временем отклика на события и нет.

Файлы: 1 файл

Курсовая работа.docx

— 1.45 Мб (Скачать файл)

Оглавление

 

 

 

Введение

 

Мир операционных систем предоставляет пользователям достаточно большое их количество. ОС выступает в качестве программы, которая управляет ресурсами вычислительной системы и процессами, использующих эти ресурсы при вычислениях. Условно ОС можно разделить на серверные и пользовательские, обслуживаемые и нет, встраиваемые (Embedded) и загружаемые, ОС реального времени с гарантированным временем отклика на события и нет.

Данная работа посвящена настройке безопасности в ОС Linux. Linux - это POSIX-совместимая (благодаря этому стандарту любое приложение можно перенести из одного представителя семейства UNIX в другой) UNIX-подобная система. На сегодняшний день это самая распространенная бесплатная ОС с открытым исходным кодом. При ее разработке из мира семейства UNIX старались взять все лучшее. Благодаря участию десятков тысяч разработчиков программного обеспечения и координации их действий через Интернет Linux и ПО для нее развивается очень динамично, ошибки и различные проблемы в ПО, как правило, исправляются в считанные часы после их обнаружения. Все, что справедливо для семейства UNIX, справедливо и для Linux.

Поскольку в данной работе нас интересует Linux, а ОС Windows 9x или Windows NT/2000/XP установлены приблизительно на 90% PC-совместимых персональных компьютеров, то все сравнения в дальнейшем будем производить относительно этих трех ОС.

В идеале ОС должна удовлетворять, по меньшей мере, семи достаточно противоречивым требованиям:

  • быть легкой в освоении и дружественной к пользователю (User Friendly);
  • быть мощной и универсальной (способной работать на любом оборудовании);
  • в ней все должно настраиваться и довольно просто;
  • она должна быть очень надежна (в идеале – сверхнадежна);
  • занимать как можно меньше места;
  • разработчики моментально должны реагировать на проблемы, обнаруженные в процессе эксплуатации;
  • под нее должен быть широкий выбор ПО.

Linux по всем параметрам, на порядок превосходит Windows. Единственное, в чем Windows пока впереди – это в количестве и разнообразии прикладного ПО.

Разработчики ОС Linux, не придавали особого внимания, вопросам защиты, и по этой причине ни одну из UNIX-систем нельзя сделать по-настоящему безопасной.

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

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

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

Раньше считалось, что по мере выявления и устранения брешей безопасность операционной системы UNIX будет непрерывно повышаться. Суровая реальность оказалась иной. Сложность системного программного обеспечения стремительно растет, хакерская деятельность все больше приобретает черты организованной преступности, компьютеры оказываются все более тесно связанными посредством сети Internet. Война переходит в новые измерения, и, похоже, победителей не будет.

Существует формула:

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

 

 

1. Постановка задачи

 

Linux традиционно считается  хорошо продуманной с точки  зрения безопасности операционной  системой, и попытки поставить  под сомнение этот тезис обычно  вызывает недоумение. Однако, следует помнить, что Linux унаследовала систему безопасности Unix, реализованную еще в 70-х годах и не во всем соответствующую требованиям сегодняшнего дня.

Чтобы сделать систему безопаснее специалисты выявили ряд аспектов, которые нужно учитывать при настройке и администрировании ОС Linux.

Существуют основные источники неприятностей:

Человеческий фактор. Пользователи (и администраторы) системы являются ее слабейшим звеном.

Ошибки в программах. За много лет в ПО UNIX было выявлено несметное число ошибок, связанных с безопасностью. Используя незаметные программистские прочеты или архитектурные зависимости, хакерам удавалось манипулировать системой по своему усмотрению.

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

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

В данной работе рассматривается одно из возможных решений проблемы безопасности Linux. Остановимся на использовании SELinux - набора технологий расширения системы безопасности Linux.

В данной работе будет продемонстрировано, как с помощью технологии SELinux построить защищенную систему.

 

2. Теоретическая часть

 

2.1 Обзор и характеристика SELinux

 

Введение в SELinux.

SELinux (Security-Enhanced Linux) - набор технологий расширения системы безопасности Linux. Сегодня основу набора составляют три технологии: мандатный контроль доступа, ролевой доступ RBAC и система типов (доменов).

SELinux включает модули ядра, разделяемые библиотеки для создания приложений, использующих особенности SELinux, утилиты и другие файлы. SELinux можно установить с любым дистрибутивом Linux, начиная с ядра версии 2.2.x.

Система SELinux (Security-Enhanced Linux - Linux с улучшенной безопасностью) была разработана министерством обороны США и всего за несколько лет стала стандартом в области систем контроля прав доступа. Она была включена в ядро Linux версии 2.6.0 и впервые появилась как полностью работающая из коробки система в дистрибутиве Red Hat Enterprise Linux 4. Впоследствии поддержка SELinux была интегрирована в такие дистрибутивы как Debian, OpenSUSE и Ubuntu, а дополнительные пакеты, активирующие систему, были добавлены во многие другие более или менее популярные дистрибутивы. Именно благодаря SELinux дистрибутиву RHEL5, работающему на серверах IBM, удалось получить сертификат безопасности EAL4 Augmented with ALC_FLR.3, который в то время имела лишь одна операционная система - Trusted Solaris.

SELinux существенно расширяет  ядро Linux, делая операционные системы, построенные на его основе, пригодными  к использования в сферах, где  доступ к информации должен  быть строго разграничен, а приложения, запускаемые пользователями, иметь  определенный набор прав, который  не выходит за рамки минимально необходимого. Это делает систему привлекательной для госучреждений и военных, однако кажется не совсем понятным зачем она нужна администраторам рядовых серверов, а уж тем более обычным пользователям (в Fedora SELinux по умолчанию включен). Сейчас я попытаюсь объяснить этот момент.

Архитектурно SELinux подчиняется трем принципам, способствующим максимально безболезненной интеграции SELinux в Linux-системы:

  • параллельное сосуществование с классической системой безопасности Linux;
  • независимость от классической системы безопасности Linux;
  • приоритет запретов классической системы безопасности Linux над SELinux (то, что запрещено классической системой безопасности, не может быть разрешено SELinux).

SE Linux обеспечивает большую  безопасность вашей системы. Пользователям  могут быть назначены предопределённые  роли таким образом, что они  не смогут получить доступ  к файлам и процессам, которыми  они не владеют. При этом не  существует эквивалента операции "chmod 777". Это отличается от  обычной системы Unix-привилегий в  том, что определённые пользователем  роли, или контексты безопасности  в которых они находятся, имеют  ограниченный, но более управляемый  доступ к файлам и другим  ресурсам. Рассмотрим пользовательский  файл .rhosts на обычной Unix системе. Если всем дать доступ на запись в этот файл, тогда кто угодно сможет зайти в систему и причинить массу неприятностей. Используя SE Linux, вы можете контролировать возможность пользователя изменять права доступа к своему файлу .rhosts, а кроме того запретить другим людям писать в этот файл даже после того, как владелец это разрешил.

Частый вопрос, это как связаны права доступа SE Linux и стандартные права Unix. Когда вы выполняете какую-либо операцию, в первую очередь проверяются права доступа Unix. Если они разрешают выполнить операцию, тогда проверяются права SE Linux. Только тогда операция будет разрешена или запрещена. Но если права доступа Unix запрещают операцию, то проверка прав SE Linux не производится, а операция запрещается.

Рассмотрим другой пример. Допустим, есть ошибка в программе /usr/bin/passwd, которая позволяет выполнить команду chmod 666 /etc/shadow. В этом случае вступают в действия права SE Linux, которые предотвратят неавторизированный доступ к файлу.

Используемая терминология.

Cущность (identity). Сущность в SE Linux это не то же, что и традиционный идентификатор пользователя (Unix uid, user id). Они могут сосуществовать в одной системе, но их смысл совершенно разный. Сущность в SE Linux формирует часть контекста безопасности, который задает домены, в которые можно войти. Т.е. что собственно можно сделать. Сущность SE Linux может иметь одинаковое с именем пользователя символьное представление (чаще всего так и есть), но важно понимать, что это две разные вещи. Выполнение команды su не меняет сущности пользователя в SE Linux.

Пример:

Непривилегированный пользователь test выполняет команду id (в SE Linux) и видит свой контекст безопасности:

context=test:user_r:user_t

Часть контекста "test" представляет сущность. Теперь, пользователь test выполняет su, чтобы получить привилегии пользователя root, и вызывает id, и видит, что контекст всё ещё:

context=test:user_r:user_t

то есть, контекст остался прежним и не изменился на контекст пользователя root. Однако, если сущность test разрешает доступ к роли sysadm_r, и пользователь это сделает (введя команду newrole -r, детальнее команда рассматривается ниже), и снова выполнит id, то увидит уже:

context=test:sysadm_r:sysadm_t

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

 

Субъекты, объекты и политики. Тремя важнейшими концепциями структуры безопасности SELinux являются субъекты (subject), объекты (object) и действия (action). С точки зрения SELinux всю работу системы можно описать как выполнение субъектами действий над объектами. Субъектами считаются процессы, действующие как от имени определенных пользователей, так и самостоятельно (серверные процессы). Объектами являются, прежде всего, объекты файловой системы (файлы, каталоги, ссылки), процессы (когда один процесс-субъект выполняет операции с другим процессом, второй процесс выступает в роли объекта), а также дескрипторы файлов (в том числе сокеты, что повышает безопасность работы с сетью) и объекты межпроцессного взаимодействия, не связанные с дескрипторами файлов. Действия в SELinux — это любые операции, которые субъект может выполнить над объектом. Собственно говоря, основная часть работы системы безопасности как раз и заключается в принятии решения о том, имеет ли право данный субъект выполнить данное действие над данным объектом.

Решение о допустимости или не допустимости действия принимается системой на основе политик, представляющих собой способ описания поведения системы безопасности, абстрагирующийся от таких низкоуровневых понятий как векторы доступа (аналоги масок доступа в обычной Linux-системе). Формирование политик безопасности в SELinux напоминает программирование: политика описывается на специальном языке, затем файл политики компилируется в двоичный модуль (обычно при этом используется хорошо знакомая программистам утилита make), а скомпилированный файл динамически загружается в ядро операционной системы.

 

Политики SELinux позволяют определить, какое решение следует принять для отдельных операций и классов операций: allow (разрешить операцию); auditallow (занести операцию в журнал, независимо от того, разрешена она или нет); dontaudit (запретить операцию, но не вносить данные о попытке выполнить операцию в журнал). Описать логику совместной работы подобных установок можно так: если операция разрешена, она заносится в журнал только в том случае, если принято решение auditallow. Если операция не разрешена, она не заносится в журнал только в том случае, если принято решение dontaudit. Таким образом, в SELinux политика разрешения операций тесно связана с их журналированием.

 

Домен (domain). Каждый процесс выполняется в домене. Домен однозначно определяет привилегии процесса. По существу домен это список того, что может делать процесс, или какие действия процесс может выполнять над различными типами. Представляйте себе домен, как стандартный Unix uid. Пускай у пользователя root есть какая-то программа, для которой он выполнил команду chmod 4777 (установил атрибут setuid). Кто угодно в системе, даже пользователь nobody, может выполнить эту программу с полномочиями пользователя root, тем самым, нарушая безопасность системы. При использовании SE Linux, процесс, инициирующий переход в привилегированный домен, должен иметь роль, которой разрешено использовать этот домен, иначе процесс работать не сможет.

В качестве примеров доменов можно привести sysadm_t, домен системной администрации, и user_t, который является общим доменом для непривилегированных пользователей. Процесс init выполняется в домене init_t, а named -- в домене named_t.

Тип (type). Тип задаётся для объекта и определяет доступ к этому объекту. Т.е. это приблизительно то же самое, что и домен, но домен относится к процессам, а тип к таким объектам, как каталоги, файлы, сокеты и т.п.

Типы объединяют группы субъектов и объектов, предоставляя им определенные права. Важной функцией типов является ограничение возможных действий субъекта над объектом. По этой причине типы иногда называют «песочницами SELinux» (SELinux sandbox).

В классических работах по безопасности систем (в частности, в модели Flask) понятия «тип» и «домен» имеют разные значения, однако в SELinux эти понятия почти синонимы. Мы говорим о типах, когда речь идет об объектах и о доменах, когда речь идет о субъектах. Домены можно описать как множества процессов (субъектов), обладающих одинаковыми правами. Например, Web-сервер Apache принадлежит домену (типу) httpd_t и обладает всеми правами, связанными с этим доменом. К этому же типу относятся файлы, к которым демон httpd должен иметь полный доступ. В SELinux действует механизм принудительного присвоения типов (type enforcement). В соответствии с этим механизмом каждый процесс оказывается принадлежащим к определенному типу (домену), определяющему права этого процесса. Очевидно, что без принудительного присвоения типов система обязательного контроля доступа не могла бы работать.

Информация о работе Настройка безопасности SELinux