Apparmor пакет для визначення політик безпеки по, linuxoid

Операційна система Linux успадкувала систему безпеки Unix розроблену ще в 70-х роках, передову на момент створення, але на сьогоднішній день вже явно недостатню. Кожен користувач має повну свободу дій в межах своїх повноважень, за принципом "все або нічого". Це призводить до того, що для виконання деяких завдань користувачеві часто надаються значно більші права, ніж реально необхідні для її вирішення. Тому користувач отримав доступ з правами системної облікового запису набуває іноді практично повний контроль над комп'ютером.

Що маємо?

проект AppArmor

Установка AppArmor в Ubuntu

Починаючи з версії 7.04 AppArmor офіційно включений в репозитарії Ubuntu тому проблем з його установкою немає:

$ Sudo apt-get install apparmor apparmor-docs apparmor-modules-source apparmor-profiles apparmor-utils

Після цього скрипт буде лаятися, що не може закінчити настроках через отсутсвия необхідних модулів ядра. Тому наступним кроком збираємо модуль ядра.

Спочатку команда підготовки до складання, завдання якої перевірити наявність усіх необхідних пакетів і завантажити відсутні:

$ Sudo m-a -v -t prepare

Взагалі майже вся його робота зводиться до стандартних «sudo apt-get install build-essential». Тепер збираємо модуль:

$ Sudo m-a -v -t -f build apparmor-modules
$ Sudo m-a -v -t -f install apparmor-modules

Після складання раджу завантажити модуль ядра контролюючого встановлені політики вручну, щоб перевірити його роботу:

$ Sudo modprobe apparmor
FATAL: Error inserting apparmor (/lib/modules/2.6.20-15-generic/apparmor/apparmor.ko): Resource temporarily unavailable

$ Sudo mcedit /usr/src/linux/.config

CONFIG_SECURITY_SELINUX = n
CONFIG_SECURITY_CAPABILITIES = m
Інакше додаємо два параметра "capability.disable = 1" і "selinux = 0" передаються ядру при завантаженні. Правда, в моєму випадку перший параметр, чомусь був проігнорований:

