De beveiliging van Unix programmeren: Minimaliseer voorrechten



Veiligheid procedures moeten minimaliseren privileges, om de bug te beperken in de mogelijkheid van veiligheidsgaten. In dit artikel wordt beschreven hoe u de bevoorrechte modules, de voorrechten en de voorrechten verleend aan de effectieve tijd zoveel mogelijk te beperken privileges te minimaliseren.

Artikel niet alleen bespreekt een aantal van de traditionele UNIX bevoorrechte klasse van mechanismen, ook gesproken over de relatief nieuwe mechanismen, zoals de gevangenis van FreeBSD (), Linux Security Module (Linux Security Modules, LSM) kader, en de Security-Enhanced Linux (SELinux).

3-3-2003, Internet Security Systems over Sendmail is een ernstige fout in een waarschuwing. Alle e-mail via de message transfer agent (mail transfer agent, MTA) over te dragen, Sendmail is de meest populaire MTA, dus deze waarschuwing getroffen vele organisaties wereldwijd. Het probleem is, zorgvuldig volgens de gebruikelijke configuratie, de "vanaf", "aan" of "CC" gebied van e-mail berichten in te stellen kan de afzender volledige (root) de controle van een machine die Sendmail. Meer serieus, zal de algemene firewall geen bescherming tegen dergelijke aanvallen in de machine.

De directe oorzaak van deze maas in de wet, omdat Sendmail heeft een lek opsporen, buffer overflow kan optreden. Echter, een belangrijke rol in factor, Sendmail wordt vaak geïnstalleerd als een "setuid root"-programma, het draaien op het systeem heeft volledige controle over machtigingen. Dit, Sendmail foutje in elk van degenen die een aanvaller kan de directe controle van het gehele systeem mogelijk te maken.

Dit ontwerp nodig is? Nee, Wietse Venema's Postfix is een gemeenschappelijk op elkaar kunnen afstemmen is het MTA. Net als Sendmail, Postfix zal echter een stuk van de veiligheid testen te doen,, om privileges te minimaliseren, Postfix ontworpen als een set van modules. De resultaten, Postfix wordt algemeen beschouwd als veiliger dan Sendmail procedures. Dit artikel bespreekt hoe de privileges te minimaliseren, kunt u de zelfde denkwijze van toepassing zijn op uw programma.

Minimaliseer de basis van voorrecht

Praktische toepassing van de procedures zijn tekortkomingen. Willen we echt het echter, is er inderdaad. Complexe behoeften, plannen druk en veranderingen in het milieu is het onwaarschijnlijk dat de praktijk zo foutloos proces. Zelfs degenen die zijn geslaagd voor complexe en geavanceerde technologie om formeel te bewijzen dat de juiste procedure, zal er gebreken. Waarom? Een van de redenen is dat de keuring moet een aantal aannames worden gedaan, en vaak zijn deze veronderstellingen niet helemaal correct. In ieder geval, om verschillende redenen, hadden de meeste van de procedures niet een strenge test. Zelfs vandaag is er geen gebrek (onwaarschijnlijk), zijn de toekomst het onderhoud van de wijziging of wijzigingen in de omgeving die waarschijnlijk gebreken in te voeren. Dus, om te gaan met praktische problemen, hebben we enkele manier om de continuïteit procedures te ontwikkelen, ondanks de gebreken van ons programma.

Ondanks deze tekortkomingen, het programma voor beveiliging is de belangrijkste manier is het minimaliseren van het voorrecht. Privilege niet alleen zodat iedereen kan doen. UNIX-systemen in de klas, met "root" gebruiker, andere gebruikers of leden van een groep van privileges is de meest voorkomende types van privileges. Sommige systemen kunt u subsidie lezen of schrijfrechten hebben voor specifieke bestanden. Maar goed, om privileges te minimaliseren:

Slechts een deel van het programma moeten de voorrechten en privileges verleend

Slechts een deel van het absoluut noodzakelijk is om bepaalde privileges te verlenen

De privileges van de effectieve tijd of effectief kan worden beperkt tot het absolute minimum tijd

Het feit is het doel, niet absoluut. De basis van uw organisatie (zoals uw besturingssysteem of virtuele machine) kan de strikte uitvoering van deze is niet gemakkelijk, en de strikte uitvoering van deze kan heel ingewikkeld zijn, die hebben geleid tot de voltooiing van het proberen om strengere defect te voeren. Echter, hoe dichter je van die doelen, de mogelijkheid van gebreken leiden tot een lager veiligheidsniveau. Zelfs als het defect had beveiligings problemen op, die hebben geleid tot de veiligheid probleem kan nog lager zijn. En als u ervoor kunt zorgen dat slechts een klein deel van het programma specifieke privileges heeft, kunt u gebruik maken van een veel extra tijd om dat deel dat kan weerstaan aanslagen te waarborgen. Dit idee is niet nieuw; Saltzer en een uitstekende 1975 Schröder papier gesproken over de beginselen van veiligheid, expliciet als een beginsel van minimale privilege (zie bronnen). Sommige ideeën zijn tijdloos, zoals het minimaliseren van het voorrecht.

De volgende drie hoofdstukken zullen bespreken deze doelstellingen op hun beurt, inclusief de wijze waarop hun klasse UNIX-systemen te bereiken. Vervolgens bespreken we de FreeBSD en Linux in sommige speciale mechanismen beschikbaar zijn, met inbegrip van de NSA's Security-Enhanced Linux (SELinux) discussie.

Minimaliseer bevoorrechte modules

Zoals eerder gezegd, wordt alleen de bevoorrechte deel van het programma worden alleen toegepast bevoorrechte. Dat wil zeggen, wanneer je het programma, probeer te verwerken uitgesplitst in afzonderlijke secties, te maken slechts een klein deel van de onafhankelijke behoeften van speciale privileges.

Als de verschillende onderdelen moeten worden uitgevoerd, gebruik dan de UNIX-systeem processen (threads niet). Privilege van het delen van hun veiligheid draad, kan de draad in kwestie bemoeien met het proces van alle andere threads. Geprivilegieerde deel van de voorbereiding, op de andere programma's als het wordt aangevallen: de ene dag zal worden! Zorg ervoor dat bevoorrechte deel van de enige dingen om te doen zo weinig mogelijk; beperkte functionaliteit betekent minder kans om te worden gebruikt.

Een gemeenschappelijke aanpak is het creëren van een uiterst beperkte functie heeft specifieke privileges (zoals een setuid of setgid) command-line tool. passwd commando van UNIX is een voorbeeld, het is een bijzonder voorrecht command-line tools voor het wijzigen van het wachtwoord (setuid root), maar het kan doen, is uw wachtwoord wijzigen. Dus kan een verscheidenheid van de GUI tools verzoek aan de daadwerkelijke verandering te doen passwd. Indien mogelijk, probeer volledig te voorkomen dat er setuid of setgid programma, is het moeilijk om ervoor te zorgen dat u werkelijk alle invoer te beschermen. Maar soms moet je een setuid / setgid programma's te maken, dus wanneer dat nodig is, zoveel mogelijk te verwerken in de kleinste en meest beperkt.

Er zijn veel andere manieren. Bijvoorbeeld, kunt u een speciaal voorrecht van een kleine "server (server)" proces, dat de server alleen specifiek verzoek, maar alleen bevestigd dat de verzoeker is toegestaan om het verzoek kwestie. Een andere veel voorkomende benadering is om te beginnen met de privileges van een programma, het programma dan afgeleid alles te geven en de voorrechten van het tweede proces, het proces door te doen het meeste werk.

Wees voorzichtig hoe deze modules met elkaar communiceren. In vele soorten van UNIX-systemen, command-line waarde en het milieu kan worden gezien door andere gebruikers, dus het is niet vertrouwelijk zijn in het proces te sturen gegevens tussen de goede manier. Pijpleiding kan bevoegd, maar zorgvuldig te voorkomen dat de impasse (twee uiteinden van een eenvoudig verzoek kan verversen / antwoord-protocol kan worden bevoegde).

Minimaliseer verleende rechten

Om ervoor te zorgen dat u hoeft alleen rechten heeft om de procedure - subsidie te doen stoppen hier. UNIX belangrijkste manier om privileges te verkrijgen die zij lopen als een gebruiker of groep. Typisch, om het proces gebruik maken van hun draaien als gebruikers en groepen, maar, "setuid" of "setgid" programma wordt het programma hebt gebruiker of groep privileges.

