Что такое 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.
Что такое apparmor?
Я слышу много разговоров о apparmor, я хочу знать следующее:
3 ответа
Что это
В Ubuntu Apparmor устанавливается по умолчанию. Он ограничивает приложения профилями, чтобы определить, к каким файлам и разрешениям программа должна иметь доступ. Некоторые приложения будут иметь свои собственные свойства, и другие могут быть найдены в apparmor-profiles пакет.
Я нашел хороший пример Apparmor на форумах Ubuntu, который я переписал для этого поста.
Как это устроено
apparmor-utils Пакет содержит инструменты командной строки для настройки Apparmor. С его помощью вы можете изменить режим выполнения Apparmor, узнать статус профиля, создать новые профили и т. Д.
Это наиболее распространенные команды:
Примечание. Профили хранятся в /etc/apparmor.d/
профили
В профилях используются два основных типа записей:
Записи пути определяют, к каким файлам может обращаться приложение.
Записи возможностей определяют, какие привилегии может использовать процесс.
#include Включает файл global в каталоге tunables это позволяет размещать в одном файле операторы, относящиеся к нескольким приложениям.
/bin/ping flags=(complain) устанавливает путь к профилируемой программе и устанавливает режим подачи жалоб.
capability net_raw позволяет приложению доступ к CAP_NET_RAW Posix.1e возможность.
/bin/ping mixr позволяет приложению читать и выполнять доступ к файлу.
/etc/modules.conf r, r дает приложению права на чтение для /etc/modules.conf
Примечание. После создания / редактирования профиля необходимо перезагрузить профиль, чтобы изменения вступили в силу.
Вот список разрешений, которые вы можете использовать:
AppArmor
Содержание
AppArmor
AppArmor устанавливается и загружается по умолчанию. Он использует профили приложений для определения какие файлы и права доступа требуются приложению. Некоторые пакеты устанавливают свои собственные профили, а дополнительные профили можно найти в пакете apparmor-profiles.
Для установки пакета apparmor-profiles наберите в терминале:
Профили AppArmor имеют два режима выполнения:
Фиксации/Обучения: нарушения профиля разрешаются и сохраняются в журнале. Полезно для тестирования и разработки новых профилей
Предписаний/Ограничений: принуждает следовать политике профиля, при этом также записывает нарушения в журнал.
Использование AppArmor
Пакет apparmor-utils содержит утилиты командной строки, которые можно использовать для изменения режима выполнения AppArmor, поиска статуса профиля, создания новых профилей и т.п.
1. apparmor_status используется для просмотра текущего статуса профиля AppArmor.
2. aa-complain переводит профиль в режим обучения (complain).
3. aa-enforce переводит профиль в режим ограничений (enforce).
4. Профили AppArmor расположены в каталоге /etc/apparmor.d. Его можно использовать для управления режимом всех профилей. Введите следующую команду для перевода всех профилей в режим обучения:
Перевод всех профилей в режим ограничений:
5. Команда apparmor_parser используется для загрузки профиля в ядро. Она также может использоваться для повторной загрузки загруженного профиля при использовании опции ‘-r’. Для загрузки введите:
6. /etc/init.d/apparmor служит для перезагрузки всех профилей:
Для активации отключенного профиля удалите символическую ссылку на профиль в /etc/apparmor.d/disable/. Затем загрузите профиль используя опцию ‘-a’.
8. AppArmor можно отключить, а модуль ядра выгрузить следующей командой:
9. Для повторной активации AppArmor введите:
Профили
Существует два основных типа правил, используемых в профиле:
1. Записи путей (Path entries): которые описывают к каким файлам приложение имеет доступ в файловой системе. 2. Записи разрешений (Capability entries): определяют какие права ограничиваемый процесс имеет право использовать.
В качестве примера посмотрим /etc/apparmor.d/bin.ping:
#include : включает операторы из других файлов. Это позволяет операторам, относящимся к нескольким приложениям находится в одном общем файле.
/bin/ping flags=(complain): путь к программе, управляемой профилем, также устанавливающий режим обучения.
capability net_raw,: разрешает приложению доступ к возможностям CAP_NET_RAW Posix.1e.
/bin/ping mixr,: разрешает приложению доступ на чтение и выполнение файла.
Создание профиля
1. Разработка плана тестирования: Попробуйте подумать о том как приложение будет выполняться. План тестирования стоит разделить на маленькие тестовые блоки. Каждый тестовый блок должен иметь краткое описание и перечень шагов выполнения. Некоторые стандартные тестовые блоки:
Тестирование всех команд, поддерживаемых сценарием инициализации.
2. Создание нового профиля: Используйте aa-genprof для создания нового профиля. Команда в терминале:
3. Чтобы получить ваш новый профиль в составе пакета apparmor-profiles, зарегистрируйте проблему в Launchpad для пакета AppArmor:
Включите ваш план тестирования и тестовые блоки.
Присоедините ваш новый профиль к зарегистрированной проблеме.
Обновление профилей
Когда программа ведет себя неправильно, проанализируйте сообщения отправленные в файлы журналов. Программа aa-logprof может быть использована для сканирования файлов журнала AppArmor для проверки сообщений, их рассмотрения (анализа) и обновления профилей. Команда в терминале:
Ссылки
Смотрите AppArmor Administration Guide для дополнительных опций настройки.
Для уточнения использования AppArmor с другими выпусками Ubuntu смотрите страницу AppArmor Community Wiki.
Знакомство с 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 некоторыми заключительными мыслями.
Заключительные соображения
Безопасный 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 его заблокирует.





















