Открыть сервис

AppArmor

AppArmor (Application Armor) — это модуль безопасности для ядра операционной системы Linux, реализующий механизм принудительного контроля доступа (Mandatory Access Control, MAC). Он позволяет ограничивать возможности программ (процессов) на основе заранее заданных профилей, определяющих, к каким файлам, сетевым ресурсам, возможностям ядра и другим объектам системы данная программа может иметь доступ.

AppArmor является альтернативой другой системе MAC — SELinux (Security-Enhanced Linux). Основное отличие AppArmor заключается в том, что он использует привязку профилей к путям исполняемых файлов, а не к метаданным (контекстам безопасности), как SELinux. Это делает его более простым в настройке и понимании для администраторов, не знакомых с тонкостями мандатного управления доступом.

История

Разработка AppArmor началась в 1998 году в компании Immunix, специализировавшейся на создании защищённых решений для Linux. Изначально проект назывался SubDomain и был частью операционной системы Immunix Linux. В 2005 году компания Immunix была приобретена корпорацией Novell, после чего SubDomain был переименован в AppArmor и интегрирован в дистрибутив SUSE Linux Enterprise Server (SLES) и openSUSE.

В 2007 году компания Novell передала исходный код AppArmor в состав основной ветки ядра Linux (mainline), и начиная с версии 2.6.36 (2010 год) модуль стал частью официального ядра. В 2009 году, после приобретения Novell компанией Attachmate, а затем Micro Focus, развитие AppArmor продолжилось силами сообщества и компании Canonical, которая сделала AppArmor основным модулем безопасности в своём дистрибутиве Ubuntu, начиная с версии 10.10 (2010 год). На сегодняшний день AppArmor поддерживается и развивается в рамках проекта Linux Security Modules (LSM) и поставляется по умолчанию в Ubuntu, Debian, openSUSE и SUSE Linux Enterprise Server.

Архитектура и принцип работы

AppArmor работает как модуль безопасности ядра, встраиваясь в подсистему LSM. Его работа основана на трёх ключевых компонентах:

  1. Ядро (модуль безопасности): Встроенный в ядро модуль перехватывает системные вызовы (например, open, read, write, execve, bind, connect) и проверяет их соответствие правилам, заданным в профиле для текущего процесса.
  2. Профили (политики): Текстовые файлы, определяющие разрешённые действия для конкретного исполняемого файла. Профили хранятся в каталоге /etc/apparmor.d/.
  3. Пользовательские утилиты: Набор инструментов для управления профилями, их загрузки, выгрузки, переключения режимов и создания новых профилей. Ключевые утилиты:
  • aa-status — отображение статуса загруженных профилей.
  • aa-enforce / aa-complain — переключение профиля в режим принуждения (enforce) или жалобы (complain).
  • aa-genprof — интерактивная утилита для создания нового профиля.
  • aa-logprof — утилита для анализа логов и обновления профилей на основе наблюдаемой активности.

Режимы работы

Каждый профиль AppArmor может находиться в одном из двух режимов:

  • Режим принуждения (Enforce): Нарушения политики блокируются, а соответствующее событие записывается в системный журнал (обычно syslog или auditd). Это рабочий, защитный режим.
  • Режим жалобы (Complain): Нарушения политики не блокируются, но все попытки несанкционированного доступа регистрируются в журнале. Этот режим используется для отладки, тестирования и создания новых профилей.

Синтаксис профилей

Профиль AppArmor — это текстовый файл, имя которого обычно соответствует пути к исполняемому файлу (например, /etc/apparmor.d/usr.bin.firefox). Пример простого профиля для программы /usr/bin/myapp:

```

include <tunables/global>

/usr/bin/myapp {

include <abstractions/base>

/etc/myapp/config r, /var/log/myapp.log w, /tmp/myapp_* rw, /usr/bin/myapp ix, network inet tcp, capability setuid, } ```

