Броньований Тукс apparmor для визначення політик безпеки по

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

Що маємо?

У процесі роботи будь-якої програми можуть виникати різні відхилення, що призводять в результаті до його аномальному виконання. Це можуть бути як системні збої, помилки в програмуванні, так і штучно викликані ситуації. І останнє далеко не рідкість. Хакер, виявивши, що при певних умовах можна вплинути на виконання програми, природно, спробує цим скористатися.

Передбачити поведінку програми під позаштатного режимі практично нереально. Прикладом тому є антивіруси, які весь час працюють в «наздоганяючому» ритмі, не забезпечуючи захист від 0-day атак. А ось нормальна поведінка програми можна описати за допомогою відносно простих правил. В результаті з'явилося кілька проектів, що реалізують концепцію упреждающей захисту. Серед них LIDS. GRSecurity. AppArmor і SELinux. Але найбільшою популярністю користуються останні два.

проект AppArmor

У AppArmor для визначення того, до яких системних ресурсів і з якими привілеями може отримати доступ ту чи іншу програму, використовуються політики безпеки, іменовані профілями (profiles). З їх допомогою до стандартної Unix-моделі безпеки DAC (Discretionary Access Control) додається більш потужна - MAC (Mandatory Access Control). На відміну від SELinux і LIDS. в яких налаштування глобальні для всієї системи, профілі в AppArmor розробляються індивідуально під кожен додаток (в SELinux також потихеньку починають використовувати такий підхід).

Для спрощення налаштувань в AppArmor вже включений набір стандартних профілів, які працюють під установки. Окремо доступні профілі для багатьох популярних програм і серверів. Якщо ж готового профілю знайти не вдалося, в його створенні допоможуть спеціальні інструменти (genprof і logprof). Для користувачів OpenSUSE є графічний інтерфейс до цих утилітам, реалізований в Yast2. Таким чином, вся філософія роботи з 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

Упс, не вантажиться ... Судячи з повідомлень на різних форумах, така помилка виникла не тільки у мене. На форумах OpenSUSE вдалося знайти підказку. AppArmor несумісний з selinux і capabilities. Якщо вони вбудовані в саме ядро, то ядро ​​доведеться пересобрать, встановивши наступні параметри в .config.

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

Інакше додаємо два параметра, що передаються ядру при завантаженні: «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 можна вважати закінченою. Наступний крок - настройка профілів.

профілі 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,
...
>

Щоб додати існуючий профіль до AppArmor. досить його скопіювати в каталог /etc/apparmor.d. Наприклад, для Postfix виробляємо наступні дії:

$ 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

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

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

/ 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,
>

Тепер в профілі утиліти passwd прибираємо прапор 'm'. На льоту це можна зробити за допомогою утиліти 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

$ Grep sergej / etc / passwd
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

натискання на (Abort) призведе до виходу з genprof з відхиленням всіх змін, а (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) відповідно. І третім блоком йдуть запити про шляхи:

Профіль: / usr / sbin / dovecot
Шлях: /
Режим: r
Строгість: невідомо
[(A) llow] / (D) eny / (G) lob / Glob w / (E) xt / (N) ew / Abo (r) t / (F) inish

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

Але це ще не всі секрети AppArmor. Для того щоб визначити наявність захищає профілю, а також відповідність прослуховує мережевих TCP / UDP-портів запущеним сервісів, використовуй утиліту unconfined:

$ Sudo aa-unconfined
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 не обмежений
5890 / usr / sbin / apache2 не обмежений

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

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

Покажи цю статтю друзям: