Карта сайта Хакер в RSS Энциклопедия Хакера PDA версия сайта Почтовые рассылки Хакера    Хакер в Twitter Хакер в ВКонтакте Приложение Хакер для Facebook Хакер на Formspring.me
Журнал Новости Форум Видео Life Xakep Live (блоги)
Bugtrack Статьи Блог Поиск English
Взлом как образ мысли Взлом как образ мысли
Интервью с человеком, который, как оказалось, является не только талантливым пентестером в одной из крупных ИБ-компании, но и хакером-ветераном, который уверенными шагами вышел на свет и прикоснулся к истории российской хак-сцены....
Полный гид по накрутке онлайн-голосований Полный гид по накрутке онлайн-голосований
Конкурсы с голосованием привлекают большое количество посетителей, а трафик, как известно, — это деньги. Особый интерес вызывают конкурсы, где за победу предлагаются лакомые призы....

Гонка вооружений: сравниваем популярные расширения безопасности для ОС Linux

Bookmark and Share

Unix, родившийся практически вместе с первыми компьютерами, использовал очень простой механизм безопасности (ugo), который гуру семидесятых посчитали более чем достаточным. Но в современной системе, где крутятся десятки демонов и программ, запущенных из-под разных учеток, грамотно разрулить все права старыми инструментами уже не получается. А делать что-то нужно.

Дискреционный и мандатный контроль доступа

Для начала отвлечемся и поразмышляем о том, что есть и зачем нужно еще что-то прикручивать. Одна из задач любой ОС — обеспечить разделение информации, основываясь, в первую очередь, на требованиях конфиденциальности и целостности. Традиционная модель Unix оперирует тремя параметрами — пользователь, группа-пользователь и остальные. Называется она дискреционной (Discretionary Access Control — DAC), то есть добровольной моделью доступа. Пользователь сам определяет права доступа к своим файлам, а выполняющиеся программы имеют те же права, что и запустивший их пользователь. Механизм DAC опирается в своей работе только на тождество пользователя, игнорируя другую информацию, например, о роли пользователя в системе, функции и уровне доверия конкретной программы и необходимости в целостности данных. Каждая учетная запись имеет полную свободу действий в пределах своих полномочий.

Как ты понимаешь, развернуться с DAC особенно негде: все или ничего; винда — и та дает больше возможностей по настройке доступа к объектам. Поэтому сегодня для Linux доступны решения, базирующиеся на совершенно другой модели защиты — MAC (Mandatory Access Control, принудительный контроль доступа). Они позволяют определить политики безопасности над всеми процессами и объектами, решение о доступе принимается на основе большего количества информации об объекте, а не только основываясь на тождестве пользователя. Причем MAC не отменяет, а дополняет DAC, так как сначала проверяются права Unix, и, если они запрещают доступ, то дальнейшая проверка просто не производится. Проверка прав выполняется только в том случае, если стандартные права Unix разрешают доступ к объекту. Любой объект помещается в некую виртуальную песочницу, которая позволяет приложению выполнять только строго регламентированные задачи. Причем при описании доступа к объекту конкретные реализации могут придерживаться разных принципов: очень строгие правила по типу "что не разрешено явно — запрещено" и "минимально необходимые привилегии".

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

В дистрибутивах Linux используются два решения: SELinux в RedHat и клонах, а также AppArmor в Ubuntu. В ядре версии 2.6.30 появился код еще одного проекта — TOMOYO Linux, которому пророчат светлое будущее, но пока по умолчанию он нигде не используется. Давай рассмотрим их особенности, а также плюсы и минусы.

Сверхзащищенный SELinux

Проект SELinux (Security Enhanced Linux, selinuxproject.org) зародился в недрах U.S. NSA (National Security Agency), хмурые неразговорчивые дядьки которого поставили своей целью допилить Linux таким образом, чтобы его можно было спокойно использовать не где-нибудь, а в правительственных системах. Анонсирован общественности в 2000 году, затем разработчики справедливо решили: зачем что-то делать самим, если в интернете есть много желающих? В результате сегодня проект развивается под лицензией GNU GPL и уже включен в состав ядра ветки 2.6.х, также выполнена адаптация для FreeBSD и OpenSolaris.

Реализация MAC требует четкого описания правил, что может привести к образованию большого их количества. Поэтому в SELinux использована концепция роль-основанного контроля доступа Role-Based Access Control (RBAC), в которой определяются роли и доступ пользователей. Механизм защиты в SELinux носит название Type Enforcement (TE) и позволяет закрепить за каждым процессом и файлом, которые необходимо контролировать, некую метку. Если процесс, запущенный от имени администратора, скомпрометирован, то ущерб, который может быть причинен системе, ограничен только тем, к чему он может обращаться, согласуясь с установленными для него правилами (а они описывают поведение очень тонко).