Объяснение правил:

  • /etc/myapp/config r, — разрешено чтение (r) файла конфигурации.
  • /var/log/myapp.log w, — разрешена запись (w) в лог-файл.
  • /tmp/myapp_* rw, — разрешено чтение и запись (rw) в любые файлы, начинающиеся с myapp_ в каталоге /tmp.
  • /usr/bin/myapp ix, — разрешено выполнение (ix) самого себя (для запуска дочерних процессов).
  • network inet tcp, — разрешены сетевые соединения по протоколу TCP в домене IPv4.
  • capability setuid, — разрешена установка идентификатора пользователя (UID) с помощью системного вызова setuid.

Классификация и сравнение с SELinux

AppArmor и SELinux — две основные системы MAC в Linux. Их ключевые различия:

ХарактеристикаAppArmorSELinux
Принцип привязкиПо пути к файлу (path-based)По метке безопасности (label-based)
СложностьНизкая, простой синтаксисВысокая, сложная система типов и ролей
ГибкостьСредняя, ограничена иерархией файловой системыВысокая, позволяет управлять доступом на основе ролей, пользователей и типов
Объекты управленияФайлы, сеть, возможности ядра (capabilities)Файлы, сеть, сокеты, IPC, процессы, сигналы, файловые системы
Поддержка дистрибутивовUbuntu, Debian, openSUSE, SUSE Linux EnterpriseRed Hat Enterprise Linux, Fedora, CentOS, Rocky Linux, AlmaLinux
Профили по умолчаниюОграниченный набор для часто используемых службОбширный набор политик для всей системы

Применение

AppArmor широко применяется для повышения безопасности серверов и настольных систем Linux. Основные сценарии использования:

  • Изоляция сетевых служб: Ограничение веб-серверов (Apache, Nginx), серверов баз данных (MySQL, PostgreSQL), почтовых серверов (Postfix, Dovecot). Профиль позволяет службе работать только с необходимыми файлами и портами, предотвращая ущерб от эксплуатации уязвимостей.
  • Защита браузеров и офисных приложений: В дистрибутивах Ubuntu и Debian для Firefox, Chromium, LibreOffice и других приложений предоставляются готовые профили, ограничивающие их доступ к файловой системе и сети.
  • Контейнеризация: AppArmor может использоваться для усиления безопасности контейнеров Docker и LXC. Docker поддерживает загрузку пользовательских профилей AppArmor для контейнеров.
  • Мобильные устройства: AppArmor является частью системы безопасности в Ubuntu Touch и используется в некоторых прошивках Android (например, в LineageOS).

Интересные факты

  • Название «AppArmor» происходит от слов «Application Armor» (броня приложений).
  • В отличие от SELinux, который требует перезагрузки системы для применения изменений в политике, профили AppArmor можно загружать и выгружать динамически, без перезапуска.
  • Существует утилита aa-easyprof, предназначенная для упрощённого создания профилей для приложений, распространяемых в формате Snap.
  • В 2017 году в AppArmor была добавлена поддержка правил для файловых систем, смонтированных с использованием FUSE (Filesystem in Userspace).

Критика

Основные критические замечания в адрес AppArmor связаны с его ограниченной гибкостью по сравнению с SELinux. Поскольку политики привязаны к путям, а не к меткам, они могут быть обойдены при использовании жёстких ссылок (hard links) или при монтировании файловых систем с изменённой структурой каталогов. Кроме того, AppArmor не предоставляет такого же детального контроля над межпроцессным взаимодействием (IPC) и сигналами, как SELinux. Тем не менее, для большинства практических задач по изоляции приложений его возможностей достаточно, а простота настройки делает его предпочтительным выбором для многих администраторов.

Источники

  • Официальная документация проекта AppArmor (gitlab.com/apparmor)
  • Документация ядра Linux: «Linux Security Module Usage» и «AppArmor»
  • Руководство администратора Ubuntu: «AppArmor»
  • Статья «AppArmor vs SELinux» в журнале Linux Journal (2008)
  • Книга «Linux Security Cookbook» (O'Reilly Media, 2003)

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →