Журнал LinuxFormat - перейти на главную

LXF83:AppArmor

Материал из Linuxformat
(Различия между версиями)
Перейти к: навигация, поиск
Строка 46: Строка 46:
 
  }
 
  }
 
Сейчас ntpd запускается от имени root, то есть имеет доступ ко всем функциям POSIX.1e. Но этот профиль ограничивает доступ ntpd семью функциями, описанными в коде. Будучи root-процессом, ntpd мог бы читать, записывать и запускать любой файл в файловой системе, но теперь ему доступны только файлы, описанные в профиле.
 
Сейчас ntpd запускается от имени root, то есть имеет доступ ко всем функциям POSIX.1e. Но этот профиль ограничивает доступ ntpd семью функциями, описанными в коде. Будучи root-процессом, ntpd мог бы читать, записывать и запускать любой файл в файловой системе, но теперь ему доступны только файлы, описанные в профиле.
{{Врезка
 
| Выравнивание    = right
 
| Ширина          = 200px
 
| Заголовок      = Википедия
 
| Заголовок снизу = 1
 
| Содержание      = '''Википе́дия''' — свободная энциклопедия.
 
}}
 
  
 
Что же произойдёт, при наличии данного профиля, если злоумышленник припас программу-эксплойт, направленную против ntdp? Будьте спокойны: ничего. У него нет прав на выполнение, а значит, простой shell-код [«полезная нагрузка» эксплойта, выполняющая задуманные злоумышленником действия, – прим. ред.] вида exec(sh) не пройдет. Если ntpd зачем-либо потребуется командная оболочка (shell), злоумышленник сможет запустить ее, но только из-под профиля, и сможет читать и записывать лишь файлы, принадлежащие ntpd на основании профиля. Короче говоря, злоумышленник сможет разве что изменить ваше системное время. AppArmor разрешил ntpd выполнять только конкретные операции – в литературе по безопасности это называется запуском приложения с наименьшими привилегиями.
 
Что же произойдёт, при наличии данного профиля, если злоумышленник припас программу-эксплойт, направленную против ntdp? Будьте спокойны: ничего. У него нет прав на выполнение, а значит, простой shell-код [«полезная нагрузка» эксплойта, выполняющая задуманные злоумышленником действия, – прим. ред.] вида exec(sh) не пройдет. Если ntpd зачем-либо потребуется командная оболочка (shell), злоумышленник сможет запустить ее, но только из-под профиля, и сможет читать и записывать лишь файлы, принадлежащие ntpd на основании профиля. Короче говоря, злоумышленник сможет разве что изменить ваше системное время. AppArmor разрешил ntpd выполнять только конкретные операции – в литературе по безопасности это называется запуском приложения с наименьшими привилегиями.
 +
 +
== Как устроен AppArmor ==
 +
*Ядро Linux 2.6 Имеет новый интерфейс
 +
модулей безопасности Linux (Linux Security
 +
Modules), допускающий подключаемые
 +
модули безопасности. Процессы пользова-
 +
теля обращаются к ядру, которое при помо-
 +
щи всех загруженных LSM-модулей прове-
 +
ряет корректность доступа.
 +
 +
*Модуль ядра AppArmor Обеспечивает
 +
реальную политику безопасности, сверяя
 +
обращение программы с профилем и
 +
запрещая либо разрешая действие.
 +
 +
*Профили приложений Содержат вашу
 +
политику безопасности и описывают, что
 +
позволено делать каждому приложению.
 +
 +
*AppArmor Набор программ уровня поль-
 +
зователя для отображения и управления
 +
профилями AppArmor. Наиболее важным из
 +
них является синтаксический анализатор
 +
(parser), который читает профили, преобра-
 +
зует их в структуры данных, понятные ядру,
 +
и переправляет их модулю AppArmor.
 +
 +
*Отчеты и предупреждения Предоставляет
 +
отчеты о конфигурации AppArmor и предуп-
 +
реждает о попытках вторжения.
 +
 +
*Yast-интерфейс В системах без Yast,
 +
AppArmor может управляться посредс-
 +
твом его родного интерфейса командной
 +
строки.

Версия 07:15, 10 марта 2008

Армированный Linux

AppArmor – отличный, гибкий инструмент безопасности для Linux. Его создатель, Криспин Коуэн, поведает вам о нем.


Основная беда безопасности приложений – невозможно сказать, как поведет себя ваше приложение в нестандартных условиях: число состояний и вариантов ввода слишком велико, чтобы исчерпывающе протестировать даже небольшую программу. Когда это выливается в проблему? Когда некто обнаруживает, что определённый набор входных данных приводит к некорректному поведению программы, и разрабатывает приложение, эксплуатирующее найденную уязвимость (подобные приложения так и называют – эксплойты, exploits).

Для решения проблемы эксплойтов и разработан AppArmor. AppArmor обеспечивает безопасность приложений, заставляя их делать только то, что они обязаны делать и не более того. Конкретно, AppArmor контролирует файлы и функции POSIX.1e (см. man 7 capabilities), к которым приложение имеет доступ, поскольку контроль над этими ресурсами и привилегиями на вашей машине и есть мечта злоумышленника. В данной статье мы разъясним, как настроить и использовать AppArmor для защиты ваших программ и системы от атак.

