Door R van den Blink & B Baars

SE Linux: een kwestie van vertrouwen

22-08-2008 • 16:22

38

Multipage-opmaak

Introductie

In nagenoeg alle bedrijven wordt aandacht besteed aan het beveiligen van systemen of data, maar dit wordt vaak gezien als een technisch feestje. Het technische deel van de beveiliging is echter slechts een onderdeel van de totale keten. Steeds vaker kiezen bedrijven voor een abstract en onderbouwd beveiligingsmodel, dat van bovenaf wordt opgelegd.

Security Enhanced Linux is hier een goed voorbeeld van. Gebaseerd op een abstract mathematisch model vindt het zijn uiteindelijke toepassing in een technische implementatie. Beveiliging wordt steeds minder gezien als een puur technische aangelegenheid, dat vooral lastig is voor de eindgebruiker. Steeds meer bedrijven kiezen ervoor beveiliging te implementeren als een bedrijfsbrede eis, gebaseerd op een gefundeerde visie van bovenaf en geïmplementeerd volgens de daaruit volgende richtlijnen.

De vraag naar implementaties van theoretisch bewezen beveiligingsmodellen wordt hierdoor ook steeds groter. Een beveiligingsmodel biedt handvatten voor een bedrijf om beveiliging op een structurele manier door te voeren. Administratief kan worden verplicht alles op papier vast te leggen, procedureel kan er voor gezorgd worden dat bijvoorbeeld belangrijke beslissingen nooit door slechts één persoon kunnen worden genomen en technisch kan er voor gekozen worden om een uniforme en sterke vorm van encryptie te implementeren. Een goed voorbeeld hiervan is SE Linux, een implementatie van een zogenaamd trusted model.

SE Linux is een mac-implementatie binnen de Linux-kernel. SE Linux is bedoeld als een consistente access control-implementatie, waarbij het principe van least privilege het uitgangspunt is. SE Linux richt zich hierdoor op vertrouwelijkheid van data binnen een systeem. Uitgangspunt is dat er aan alle objecten een label wordt gekoppeld die de vertrouwelijkheid van het object weergeeft. Binnen deze context is een object een entiteit waar een object of iemand toegang tot vraagt.

De SE Linux-toevoeging zorgt ervoor dat de reeds aanwezige functionaliteit van de kernel niet beïnvloed wordt en is derhalve ook in een korte tijd geaccepteerd als de facto standaard. De toevoeging bestaat uit een centrale autoriteit die bepaalt welk subject toegang heeft tot welk object. Deze vorm van flexibiliteit worden bereikt door gebruik te maken van de flask-architectuur.

Discretionary access control

Op dit moment is dac de meest gebruikte vorm van access control. Dit is een methode waarbij elk bestand en directory wordt voorzien van een eigenaar. Deze eigenaar kan vervolgens bepalen wie wat met de directory of het bestand mag doen, door middel van zogenaamde read/write/execute bits. Het voornaamste punt van dit systeem is flexibiliteit; iedereen kan zijn eigen bestanden beheren en naar wens toegang verlenen en ontnemen.

Een minder sterk punt van dac is de wat gebrekkige controleerbaarheid. Elke gebruiker zal z'n eigen richtlijnen handhaven met betrekking tot toegang van bestanden en daardoor ontbreekt uniformiteit binnen de implementatie veelal. Daarnaast wil een gebruiker meestal niet lastig worden gevallen met te strikte privileges. Hierdoor ontstaat het risico van 'privilege escalation'.

In de praktijk kan privilege escalation bijvoorbeeld voorkomen op een webserver. Deze service draait normaal gesproken onder een speciaal account, zoals op Linux doorgaans de apache- of httpd-user. Het is mogelijk dat een bug of exploit wordt gevonden in Apache die een normale websitegebruiker toegang verschaft tot het systeem. De gebruiker kan dan code uitvoeren onder het systeemaccount van de webserver. Als het systeem onvoldoende beschermd is tegen exploits, kan de gebruiker zich vervolgens de toegang verschaffen tot het root-account of een soortgelijke user met privileges, met alle gevolgen van dien. Ook kan aan een meer horizontale vorm van privilege escalation worden gedacht, waarbij een gebruiker toegang krijgt tot de data van een andere gebruiker.