Helaas, er zijn een aantal onvrijwillige manier om programma "setuid root" privileges op UNIX-systemen ontwikkelaars. De ontwikkelaars denken dat ze dingen voor zichzelf te worden "gemakkelijk" omdat ze daar niet in diepte-account van hun procedures is een duidelijke behoefte speciale voorrechten. Het probleem is, aangezien de meeste van deze programma's worden gemaakt van klasse UNIX-systemen bijna alles doen, zodat eventuele gebreken kan snel tot een veiligheids-ramp.

Niet alleen omdat u behoefte aan een eenvoudige taak te voltooien om alle mogelijke voorrechten te geven. De procedure mag alleen worden gegeven van de privileges die ze nodig hebben. Als je kunt, om setgid om ze te draaien, niet te gebruiken setuid - setgid privileges minder. Maak een specifieke gebruiker en groep (gebruik geen root), en gebruik ze volgens uw behoeften. Om ervoor te zorgen dat die eigendom van root uitvoerbare alleen door root te schrijven, zodat anderen niet kunnen wijzigen. Bestand machtigingen in te stellen zeer strenge - zo niet absoluut noodzakelijk is, laat niet iedereen kan bestanden lezen of schrijven, en gebruik die specifieke gebruikers en groepen. Kan uitleggen van deze spellen kan een voorbeeld zijn van "top tien" scores van de gangbare praktijk. Veel procedures zijn "setgid games", om alleen het spel programma kan gewijzigd worden "top tien" scores, en de scores van de documenten die zijn opgeslagen in de master-groep zijn games (en alleen deze groep kunnen schrijven). Zelfs als de aanvaller aanval en kwam in een spelprogramma, alles wat hij kon doen zou zijn de scores te wijzigen van documenten. In ieder geval, game-ontwikkelaars nog steeds nodig hebben om hun kwaadaardige programma's scoren bestand verhinderen schrijven.

chroot () system call is een nuttig instrument is - helaas zijn er een aantal moeilijk te gebruiken. Wanneer het proces bekijken van het bestand systeem "root", zal dit systeem te wijzigen oproep het proces om de inhoud te bekijken. Als u van plan bent om het te gebruiken - en kan het nuttig zijn - klaar te zijn om enige tijd te nemen om goed gebruik van te maken. Moet zorgvuldig worden voorbereid "nieuwe root", die is gecompliceerd, omdat de juiste toepassing is afhankelijk van het platform en applicatie-eigenschappen. U moet root zijn, worden chroot () call, en je moet de status van niet-root (root-gebruikers snel veranderen van de chroot omgeving, dus als het in werking treedt, moet u het voorrecht lift). En chroot zal niet veranderen toegang tot het netwerk. Dit kan een nuttig systeem oproepen, allemaal wel eens nodig om het te overwegen, maar de inspanning om goed voorbereid te doen.

Beperkte middelen is een vaak vergeten instrument, waarbij zowel het proces van opslag hulpbronnen, met inbegrip van middelen omvat. Deze beperkingen denial of service aanvallen zijn bijzonder nuttig:

Opslag voor, kunt u voor elke gebruiker of groep voor elke gemount file systeem of een bestand nummer opslaglimiet (limiet). In GNU / Linux-systeem, zie contingent (1), quotactl (2) en quotaon (8) om diepgaande kennis van deze functie, echter, waar zelfs al zijn ze niet in staat zijn om het merendeel van de klasse van UNIX-systemen gebruiken, zijn onder het quotasysteem. In GNU / Linux en vele andere systemen, kunt u 'harde' grenzen (nooit hoger) en 'zachte' grenzen (die kan worden tijdelijke overschrijding).

Het proces is, kunt u vele grenzen, zoals het aantal geopende bestanden, het aantal processen, enzovoort. Deze mogelijkheid is eigenlijk een deel van de norm (zoals een Single UNIX Specification (Single UNIX Specification)), allemaal in de klas UNIX-systemen bijna alomtegenwoordig; te begrijpen, zie getrlimit (2), setrlimit (2) en getrusage ( 2), sysconf (3) en ulimit (1). Proces kan nooit hoger zijn dan de "huidige regel", maar ze kunnen allemaal de weg te stijgen naar het huidige "cap te beperken." Helaas, er is een anomalie termijn problemen kan u verwarren. "De huidige line" is ook wel bekend als "zachte" grenzen, te beperken, ook bekend als "harde" grenzen. Op deze manier wordt u in een ongewone situatie, het proces kan nooit hoger zijn dan de grenzen van het proces van zachte (huidige) grenzen - en u kunt de zachte quotum overschrijden is. Ik stel voor om het proces van het gebruik van de term "de huidige regel" en "cap" (nooit gebruik te beperken de term "zachte" en "hard"), dus zou er geen verwarring.

