Een MAC-label is een beveiligingsattribuut dat toegepast kan worden op subjecten en objecten die door het systeem gaan.
Bij het instellen van een label moet de gebruiker in staat zijn om precies te begrijpen wat er gebeurt. De attributen die voor een object beschikbaar zijn hangen af van de geladen beleidsmodule en die interpreteren hun attributen op nogal verschillende manieren. Het resultaat kan resulteren in onverwacht en wellicht ongewenst gedrag van een systeem als het beleid door een gebrek aan begrip verkeerd is ingesteld.
Het beveiligingslabel op een object wordt gebruikt als onderdeel van een beveiligingstoegangscontrolebeslissing door een beleidseenheid. Voor sommige beleidseenheden bevat het label zelf alle informatie die nodig is voor het maken van een beslissing; in andere modellen kunnen de labels als onderdeel van een grotere verzameling verwerkt worden, enzovoort.
Zo staat bijvoorbeeld het instellen van het label biba/low op een bestand voor een label dat wordt beheerd door de beveiligingsbeleidsmodule Biba, met een waarde van “low”.
Een aantal beleidsmodules die in FreeBSD de mogelijkheid voor labelen ondersteunen, bieden drie specifieke voorgedefinieerde labels: low, high en equal. Hoewel ze in verschillende beleidsmodules op een andere manier toegangscontrole afdwingen, is er de garantie dat het label low de laagst mogelijke instelling is, het label equal het subject of object uitschakelt of ongemoeid laat en het label high de hoogst mogelijk instelling afdwingt die beschikbaar is in de beleidsmodules Biba en MLS.
Binnen een bestandssysteemomgeving met een enkelvoudig label kan er maar één label
gebruikt worden op objecten. Hiermee wordt een verzameling van toegangsrechten op het
hele systeem opgelegd en dat is voor veel omgevingen voldoende. Er zijn echter een aantal
gevallen waarin het wenselijk is meervoudige labels in te stellen op subjecten of
objecten in het bestandssysteem. In die gevallen kan de optie multilabel
meegegeven worden aan tunefs(8).
In het geval van Biba en MLS kan er een numeriek label gezet worden om het precieze niveau van de hiërarchische controle aan te geven. Dit numerieke niveau wordt gebruikt om informatie in verschillende groepen te partitioneren of te sorteren voor het classificeren voor het geven van toegang voor een bepaalde groep of een groep van een hoger niveau.
In de meeste gevallen stelt een beheerder alleen maar een enkelvoudig label in dat door het hele bestandssysteem wordt gebruikt.
Wacht eens, dat klinkt net als DAC! MAC gaf de controle toch strikt aan de beheerder? Dat klopt nog steeds, root heeft nog steeds de controle in handen en is degene die het beleid instelt zodat gebruikers in de juiste categorie en/of toegangsniveaus worden geplaatst. Daarnaast kunnen veel beleidsmodules ook de gebruiker root beperkingen opleggen. Dan wordt de controle overgedragen aan een groep, maar kan root de instellingen op ieder gewenst moment intrekken of wijzigen. Dit is het hiërarchische of toegangsmodel dat wordt afgedekt door beleidseenheden zoals Biba en MLS.
Vrijwel alle aspecten voor het instellen van labelbeleid worden uitgevoerd met basissysteemprogramma's. Die commando's bieden een eenvoudige interface voor object- of subjectinstellingen of de manipulatie en verificatie van de instellingen.
Alle instellingen kunnen gemaakt worden met de hulpprogramma's setfmac(8) en setpmac(8). Het commando setfmac wordt gebruikt om MAC labels op systeemobjecten in te stellen en setpmac voor het instellen van de labels op systeemsubjecten:
# setfmac biba/high test
Als het bovenstaande commando geen foutmeldingen heeft veroorzaakt, dan komt er een prompt terug. Deze commando's geven nooit uitvoer, tenzij er een fout is opgetreden; net als bij de commando's chmod(1) en chown(8). In sommige gevallen kan de foutmelding “Permission denied” zijn en deze treedt meestal op als het label wordt ingesteld of gewijzigd op een object dat is beperkt. [1] De systeembeheerder kan de volgende commando's gebruiken om dit probleem te voorkomen:
# setfmac biba/high test “Permission denied” # setpmac biba/low setfmac biba/high test # getfmac test test: biba/high
Hierboven is te zien dat setpmac gebruikt kan worden om
aan de instellingen van een beleidsmodules voorbij te gaan door een ander label toe
te wijzen aan het aangeroepen proces. Het hulpprogramma getpmac wordt meestal toegepast op processen die al draaien,
zoals sendmail: hoewel er een proces-ID nodig is in
plaats van een commando, is de logica gelijk. Als gebruikers proberen een bestand te
manipuleren waar ze geen toegang tot hebben, onderhevig aan de regels van de geladen
beleidsmodules, dan wordt de foutmelding “Operation
not permitted” weergegeven door de functie mac_set_link
.
Met de beleidsmodules mac_biba(4), mac_mls(4) en mac_lomac(4) is het mogelijk eenvoudige labels toe te wijzen. Die kunnen hoog, gelijk aan en laag zijn. Hieronder een beschrijving van wat die labels betekenen:
Het label low is de laagst mogelijke labelinstelling die een object of subject kan hebben. Deze instelling op objecten of subjecten blokkeert hun toegang tot objecten of subjecten met de markering hoog.
Het label equal hoort alleen ingesteld te worden op objecten die uitgesloten moeten worden van een beleidsinstelling.
Het label high geeft een object of subject de hoogst mogelijke instelling.
Afhankelijke van iedere beleidsmodule heeft iedere instelling een ander informatiestroomdirectief tot gevolg. Het lezen van de hulppagina's die van toepassing zijn geeft inzicht in de precieze eigenschappen van de standaard labelinstellingen.
Dit zijn de labels met numerieke graden die gebruikt worden voor vergelijking:afdeling+afdeling.
biba/10:2+3+6(5:2+3-20:2+3+4+5+6)
Het bovenstaande kan dus geïnterpreteerd worden als:
“Biba-beleidslabel”/“Graad 10”:“Afdelingen 2, 3 en 6”: (“graad 5 ...”)
In dit voorbeeld is de eerste graad de “effectieve graad” met de “effectieve afdelingen”, de tweede graad is de lage graad en de laatste is de hoge graad. In de meeste instellingen worden deze instellingen niet gebruikt. Ze zijn inderdaad instellingen voor gevorderden.
Als ze worden toegepast op systeemobjecten, hebben ze alleen een huidige graad/afdeling in vergelijking met systeemsubjecten, omdat ze de reikwijdte van rechten in het systeem en op netwerkinterfaces aangeven, waar ze gebruikt worden voor toegangscontrole.
De graad en afdelingen in een subject en object paar wordt gebruikt om een relatie te construeren die “dominantie” heet, waar een subject een object domineert, geen van beiden domineert, of beiden elkaar domineren. Het geval “beiden domineren” komt voor als de twee labels gelijk zijn. Vanwege de natuur van de informatiestroom van Biba, heeft een gebruiker rechten op een verzameling van afdelingen, “need to know”, die overeen zouden kunnen komen met projecten, maar objecten hebben ook een verzameling van afdelingen. Gebruikers dienen wellicht hun rechten onder te verdelen met su of setpmac om toegang te krijgen tot objecten in een afdeling die geen verboden terrein voor ze zijn.
Gebruikers moeten zelf labels hebben, zodat hun bestanden en processen juist kunnen samenwerken met het beveiligingsbeleid dat op een systeem is ingesteld. Dit wordt ingesteld via het bestand login.conf door gebruik te maken van aanmeldklassen. Iedere beleidsmodule die labels gebruikt implementeert ook de instelling van de gebruikersklasse.
Een voorbeeld dat iedere instelling uit de beleidsmodule bevat is hieronder te zien:
default:\ :copyright=/etc/COPYRIGHT:\ :welcome=/etc/motd:\ :setenv=MAIL=/var/mail/$,BLOCKSIZE=K:\ :path=~/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:\ :manpath=/usr/share/man /usr/local/man:\ :nologin=/usr/sbin/nologin:\ :cputime=1h30m:\ :datasize=8M:\ :vmemoryuse=100M:\ :stacksize=2M:\ :memorylocked=4M:\ :memoryuse=8M:\ :filesize=8M:\ :coredumpsize=8M:\ :openfiles=24:\ :maxproc=32:\ :priority=0:\ :requirehome:\ :passwordtime=91d:\ :umask=022:\ :ignoretime@:\ :label=partition/13,mls/5,biba/10(5-15),lomac/10[2]:
De optie label wordt gebruikt om het standaardlabel voor aanmeldklasse in te stellen dat door MAC wordt afgedwongen. Het wordt gebruikers nooit toegestaan deze waarde te wijzigen, dus kan het gezien worden als niet optioneel vanuit het perspectief van de gebruiker. In de echte wereld besluit een beheerder echter nooit iedere beleidsmodule te activeren. Het wordt sterk aangeraden de rest van die hoofdstuk te lezen alvorens (een deel van) de bovenstaande instellingen te implementeren.
Opmerking: Gebruikers kunnen hun label wijzigen na het initiële aanmelden, maar dit is wel afhankelijk van de beperkingen van een beleidsinstelling. Het bovenstaande voorbeeld vertelt de beleidseenheid Biba dat de minimale integriteit van een proces 5 en het maximum 15, maar dat het effectieve label standaard 10 is. Het proces draait op niveau 10, totdat het proces het label wijzigt, misschien door een gebruiker die setpmac gebruikt, bij het aanmelden beperkt tot de door Biba ingestelde reeks.
In alle gevallen dient de database met aanmeldklassemogelijkheden opnieuw gebouwd te worden met cap_mkdb na het wijzigen van login.conf. Dit wordt ook in alle komende voorbeelden en beschrijvingen gedaan.
Het is belangrijk op te merken dat in veel gevallen sites te maken hebben met bijzonder grote aantallen gebruikers waardoor er een aantal verschillende aanmeldklassen nodig zijn. Het is dan nodig gedetailleerd te plannen omdat dit anders bijzonder complex wordt om te onderhouden.
Labels kunnen ook ingesteld worden op netwerkinterfaces om te assisteren bij het controleren van het stromen van gegevens over het netwerk. In alle gevallen werken ze op dezelfde wijze als het beleid werkt ten aanzien van objecten. Gebruikers met bijvoorbeeld een hoge instelling in biba krijgen geen toegang tot interfaces met een laag label.
Het maclabel
kan meegegeven worden aan ifconfig als het MAC-label op netwerkinterfaces wordt ingesteld:
# ifconfig bge0 maclabel biba/equal
In het bovenstaande voorbeeld wordt het MAC-label biba/equal ingesteld op de interface bge(4). Als er een instelling wordt gebruikt die gelijkvormig is aan biba/high(low-high), dan moet het volledige label worden ingegeven, anders treedt er een fout op.
Iedere beleidsmodule die labels ondersteunt een instelling waarmee het MAC-label op netwerkinterfaces kan worden
uitgeschakeld. Het label instellen op equal
heeft
hetzelfde effect. Deze instellingen zijn na te kijken in de uitvoer van sysctl, de hulppagina van het beleid en zelfs later in dit
hoofdstuk.
Standaard gebruikt een systeem de optie singlelabel
.
Wat betekent dit voor een beheerder? Er zijn een aantal verschillen die allemaal hun
eigen voor- en nadelen hebben voor de flexibiliteit in het beveiligingsmodel
voor een systeem.
Bij gebruik van singlelabel
kan er maar één label,
bijvoorbeeld biba/high, gebruikt worden voor ieder subject
of object. Hierdoor is er minder beheer nodig, maar de flexibiliteit voor
beleid dat labels ondersteunt daalt erdoor. Veel beheerders willen de optie multilabel
gebruiken in hun beveiligingsmodel.
De optie multilabel
staat ieder subject of object toe
om zijn eigen onafhankelijke MAC-label
te hebben in plaats van de standaardoptie singlelabel
,
die maar één label toestaat op een hele partitie. De labelopties multilabel
en single
zijn alleen
verplicht voor de beleidseenheden die de mogelijkheid bieden om te labelen,
waaronder de beleidsmogelijkheden van Biba, Lomac, MLS en SEBSD.
In veel gevallen hoeft multilabel
niet eens ingesteld
te worden. Stel er is de volgende situatie en beveiligingsmodel:
FreeBSD-webserver die gebruik maakt van het MAC-raamwerk en een mengeling van verschillende beleidseenheden.
De webserver heeft maar één label nodig, biba/high,
voor alles in het systeem. Hier is de optie multilabel
voor het bestandssysteem niet nodig, omdat een enkelvoudig label altijd van
toepassing is.
Maar omdat de machine als webserver dienst gaat doen, dient de webserver te draaien als biba/low om administratiemogelijkheden te voorkomen. Later wordt beschreven hoe de beleidseenheid Biba werkt, dus als de voorgaande opmerking wat lastig te begrijpen is, lees dan verder en kom later nog een keer terug. De server zou een aparte partitie kunnen gebruiken waarop biba/low van toepassing kan zijn voor de meeste, zo niet alle, runtime-statussen. Er ontbreekt veel in dit voorbeeld, bijvoorbeeld de restricties op gegevens en (gebruikers)instellingen. Dit was slechts een snel voorbeeld om de hiervoor aangehaalde stelling te ondersteunen.
Als er een niet-labelende beleidseenheid wordt gebruikt, dan is de optie multilabel
nooit verplicht. Hieronder vallen de
beleidseenheden seeotheruids, portacl en partition.
Bij gebruik van multilabel
voor een partitie en het
neerzetten van een beveiligingsmodel gebaseerd op multilabel
functionaliteit gaat de deur open voor hogere
administratieve rompslomp, omdat alles in een bestandssysteem een label krijgt.
Hieronder vallen mappen, bestanden en zelfs apparaatknooppunten.
Het volgende commando stelt multilabel
in op de
bestandssystemen om meerdere labels te kunnen krijgen. Dit kan alleen uitgevoerd
worden in enkele gebruikersmodus:
# tunefs -l enable /
Dit is geen criterium voor het wisselbestandssysteem.
Opmerking: Sommige gebruikers hebben problemen ondervonden met het instellen van de vlag
multilabel
op de rootpartitie. Als dit het geval is, kijk dan naar Paragraaf 17.17 van dit hoofdstuk.
[1] |
Andere condities kunnen andere foutmeldingen veroorzaken. De gebruiker die het object probeert te herlabelen kan bijvoorbeeld niet de eigenaar zijn van het bestand, het object kan niet bestaan of alleen-lezen zijn. Een verplichte beleidsinstelling zal het proces niet toestaan om een bestand te herlabelen, misschien om een eigenschap van het bestand, een eigenschap van het proces of een eigenschap van de voorgestelde nieuwe waarde van het label. Een gebruiker die met een lage integriteit draait, probeert bijvoorbeeld het label van een bestand met een hoge integriteit te veranderen of zo'n zelfde gebruiker kan proberen het label van een bestand met lage integriteit te wijzigen in een label van een hoge integriteit. |