Pro FreeBSD byla navržena implementace mechanismu izolace aplikací, podobného systémovým voláním plegde a unveil vyvíjeným projektem OpenBSD. Izolace v plegde se provádí prostřednictvím zákazu přístupu k nepoužívaným systémovým voláním aplikace a v unveil prostřednictvím selektivního otevírání přístupu pouze pro jednotlivé cesty k souborům, se kterými může aplikace pracovat. Pro aplikaci se vytváří jakási bílá lista systémových volání a cest k souborům, přičemž všechna ostatní volání a cesty jsou zakázána.
Rozdíl vyvíjeného analogy plegde a unveil pro FreeBSD spočívá v poskytnutí další vrstvy, která umožňuje izolovat aplikace bez nutnosti měnit jejich kód nebo s minimálními změnami. Připomeňme, že v OpenBSD jsou plegde a unveil zaměřeny na těsnou integraci se základním prostředím a používají se přidáním speciálních anotací do kódu každé aplikace. Pro zjednodušení organizace ochrany filtry umožňují obejít se bez detailizace na úrovni jednotlivých systémových volání a manipulovat s třídami systémových volání (vstup/výstup, čtení souborů, zápis souborů, sokety, ioctl, sysctl, spouštění procesů atd.). Funkce omezení přístupu mohou být volány v kódu aplikace v průběhu provádění určitých akcí, například přístup k soketům a souborům může být uzavřen po otevření požadovaných souborů a navázání síťového spojení.
Autor portu plegde a unveil pro FreeBSD má v úmyslu poskytnout možnost izolace libovolných aplikací, k čemuž byla navržena utilita curtain, která umožňuje aplikovat na aplikace pravidla definovaná v samostatném souboru. Navržená konfigurace zahrnuje soubor se základními nastaveními, která určují třídy systémových volání a typové cesty k souborům specifické pro určité aplikace (práce se zvukem, síťová interakce, výstup do logu atd.), a také soubor s pravidly přístupu konkrétních aplikací.
Nástroj curtain může být použit k izolaci většiny nemodifikovaných utilit, serverových procesů, grafických aplikací a dokonce celých relací pracovní plochy. Společné použití curtain je podporováno mechanismy izolace poskytovanými subsystémy Jail a Capsicum. Také je možné uspořádat vnořenou izolaci, kdy spuštěné aplikace zdědí rodičovskému aplikaci stanovená pravidla, doplňující je o jednotlivá omezení. Některé operace jádra (nástroje pro debugování, POSIX/SysV IPC, PTYs) jsou navíc chráněny pomocí mechanizmu bariér, který neumožňuje přístup k objektům jádra vytvořeným jiným než aktuálním nebo rodičovským procesem.
Proces si může sám nastavit vlastní izolaci pomocí volání curtainctl nebo používáním funkcí poskytovaných knihovnou libcurtain, jako jsou plegde() a unveil(), podobných funkcím z OpenBSD. Pro sledování blokací během běhu aplikace je k dispozici sysctl ‘security.curtain.log_level’. Přístup k protokolům X11 a Wayland se aktivuje samostatně zadáním přepínačů při spuštění curtain ‘-X’/‘-Y’ a ‘-W’, ale podpora grafických aplikací zatím není dostatečně stabilizována a má řadu nevyřešených problémů (problémy se převážně projevují při použití X11, zatímco podpora Wayland je realizována podstatně lépe). Uživatelé mohou přidávat další omezení vytvářením místních souborů s pravidly (~/.curtain.conf). Například pro povolení zápisu z Firefoxu pouze do složky ~/.Downloads/ lze přidat sekci ‘[firefox]’ s pravidlem ‘~/.Downloads/ : rw +’.
Implementace zahrnuje modul jádra mac_curtain pro mardantní kontrolu přístupu (MAC, Mandatory Access Control), sadu patchů pro jádro FreeBSD s realizací potřebných zpracovatelů a filtrů, knihovnu libcurtain pro použití funkcí plegde a unveil v aplikacích, nástroj curtain, příklady konfiguračních souborů, sadu testů a patche pro některé programy v uživatelském prostoru (například pro používání $TMPDIR za účelem zjednodušení práce s dočasnými soubory). Pokud to bude možné, chce autor minimalizovat počet změn, pro které je vyžadováno použití patchů pro jádro a aplikace.
Zdroj: opennet.ru