* Bell-Lapadula

Al in de jaren zeventig was de Amerikaanse defensie bezorgd om de beveiliging van de systemen en de vertrouwelijkheid van documenten. Als reactie op deze bezorgdheid werd door de Amerikaanse defensie het Bell-Lapadula-model ontwikkeld. Dit is een mathematisch model dat het concept van een 'secure state machine' en modes van toegang beschrijft in toegangsregels. Dit wordt bereikt door alle objecten te voorzien van labels die omschrijven wie toegang heeft tot wat. Wanneer iets of iemand toegang krijgt tot een object wordt er gesproken van een transition state. Het Bell-Lapadula model waarborgt de secure state van de machine door gebruik te maken van de volgende drie kernregels:

* Simple security rule: Deze regel beschrijft dat een subject met een bepaald security level geen leesrechten heeft op objecten met een hoger security level (No read up).

* Star property: Deze regel beschrijft dat een subject met een bepaald security level geen schrijfrechten heeft naar objecten met een lager security level (No write down).

* Strong star property: Deze regel beschrijft dat een subject alleen lees- en schrijfrechten heeft op objecten van een gelijkwaardig security level. Als een subject dus leesrechten wil tot een object, dan moeten de security levels van beide onderwerpen gelijk zijn.

Mandatory access control

Mandatory access control is de daadwerkelijke implementatie van het Bell-Lapadula-model, Hierbij maakt uiteindelijk het OS de uiteindelijk beslissing of een subject toegang heeft tot een object. Deze beslissing wordt genomen door een centrale autoriteit, wat mac een meer gestructureerd model maakt dan dac.

Zoals in Bell-Lapadula omschreven maakt mac gebruik van labels. Ieder subject en ieder object krijgt een label dat het niveau van vertrouwelijkheid weergeeft. Vervolgens wordt er aan de hand van dit label bepaald of een subject toegang krijgt tot dit object. Dit gebeurt alleen als de vertrouwelijkheidsniveaus van het subject en het object gelijk zijn. Is dit niet het geval, dan wordt er minimaal een van de drie Bell-Lapadula-regels overtreden. Op deze manier wordt er gegarandeerd dat vertrouwelijke informatie niet gelekt wordt naar een minder vertrouwd subject en dat het object niet 'vervuild' raakt met data waarvan de vertrouwelijkheid lager ligt.

Het vertrouwelijkheidsniveau van zowel subjecten als objecten wordt bepaald door de security officer, geconfigureerd door de systeem administrator, afgedwongen in het besturingssysteem en ondersteund door de beveiligingstechnieken.

SE Linux dac vs mac

Flask

Volgend op onderzoeken naar een zo flexibel mogelijke manier om regels te creëren die zich 'on the fly' kunnen aanpassen aan veranderingen in het systeem, is de National Security Agency in de VS begonnen met de ontwikkeling van de Flask-architectuur.

In een systeem waarbij een policy zich direct kan aanpassen zou deze de huidige stand van zaken binnen het systeem kunnen laten meewegen om een beslissing te nemen over de toekomstige stand van zaken. Het is echter zeer twijfelachtig of een systeem zo flexibel kan zijn dat het beslissingen kan nemen over elke staat waarin een systeem zich op dat moment bevindt.

Wat veel realistischer is, is om het deel van het systeem te identificeren dat beveiligingstechnisch relevant is en vervolgens dat deel onder de security policies te laten vallen. Het nadeel daarvan laat zich raden, zodra een deel van het systeem niet compleet in de policy is opgenomen, valt er een gat in de beveiliging.