Minimaliseer de tijd voorrecht

Maar alleen als die nodig zijn om privileges te geven - geven geen moment.

Indien mogelijk, gebruik geen kwestie wat uw onmiddellijke behoefte, de voorrechten en geef ze blijvend. Zodra ze definitief verlaten, dan is de aanvaller niet anders kan gebruik maken van deze privileges. Bijvoorbeeld, de behoefte aan individuele root privileges aan de wortel en de procedure kan starten (bijvoorbeeld via een setuid root) en dan overschakelen naar de minder bevoorrechte gebruiker te lopen. Dit is het aantal Internet-servers (met inbegrip van de Apache Web server) de gebruikte methode. Klasse UNIX-systemen niet mogelijk een programma op 0 到 1024 TCP / IP poort open, je moet root privileges. Maar de meeste servers hoeft alleen maar poorten open booten, na het voorrecht was niet meer nodig. Een manier is om als root, zo spoedig mogelijk om de benodigde geprivilegieerde poorten te openen en vervolgens definitief verwijderen van de root-rechten (met inbegrip van het proces behoort tot een bevoorrechte groep). Ga proberen om alle andere erfelijke privileges te verwijderen, bijvoorbeeld, sluit zo spoedig mogelijk behoefte aan specifieke rechten om het bestand te openen.

Als je niet kan definitief opgeven voorrechten, dan kun je op zijn minst tijdelijk wegnemen van privileges zo vaak mogelijk. Dit is beter dan permanent verwijderen van de privileges, want als een aanvaller de controle van uw programma, kan de aanvaller opnieuw inschakelen van de privileges en gebruiken. Niettemin is het de moeite waard.

Vele aanvallen, uitsluitend wanneer zij het voorrecht van het bedriegen van de procedure om enkele dingen te doen buiten het programma en het programma van de privileges van zijn ingeschakeld om te slagen (bijvoorbeeld door het creëren van een symbolische link anomalie en hard links) hebben. Als het programma is gewoonlijk niet in staat zijn privileges, dan zou de aanvaller graag willen profiteren van dit programma zal worden bemoeilijkt.

Relatief nieuw mechanisme

Tot nu toe hebben we gesproken over de beginselen daadwerkelijk van toepassing op bijna alle besturingssystemen, en sinds de 19e eeuw, 70s, bijna alle van de klasse van UNIX-systemen zijn vergelijkbaar met conventionele mechanismen. Dat betekent niet dat ze nutteloos zijn, eenvoudig en de test van de tijd is hun eigen voordeel. Echter, sommige relatief nieuwe klasse van UNIX-systemen ter ondersteuning van toegenomen ten minste privilege mechanisme is het de moeite waard om te weten. Hoewel het gemakkelijk is om de tijd beproefde mechanisme te vinden, maar op de relatief nieuwe mechanisme voor informatie nog niet bekend. Dus, hier zal ik een aantal geselecteerde waardevol mechanisme: FreeBSD jail () te bespreken, Linux Security Module (LSM) kader en de Security-Enhanced Linux (SELinux).

FreeBSD jail ()

chroot () system call heeft veel problemen, zoals hierboven vermeld. Bijvoorbeeld, is het moeilijk om een correct gebruik, kan de gebruiker root nog wat leren van, maar het heeft geen controle over toegang tot het netwerk. FreeBSD ontwikkelaars besloten om een nieuw systeem oproep om deze problemen op te lossen toe te voegen, belt u het nieuwe systeem, genaamd de gevangenis (). Deze oproep is vergelijkbaar met chroot (), maar probeer het gebruik eenvoudiger en efficiënter te gebruiken. In een gevangenis, zijn alle verzoeken (zelfs root) beperkt de gevangenis, en de gevangenis in het proces kunnen alleen communiceren met andere processen, en het systeem de root gebruiker probeert geblokkeerd in de gevangenis de weg van de typische. de gevangenis zal worden toegewezen aan een specifiek IP-adres, kan geen gebruik maken van enig ander adres als zijn eigen adres.

