Apparmor linux что это

Содержание

Что такое AppArmor и как с его помощью защитить вашу систему Ubuntu

AppArmor является важным элементом безопасности, который по умолчанию включен в Ubuntu начиная с версии Ubuntu 7.10. Тем не менее, AppArmor работает в фоновом режиме, поэтому Вы можете не знать, что это такое и что AppArmor делает.

AppArmor блокирует уязвимые процессы, ограничивая уязвимость в системе безопасности, которая может возникнуть из-за уязвимости этих процессов. AppArmor можно также использовать для того, чтобы заблокировать Mozilla Firefox для повышения безопасности, но по умолчанию это не делается.

Что такое AppArmor?

Например, одним из приложений, для которого по умолчанию в Ubuntu задано такое ограничение, является Evince — программа просмотра файлов PDF. Когда Evince работает под вашей пользовательской учетной записью, он может выполнять только вполне определенные действия. Для Evince предоставлены минимальные права доступа, необходимые только для запуска и работы с документами PDF. Если при рендеринге PDF с помощью Evince или при открытии вредоносного PDF, который хочет перехватить управление от Evince, были обнаружены уязвимости, AppArmor сможет ограничить ущерб, который может нанести Evince. В традиционной модели безопасности Linux для Evince будет разрешен доступ ко всему тому, к чему у вас есть доступ. При использовании AppArmor, доступ имеется только к тем вещам, которые требуются программе для просмотра PDF.

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

Просмотр текущего состояния AppArmor

Для просмотра текущего состояния AppArmor, выполните в терминале следующую команду:

Вы увидите, работает ли AppArmor в вашей системе (по умолчанию он работает), какие установлены профили AppArmor и для каких из запущенных процессов заданы ограничения.

Профили AppArmor

В AppArmor процессы ограничиваются с помощью профилей. В списке, приведенном выше, нам показаны профили, установленные в системе, — те, что поставляются в комплекте с Ubuntu. Если вы установите пакет apparmor-profiles, то вы сможете также устанавливать другие профили AppArmor, Некоторые пакеты, например, серверное программное обеспечение, могут поставляться со своими собственными профилями AppArmor, которые устанавливаются в системе вместе с пакетом. Вы также можете создавать свои собственные профили AppArmor, ограничивающие работу программ.

Профили хранятся в каталоге /etc/apparmor.d. Эти профили являются обычными текстовыми файлами, в которых могут быть комментарии.

Использование AppArmor для Firefox

Чтобы включить профиль Firefox и с помощью AppArmor ограничить действия, выполняемые Firefox, выполните следующие команды:

После выполнения этих команд, снова запустите команду sudo apparmor_status и вы увидите, что теперь загружены профили для Firefox.

Чтобы отключить профиль Firefox в случае, если из-за него возникают проблемы, выполните следующие команды:

Чтобы получить более подробную информацию об использовании AppArmor, обратитесь к странице AppArmor в официальном руководстве по серверу Ubuntu.

Источник

Безопасный Linux вместе с AppArmor

В предыдущей статье речь шла о SELinux. Моё впечатление об этой системе безопасности двоякое. С одной стороны безопасности в ИТ много не бывает, и SELinux содержит все необходимое для защиты ОС и приложений от несанкционированного доступа. С другой же стороны он выглядит чересчур громоздким и неоправданно сложным, что делает его применение непрактичным. Не раз и не два в руководствах пользователя по установке коммерческого ПО я видел рекомендации выполнить setenforce 0 перед началом установки.

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

Так же, как и SELinux AppArmor является реализацией системы Mandatory Access Control (MAC), основанной на архитектуре Linux Security Modules (LSM). Модель безопасности Apparmor заключается в привязке атрибутов контроля доступа не к пользователям, а к программам. AppArmor обеспечивает изоляцию с помощью профилей, загружаемых в ядро, как правило, при загрузке.

AppArmor отличается от остальных реализаций MAC в Linux принципом действия на основе путей, еще он позволяет смешивать профили принудительного исполнения и режима предупреждений. Кроме того AppArmor использует вложенные файлы для облегчения разработки и имеет гораздо более пологий барьер для входа, чем тот же SELinux.

DAC и MAC

