Voor FreeBSD is een implementatie van een isolatiemechanisme voorgesteld dat lijkt op de systeemoproepen plegde en unveil die zijn ontwikkeld door het OpenBSD-project. Isolatie in plegde gebeurt door het verbieden van toegang tot systeemoproepen die in de toepassing niet worden gebruikt, terwijl unveil selectief toegang opent tot alleen bepaalde bestandspaden waarmee de toepassing kan werken. Voor de toepassing wordt een soort whitelist van systeemoproepen en bestandspaden samengesteld, terwijl alle andere oproepen en paden worden verboden.
Het verschil tussen de voor FreeBSD ontwikkelde analogon van plegde en unveil ligt in het bieden van een extra laag, waardoor toepassingen kunnen worden geïsoleerd zonder dat wijzigingen in hun code noodzakelijk zijn of met minimale wijzigingen. Ter herinnering: in OpenBSD zijn plegde en unveil gericht op een nauwe integratie met de basisomgeving en worden ze toegepast door speciale annotaties aan de code van elke toepassing toe te voegen. Voor het vereenvoudigen van de beveiliging kunnen de filters zonder details op het niveau van afzonderlijke systeemoproepen werken en manipuleren ze klassen van systeemoproepen (invoer/uitvoer, bestandslezen, bestands schrijven, sockets, ioctl, sysctl, processtart, enz.). Functies voor toegangsbeperkingen kunnen in de code van de toepassing worden aangeroepen tijdens de uitvoering van bepaalde acties, bijvoorbeeld kan de toegang tot sockets en bestanden worden gesloten na het openen van de benodigde bestanden en het tot stand brengen van een netwerkverbinding.
De auteur van de poort plegde en unveil voor FreeBSD is voornemens de mogelijkheid te bieden om willekeurige toepassingen te isoleren. Hiertoe is een hulpprogramma genaamd curtain voorgesteld, waarmee regels die in een apart bestand zijn gedefinieerd, op toepassingen kunnen worden toegepast. De voorgestelde configuratie omvat een bestand met basisinstellingen voor het definiëren van klassen van systeemoproepen en typische bestandspaden die specifiek zijn voor bepaalde toepassingen (werking met geluid, netwerkinteractie, logboekuitvoer, enz.), evenals een bestand met toegangsregels voor specifieke toepassingen.
De utiliteit curtain kan worden gebruikt voor de isolatie van de meeste ongewijzigde hulpprogramma's, serverprocessen, grafische applicaties en zelfs hele desktop-sessies. Het is mogelijk om curtain samen te gebruiken met isolatiemechanismen die worden aangeboden door de Jail- en Capsicum-subsystemen. Ook is geneste isolatie mogelijk, waarbij de gestart applicaties de aan de oudertoepassing opgelegde regels overnemen, aangevuld met aparte beperkingen. Sommige kerneloperaties (debuggingtools, POSIX/SysV IPC, PTYs) worden verder beschermd met een barrièremechanisme dat voorkomt dat wordt verwezen naar kernelobjecten die niet door het huidige of ouderproces zijn gemaakt.
Het proces kan zelf zijn isolatie instellen door curtainctl aan te roepen of door gebruik te maken van de functies plegde() en unveil() die worden aangeboden door de libcurtain-bibliotheek, vergelijkbaar met soortgelijke functies uit OpenBSD. Voor het volgen van blokkeringen tijdens de werking van de applicatie is er een sysctl ‘security.curtain.log_level’. Toegang tot de X11- en Wayland-protocollen wordt apart ingeschakeld door tijdens het starten van curtain de opties “-X”/”-Y” en “-W” op te geven, maar de ondersteuning voor grafische applicaties is nog niet voldoende gestabiliseerd en kent een aantal onopgeloste problemen (de problemen manifesteren zich voornamelijk bij het gebruik van X11, terwijl de ondersteuning voor Wayland aanzienlijk beter is gerealiseerd). Gebruikers kunnen extra beperkingen toevoegen door lokale bestanden met regels te creëren (~/.curtain.conf). Bijvoorbeeld, om schrijfrechten vanuit Firefox alleen naar de map ~/.Downloads/ toe te staan, kan een sectie “[firefox]” met de regel “~/.Downloads/ : rw +” worden toegevoegd.
De implementatie omvat de kernelmodule mac_curtain voor verplichte toegangscontrole (MAC, Mandatory Access Control), een reeks patches voor de FreeBSD-kernel met de noodzakelijke handlers en filters, de libcurtain-bibliotheek voor het gebruik van de functies plegde en unveil in applicaties, de utiliteit curtain, voorbeeldconfiguratiebestanden, een set tests en patches voor sommige programma's in de gebruikersruimte (bijvoorbeeld voor het gebruik van $TMPDIR om de werking met tijdelijke bestanden te uniformiseren). Waar mogelijk wil de auteur het aantal wijzigingen minimaliseren waarvoor patches aan de kernel en applicaties nodig zijn.
Bron: opennet.ru