Также в SELinux реализована многоуровневая система обеспечения безопасности (MLS, Multi-Level Security model), но ее задействуют только в особых случаях, например, в правительственных многопользовательских системах, требующих чрезвычайно высокого уровня защиты.

Когда в процессе работы системы субъект пытается оказать некое действие на объект, SELinux принимает решение о допустимости указанного действия, основываясь на контекстах безопасности объекта и субъекта. Субъект — это процессы, выполняемые от имени запустившего их пользователя. Объект — элементы файловой системы (файлы, каталоги, ссылки, сокеты и пр.) или другие процессы, над которыми выполняются действия. И теперь самое важное, что отличает SELinux от других решений, описанных далее — все важные защитные атрибуты сохраняются в контекстах безопасности. Поэтому файловая система должна уметь хранить дополнительные атрибуты, и сами атрибуты нужно как-то задать. Современные ядра все обеспечивают, но при самостоятельной пересборке ядра не забудь активировать параметр "Extended attributes" в выбранной файловой системе.

Атрибуты устанавливаются при инициализации системы. Отсюда делаем вывод, что объект уже должен существовать на момент установки атрибутов. Сам атрибут включает идентификатор владельца, роль и тип объекта. Причем идентификатор SELinux (создается командой semanage), хотя и может совпадать в номере с UID пользователя Linux (uid), но это две разные вещи. Не забываем еще об одном важном отличии — SELinux оперирует ролями, поэтому несколько учетных записей Linux могут иметь одну и ту же учетную запись SELinux. И главное — выполнение команды

Проверить это легко:

$ id –Z
user_u:user_t:unconfined_t

Получаем привилегии суперпользователя и проверяем снова:

$ su
# id –Z
user_u:user_t:unconfined_t

Если зайти сразу под рутом, то роль другая:

# id -Z
root:system_r:unconfined_t:SystemLow-SystemHigh

Изменить роль можно при помощи команды newrole. При использовании SELinux штатные команды выводят и контекст. Чтобы  просмотреть контекст файлов и процессов, набираем:

# ls -l –context /
# ps -ax -Z

Кроме того, контекст можно считать прямо из /proc:

# ps aux | grep syslogd
root 2729 0.0 0.0 5908 624 ? Ss 07:30 0:00 syslogd -m 0
# cat /proc/2729/attr/current
system_u:system_r:syslogd_t:s0

Предусмотрена работа SELinux в трех режимах — disable (отключен), enforcing (политики выполняются, все, что не соответствует — блокируется), permissive (политики анализируются, все нарушения заносятся в журнал "avc: denied", но блокировки не производятся). Узнать текущий режим просто, как, впрочем, и некоторые другие настройки, достаточно прочитать данные из псевдофайловой системы /selinux:

$ cat /selinux/enforce

Если получим 1, значит, SELinux активирован. Чтобы изменить режим работы на лету, просто записываем в этот файл 0 или 1:

# echo 0 > /selinux/enforce

Также можно воспользоваться утилитой "setenforce [ Enforcing | Permissive | 1 | 0 ]".

Собственно настройки производятся в конфигурационных файлах, размещенных в каталоге /etc. В дистрибутивах, базирующихся на RedHat, доступен графический SELinux Administration Tool (system-configselinux, пакет policycoreutils-gui). Так, режим работы устанавливается в файле /etc/sysconfig/selinux (на самом деле это ссылка на /etc/selinux/config). В частности, режим работы определяет параметр SELINUX:

SELINUX=enforcing|permissive|disabled

По умолчанию в большинстве дистрибутивов SELinux защищает не все демоны, а только строго определенные: dhcpd, httpd, named, nscd, ntpd, portmap, snmpd, squid и syslogd. Для остальных политика не определена — unconfined_t. Чтобы защитить всю систему, необходимо изменить значение SELINUXTYPE на strict:

SELINUXTYPE=targeted|strict

В каталоге /etc/selinux/targeted/contexts находим описание контекстов.

Например, для root контекст описывается так:

# cat /etc/selinux/targeted/contexts/users/root
system_r:unconfined_t:s0 system_r:unconfined_t:s0
system_r:initrc_t:s0 system_r:unconfined_t:s0