Архитектура Discretionary Access Control (DAC) ограничивает доступ к критически важным ресурсам, в зависимости от атрибутов субъектов или группы, к которой они принадлежат. Эти атрибуты определяют права доступа к ресурсам файловой системы. Каждому админу хорошо известно значение привилегий чтение (Read), запись (Write), и исполнение (eXecute).
Эти атрибуты распространяются на три категории пользователей: пользователь (owner), группа (group), остальные (other). Категория владелец относится к одному единственному пользователю ОС, в то время как группа может содержать множество пользователей ОС. В категорию остальные входят те пользователи, которые не принадлежат к первым двум.
DAC модель дает владельцу ресурса право определять тип доступа для указанных категорий пользователей. Такое разграничение доступов подходит для защиты от непреднамеренных действий пользователей и позволяет ответить на следующие вопросы:

Рис. 1 Системы безопасности DAC и MAC.

Система безопасности Mandatory Access Control (MAC) предполагает централизованный контроль над правилами политики доступа, при котором рядовые пользователи не имеют возможность вносить в них какие-либо изменения. Разработчик политики определяет, какие программы или процессы могут выполнять определенные действия с системными ресурсами. MAC фокусируется в большей степени на программах, нежели на пользователях и решает задачу разграничения доступа процессов к ресурсам ОС.
В сущности дизайн MAC старается копировать разграничение привилегий доступа к документации в физическом мире. Если некий сотрудник имеет права читать документы с грифом «совершенно секретно», то к стандартным конфиденциальным и внутренним документам он тоже имеет доступ. Обратное однако не верно. То же самое имеет место в контексте привилегий доступа процессов ОС в архитектуре MAC. Так, если программа может читать файл /etc/sudoers, то доступ к /etc/hosts у нее тоже имеется, но обратное также неверно.

Установка и настройка AppArmor

Базовые элементы AppArmor предустановлены в Ubuntu Server, что касается инструментов управления и набора профилей приложений, то их нужно устанавливать отдельно.

Проверка статуса перед настройкой.

В последних строках указаны режимы enforce и complain. Что вкратце из себя представляют эти режимы?

. Если теперь после включения принудительного режима ping попробует сделать, что-то непредусмотренное AppArmor его заблокирует.

Источник

AppArmor

AppArmor is a Linux Security Module implementation of name-based mandatory access controls. AppArmor confines individual programs to a set of listed files and posix 1003.1e draft capabilities.

AppArmor is installed and loaded by default. It uses profiles of an application to determine what files and permissions the application requires. Some packages will install their own profiles, and additional profiles can be found in the apparmor-profiles package.

To install the apparmor-profiles package from a terminal prompt:

AppArmor profiles have two modes of execution:

Complaining/Learning: profile violations are permitted and logged. Useful for testing and developing new profiles.

Enforced/Confined: enforces profile policy as well as logging the violation.

Using AppArmor

The optional apparmor-utils package contains command line utilities that you can use to change the AppArmor execution mode, find the status of a profile, create new profiles, etc.

apparmor_status is used to view the current status of AppArmor profiles.

aa-complain places a profile into complain mode.

aa-enforce places a profile into enforce mode.

The /etc/apparmor.d directory is where the AppArmor profiles are located. It can be used to manipulate the mode of all profiles.

Enter the following to place all profiles into complain mode:

To place all profiles in enforce mode:

apparmor_parser is used to load a profile into the kernel. It can also be used to reload a currently loaded profile using the -r option after modifying it to have the changes take effect.
To reload a profile:

systemctl can be used to reload all profiles:

AppArmor can be disabled, and the kernel module unloaded by entering the following:

To re-enable AppArmor enter:

Replace profile.name with the name of the profile you want to manipulate. Also, replace /path/to/bin/ with the actual executable file path. For example for the ping command use /bin/ping

Profiles

There are two main type of rules used in profiles:

Path entries: detail which files an application can access in the file system.

Capability entries: determine what privileges a confined process is allowed to use.

As an example, take a look at /etc/apparmor.d/bin.ping :

#include : include statements from other files. This allows statements pertaining to multiple applications to be placed in a common file.

/bin/ping flags=(complain): path to the profiled program, also setting the mode to complain.

capability net_raw,: allows the application access to the CAP_NET_RAW Posix.1e capability.

/bin/ping mixr,: allows the application read and execute access to the file.

After editing a profile file the profile must be reloaded. See above at Using AppArmor for details.