$ Dmesg | grep capability
[19.543828] Unknown boot option `capability.disable = 1 ': ignoring

Тому просто вивантажуємо модуль ядра:

$ Sudo rmmod capability

Пробуємо ще раз:

$ Sudo modprobe apparmor
$ Lsmod | grep apparmor
apparmor 55836 0
aamatch_pcre 16896 1 apparmor
commoncap 8192 1 apparmor

Крім цього модуль apparmor може не дружити з Dazuko, який зазвичай використовується при on-access скануванні файлів антивірусом Clamav. Тепер запускаємо всю систему:

$ Sudo /etc/init.d/apparmor start
mounting securityfs on / sys / kernel / security: done.
Loading AppArmor profiles. done.

Якщо все нормально на цьому установку AppArmor можна вважати Закоцюбнувши. Наступний крок настройка профілів.

Після запуску демон завантажує всі профілі лежать в каталозі /etc/apparmor.d.

Для контролю режиму роботи можна використовувати файлову систему securityfs, за допомогою якої можна отримати інформацію про завантажених профілях:

$ Sudo mount -tsecurityfs securityfs / sys / kernel / security
$ Sudo cat / sys / kernel / security / apparmor / profiles
/ Usr / sbin / traceroute (enforce)
/ Usr / sbin / ntpd (enforce)
/ Usr / sbin / nscd (enforce)
/ Usr / sbin / named (enforce)
/ Usr / sbin / mdnsd (enforce)
/ Usr / sbin / identd (enforce)
/ Usr / sbin / dovecot (complain)
/ Sbin / syslogd (enforce)
/ Sbin / syslog-ng (enforce)
/ Sbin / klogd (enforce)
/ Bin / ping (enforce)

AppArmor може обробляти профілі в двох режимах:

1. enforce - примусовий режим, сервіс працює виключно в межах профілю, всі спроби порушити правила реєструються в syslog;
2. complain - щадний режим (навчання), в цьому випадку робота сервісу лише контролюється, при порушенні профілю створюється запис. Цей режим зручний при створенні нових профілів і налаштування профілю на конкретній системі.

Для зміни режиму достатньо відкрити файл профілю і додати навпаки виконуваного файлу рядок "flags = (complain)":

Глобально всі профілі перевести в режим complain можна командою:

$ Sudo echo 1> / sys / kernel / security / apparmor / control / complain

Після навчання окремий додаток без перезавантаження всіх профілів, можна перевести в жорсткий режим за допомогою спеціальної утиліти enforce:

$ Enforce dovecot
Setting / usr / sbin / dovecot to enforce mode.

Решта профілі лежать в каталозі / usr / share / doc / apparmor-profiles / extras. Кожен профіль має ім'я, яке складається з повного шляху до виконуваного файлу, тільки замість слеша використана точка. Наприклад usr.lib.firefox.firefox.sh. Типове опис профілю виглядає так:

$ Cat /usr/share/doc/apparmor-profiles/extras/usr.lib.firefox.firefox.sh
#include

/usr/lib/firefox/firefox.sh ...
/ Bin / basename mixr,
/ Usr / bin / aoss Ux,
/ Usr / lib / firefox / * r,
/ Usr / lib / firefox / firefox-bin px,
...
>

$ Cd / etc / apparmor / profiles / extras
$ Sudo mv * postfix * usr.sbin.post * /etc/apparmor.d/
$ Mv usr.bin.procmail usr.sbin.sendmail /etc/apparmor.d/

І запускаємо перший час в режимі навчання:

$ Complain /etc/apparmor.d/*postfix*
$ Complain /etc/apparmor.d/usr.sbin.post*
$ Complain /etc/apparmor.d/usr.bin.procmail
$ Complain /etc/apparmor.d/usr.sbin.sendmail

Далі використовуємо Postfix як зазвичай, уточнюємо політики за допомогою утиліти "logprof" і переводимо в примусовий режим. Для чого в попередньому прикладі замінюємо всі complain на enforce. Як варіант можна відразу вказати замість профілю сам виконуваний файл, тоді відповідні йому політики будуть підхоплені автоматично.

створення профілю

Тепер спробуємо створити новий профіль і перевіримо роботу AppArmor. Для тестування виберемо усіма улюблену програму для створення паролів / usr / bin / passwd. Щоб створити новий режим використовується утиліта genprof (до речі, всі утиліти AppArmor мають псевдоніми починаються на aa-):

$ Sudo genprof / usr / bin / passwd
Записується оновлений профіль / usr / bin / passwd.
Налаштування / usr / bin / passwd в щадному режимі.

Тепер запускаємо додаток для якого створюється профіль. У нашому випадку можна змінити пароль для користувача, видалити і створити користувача:

$ Sudo adduser sergej
Adding user `sergej '...
Adding new group `sergej '(1001) ...
Adding new user `sergej '(1001) with group` sergej' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for sergej

Apparmor пакет для визначення політик безпеки по, linuxoid

Через деякий час натискаємо на клавіатурі клавішу S. При цьому будуть прочитані всі повідомлення аудиту з файлу / var / log / messages і оновлені у відповідні профілі в /etc/apparmor.d. Ось деякі події потрапляють в журнал:

Чеерез деякий час натискаємо клавішу F. Дивимося новий профіль:

/ Usr / bin / passwd #include

/lib/tls/i686/cmov/libc-*.so mr,
/lib/tls/i686/cmov/libcrypt-*.so mr,
/lib/tls/i686/cmov/libdl-*.so mr,
/ Usr / bin / passwd mr,
>

Тепер спробуємо прибрати прапор "m" в утиліті passwd. На льоту це можна зробити за допомогою утиліти apparmor_parser:

$ Sudo echo «/ usr / bin / passwd »| apparmor_parser -ad

І знову пробуємо додати новго користувача:

$ Sudo adduser sergej
Adding user `sergej '...
Adding new group `sergej '(1001) ...
Adding new user `sergej '(1001) with group` sergej' ...
passwd: Can not determine your user name.
Permission denied
Try again? [Y / n] y

І так далі. Перевіряємо результат:

$ Cat / etc / passwd | grep sergej
sergej: x: 1001,: 1001,. / Home / sergej: / bin / bash

Утиліта не змогла створити пароль для нового користувача.

Але це ще не все. Новостворений профіль продовжує працювати в щадному режимі. Через деякий час слід проаналізувати повторно / var / log / messages і уточнити налаштування профілів. Для цього використовується утиліта logprof:

Далі будуть показуватися знайдені порушення профілів, із зазначенням назви профілю, програми і дії. Всі питання розбиті на блоки. У першому, задається управління дочірніми процесами контрольованої профілем.

Профіль: / usr / sbin / dovecot
Програма: dovecot
Виконати: / usr / lib / dovecot / imap
Строгість: невідомо

[(I) nherit] / (P) rofile / (U) nconfined / (D) eny / Abo (r) t / (F) inish

Натискання на r (Abort) призведе до виходу з genprof з відхиленням всіх змін, а F (Finish) робить те ж, але тільки все зроблені раніше відповіді зберігаються. Ці параметри означають:

1. Inherit - нащадок запускається з тим же профілем, що і батько;
2. Profile - нащадок має свій профіль;
3. Unconfined - нащадок запускається без профілю;
4. Deny - заборона на запуск дочірніх процесів.

Далі слід запит про доступ до функцій POSIX:

Профіль: / usr / sbin / dovecot
Можливість: chown
Строгість: 9

[(A) llow] / (D) eny / Abo (r) t / (F) inish

Тут дещо простіше. Натисканням А дозволяємо (в нашому прикладі виклик chown) або D забороняємо даний виклик. І третім блоком йдуть запити про шляхи:

Профіль: / usr / sbin / dovecot
Шлях: /
Режим: r
Строгість: невідомо

[(A) llow] / (D) eny / (G) lob / Glob w / (E) xt / (N) ew / Abo (r) t / (F) inish

Крім знайомих параметрів тут можна натиснути N і ввести новий шлях, який буде записаний в профіль. Дуже корисними є можливість глобалізувати шлях, тобто замість /var/www/index.html вказати в правилі / var / www / *. Для цього достатньо натиснути кнопку G і шлях скоротиться на один рівень. Кожне натискання буде скорочувати його ще на один рівень. Якщо потрібно зберегти розширення файлів, натискаємо E (Glob w / (E) xt) і тоді з'явиться запис на кшталт /var/www/*.html. За окнчаніі роботи logprof знову запросить просканувати журнал, для виходу вибираємо F.
Але це ще не всі секрети AppArmor. Для того щоб визначити відповідність прослуховує мережевих UDP / TCP портів запущеним сервісів і головне наявності захищає профілю використовується утиліта unconfined:

$ Sudo aa-unconfined
5194 / usr / sbin / avahi-daemon не обмежений
5194 / usr / sbin / avahi-daemon не обмежений
5266 / usr / sbin / cupsd не обмежений
5290 / usr / sbin / hpiod не обмежений
5293 /usr/bin/python2.5 не обмежений
5391 / usr / sbin / mysqld не обмежений
5621 / usr / lib / postfix / master обмежений
5750 / usr / sbin / dovecot не обмежений
5750 / usr / sbin / dovecot не обмежений
5750 / usr / sbin / dovecot не обмежений
5750 / usr / sbin / dovecot не обмежений
5890 / usr / sbin / apache2 не обмежений

Таким чином створюється програмний чорний список, а адміністратор може заздалегідь визначити потенціальноопасние додатки і закрити дірки.
Отже пора робити висновок. Система пропонована Novell набагато простіше в настройках при збереженні високого рівня захисту. Щодо проста можливість самостійного створення профілю тільки додає полюси цій системі.

З.И. Хоча доводилося чути і протилежна думка, але це зовсім інша історія.