gevangenis () oproep is uniek voor FreeBSD, die de bruikbaarheid beperkt. Echter, alle OSS / FS veel crossover tussen de impact van de kernel (kruisbestuiving heeft). Bijvoorbeeld, heeft met behulp van de Linux security kader is ontwikkeld voor de Linux-versie van een gevangenis. Bovendien heeft FreeBSD 5 toegevoegd een flexibele MAC-frame (vanaf TrustedBSD project), met inbegrip van de basisfuncties van een module gelijk aan SELinux. Alle, om te zien in de toekomst meer van deze situatie niet worden verrast.

Linux Security Module (LSM)

In de Linux Kernel Summit 2001 op, Linus Torvalds heeft een probleem. Een aantal verschillende beveiligings-projecten, met inbegrip van de Security-Enhanced Linux (SELinux) project, en vroeg hem om hun veiligheid methoden toe te voegen aan de Linux kernel. Het probleem is dat deze verschillende methoden vaak niet compatibel zijn. Torvalds is geen eenvoudige manier om te bepalen welke de beste is, dus vroeg hij aan die projecten samen om een gemeenschappelijk kader te creëren beveiliging Linux. Dus, kan de beheerder hen een speciale installatie-methode ze willen zekerheid. Na een aantal gesprekken met Torvalds, Crispin Cowan een groep opgericht om het gemeenschappelijk veiligheids-kader te creëren. Dit kader is vernoemd Linux Security Module (LSM) kader, maakt nu deel uit van de standaard Linux-kernel (zoals de 2.6 versie van de kernel).

Conceptueel, LSM kader is bijzonder eenvoudig. Linux kernel doet nog steeds haar routine veiligheidsinspectie; Als u bijvoorbeeld een bestand te schrijven, moet je nog steeds toegang hebben tot het schrijven.

Echter, wanneer dat nodig is als de Linux kernel moeten toegang verlenen om te bepalen of deze moet worden gecontroleerd - door een "boek" een beveiligingsmodule de vraag uit te voeren - om te bepalen of de vergunning actie. Op deze manier kunnen beheerders eenvoudig selecteren dat hij gebruik wil maken van de beveiligingsmodule, en hetzelfde als bij andere Linux-kernel module invoegen. Sindsdien wordt de beveiligingsmodule te bepalen wat is toegestaan.

LSM raamwerk ontworpen om zo flexibel dat het kan veel verschillende soorten van beveiliging beleid te verwezenlijken. In feite, om een aantal verschillende projecten samen voor zorgen dat er voldoende bevoegde LSM kader van het echte werk. Bijvoorbeeld, wanneer de interne object is aangemaakt of verwijderd wanneer de LSM in een aantal gesprekken - niet is omdat deze werkzaamheden mogen worden opgeschort, maar om de veiligheid module kan spoor van belangrijke gegevens bij te houden. Met behulp van een aantal verschillende analyse-instrumenten om ervoor te zorgen dat de LSM kader geen belangrijke afwijkingen van hun doelgroep afslag missen. De resultaten tonen aan dat het project dan veel mensen denken harder, en het succes ervan is moeilijk heb.

LSM is noodzakelijk om de fundamentele ontwerpbeslissingen te begrijpen gemaakt. Kortom, LSM kader is ontworpen voor vrijwel alle takken zijn beperkte uitzonderingen, niet betrouwbaar (gezaghebbende). Afslag naar een geloofwaardige abnormale absolute definitieve beslissing te nemen: Als de uitzondering is de tak die een verzoek moet worden toegestaan, zal het onvoorwaardelijk worden toegestaan. Integendeel, het kan alleen de geloofwaardigheid van de abnormale tak van de andere beperkingen, maar het kan geen nieuwe rechten toe. Theoretisch, als alle takken zijn geloofwaardige abnormale LSM, LSM kader zal worden versoepeld. Een naam staat () uitzondering bijkantoor is vertrouwd - maar alleen omdat het moest van de reguliere POSIX-capaciteit te ondersteunen. Echter, de brief kan maken van alle takken abnormale, is het noodzakelijk om de Linux kernel, vele fundamentele veranderingen, zegt de verandering niet mag worden aanvaard.