De architectuur van Flask is gebaseerd op het prototype van het distributed trusted operating system, dat dezelfde doelen nastreefde als de huidige Flask-architectuur. Het nadeel van het dtos-systeem was echter dat deze geen ondersteuning biedt voor dynamische security policies. Op het hoogste niveau is Flask compatibel met het gfac-model, dat ervan uit gaat dat alle operaties op het systeem zich in een autonome ruimte afspelen. Bij moderne computersystemen is dit echter niet het geval en lastig te realiseren. Flask lost deze tekortkoming op.

Flask is een mac-implementatie waarbij met name gelet is op het intrekken van rechten. Normaliter is het binnen een mac-implementatie lastig om uitgereikte rechten in te trekken zolang een proces of gebruiker toegang heeft tot de resource. Binnen de Flask-architectuur is dit probleem opgelost door gebruik te maken van een Security Server die een policy afdwingt.

Policies en voordelen

De SE Linux-configuratie wordt beschreven in modulaire policies. De kern van deze policies wordt tegenwoordig steeds vaker gevormd door de zogenaamde Reference Policy. Dit is een set met universele definities voor de meest voorkomende onderdelen van het systeem, zoals netwerktoegang of toegang tot de kernel. Nieuwe applicaties met nieuwe modules kunnen eenvoudig gebruikmaken van de handvatten die de Reference Policy biedt, waardoor deze modules kort en overzichtelijk blijven. Bovendien wordt voorkomen dat bepaalde stukken in meerdere applicatiespecifieke policies moeten worden gedefinieerd.

Doordat SE Linux weinig tot geen invloed heeft op de bestaande onderdelen van de kernel en de reeds ingeladen modules, kan het activeren van nieuwe modules gebeuren zonder dat een herstart van het systeem noodzakelijk is. Slechts bij de eerste activering en bij zeer grote wijzigingen is het opnieuw opstarten van het systeem noodzakelijk.

De grote kracht van SE Linux is het gecontroleerd toegang kunnen geven tot resources. Hierbij kan een resource zowel data zijn, een stuk hardware of een andere applicatie op het systeem. Het eerder genoemde voorbeeld van privilege escalation op een webserver is niet mogelijk als er gebruik wordt gemaakt van SE Linux. De Security Server zal afdwingen dat Apache binnen zijn eigen context moet blijven, ook al is de applicatie zelf kwetsbaar voor een vulnerability. Naar schatting kan iets meer dan de helft van alle in 2007 door Cert gerapporteerde en van buitenaf te misbruiken lekken in daemons met SE Linux worden geminimaliseerd .

SE Linux kan volledig achteraf worden geïnstalleerd en geconfigureerd. Het schrijven van een policy voor een applicatie begint met het analyseren van de behoeften van onder meer de benodigde resources en netwerktoegang van de applicatie. Aan de hand hiervan kan een basispolicy voor de applicatie worden geschreven, die het uitgangspunt voor de uiteindelijke policy vormt. Hiermee is SE Linux geen extra last voor de ontwikkelaar van de applicatie en is het mogelijk de policy na het ontwikkelen van de applicatie te schrijven.

Wel vereist SE Linux diepgaande kennis van zowel de applicatie als het systeem zelf. Een policyschrijver moet het gedrag van de applicatie, inclusief systemcalls, kunnen verklaren.

Conclusie

SE Linux is geen garantie voor een veilig systeem. Wel is het een belangrijke stap naar een gecontroleerde informatiestroom binnen een systeem of organisatie.

Daarnaast legt SE Linux alleen de focus op de vertrouwelijkheid van informatie. Een ander essentieel onderdeel van een gecontroleerde informatiestroom is de betrouwbaarheid en de integriteit van de informatie. Om de integriteit van informatie te kunnen waarborgen, kan er worden gekeken naar het gebruik van bijvoorbeeld pki. Applicaties en services op een systeem moeten nog steeds zo worden geconfigureerd dat alleen de strikt noodzakelijke functionaliteit aanwezig is. Uiteraard moet ook deze functionaliteit worden voorzien van de maximale beveiliging die de applicatie biedt.