Creating a Profile

Design a test plan: Try to think about how the application should be exercised. The test plan should be divided into small test cases. Each test case should have a small description and list the steps to follow.

Some standard test cases are:

Starting the program.

Stopping the program.

Reloading the program.

Testing all the commands supported by the init script.

Generate the new profile: Use aa-genprof to generate a new profile. From a terminal:

To get your new profile included in the apparmor-profiles package, file a bug in Launchpad against the AppArmor package:

Include your test plan and test cases.

Attach your new profile to the bug.

Updating Profiles

When the program is misbehaving, audit messages are sent to the log files. The program aa-logprof can be used to scan log files for AppArmor audit messages, review them and update the profiles. From a terminal:

Further pre-existing Profiles

The packages apport-profiles and apparmor-profiles-extra ship some experimental profiles for AppArmor security policies.
Do not expect these profiles to work out-of-the-box, but they can give you a head start when trynig to create a new profile by starting off a base that exists.

These profiles are not considered mature enough to be shipped in enforce mode by default. Therefore they are shipped in complain mode so that users can test them, choose which are desired, and help improve them upstream if needed.

Some even more experimental profiles carried by the package are placed in /usr/share/doc/apparmor-profiles/extras/

Checking and debugging denies

Examples might look like:

In the examples above that would be

That way you know in which profile and at what action you have to start if you consider either debugging or adapting the profiles.

Profile customization

Profiles are meant to provide security and thereby can’t be all too open. But quite often a very special setup would work with a profile if it wold just allow this one extra access. To handle that there are three ways.

Источник

Знакомство с AppArmor: как работать с модулем безопасности на примерах

Linux Security Modules (LSM)

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

В следующих разделах мы будем использовать среду Ubuntu 20.04, чтобы продемонстрировать несколько практических примеров с AppArmor. Большинство связанных утилит командной строки будут работать одинаково на любой платформе с установленным AppArmor.

Работа с AppArmor

Утилиты командной строки AppArmor обычно требуют прав суперпользователя.

Следующая команда проверяет текущий статус AppArmor:

Вот выдержка из вывода команды:

Команда aa-status (или apparmor_status) предоставляет полный список загруженных в данный момент профилей AppArmor (не показан в предыдущем отрывке). Далее мы рассмотрим профили AppArmor.

Представляем профили AppArmor

В AppArmor процессы ограничиваются (или ограничиваются) профилями. AppArmor профили загружаются при запуске системы и работать либо в режиме enforce mode или complain mode. Мы объясним эти режимы позже.

Enforce mode (Принудительный режим)

Complain mode (Режим жалобы)

Приложения, работающие в режиме Complain mode, могут выполнять ограниченные действия, в то время как AppArmor создает запись в журнале для соответствующего нарушения. Complain mode идеально подходит для тестирования профилей AppArmor. Возможные ошибки или нарушения доступа могут быть обнаружены и исправлены до переключения профилей в режим enforce mode.

Помня об этих вводных замечаниях, давайте создадим простое приложение с профилем AppArmor.

Создать профиль

Мы предполагаем, что каталог log уже существует в том же месте, что и сценарий:

Сделаем скрипт исполняемым и запустим его:

Результат выглядит следующим образом:

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

Мы используем aa-genprof для мониторинга нашего приложения во время выполнения и чтобы AppArmor узнал об этом. В процессе нам будет предложено подтвердить и выбрать поведение, которое требуется в определенных обстоятельствах.

Как только профиль будет создан, мы будем использовать утилиту aa-logprof для внесения дальнейших корректировок во время тестирования в режиме complain mode, если возникнут какие-либо нарушения.

Мы начнем с терминала 1 и выполним следующую команду:

Нас ждет первая подсказка. Затем, пока запрос в терминале 1 ожидает, мы переключимся на терминал 2 и выполним следующую команду:

В этом случае предлагается просканировать системный журнал на наличие событий AppArmor, чтобы обнаружить возможные жалобы (нарушения).

Ответ : S (Scan):

Давайте посмотрим на следующую подсказку.

Это приглашение запрашивает разрешения на выполнение для процесса ( /usr/bin/bash ), запускающего наше приложение.

Ответ : I (Inherit):

Давайте посмотрим на следующую подсказку.