Veel mensen vrezen dat als de meeste van de abnormale tak kan geloven, zelfs de kleinste fout zal een ramp worden, en laat de uitzondering bijkantoor is beperkt betekent dat gebruikers niet verrast zult worden (in ieder geval, de originele UNIX-permissies nog steeds werk) . LSM kader, zodat ontwikkelaars die gebruik willen maken van de methode te beperken, en het merendeel van de ontwikkelaars ervan overtuigd dat ze kunnen werken binnen het kader.

LSM kader voor het begrijpen van andere beperkingen is ook belangrijk. LSM kader is ontworpen voor toegangscontrole, auditing en andere veiligheidsproblemen ondersteuning niet. LSM module zelf niet registreert alle verzoeken of de resultaten daarvan, omdat ze niet kunnen zien allemaal. Waarom? Een van de redenen is dat de kernel niet kan de module LSM oproep geweigerd het verzoek; Als u wilt deze weigering zal een probleem zijn audit. Ook, wegens performance redenen, is een aantal van de voorgestelde tak voor abnormaliteiten in het netwerk en de gegevens LSM gebied niet worden gebruikt door mainline kernel. Het kan een aantal van de toegang tot het netwerk, de controle, maar niet genoeg om de "gelabeld" netwerk data stream (in dit geval ondersteuning, verschillende datapakketjes hebben verschillende labels behandeld door de beveiliging van het besturingssysteem). Deze beperkingen zijn niet geschikt, in strijd met de fundamentele beginselen van het algemene ideeën; LSM kader is een dag verlengd hoop om zich te ontdoen van deze beperkingen.

Niettemin, zelfs met deze beperkingen, LSM kader om de privileges te beperken om toe te voegen is het nog altijd zeer bruikbaar. Torvalds LSM kader van de fundamentele doelstelling is gerealiseerd: "Ik heb niet de strijd tussen de verschillende groepen, zoals de beveiliging. Ik hoop dat indirecte is, laat me deze strijd, dan de markt kan strijd om te beslissen welke strategie en toegepast ter verwezenlijking van de ultieme . "

Dus, als je Linux wilt beperken het privilege van uw programma, kunt u geheel maak je eigen beveiligingsmodule. Als u een echte externe hindernissen die het kan nodig zijn om dit te doen - gelukkig is dit mogelijk. Echter, dit is erg belangrijk, in ieder geval, je nog wilt kernel code te schrijven. Indien mogelijk kunt u het beste niet de bestaande Linux-beveiligingsmodule te gebruiken, maar probeer je eigen veiligheid module te schrijven. Sommige LSM module beschikbaar, maar, Security-Enhanced Linux (SELinux) is het meest volwassen Linux een beveiligingsmodule, dus laten we eens kijken naar deze module.

Security-Enhanced Linux (SELinux) geschiedenis

Een beetje geschiedenis zal helpen om u te helpen begrijpen van de Security-Enhanced Linux (SELinux) - en hij zelf is een leuke geschiedenis. U. S. National Security Agency (National Security Agency, NSA) al geruime tijd bezig met de veiligheid van de meeste besturingssystemen, een beperkte capaciteit. Immers, een van hen is om ervoor te zorgen dat de U. S. ministerie van Defensie om de computer te gebruiken in het gezicht van een eindeloze reeks aanvallen op de veiligheid te handhaven. NSA geconstateerd dat de meeste van de veiligheid van het besturingssysteem mechanismen, waaronder Windows en de meeste UNIX-en Linux-systemen, slechts een "selectieve access control (Discretionary Access Control)" (DAC) mechanisme bereikt. DAC-systeem is om het programma te draaien onder de identiteit van de gebruiker en documenten aan de eigenaar van het object programma kan wel bepalen. NSA denk dat dit een ernstig probleem, omdat de DAC zelf kwetsbaar of kwaadaardige programma is een falen van bescherming. In plaats daarvan heeft NSA lang gehoopt dat het besturingssysteem ook kan ondersteunen "Mandatory Access Control (Mandatory Access Control)" (MAC) mechanisme.

MAC mechanisme stelt de systeembeheerder kan de veiligheid beleid definieert het hele systeem, deze strategie kan gebaseerd op andere factoren, zoals de rol van de gebruiker, het programma de geloofwaardigheid en het verwachte gebruik, zal het programma het gebruik van het type data, etc., om het programma te beperken kan Wat te dingen te doen. Een klein voorbeeld, met de Mac nadat de gebruiker niet gemakkelijk "vertrouwelijk (geheim)" gegevens in "niet-vertrouwelijke (geclassificeerd)" gegevens. Echter, MAC eigenlijk veel meer doen dan dat.

