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. Его работа основана на трёх ключевых компонентах:
- Ядро (модуль безопасности): Встроенный в ядро модуль перехватывает системные вызовы (например,
open,read,write,execve,bind,connect) и проверяет их соответствие правилам, заданным в профиле для текущего процесса. - Профили (политики): Текстовые файлы, определяющие разрешённые действия для конкретного исполняемого файла. Профили хранятся в каталоге
/etc/apparmor.d/. - Пользовательские утилиты: Набор инструментов для управления профилями, их загрузки, выгрузки, переключения режимов и создания новых профилей. Ключевые утилиты:
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. Их ключевые различия:
| Характеристика | AppArmor | SELinux |
|---|---|---|
| Принцип привязки | По пути к файлу (path-based) | По метке безопасности (label-based) |
| Сложность | Низкая, простой синтаксис | Высокая, сложная система типов и ролей |
| Гибкость | Средняя, ограничена иерархией файловой системы | Высокая, позволяет управлять доступом на основе ролей, пользователей и типов |
| Объекты управления | Файлы, сеть, возможности ядра (capabilities) | Файлы, сеть, сокеты, IPC, процессы, сигналы, файловые системы |
| Поддержка дистрибутивов | Ubuntu, Debian, openSUSE, SUSE Linux Enterprise | Red 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 →