Это приглашение запрашивает разрешения на чтение / запись для приложения для управления терминалом ( /dev/tty ).

Ответ : A ( Разрешить ):

Теперь давайте посмотрим на последнее приглашение.

В приглашении предлагается сохранить или просмотреть изменения.

Ответ : S ( Сохранить ):

На этом мы закончили сканирование с помощью aa-genprof и можем ответить F (Finish) на последнее приглашение. Наше приложение ( appackt ) теперь принудительно применяется AppArmor в режиме complain mode (режим «жалобы», используется по умолчанию). Если мы попытаемся запустить наш скрипт, мы получим следующий результат:

Давайте запустим команду aa-logprof для дальнейшей настройки нашего профиля безопасности appackt :

Возможно, нам придется запустить команду aa-logprof несколько раз, потому что с каждой итерацией будут обнаруживаться и обрабатываться новые разрешения, в зависимости от дочерних процессов, которые порождаются нашим сценарием, и так далее. В конце концов, сценарий appackt будет успешно выполнен.

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

Все они будут названы в соответствии с путем к нашему приложению ( /home/packt /appackt ). Мы можем очистить эти записи с помощью следующей команды:

Теперь мы можем убедиться, что наше приложение действительно защищено AppArmor:

Соответствующий отрывок из вывода выглядит следующим образом:

Наше приложение (/home/packt/appackt ), как и ожидалось, отображается в режиме complain. Два других относятся к системным приложениям и не имеют для нас отношения.

Затем нам нужно убедиться, что наше приложение соответствует политикам безопасности, применяемым AppArmor. Давайте отредактируем сценарий appackt и изменим путь LOG_FILE в строке 6 на следующий:

Предыдущие выходные данные предполагают, что appackt пытается получить доступ к пути за пределами разрешенных границ AppArmor, таким образом проверяя наш профиль:

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

Результат выглядит следующим образом:

Мы можем убедиться, что наше приложение действительно работает в режиме enforce, с помощью следующей команды:

Соответствующий вывод выглядит следующим образом:

Если бы мы хотели внести дополнительные изменения в наше приложение, а затем протестировать его с соответствующими изменениями, нам пришлось бы изменить режим профиля на complain (жаловаться), а затем повторить шаги, описанные ранее в этом разделе. Следующая команда устанавливает для профиля приложения complain mode (режим жалобы):

Далее давайте посмотрим, как отключить или включить профили приложений AppArmor.

Отключение и включение профилей

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

Чтобы отключить профиль, мы должны выполнить следующие команды:

В этой ситуации скрипт appackt не подвергается никаким ограничениям. Чтобы повторно включить соответствующий профиль безопасности, мы можем выполнить следующие команды:

Давайте завершим наше относительно краткое изучение внутреннего устройства AppArmor некоторыми заключительными мыслями.

Заключительные соображения

Источник

Национальная библиотека им. Н. Э. Баумана
Bauman National Library

Персональные инструменты

AppArmor

AppArmor («Application Armor») — это модуль безопасности ядра Linux, который позволяет ограничивать возможности программ с помощью их индивидуальных профилей. Профили могут предоставлять или запрещать программам доступ к сети, к «сырым» сокетам, разрешение на чтение, запись или исполнение файлов по конкретным путям. AppArmor дополняет традиционную модель дискреционного доступа Unix (англ. discretionary access control, DAC), предоставляя мандатное управление доступом (англ. mandatory access control, MAC). Включен в ядро Linux с версии 2.6.36.

Содержание

Обзор

История

Дистрибутивы с AppArmor

Список дистрибутивов, в которые уже включен модуль AppArmor [Источник 4] :

Установка AppArmor

AppArmor состоит из нескольких частей:

Для завершения сборки некоторым системам может потребоваться экспортировать различные переменные среды python. Например, прежде чем собрать что-либо на этих системах, используйте что-то вроде:

Для сборки и установки пространства пользователя AppArmor в систему необходимо произвести действия в следующем порядке.

Профили

Профили AppArmor имеют два режима выполнения [Источник 5] :

Существует два основных типа правил, используемых в профиле:

В качестве примера можно рассмотреть /etc/apparmor.d/bin.ping:

После редактирования профиля он должен быть перезагружен.

Создание профиля

Обновление профилей

