AppArmor — это система обязательного контроля доступа (MAC), реализованная на основе модулей безопасности Linux (LSM).
AppArmor, как и большинство других LSM, дополняет, а не заменяет дискреционный контроль доступа (DAC) по умолчанию. Таким образом, невозможно предоставить процессу больше привилегий, чем он имел изначально.
Ubuntu, SUSE и ряд других дистрибутивов используют его по умолчанию. RHEL (и его деривативы) используют SELinux, который требует хорошей интеграции в пользовательское пространство для правильной работы. SELinux прикрепляет метки ко всем файлам, процессам и объектам и поэтому является очень гибким. Тем не менее, настройка SELinux считается очень сложной задачей и требует поддерживаемой файловой системы. AppArmor, с другой стороны, работает с использованием путей к файлам, и его конфигурация может быть легко адаптирована.
AppArmor в режиме реального времени защищает операционную систему и приложения от внешних или внутренних угроз и даже атак нулевого дня, применяя определенный набор правил для каждого приложения. Политики безопасности полностью определяют, к каким системным ресурсам могут обращаться отдельные приложения и с какими привилегиями. Доступ запрещен по умолчанию, если ни в одном из профилей не указано иное. В AppArmor включено несколько политик по умолчанию, и, используя комбинацию расширенного статического анализа и инструментов, основанных на обучении, политики AppArmor даже для очень сложных приложений могут быть успешно развернуты за считанные часы.
Каждое нарушение политики вызывает сообщение в системном журнале, и AppArmor можно настроить так, чтобы он уведомлял пользователей с помощью предупреждений о нарушениях, всплывающих на рабочем столе в режиме реального времени.
AppArmor доступен во всех официально поддерживаемых ядрах Arch Linux.
Устанавливаем AppArmor.
sudo pacman -S apparmor
Чтобы загрузить все профили AppArmor при запуске, включаем apparmor.service.
sudo systemctl enable --now apparmor
Чтобы включить AppArmor в качестве системы безопасности по умолчанию при каждой загрузке, установите следующий параметр ядра:
lsm=landlock,lockdown,yama,integrity,apparmor,bpf
Правим загрузчик:
sudo nano /etc/default/grub
Ищем следующую строку:
GRUB_CMDLINE_LINUX_DEFAULT=
Как правило она сверху.
Вставляем вышеуказанные параметры. Ничего не удаляем. В строке наверняка уже есть какие-то записи. Должно получиться нечто подобное:
GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 lsm=landlock,lockdown,yama,integrity,apparmor,bpf"
Сохраняем изменения.
Параметр ядра lsm= задает порядок инициализации модулей безопасности Linux.
Убедитесь, что apparmor является первым "крупным" модулем в списке.
Сконфигурированное значение можно проверить следующей командой:
zgrep CONFIG_LSM= /proc/config.gz
Текущее значение проверяем следующей командой:
cat /sys/kernel/security/lsm
Обновляем конфигурацию загрузчика:
sudo grub-mkconfig -o /boot/grub/grub.cfg
Далее потребуется перезагрузка системы.
Проверяем включен ли AppArmor:
aa-enabled
Любой вывод кроме “YES” говорит о том, что система не работает.
Проверяем статус:
sudo aa-status
Выдача должна быть примерно такой:
apparmor module is loaded.
44 profiles are loaded.
44 profiles are in enforce mode.
...
0 profiles are in complain mode.
0 processes have profiles defined.
0 processes are in enforce mode.
0 processes are in complain mode.
0 processes are unconfined but have a profile defined.
Здесь мы видим загруженные профили и их статусы.
Для загрузки (принудительного применения), выгрузки, перезагрузки, кэширования и статистики используйте apparmor_parser. Действием по умолчанию (-a) является загрузка нового профиля в принудительном режиме, для перезаписи существующего профиля используйте опцию -r, а для удаления профиля используйте опцию -R. Каждое действие также может применяться к нескольким профилям. Для более подробного описания функционала следует обратиться к man странице.
Для создания новых профилей должен быть запущен Audit Framework. Это связано с тем, что Arch Linux использует systemd и не создаёт лог-файлов ядра по умолчанию. AppArmor может получать логи ядра из демона userspace auditd, что позволяет создать профиль.
Добавляем параметр “audit=1” в конфигурацию загрузчика. В ту же строку, куда мы добавляли модуль AppArmor ранее. Строка должна выглядеть примерно так:
GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 lsm=landlock,lockdown,yama,integrity,apparmor,bpf audit=1"
Обновляем конфигурацию загрузчика.
Устанавливаем пакет “audit” (скорее всего он уже есть в системе). Включаем и запускаем auditd.service.
sudo pacman -S audit
sudo systemctl enable --now auditd
Профили - удобочитаемые текстовые файлы, находящиеся в /etc/apparmor.d/, описывающие, как должны обрабатываться бинарники при выполнении. Базовый профиль выглядит примерно так:
#include <tunables/global>
profile test /usr/lib/test/test_binary {
#include <abstractions/base>
# Main libraries and plugins
/usr/share/TEST/** r,
/usr/lib/TEST/** rm,
# Configuration files and logs
@{HOME}/.config/ r,
@{HOME}/.config/TEST/** rw,
}
Строки, которым предшествует символ @ - переменные, определяемые абстракциями (/etc/apparmor.d/abstractions/), переменными (/etc/apparmor.d/tunables/) или самим профилем. #include включает в себя другие файлы профилей напрямую. Символы плана “rw” в строках с путями, являются указателями прав доступа. Используется синтаксис AppArmor.
Наиболее распространенные варианты использования охватываются следующими параметрами:
r — read: чтение данных.
w — write: создание, удаление, запись в файл и его дополнение.
m — memory map executable: карта памяти исполняемого файла.
x — execute: запустить исполняемый файл; должен быть обработан с помощью qualifier.
Права бинарников не могут быть выше значений, установленных DAC.
Демон уведомлений отображает уведомления на рабочем столе всякий раз, когда AppArmor запрещает программе доступ. Чтобы автоматически запускать демон aa-notify при входе в систему, выполните следующие действия:
Устанавливаем Audit Framework, а также включаем и запускаем демон auditd в пользовательском пространстве (смотрим выше). Разрешаем пользователю читать логи аудита в /var/log/audit, добавив его в группу audit:
sudo groupadd -r audit
sudo gpasswd -a пользователь системы audit
Добавляем группу “audit” в auditd.conf:
sudo nano /etc/audit/auditd.conf
log_group = audit
Можно в начало файла. Если файл не существует, следует перезагрузить систему.
Устанавливаем пакеты python-notify2 и python-psutil.
Создаём файл автозапуска:
nano ~/.config/autostart/apparmor-notify.desktop
[
Desktop Entry]
Type=Application
Name=AppArmor Notify
Comment=Receive on screen notifications of AppArmor denials
TryExec=aa-notify
Exec=aa-notify -p -s 1 -w 60 -f /var/log/audit/audit.log
StartupNotify=false
NoDisplay=true
Перезагружаем и проверяем запущен ли процесс aa-notify.
pgrep -ax aa-notify
На этом всё. Мы получили рабочую конфигурацию AppArmor на Arch Linux.
Blacksmith.