AppArmor полностью интегрирован в SUSE Linux 10.1, SLES 9 SP3 и SUSE Linux Enterprise 10. Он устанавливается и работает по умолчанию, но использует скромный набор профилей (об этом позже). Намного больший набор профилей можно найти в /etc/apparmor/profiles/extras/; вы можете скопировать их в /etc/apparmor.d, где хранятся активные профили. В SUSE, интерфейс пользователя Yast содержит кнопку AppArmor, которая выводит графический эквивалент описываемых здесь инструментов genprof и logprof.

AppArmor вступил в жизнь как проприетарная система, но после приобретения Immunix Inc в 2005 году фирмой Novell приложение выпускается по лицензии GPL. С тех пор AppArmor был портирован на Slackware, Ubuntu и Pardus Linux, турецкий дистрибутив.

Для установки AppArmor в Ubuntu, выполните

sudo dpkg -i apparmor-* libapparmor1_2.0-0ubuntu2_i386.deb linux-image-2.6.15-21-386_2.6.15-21.32mr1_i386.deb

Заметьте, что эти пакеты включают новое ядро, поскольку для поддержки AppArmor необходима небольшая заплатка для ядра. Ubuntu основан на Debian, так что пакеты прекрасно подойдут для Debian, MEPIS и прочих систем на базе Debian. Если вы хотите использовать AppArmor в другой системе Linux, потребуется его портировать – см. врезку «Двигаемся дальше» на странице 47.

Обезопасим NTPD

Теории достаточно; обратимся к примеру. Рассмотрим NTPD, Network Time Protocol Daemon. Он обеспечивает синхронизацию вашей системы с главным сервером вашей локальной сети или с интернетом – важная задача! Однако для изменения вашего системного времени NTPD потребуются привилегии суперпользователя (root), а также открытый сетевой порт, чтобы узнавать время на главном сервере. В итоге получается убойная комбинация: открытый сетевой порт и доступ к процессам с правами суперпользователя – классический пример из руководства по безопасности. Злодей, нашедший уязвимость в коде NTPD, сможет атаковать демона NTP и получить права суперпользователя на вашем компьютере.

Права суперпользователя отнять нельзя – ведь тогда NTPD не сможет менять время; открытый сетевой порт удалить тоже нельзя – тогда NTPD не сможет узнавать время. Тут-то и поможет AppArmor, ограничив привилегии NTPD посредством профиля безопасности. Вот AppArmor-профиль для программы ntpd:

/usr/sbin/ntpd {
#include <abstractions/base>
#include <abstractions/nameservice>
capability ipc_lock,
capability net_bind_service,
capability setgid,
capability setuid,
capability sys_chroot,
capability sys_resource,
capability sys_time,
/drift/ntp.drift rwl,
/drift/ntp.drift.TEMP rwl,
/etc/ntp.conf r,
/etc/ntp/drift* rwl,
/etc/ntp/keys r,
/etc/ntp/step-tickers r,
/tmp/ntp* rwl,
/usr/sbin/ntpd rix,
/var/lib/ntp/drift rwl,
/var/lib/ntp/drift.TEMP rwl,
/var/lib/ntp/drift/ntp.drift r,
/var/lib/ntp/var/run/ntp/ntpd.pid w,
/var/log/ntp w,
/var/log/ntp.log w,
/var/run/ntpd.pid w,
}

Сейчас ntpd запускается от имени root, то есть имеет доступ ко всем функциям POSIX.1e. Но этот профиль ограничивает доступ ntpd семью функциями, описанными в коде. Будучи root-процессом, ntpd мог бы читать, записывать и запускать любой файл в файловой системе, но теперь ему доступны только файлы, описанные в профиле.

Что же произойдёт, при наличии данного профиля, если злоумышленник припас программу-эксплойт, направленную против ntdp? Будьте спокойны: ничего. У него нет прав на выполнение, а значит, простой shell-код [«полезная нагрузка» эксплойта, выполняющая задуманные злоумышленником действия, – прим. ред.] вида exec(sh) не пройдет. Если ntpd зачем-либо потребуется командная оболочка (shell), злоумышленник сможет запустить ее, но только из-под профиля, и сможет читать и записывать лишь файлы, принадлежащие ntpd на основании профиля. Короче говоря, злоумышленник сможет разве что изменить ваше системное время. AppArmor разрешил ntpd выполнять только конкретные операции – в литературе по безопасности это называется запуском приложения с наименьшими привилегиями.

Как устроен AppArmor

  • Ядро Linux 2.6 Имеет новый интерфейс

модулей безопасности Linux (Linux Security Modules), допускающий подключаемые модули безопасности. Процессы пользова- теля обращаются к ядру, которое при помо- щи всех загруженных LSM-модулей прове- ряет корректность доступа.

  • Модуль ядра AppArmor Обеспечивает

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

  • Профили приложений Содержат вашу

политику безопасности и описывают, что позволено делать каждому приложению.

  • AppArmor Набор программ уровня поль-

зователя для отображения и управления профилями AppArmor. Наиболее важным из них является синтаксический анализатор (parser), который читает профили, преобра- зует их в структуры данных, понятные ядру, и переправляет их модулю AppArmor.

  • Отчеты и предупреждения Предоставляет

отчеты о конфигурации AppArmor и предуп- реждает о попытках вторжения.

  • Yast-интерфейс В системах без Yast,

AppArmor может управляться посредс- твом его родного интерфейса командной строки.

Персональные инструменты
купить
подписаться
Яндекс.Метрика