Чтобы просмотреть все контексты, связанные с httpd, введи такую команду:

# grep -iR httpd /etc/selinux/targeted/contexts

Ты увидишь, что для разных ситуаций контекст будет отличаться. Теперь получим список всех параметров SELinux: "getsebool -a". Для установки используй команду setsebool (с ключом '-P' для сохранения значения после перезагрузки) или графическую утилиту system-configsecuritylevel. Вывод "sestatus -v" покажет все текущие установки. Не забываем и о журналах:

# dmesg | grep -i selinux
SELinux: Initializing.
SELinux: Starting in permissive mode
# grep -iR selinux /var/log/messages

Все вспомогательные утилиты SELinux собраны в нескольких пакетах: setools или policycoreutils, policycoreutils-newrole. Первый, как правило, уже установлен в системе, остальных нет. Например, newrole, дающая возможность пользователю сменить роль, доступна именно в policycoreutils. После установки в системе присутствуют только наборы политик для targened, остальные наборы политик скачиваются в пакетах selinux-policy*. Сорцы политик для их самостоятельной сборки вынесены в selinux-policy-devel.

Разобраться в более чем 200 файлах, имеющих несколько тысяч строк, врукопашную очень трудно. Автоматизировать эту задачу призван питоновый скрипт audit2allow (в policycoreutils), он генерирует новые политики на основе анализа журналов и блокировок SELinux.

Проекты LIDS, GRSecurity и RSBAC

Кроме проектов, описанных в статье, в настоящее время развиваются и другие, позволяющие повысить защиту Linux-систем — LIDS (Linux Intrusion Detection System), GRSecurity и RSBAC (Rule Set Based Access Control). Кратко о них.

Проект LIDS реализует MAC, админ может четко указать разрешения для файлов и каталогов. Помимо этого механизмы TPE (Trusted Path Execution) и TDE (Trusted Domain Enforcement) позволяют убедиться, что программа работает так, как предназначено. Сайт проекта некоторое время был заброшен, хотя инструменты развиваются. Управление производится при помощи утилит и чем-то напоминает настройку правил файера.

# lidsconf -A -o /sbin -j READONLY

GRSecurity — разработка, охватывающая несколько технологий укрепления безопасности — MAC/ACL, улучшенный chroot, рандомизация TCP ISN и PID, ролевая система контроля доступа RBAC, функции аудита, защита адресного пространства и стека PaX (доступен и отдельно). Большинство параметров указывается на этапе сборки ядра, затем при помощи утилиты gradm настраиваются ACL.

Проект RSBAC, реализующий мандатный и ролевой механизмы доступа, уже в 2000 году вовсю использовался в защищенных дистрибутивах. По сути, это среда, позволяющая создать различные модели доступа. Идея основана на публикации Маршала Абрамса и Ла Падула "Обобщенная среда для управления доступом" (GFAC, Generalized Framework for Access Control). Кроме root в ОС появляется учетка администратора безопасности, который и управляет доступом к информации. Реализовано много интересных функций: отключение Linux DAC, сокрытие процессов, JAIL, поддержка PaX, антивирусный интерфейс Dazuko, контроль ресурсов Linux и многое другое. Например, можно организовать доступ к файлу в определенные часы.

AppArmor

Технология Application Armor изначально разработана Immunix Inc. После того, как софтверный гигант Novell приобрел эту компанию, код открыли под лицензией GNU GPL, а затем включили в состав openSUSE. Позднее AppArmor стал доступен и в других дистрибутивах. Но когда команда Immunix покинула Novell, дальнейшее развитие проекта остановилось. И хотя в том же openSUSE поддержка AppArmor была сохранена, в дистрибутив интегрировали SELinux. В итоге начали разноситься слухи а-ля "AppArmor is dead", что у одних вызвало радость, так как теперь все усилия можно бросить на развитие одной системы защиты, у других критику — отсутствие конкуренции еще ни к чему хорошему не приводило. Сегодня апологетом этой технологии является Canonical, разработчики которого не смотря ни на что продолжают развитие AppArmor. Так, в последних версиях добавлен механизм кэширования правил, что позволило ускорить их загрузку. Для этих же целей, и чтобы защитить сетевые сервисы на раннем этапе загрузки, часть профилей вынесли в initramfs. И главное — в Ubuntu AppArmor прикрутили к LSM (Linux Security Modules), задействовав security_path вместо vfs.

Основная идея AppArmor состоит в том, что система защиты не должна быть сложной и не должна мешать. В отличие от SELinux, AppArmor не использует расширенные атрибуты и не зависит от файловой системы. Доступ к ресурсам определяется на основе профилей (profiles), которые привязаны к пути файла или каталога, причем самого файла может и не быть на момент активации профиля. Профиль разрабатывается индивидуально под каждое приложение. Хотя в этом есть и недостаток: при переносе файла в SELinux за ним полностью сохраняется контекст безопасности, в AppArmor — нет, но этого от него и не требовали. Хотя, если файл имеет два имени, и профиль блокирует доступ к одному из них, есть возможность работать с другим. Это следует учитывать. Также, если средствами SELinux можно предусмотреть несколько уровней доступа к объекту для разных субъектов, то AppArmor этого не умеет. В настоящее время созданы профили для большинства популярных серверов и приложений, поэтому наличие активного AppArmor обычно незаметно, он не создает проблем. Кроме того, в комплекте поставки идут два скрипта aa-genprof и aa-logprof, которые помогут быстро создать профиль для новой программы. Управление AppArmor производится при помощи init-скрипта, который запускает модуль ядра, инициализирует профили и монтирует псевдофайловую систему securityfs.

$ sudo /etc/init.d/apparmor start

Чтобы просмотреть список загруженных профилей, достаточно считать файл /sys/kernel/security/apparmor/profiles (или запустить /etc/init.d/apparmor status); в зависимости от варианта дистрибутива Server/Desktop количество активных профилей будет различно. Сами профили хранятся в файлах (отдельно для каждого приложения) в каталоге /etc/apparmor.d и внутри содержат описание каталогов и отдельных файлов, с указанием прав доступа. Также указывается работа в сети и совместимость с другими профилями. Для упрощения задачи используются регулярные выражения. По умолчанию профили AppArmor работают в принудительном enforce-режиме. Когда сервис не может выйти за рамки установок, все попытки блокируются и фиксируются в журнале. При необходимости его можно перевести в щадящий режим complain, когда нарушения лишь фиксируются. Причем, в отличие от SELinux, где режим обучения активируется глобально, в AppArmor его можно включить для отдельного профиля. Перевести профиль в щадящий режим можно тремя способами:

  • указать в файле профиля flags=(complain);
  • использовать команду complain название_программы (вернуть командой enforce);
  • или глобально командой "echo 1 > /sys/kernel/security/apparmor/control/complain".

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

Дополнительные профили можно найти в репозитории дистрибутива (apt-cache search apparmor), кроме того, есть онлайн-банк профилей — apparmor.opensuse.org.

К слову, для ядер 2.4/2.6 существовала разработка Trustees, реализующая ACL a-ля Novell Netware, которая в удобной форме расписывала доступ к каталогам вплоть до указания отдельных групп и пользователей и не зависела от файловой системы. К сожалению, проект заглох, а это была бы золотая середина между SELinux и AppArmor.

Сбиваем спесь со Skype

Наверное, больше всего претензий с точки зрения безопасности у пользователя вызывает Skype. Куда только не лезет эта прога (см. статью Криса "Skype: скрытая угроза"). Описываемые технологии как раз и позволяют обезопасить себя. Забегая вперед, скажу, что пользователи уже давно нагенерировали профили для большинства популярных прог, и скайп здесь не исключение. Смотри, например, здесь: www.cynapses.org/tmp/apparmor/usr.bin.skype. Некоторые профили собраны в отдельном пакете — apparmor-profiles. Но профиль легко создать и самому. Для этого в комплекте идет утилита aa-genprof (или просто genprof). Запускаем ее с указанием исполняемого файла в качестве параметра:

$ sudo aa-genprof /usr/bin/skype

Далее работаем как обычно: звоним, отсылаем сообщения, принимаем файлы, добавляем и удаляем учетки. По окончании прерываем работу в каталоге /etc/apparmor.d/usr.bin.skype. Затем перезапускаем AppArmor или просто активируем профиль в enforce-режиме:

$ sudo aa-enforce skype

Все проблемы и замечания по работе профилей AppArmor ищи в логах.

TOMOYO Linux

Проект TOMOYO Linux начат в 2003 году японской компанией NTT DATA CORPORATION как легкая реализация MAC для Linuх-ядра. Через два года лицензию изменили на GNU GPL и выложили код на SF.net. Некоторое время проект предоставлял патчи и готовые сборки ядер для разных дистрибутивов. Но начиная с версии ядра 2.6.30, код TOMOYO Linux включен в основную ветку разработки, что уже само по себе — Событие для любого подобного проекта.