SE Linux is een zeer krachtige toevoeging aan de Linux-kernel en wordt door alle grote Linux-distributies ondersteund. De totale beveiliging van het systeem komt op een hoger niveau te staan, waarbij subjecten alleen toegang hebben tot expliciet benoemde objecten. Toegang tot alle andere informatiestromen is niet mogelijk.

Dankzij het gebruik van de Flask-architectuur kunnen nieuwe policies eenvoudig worden toegevoegd en worden wijzigingen in de actieve policy direct actief, zelfs op reeds actieve processen.

Reacties (38)

38
30
8
1
0
1
Wijzig sortering
Leuk om te zien dat Tweakers dit soort in-depth artikelen gaat plaatsen. Hoewel ik me qua inhoud moet aansluiten bij de eerdere commentaren, ben ik wel blij dat opmerkingen uit de enquete ter harte worden genomen!
"Met systeembeheer, mag ik u wachtwoord even weten dat hebben we nodig"

maw, security begint bij de mensen niet de technologie.

[Reactie gewijzigd door jrfloor op 22 juli 2024 13:31]

tuurlijk.
Maar ik weet uit ervaring dat systemen, veiligheid en mensen niet altijd goed samengaan.
Schoolvoorbeeld: gebruiker X moet z'n (windows) laptop laten herinstalleren (reden doet er niet toe), hij wil hem vrijdag binnenbrangen, en maandag ophalen. Dat is in de praktijk zo geod als onmogelijk zonder één of meer wachtwoorden van de gebruiker. De gebruiker verwacht immers dat z'n profiel er net zo uitziet als voor de herinstallatie.

Met roaming profiles is dit zogezegd van de baan, tot een of ander progsel één en ander in de "local settings" kwijt wil oid.

dan kan je gaan resetten (jij of de gebruiker zelf), om z'n "echte" wachtwoord niet te hoeven weten,maar wat boeit het: als ik echt wil heb ik toch voldoende rechten om zowat alle wachtwoorden te resetten/ in te loggen als anderen.
Die uitwisseling tussen gebruiker en admin valt dus onder vertrouwen: de gebruiker MOET de beheerder of technierker wel vertrouwen (als hij een beetje service wil toch)
Ik denk eigenlijk dat jrfloor bedoelde dat iemand zich voordoet als de systeembeheerder, en zo onrechtmatig toegang krijgt tot het security-niveau van de gedupeerde. Social Engineering dus. Daar valt weinig tegen te doen anders dan een beetje training, en "je systeembeheerder kennen".

Het geluk van SE Linux is als ik het goed begrijp dat zo'n security breach slechts in het "hokje" van de gebruiker gebeurd is, en niet op het hele security-niveau (en lager) waar de gebruiker actief is.

En de systeembeheerder heeft altijd volledige macht over het systeem. Hij is immers root. Ik denk dus ook eigenlijk dat systeembeheerders flink gescreend worden voordat ze worden toegelaten bij bedrijven waar dit soort security-systemen in werking zijn.
Ik denk dus ook eigenlijk dat systeembeheerders flink gescreend worden voordat ze worden toegelaten bij bedrijven waar dit soort security-systemen in werking zijn.
nogmaals een reden waarom het artikel niet duidelijk maakt waar het nu eigenlijk om gaat, SELinux is namelijk ook gewoon een onderdeel/laag van de ubuntu installatie die je (op dit moment misschien wel) gebruikt.

van de ubuntu wiki:

---
SELinux is a mandatory access control (MAC) system that can be used to protect services and contain security exploits found in system daemons or user applications. SELinux constrains services to a least-privilege security domain by way of a security policy, customized by administrators, that provides fine-grain control over information flow.

It controls access to files, sockets, devices, and other object classes. The security policy is written in a flexible configuration language. It defines explicit rules about what subjects (users, programs) can access which objects (files, sockets, devices). All other information flows are denied by the SELinux system.
---

in feite is SELinux dus een soort interne firewall voor datastromen binnen je computer, in tegenstelling tot een normale firewall die de datastromen van en naar je computer beheert.

edit: het kan ook zijn dat ubuntu tegenwoordig AppArmor gebruikt, de concurrent van SELinux, maar dat terzijde ;)

