Порівняння «пісочниць»

Поки все ловили покемонів, я відпочивав. Прийшла пора відновити активність на Мейзі і сьогодні ми познайомимося з ізольованими пісочницями для запуску додатків. Напевно хоч раз в житті тобі доводилося мати справу з не викликають довіри додатками і скриптами, які могли нашкодити системі. Або ти хотів запустити браузер в максимально ізольованому оточенні, щоб в разі його злому твоєї системі ніщо не загрожувало. Сьогодні подібні завдання прийнято вирішувати за допомогою всюдисущого Docker, проте є маса набагато більш простих і зручних інструментів для швидкого запуску додатків в пісочницях.

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

Задовго до того, як ідея Docker зародилася в головах його творців, з'явився проект LXC (LinuX Containers). Він був заснований на все тих же технологіях розділення просторів імен (Linux Namespaces) і точно так же дозволяв створити мінімалістичне замкнутий на себе оточення виконання (пісочницю, контейнер) для запуску сервісів або небезпечних додатків. Однак LXC не був настільки доброзичливим до нових користувачам і не володів фішками Docker начебто листкової файлової системи, можливості швидко викачати і запустити вже готове додаток і конфіг для автоматичного складання оточень.

Набагато раніше під FreeBSD з'явилася технологія jail, що дозволяє створювати пісочниці, подібні chroot, але з акцентом на більш глибокий рівень ізоляції. Довгий час jail була гордістю FreeBSD і навіть послужила прообразом для технології Solaris Zones. Однак сьогодні вона вже не може забезпечити той рівень гнучкості і управління ресурсами, які пропонують LXC і Docker, так що в цілому jail опинилася на узбіччі історії. Сьогодні пісочниці в Linux можна створювати безліччю різних способів. Це і вже згадані LXC і Docker з їх просторами імен, це механізм seccomp, який використовується Chrome для ізоляції вкладок і плагінів, це технології SELinux / AppArmor, що дозволяють тонко регулювати доступ додатки до чого б то не було. У цій статті ми познайомимося з найзручнішими для звичайного користувача інструментами, які найкраще підходять для вирішення повсякденних завдань, таких як:

  • запуск не викликає довіри додатки, здатного зашкодити системі;
  • ізоляція браузера, email-клієнта та інших додатків, щоб їх злом не привів до витоку даних;
  • запуск «одноразових» додатків, які не повинні залишати слідів в системі.

1 Пісочниця MBOX

Почнемо з одного з найпростіших пісочниць. Mbox - не зовсім стандартний інструмент ізоляції, він не урізує повноваження запущеного додатку, не виконує віртуалізацію мережевого стека і не має будь-яких налаштувань. Єдине завдання Mbox - зробити так, щоб додаток не змогло нічого записати в файлову систему. Для цього він створює спеціальну віртуальну ФС, на яку перенаправляє всі запити вводу / виводу. В результаті під управлінням Mbox додаток працює як ні в чому не бувало, проте в ході його роботи ти отримуєш можливість застосувати або відкинути ті чи інші зміни віртуальної файлової системи до файлової системи реальної.

Найкраще цю концепцію демонструє приклад з офіційної сторінки Mbox:

У Arch Linux Mbox доступний в AUR, тому встановити його ще простіше:

Це все. Тепер можна запускати будь-які бінарники, не турбуючись, що вони залишать в файлової системі бекдор. У разі якщо з додатком необхідно обмежити доступ до певних частин файлової системи, можна використовувати профілі. Це звичайні текстові файли, в яких перераховані дозволені і заборонені на доступ каталоги. Наприклад, наступний профіль заборонить додатком доступ до твого домашнього каталогу (

), Але залишить можливість роботи з файлами поточного каталогу (.):

Щоб запустити додаток з певним профілем, досить вказати його через опцію -p:

Ще одна корисна опція - -n. Вона повністю забороняє додатком доступ в інтернет.

Порівняння «пісочниць»

Принцип роботи mbox

2 Ізолюємо запуск додатків за допомогою FIREJAIL

Само собою зрозуміло, проста заборона на доступ до файлів - це занадто мало для створення по-справжньому ізольованих пісочниць. Шкідливий код або зломщик можуть взагалі нічого не прописувати в систему, а просто забрати з собою твій Bitcoin-гаманець і базу паролів KeePass або використовувати уразливість додатки для отримання прав root і виходу з пісочниці. До того ж Mbox не дружить з графічним софтом і в цілому не годиться для запуску комплексних програм, які можуть записувати на диск безліч тимчасових файлів і постійно оновлюють свої бази даних.

На щастя, у нас є Firejail. набагато більш гнучкий і потужний інструмент ізоляції, який не просто контролює доступ до ФС, а повністю відрізає додаток від основної системи за допомогою механізму Linux Namespaces. Запущене в пісочниці Firejail програма має доступ тільки до заздалегідь певних файлів і функцій системи. Наприклад, можна заборонити додатком доступ до всіх файлів, крім власних конфігов, відкрити деякі файли тільки на читання або тільки на запис, заборонити піднімати свої привілеї до root, заборонити підключатися до певних портів, заборонити небезпечні системні виклики, такі як execv.

