Princíp najnižšieho privilégia

Použitie

Princíp najnižšieho privilégia je široko uznávaný ako podstatný prvok vo zvyšovaní ochrany dát a funkčnosti pred chybami (tolerancia chýb) a škodlivého správania (počítačová bezpečnosť).
Princíp najnižšieho privilégia je tiež známy ako 'princíp najnižšej autority (Principle of least authority - POLA).
Jadro (kernel) zvyčajne pracuje s maximálnymi privilégiami, pretože je jadrom operačného systému a má prístup k hardvéru. Jednou zo základných povinností operačného systému, obzvlášť multiužívateľských operačných systémov, je správa a riadenie dostupnosti hardvéru a požiadaviek na prístup k nemu od bežiacich procesov. Keď jadro havaruje, mechanizmy, ktorými je udržiavaný stav, tiež zlyhajú. I keď pre CPU existuje možnosť obnovenia bez potreby tvrdého resetu, kód, ktorý pokračuje vo vykonávaní, nie je vždy taký, aký by mal byť. Bezpečnosť zostáva byť presadzovaná, ale operačný systém nedokáže vhodne správne reagovať na zlyhanie, pretože detekcia zlyhania nie je možná. Dôvodom je, že vykonávanie jadra sa buď zastavilo, alebo počítadlo programu pokračovalo vo vykonávaní programu v nekonečnom a zvyčajne nefunkčnom cykle.
Ak po havárii vykonávanie pokračuje načítaním a spustením kódu trójskeho koňa, autor škodlivého kódu sa môže zmocniť riadenia všetkých procesov. Princíp najnižšieho privilégia núti kód bežať s najnižším možným stupňom privilégií/práv, takže v prípade tejto situácie — alebo situácie, keď vykonávanie pokračuje z neočakávanej lokality — to, čo pokračuje vo vykonávaní, nemá možnosť vykonať škodu. Jedna z metód používaných na dosiahnutie tohto efektu môže byť implementovaná v hardvéri mikroprocesoru. V architektúre x86 výrobca navrhol štyri (ring 0 - ring 3) „módy“. (Tento výraz môže byť mätúci, pretože termín "mód" je v niektorých druhoch operačných systémov uvádzaný do súvislosti s množinou bitov spájajúcou sa s daným prostriedkom).
Termín „najnižšie privilégium“„" býva často nepochopený a občas nesprávne zamieňaný s konceptom TCSEC zmenšenia dôveryhodnej výpočtovej bázy (TCB). Zmenšenie je ďaleko prísnejšou požiadavkou, ktorá je použiteľná iba pre funkčne silnejšie zaisťovacie triedy, konkrétne B3 a A1
Najnižšie privilégium býva často spájané s metódou zvanou privilege bracketing, čo je prijatie nevyhnutných privilégií v najneskoršom možnom momente a ich prepustenie okamžite po tom, ako už nie sú absolútne nevyhnutné, čo pomáha vyhnúť sa dopadom vyplývajúcim z chybného kódu, ktorý neúmyselne využíva väčšie privilégiá, ako si zaslúži. Najnižšie privilégium býva tiež interpretované v súvislosti s distribúciou DAC práv. Príkladom je uplatnenie toho, že odovzdanie prístupu na čítanie a zapisovanie do súboru F používateľovi P porušuje princíp najnižšieho privilégia, ak P stačí na dokončenie svojej úlohy iba právo na čítanie súboru F.
V niektorých operačných systémoch je možné sa stretnúť s implementáciou, v ktorej sa procesy vykonávajú s množinou potenciálnych privilégií a množinou aktívnych privilégií. Samotné množiny privilégií sú dedené od rodičov, o čom je rozhodnuté sémantikou fork(). Spustiteľný súbor, ktorý vykonáva privilegovanú funkciu, môže byť označený množinou privilégií, logickým rozšírením pojmov set user ID a set group ID. Dedenie súborových privilégií procesom je určené sémantikou skupiny systémových volaní exec(). Presný spôsob, ktorým potenciálne privilégiá procesov, aktuálne privilégiá procesov a súborové privilégiá vzájomne interagujú, môže byť zložitý. Prakticky, princíp najnižšieho privilégia je vykonávaný prinútením procesu bežať iba s privilégiami vyžadovanými vykonávanou úlohou. Dodržiavanie tohto modelu je pomerne zložité a tiež náchylné k chybám.
Najstarším historickým prípadom najnižšieho privilégia je pravdepodobne zdrojový kód login.c, ktorý začína vykonávanie s právami superužívateľa (root) a vo chvíli, keď už nie sú viac nevyhnutné, odoberá ich pomocou setuid() s nenulovým argumentom.

Obmedzenia

Podľa Jamesa Whittakera nie je v praxi skutočné najnižšie privilégium definovateľné a taktiež nie je možné ho dosiahnuť. Neexistuje žiadny spôsob, ako vyhodnotiť najnižší počet privilégií, ktoré bude kedy proces potrebovať na vykonanie svojich funkcií. Je totiž nemožné poznať všetky hodnoty premenných, ktoré spracuje, všetky adresy, ktoré bude potrebovať, presný čas vykonávania atď. Najlepším praktickým riešením je obmedzenie privilégií, aby sa eliminovali tie, u ktorých predpokladáme, že nebudú nikdy potrebné. Toto riešenie sa ukazuje byť dosť odlišné od minimálnej množiny privilégií. Takéto obmedzenie podstatne znižuje efektivitu prevedenia najnižšieho privilégia.
Podľa Matta Bishopa je ďalším obmedzením nespojitosť kontroly, ktorú má operačné prostredie (bezpečný operačný systém) nad privilégiami pre jednotlivé procesy. V reálnej praxi je takmer nemožné riadiť prístup procesu k pamäti, čas behu procesu, adresy vstupných a výstupných zariadení alebo módy s presnosťou potrebnou na elimináciu presnej množiny privilégií, ktoré proces naisto nebude potrebovať. To ešte viac redukuje použiteľnosť tohto princípu.