[Reactie gewijzigd door litemotiv op 22 juli 2024 13:31]

SELinux vormt inderdaad een (transparante) laag op standaard NFS in b.v. Ubuntu.
Ik snap niet waarom mensen er zo positief over zijn, het heeft geen enkele fysieke data encryptie. Als je low-level schijf toegang krijgt op de server via een ander aanwezig besturing systeem, exploit, of door dat je hem open schroeft, kan je alles lezen en alles schrijven..., lekker veilig :?
Dat iemand ongewenst fysiek toegang tot een server krijgt is voor de meeste systeembeheerders niet echt een zorg. Allereerst is het risico klein, omdat het een zeldzame manier van toegangsverschaffing is, ten tweede is het vaak uitbesteed aan een externe hostingpartij en ten derde is fysieke beveiliging van grote serverruimtes iets dat vaak al gebeurd.

Het doel van SELinux is bedoelde en onbedoelde pogingen tot het verkrijgen van rechten te onderscheppen. Met SELinux kan je er bijvoorbeeld voor zorgen dat de httpd-user, na een remote exploit, nooit via een local exploit root kan worden. Daarnaast kan je er voor zorgen dat iemand die root wordt, de bestanden van pakweg de financiele afdeling niet kan lezen. Dat biedt meerwaarde op grote systemen met veel users.
Maar ik weet uit ervaring dat systemen, veiligheid en mensen niet altijd goed samengaan.
Schoolvoorbeeld: gebruiker X moet z'n (windows) laptop laten herinstalleren (reden doet er niet toe), hij wil hem vrijdag binnenbrangen, en maandag ophalen. Dat is in de praktijk zo geod als onmogelijk zonder één of meer wachtwoorden van de gebruiker. De gebruiker verwacht immers dat z'n profiel er net zo uitziet als voor de herinstallatie.
Boot met linux livecd.
Sluit een externe (bijv USB) schijf aan.
Kopieer het profiel over naar de externe schijf.
Reboot en herinstalleer laptop.
Maak nieuw profiel aan met zelfde naam als oud.
Kopieer oud profiel over nieuw profiel.
Geef laptop terug aan gebruiker.

Geen wachtwoord nodig, ik doe dit wel vaker op deze manier :), Dit werkt natuurlijk niet als je een encrypt profiel hebt.
"Met systeembeheer, mag ik u wachtwoord even weten dat hebben we nodig"