NSA is geweest met het besturingssysteem providers voor vele jaren, maar veel van de grootste marktaandeel leverancier van integratiesoftware voor de MAC is niet geïnteresseerd in de komende. Zelfs de providers die integreert MAC wordt meestal ook gebruikt worden als "afzonderlijke producten", in plaats van conventionele producten. Mede omdat de oude MAC is niet flexibel genoeg.

Dus NSA van de macht proberen om MAC en flexibeler en gemakkelijker te worden opgenomen in het besturingssysteem. Zij maken gebruik van de Mach besturingssysteem ontwikkeld prototypes van hun ideeën, en later breidde de werkzaamheden die door "Fluke" van het besturingssysteem.

Het is echter moeilijk om mensen die deze ideeën kunnen worden toegepast op "echte" besturingssysteem, want al deze zijn gebaseerd op kleine "speelgoed-klasse" onderzoeksproject te overtuigen. Zeer weinig buiten het prototype kunnen proberen om deze ideeën te zien in een echte toepassing van hoe te werken. NSA niet kunnen overtuigen een aanbieder van de titel om deze ideeën toe te voegen, en de NSA had geen recht om de eigen besturingssysteem te wijzigen. Dit is geen nieuw probleem; jaar geleden, DARPA geprobeerd haar eigen besturingssysteem van kracht, onderzoekers maakten gebruik van het besturingssysteem Windows, maar stuitten op veel problemen (zie de referenties hieronder).

Dus, NSA kwam een gedachte achteraf duidelijk lijkt te zijn: het gebruik van een speeltje is niet open-source besturingssysteem, de veiligheid en uitvoeren van hun ideeën aan te tonen dat (1) het kan werken, (2) is specifiek voor de werkzaamheden (via broncode voor iedereen). Zij kozen voor de dominante markt, open source kernel (Linux) en waarin de realisatie van hun idee dat "Security-Enhanced Linux (SELinux). Niet verrassend, gebruik de real-systeem (Linux) voor de NSA onderzoekers kunnen met hen omgaan in het speelgoed niet kan behandelen. Bijvoorbeeld, in de meeste Linux-gebaseerde systemen, dynamisch bijna alle zijn gekoppeld, zodat ze iets moest doen over hoe diepgaande analyse procedures (Search hen over de "entrypoint" en "execute" 权限 's-documentatie voor meer informatie). Dit is een succesvolle manier veel meer, mensen die gebruik maken van SELinux prototype eerder dan degenen die gebruik maken van een veel meer.

SELinux aan het werk

Dus, om te werken voor SELinux? SELinux methode eigenlijk heel gemeen. Een belangrijke kern van elk object, zoals elk object uit het bestandssysteem, en elk proces heeft een correlatie met hun "security context (veiligheid context)". Veiligheid context kan worden gebaseerd op militaire veiligheid niveau (niet vertrouwelijk, vertrouwelijke en zeer vertrouwelijke), gebaseerd op rollen van gebruikers, de toepassing op basis van (ja, een webserver kan haar eigen veiligheid context hebben), of voor veel andere elementen. Als het een ander programma wordt uitgevoerd, kan het proces verandert de beveiligde context. Zelfs, afhankelijk van de procedure noemen, een bepaald programma kan draaien in verschillende contexten beveiliging, zelfs als een gebruiker begint met alle procedures.

Dan is de systeembeheerder kan aangeven welke voorrechten verleend aan een context te creëren met de beveiliging die het "veiligheidsbeleid (veiligheidsbeleid)". Wanneer het systeem oproep doet zich voor wanneer, SELinux om te controleren of alle benodigde rechten zijn verleend - en zo niet, dan dit verzoek geweigerd.

Bijvoorbeeld, om een bestand te maken, de beveiligde context van het huidige proces de veiligheid van de bovenliggende directory context op de "Search" (zoeken) en "add_name" voorrecht, en het moet (te creëren) bestanden in de beveiligde context van de "Create ( te maken) "voorrecht. Ook de security context van dat bestand met het bestand systeem moet het voorrecht hebben van "verbonden (geassocieerd)" (Dus, bijvoorbeeld, "zeer vertrouwelijke" stukken kunnen niet schrijven "geen vertrouwen" in de schijf). Ook voor stopcontacten, netwerk interfaces, host en poort van de toegang tot het netwerk te controleren. Als het veiligheidsbeleid voor degenen die zijn alle toegekende rechten aan het verzoek zal worden toegestaan door SELinux. Anders zullen zij worden verboden. Als je het stap voor stap al deze controles wordt er wat trager, maar er zijn vele programma voor de optimalisering (gebaseerd op jaren van onderzoek) om het zeer snel maken.

Het onderzoek is onafhankelijk van de klasse systeem in de gebruikelijke UNIX-permissies bits; in de SELinux-systeem, moet u het type zowel de standaard UNIX-permissies, SELinux is er toestemming om iets te doen. Echter, SELinux controles kunnen veel doen van de traditionele UNIX-permissies voor de klas is moeilijk te bereiken.

Met behulp van SELinux, kunt u eenvoudig een specifiek programma kan alleen worden uitgevoerd en alleen in de context van een bepaalde webserver bestanden weg te schrijven. Nog interessanter is dat als een aanvaller scoorde een webserver en root worden, zal een aanvaller geen controle krijgen van het gehele systeem - als er een goed veiligheidsbeleid, dan.

Het is moeilijk: Om voor SELinux effectief, moet u een goede reden voor SELinux veiligheidsbeleid uitvoering. De meeste gebruikers zullen hebben behoefte aan een praktische gemakkelijk is om hun aanvankelijke strategie te wijzigen. Een paar jaar geleden ben ik begonnen aan de SELinux ervaring; die tijd, de aanvankelijke strategie nog niet rijp is, zijn er veel problemen. Bijvoorbeeld, in de dagen vóór het begin vond ik steekproef beleid staat niet toe dat het systeem update de hardware klok (de laatste heb ik een patch om dit probleem aan te pakken). Goed eerste veiligheidsbeleid design vergelijkbaar met de productcategorie, NSA hoopt te doen door het bedrijfsleven, en kijken om dat te doen. Red Hat, een aantal van de Debian-ontwikkelaars, Gentoo en zijn anderen met behulp van de fundamentele SELinux kader, en de eerste veiligheidsbeleid wordt gecreëerd, zodat gebruikers kunnen direct beginnen te gebruiken. Sterker nog, Red Hat plannen om alle gebruikers in hun werking in both Fedora Core SELinux, en bieden eenvoudige tools om niet-professionele gebruiker in staat kan kiezen een deel van de gemeenschappelijke opties om hun veiligheidsbeleid te wijzigen. Er is een opstartbare LiveCD Gentoo SELinux. Minimaliseer deze groepen zal het gemakkelijker maken om voorrecht proces, zonder veel van de code.

Hier zijn we terug naar de oorspronkelijke positie. SELinux alleen optreden wanneer de uitvoering van het programma alleen op de beveiligde doorgifte mogelijk te maken, waardoor het proces van de bevoegdheid (geen onderdeel van het proces controles). Daarom, ten volle te benutten van het potentieel van SELinux, moet u uw aanvraag te behandelen en procedures voor onafhankelijke, slechts enkele kleine bevoorrechte componenten te analyseren - net als hoe deze situatie ontwikkeld in de afwezigheid van SELinux beveiliging procedures. Hulpmiddelen zoals SELinux je toelaat om een betere controle op de verleende machtigingen, en dus een sterkere verdediging, maar je nog nodig hebt om je programma te splitsen in kleinere onderdelen aan degenen die controle van de staat te spelen maximale effectiviteit.

Conclusie

Minimaliseer de veiligheidskwesties Privilege is de belangrijkste verdediging. Zoals het gebrek onvermijdelijk is, wil je sterk vermindert de kans op defecten leiden tot veiligheidsproblemen. Echter, ten minste een programma voor de beveiliging moet worden in verband met de veiligheid van sommige delen van de code, dus je kunt niet alleen minimaliseert de kosten van alle andere privileges. Zelfs wanneer je een aantal van de betrokkenen in veiligheid na het deel of degenen die moeten juist zoveel mogelijk te beperken. Aan de rechterkant, moet u veelgemaakte fouten te voorkomen.