Когда программа ведет себя неправильно, проанализируйте сообщения, отправленные в файлы журналов. Программа aa-logprof может быть использована для сканирования файлов журнала AppArmor для проверки сообщений, их рассмотрения (анализа) и обновления профилей. Команда в терминале:

AppArmor руководствуется принципом «запрещено все, что не разрешено», поэтому, когда в профиле нет никакого соответствующего правила, действие не разрешается.

Язык AppArmor

Язык написания профилей

Код профиля начинается с его названия, затем идет опциональный флаг, потом открывается фигурная скобка <, внутри которой записаны правила данного профиля, в конце фигурная скобка закрывается >. Если название правила начинается не с /, то перед ним должно находиться ключевое слово profile. [Источник 6] Например:

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

Комментарии

Комментарии пишутся в одну строчку и начинаются со знака решетки #. После символа # текст игнорируется до конца строки (кроме директивы #include ). Например:

Включение профилей

Возможен конфликт директивы #include с комментариями в коде. # и слово include не должны быть разделены, иначе строка будет считаться комментарием и будет проигнорирована.

Подпрофили

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

Сетевые правила

AppArmor в настоящий момент поддерживает доступ к сети через сетевые правила. Например, сетевой службе может понадобиться:

Или анализатору пакетов:

Файловые правила

Файловые правила контролируют доступ к файлам и появляются только в профилях. Они состоят из имени файла, набора разрешений и оканчиваются запятой. В начале может быть написано как разрешение, так и имя файла. Допустимое имя файла всегда начинается с /. Например:

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

Выбор нескольких файлов

AppArmor используется специальный синтaксис, похожий на тот, что используется в командной строке bash. Он не полностью совпадает с синтаксисом регулярных выражений, вместо них используются специальные символы, называемые подстановочными. Подстановочные символы AppArmor выглядят немного не так, как в bash.

Пример выбора нескольких файлов:

Права доступа

Доступны следующие права:

Ключевое слово owner может использоваться в качестве квалификатора разрешения при условии владения файлом.

Следующие права доступа в настоящий момент находятся в разработке:

Права на выполнение

Основные права на выполнение:

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

Разрешения Px, Cx и Ux, написанные с заглавных букв, вызовут безопасное выполнение libc. При разработке профилей в основном должны использоваться варианты безопасного выполнения для того, чтобы запускать программы в чистой среде.

Права px и cx (а также их безопасные варианты) также могут иметь окончания ix или ux, то есть выглядеть как pix, pux, cix или cux. Такие права означают, что процесс должен выполняться под соответствующим профилем, если он существует. Часто используют право доступа PUx вместо Ux, чтобы не изменять профиль для исполняемого файла в случае, если профиль для соответствующей программы будет добавлен позже.

Например, если разрешенная программа должна выполнить «evidence», то разрешение в профиле может выглядеть следующим образом:

Правила px и cx (и все их варианты) также могут быть изменены для указания профиля по имени вместо использования профиля, соответствующего имени исполняемого файла. Это делается путем предоставления -> («стрелки перехода») и имени профиля.

Использование AppArmor

Пакет apparmor-utils содержит утилиты командной строки, которые можно использовать для изменения режима выполнения AppArmor, поиска статуса профиля, создания новых профилей и т.п. [Источник 7]

Высокоуровневое представление

Утилита aa-status дает высокоуровневое представление о статусе AppArmor и приложений, для которых имеются профили: [Источник 8]

Информация о запущенных процессах

Чтобы узнать, на какие процессы наложены ограничения, можно использовать утилиту aa-status, как написано выше, или использовать команду ps (под root):

Исходные данные также доступны через /proc (под root):

Утилита aa-unconfined может также указать, какие сетевые сервисы ограничены или неограничены (под root):

Информация из модуля ядра

‘features’ и ‘matching’ предоставляют информацию о функциях и версиях, которая используется apparmior_parser для компиляции профилей для работающего ядра. ‘profiles’ предоставляет список профилей, загруженных в ядро, а также информацию о каждом профиле в enabled/complain/audit.

Информация из постоянных файлов конфигурации

Для того, чтобы проверить содержание профиля, можно сделать следующее:

Этот список показывает разрешения для ресурса.

Помимо этого можно полностью посмотреть профиль со всеми включенными абстракциями с помощью:

Источник

Операционные системы и программное обеспечение