maw, security begint bij de mensen niet de technologie.
Je hebt helemaal gelijk en in de meeste bedrijven is de techniek niet de zwakste schakel. Deze toevoeging is echter bedoeld voor bedrijven die procesmatig informatiebeveiliging al helemaal op orde hebben en net dat beetje extra zekerheid willen hebben. Verder is het waarschijnlijk ook een leuk speeltje voor de technische beveiligingsexperts.
Haha, ik ken juist de omgekeerde situatie:
Die en die persoon moet iets doen op de server, vraag het admin wachtwoord maar even aan systeembeheer.
(die het vervolgens op last van de managers moet geven omdat anders de workflow in gevaar komt :P)
Dit heb ik ook wel eens meegemaakt. Gewoon de manager het compromie voorschuiven: Zal ik inloggen op de server, en dan samen met de persoon de taken uitvoeren zodat de workfow niet in gevaar kom.
Uitermate interessant artikel. Zo zou ik er graag meer willen zien. De nieuws waarde is inderdaad null, maar daar gaat het helemaal niet om, we kunnen er iets van leren. Het geheel was goed te volgen maar had wat verder uitgewerkt mogen worden om het voor meer mensen begrijpelijk te maken. Eventueel met wat meer voorbeelden.
Het is dan ook een feature/review en geen nieuwsbericht :). De feedback wordt uiteraard ter harte genomen.
In dat geval: ik hoop echt dat er meer van dit soort artikelen mogen komen. Er worden nog weleens artikelen geplaatst over (nieuwe) hardware, of bijvoorbeeld de reeks waarin de veilige usb-sticks werden gehacked, maar de software-kant krijgt helaas minder aandacht toebedeeld, of het moet gaan over games (da's mooi overigens) of de nieuwste Windows-feature(s) ofzo. Dit soort artikelen hoef ik persoonlijk niet te snappen om ze te kunnen waarderen, omdat ik weet dat er veel mensen zijn die er baat bij hebben waardoor het een meerwaarde biedt voor t.net.
Leuk artikel wat betreft onderwerp, maar de inhoud is veel minder. Er worden geen alternatieve methodes (AppArmor, Sandboxing/jailing) besproken met hun voordelen/nadelen; het artikel is niet leesbaar voor de gemiddelde gebruiker en er wordt geen lijn getrokken naar de praktische toepassingen voor de doelgroep (mijn guess: tweakers die linux op hun home-server draaien en tweakers die werkzaam zijn als linux sysadmin bij een bedrijf/organisatie). Het was leuk geweest om een aantal voorbeelden te laten zien van policy's, hoe het geimplementeerd wordt in linux-distro's en mischien zou de vraag beantwoord kunnen worden waarom FreeBSD en OpenBSD veel voor security-sensitive toepassingen worden gebruikt, terwijl daar geen SE Linux en AppArmor voor zijn.
Precies. het is een diepte artikel, waar helaas context ontbreekt. Doordat alternatieven ontbreken mist het artikel dus ook een stukje kritiek.

SELinux is precies om die reden niet opgenomen in de standaard kernel. zoals linux thorvals het samenvat "You security guys are insane...

Niet omdat het geen goed security model is, maar heel de context van belang is.

[Reactie gewijzigd door leuk_he op 22 juli 2024 13:31]

Dat vind ik wel meevallen. Ik zit ook niet in die business, en anders dan prive hou ik me niet met netwerk- en beveiliging bezig.
Toch met aandacht gelezen en nieuwe (voor mij:) ) dingen geleerd.

Al denk ik het eea te weten van deze materie, als de echte experts aan het woord komen dan blijkt mijn kennis toch wel tegen te vallen...
Dus - wel interessant ja, goed om te weten maar het niveau is wel 'professioneel', de toegankelijkheid is daardoor misschien wat minder. Toch graag meer artikelen van dit niveau!
Is het mogelijk om een paar concrete voorbeelden toe te voegen? Bijvoorbeeld over een applicatie die iets wel/niet mag volgens zijn policy, waarna eventuele exploits voor die applicatie daar dus ook geen toegang tot kunnen krijgen? Met echte namen en concrete voorbeelden van bestanden? Dan is het iets beter te plaatsen.

[Reactie gewijzigd door Domokoen op 22 juli 2024 13:31]

Ik moet mij helaas aansluiten bij anderen dat het artikel een ietwat van de hak op de tak is. Ik wist al het een en ander van SE Linux, maar het is een mooie reminder om er nog weer eens naar te kijken.
Overigens juich ik meer van dit soort artikelen van ganzer harte toe. Goed verteerbare artikelen over dit soort professionele materie biedt interessant vermaak en zijn vaak erg goede introducties om je meer te verdiepen in zaken
goed artikel, leuk de theoretische modellen uitgelegd en goed doorgelinkt wat dat in de praktijk betekent. Ik zie jullie vast nog wel op een CISSP meeting :)
Het is soms wat lastig te lezen, maar wel erg interessant.
Wat mij betreft mogen er wel vaker wat van dit soort artikelen komen :)
Zo krijgen we eens wat anders te lezen dan wat je in die Windows Server 2008 banners ziet :P
Het is wel een heel droog/theoretisch verhaal. Ik ben blij dat dit soort artikelen (!) op tweakers verschijnen maar een hoop dat het wel iets praktischer gaat worden. Een soort howto/tutorial zou ook leuk zijn :)

Ubuntu ondersteund overigens seLinux en Apparmor. Volgensmij krijgt seLinux tegenwoordig de voorkeur.

Op dit item kan niet meer gereageerd worden.