В настоящее время существует две версии TOMOYO Linux. Первая версия использует оригинальные хуки, она доступна только в виде патчей и может использоваться в ядрах 2.4 и 2.6. Вторая (которая уже в ядре) адаптирована под LSM, но по функциональным возможностям уступает версии 1.х: нет поддержки сетевых функций, обработки атрибутов, POSIX-возможностей (на сайте представлена сравнительная таблица). В настоящее время соответствующие пакеты имеются в репозиториях многих дистрибутивов, но фактически поддержка заявлена пока только в Mandriva. К слову, в этом дистрибутиве предлагается и графический интерфейс Tomoyo GUI, позволяющий запустить и настроить политики приложений. Доступность в репозиториях пакетов для большинства дистрибутивов позволяет буквально в считанные минуты перевести ОС на новую систему безопасности. Например, Ubuntu 10.04:

$ sudo echo 'deb http://osdn.dl.sourceforge.jp/tomoyo/47128/ ./' >> /etc/apt/sources.list
$ sudo apt-get update
$ sudo apt-get install linux-ccs ccs-tools

Если ядро собирается самостоятельно, активируй параметр "Enable different security models" и "TOMOYO Linux Support" в секции Security options.

При беглом взгляде TOMOYO очень похож на AppArmor. Обе системы контролируют путь (pathname based), а правила имеют сходный синтаксис. Но есть и отличия. Так, в TOMOYO можно указать поведение программы в зависимости от того, как она запущена. Например, оболочка, запущенная через SSH, может иметь больше ограничений, чем запущенная с локальной системы. Предусмотрена проверка дополнительных параметров, с которыми включена программа, а также привилегий (UID/GUD). Приложения в терминологии TOMOYO называются доменами (domains). Конфигурационные файлы TOMOYO находятся в каталоге /etc/tomoyo, после запуска системы настройки имеют свое отражение в /proc/tomoyo, где их можно редактировать на лету. Параметры работы TOMOYO хранятся в /etc/tomoyo/profile.conf и доступны в /proc/tomoyo/profile. Именно здесь определяются режимы работы TOMOYO — disable, permissive, enforsing и learning (обучаясь, система сама строит правила). Есть и другие файлы:

  • manager.conf (/proc/tomoyo/manager) — программы, которые могут изменить политику в /proc/tomoyo;
  • exception_policy.conf (/proc/tomoyo/exception_policy) — исключения для политик домена;
  • domain_policy.conf (/proc/tomoyo/domain_policy) — политики домена;
  • meminfo.conf (/proc/tomoyo/meminfo) — настройка использования памяти и квот.

После установки пакета ccs-tools необходимо провести инициализацию TOMOYO, выполнив скрипт /usr/lib/ccs/tomoyo_init_police.sh, который и создаст нужные конфиги. Далее потребуется перезагрузка системы. Затем можно запускать редактор политик:

# /usr/lib/ccs/editpolicy /etc/tomoyo/

Еще одна немаловажная черта — TOMOYO может работать параллельно с SELinux и AppArmor.



Теги: AppArmor , Linux , SELinux , TOMOYO Linux , администрирование , безопасность





СВЯЗАННЫЕ СТАТЬИ
Гонка вооружений: сравниваем популярные расширения безопасности для ОС Linux
ОБСУЖДЕНИЕ СТАТЬИ
Логин:
Пароль:
Если у вас есть форумный логин - вы можете использовать его, иначе анонимный гостевой доступ.

Для оставления комментария вы можете зарегистрироваться по упрощенной процедуре.

Обсуждение этой статьи на forum.xakep.ru
Для отправки сообщения введите код, указанный на картинке
Сообщение

UserГость
05.10.2010 11:28:55
Ответить Ссылка
херня какая-то для гиков. че-то надо прикручивать, настраивать... перед этим 2 книжки прочитать надо толстенных чтобы понимать о чем речь идет.
UserГость
05.10.2010 13:20:41
Ответить Ссылка
ну и не суйся в линух сиди за виндавозом и не пизди
UserГость
05.10.2010 20:14:09
Ответить Ссылка
Отличная статья! Побольше бы таких.
UserГость
06.10.2010 7:19:44
Ответить Ссылка
Афтар пешы исчё!
UserГость
11.09.2011 3:56:07
Ответить Ссылка
На странице XSS'ка




Keywords: zPOSTz zHOMEz, zOSz, zADMINz, zINFOz, zYANDEXz, zFILEz z53424z
Для Авторов: edit Lock delete Lock



    Rambler's Top100