Для FreeBSD розвивається механізм ізоляції, схожий на plegde та unveil

Для FreeBSD запропоновано реалізацію механізму ізоляції додатків, що нагадує розвиваються проектом OpenBSD системні виклики plegde і unveil. Ізоляція в plegde здійснюється через заборону звернення до системних викликів, що не використовуються в додатку, а в unveil через вибіркове відкриття доступу тільки для окремих файлових шляхів, з якими може працювати програма. Для програми формується подібність білого списку системних дзвінків та файлових шляхів, а решта дзвінків і шляхів забороняються.

Відмінність аналога plegde і unveil, що розвивається для FreeBSD, зводиться до надання додаткового прошарку, що дозволяє ізолювати додатки без внесення змін до їх коду або за мінімальних змін. Нагадаємо, що OpenBSD plegde і unveil націлені на тісну інтеграцію з базовим оточенням і застосовуються через додавання спеціальних анотацій в код кожного додатка. Для спрощення організації захисту фільтри дозволяють обійтися без деталізації на рівні окремих системних викликів та маніпулювати класами системних викликів (введення/виведення, читання файлів, запис файлів, сокети, ioctl, sysctl, запуск процесів тощо). Функції обмеження доступу можуть викликатись у коді програми у міру виконання тих чи інших дій, наприклад, доступ до сокетів та файлів може закриватися після відкриття потрібних файлів та встановлення мережного з'єднання.

Автор порту plegde і unveil для FreeBSD має намір надати можливість ізоляції довільних додатків, для чого запропоновано утиліту curtain, що дозволяє застосовувати до додатків правила, визначені в окремому файлі. Запропонована конфігурація включає файл з базовими налаштуваннями, що визначають класи системних викликів та типові файлові шляхи, специфічні для певних застосувань (робота зі звуком, мережна взаємодія, виведення в лог тощо), а також файл з правилами доступу конкретних додатків.

Утиліта curtain може застосовуватися для ізоляції більшості немодифікованих утиліт, серверних процесів, графічних програм і навіть цілих сеансів робочого столу. Підтримується спільне використання curtain із механізмами ізоляції, що надаються підсистемами Jail та Capsicum. Також можлива організація вкладеної ізоляції, коли програми, що запускаються, успадковують виставлені батьківському додатку правила, доповнюючи їх окремими обмеженнями. Деякі операції ядра (засоби налагодження, POSIX/SysV IPC, PTYs) додатково захищаються за допомогою механізму бар'єрів, який дозволяє звертатися до об'єктів ядра, створеним не поточним чи батьківським процесом.

Процес може самостійно налаштувати власну ізоляцію за допомогою виклику curtainctl або використовуючи функції libcurtain, що надаються бібліотекою plegde() і unveil(), аналогічні подібним функціям з OpenBSD. Для відстеження блокувань у процесі роботи програми передбачено sysctl 'security.curtain.log_level'. Доступ до протоколів X11 та Wayland включається окремо через вказівку при запуску curtain опцій «-X»/»-Y» і «-W», але підтримка графічних додатків ще не досить стабілізована і має ряд невирішених проблем (проблеми в основному виявляються при використанні X11 , а підтримка Wayland реалізована значно краще). Користувачі можуть додати додаткові обмеження через створення локальних файлів із правилами (~/.curtain.conf). Наприклад, для дозволу запису з Firfox тільки до каталогу ~/Downloads/ можна додати секцію "[firefox]" з правилом "~/Downloads/ : rw +".

Реалізація включає модуль ядра mac_curtain для мандатного контролю доступу (MAC, Mandatory Access Control), набір патчів для ядра FreeBSD з реалізацією необхідних обробників і фільтрів, бібліотеку libcurtain для використання функцій plegde і unveil в додатках, утиліту curtain, приклади файлів конфігурації тестів та патчі для деяких програм у просторі користувача (наприклад, для використання $TMPDIR з метою уніфікації роботи з тимчасовими файлами). По можливості автор має намір звести до мінімуму кількість змін, для яких потрібне застосування патчів до ядра та додатків.

Джерело: opennet.ru

Додати коментар або відгук