Обмеження додатка задаються в профілі, який може налічувати десятки рядків типу noroot, seccomp, whitelist

/.mozilla. Однак особисто тебе ніхто не змушує їх писати - Firejail вже включає в себе профілі для 95 різних додатків. Все, що залишається зробити, - просто встановити інструмент і запустити програму:

Все, тепер Firefox працює в ізольованій пісочниці і має доступ тільки до свого власного каталогу, кільком пов'язаним конфігам (KeePass, наприклад) і не має доступу до небезпечних системних викликів і портам за винятком 80, 443 і 53.

Порівняння «пісочниць»
Демострація роботи Firejail

Більш того, ти можеш запустити Firefox у повністю стерильному оточенні без доступу до конфігам і файлів основної системи:

Ти можеш створити відразу кілька таких пісочниць і використовувати їх для заходу на різні сайти (тут USER - це твоє ім'я користувача):

Ці команди запустять три інстанси браузера в окремих пісочницях. Перший ти будеш використовувати для роботи, другий для онлайн-банкінгу, а третій для всього іншого, не пов'язаного з першими двома. Компрометація одного з пісочниць не призведе до компрометації інших.

У разі необхідності ти можеш навіть обмежити ширину каналу для запущеного в пісочниці додатки. Наприклад, наступна команда обмежить ширину вхідного каналу до 80 Кбайт / с, а ширину вихідного - до 20:

Всі профілі додатків Firejail зберігає в каталозі / etc / firejail. Якщо тобі потрібно створити профіль для докладання, підтримуваного Firejail. просто скопируй профіль схожого по функціональності програми та зміни його. Формат профілю інтуїтивно зрозумілий. Правда, для фільтрації системних викликів доведеться з'ясувати, які з них використовує додаток, а потім додати в профіль. Як це зробити, описано в офіційній документації.

Порівняння «пісочниць»
Профіль для додатка в Firejail

3 SANDBOX система ізоляції додатків.

Якщо серед 95 профілів Firejail немає потрібних тобі додатків, а ідея писати профілі самому не надто тебе радує, то Sandbox - це твій вибір. Даний вид пісочниці технічно сильно відрізняється від двох уже описаних інструментів (він використовує правила SELinux замість seccomp і Namespaces), але в плані функціональності є чимось середнім.

Дана команда читає файл / etc / passwd, витягує з нього імена користувачів і записує їх у файл / tmp / users. Користі від неї ніякої, але вона відмінно демонструє принципи роботи Sandbox. У пісочниці запускається тільки команда cut, а сам файл / etc / passwd передається їй за допомогою зовнішньої команди. Висновок, з іншого боку, реалізується за допомогою звичайного перенаправлення stdout.

Порівняння «пісочниць»

Краса Sandbox в тому, що з його допомогою досить легко розширити доступні з додатком можливості. Наприклад, ти можеш створити для нього тимчасові домашній каталог і каталог / tmp, передавши команді всього один прапор:

Після завершення роботи програми ці каталоги будуть знищені, що вельми зручно при запуску що не викликає довіри софта. Але що, якщо домашній каталог потрібно зберігати між запусками (ну, припустимо, для того, щоб протестувати софт, який працює з безліччю файлів)? Для цього досить створити каталог, який стане домашнім для пісочниці, і додати ще одну опцію:

Але і це ще не все. Sandbox має вбудовані політики безпеки для запуску браузерів. Все, що потрібно зробити, - виконати таку команду:

Причому, як ти вже повинен був зрозуміти, ти можеш використовувати різні домашні каталоги для запуску різних сесій браузера або використовувати «одноразовий» домашній каталог для походів по злачних місцях. Ще один корисний прапор, про який варто згадати, - -w, з його допомогою можна вказати розмір вікна для графічного софту. Він тобі виразно стане в нагоді, тому що динамічно змінювати розмір вікна можна (це технічне обмеження Xephyr).

В цілому Sandbox - дуже зручний інструмент, єдина мета якого - підтримка в дистрибутивах. Фактично прямо з коробки Sandbox працює тільки в Fedora, заснованих на ньому RHEL / CentOS і, можливо, в інших дистрибутивах з активованим за замовчуванням SELinux.

Порівняння пісочниць ВИСНОВКИ

Запустити софт в пісочниці досить просто, і для цього можна використовувати безліч інструментів. У цій статті ми розглянули три з них.

  • Mbox відрізняється крайньою простотою і ідеальний, коли необхідно контролювати те, до яких файлів додаток повинен отримати доступ.
  • Firejail підходить для створення складних конфігурацій і запуску майже сотні різних додатків, але не дуже зручний, якщо потрібного додатка немає в списку підтримуваних.
  • Sandbox - прекрасний інструмент для запуску будь-яких типів софта, але доступний тільки користувачам Fedora і заснованих на ньому дистрибутивів.

Який з цих інструментів вибрати - вирішуй сам. А в наступній статті ми зануримося з тобою в тонкощі реалізації пісочниць і створимо її власними руками.

Схожі статті