350 likes | 482 Views
Bezp ečnosť operačného systému Unix. Doc. Ing. Ladislav Hudec, CSc. 1. Bezpečnostná architektúra Unix.
E N D
Bezpečnosť operačného systému Unix Doc. Ing. Ladislav Hudec, CSc. 1
Bezpečnostná architektúra Unix • Aj keď väčšina operačných systémov má bezpečnostnú architektúru, ktorá vysvetľuje, ako je presadzovaná bezpečnosť a kde sa uchovávajú bezpečnostne relevantné údaje, Unix má históriu divergujúcich a konvergujúcich verzií. • Bezpečnostné črty – boli do Unixu zabudovávané, keď taká potreba vznikla (bezpečnosť nebola pôvodným návrhovým cieľom). • Unix – bol pôvodne navrhnutý pre malé viac používateľské počítače v sieťovom prostredí a neskoršie bol škálovaný pre komerčné servery a ešte neskoršie bol škálovaný pre PC. • Unix – bol podobne ako internet vyvinutý pre priateľské prostredie (používatelia bez zlých úmyslov!) ako sú výskumné laboratóriá a univerzity a bezpečnostné mechanizmy boli slabé. Ako sa Unix vyvíjal, boli doňho vstavané nové bezpečnostné opatrenia, ktoré posilnili existujúce opatrenia. • Pri vstavaní nových bezpečnostných opatrení - návrhári sa úskostlivo snažili minimálne zasahovať do existujúcej štruktúry Unixu. • Filozofia návrhu Unixu - predpokladá, že bezpečnosť je spravovaná skúseným administrátorom a nie bežným používateľom. Preto nástroje na správu bezpečnosti sú často vo forme skriptov a príkazových riadkov. 2
Identita používateľa a identita skupiny • Identita používateľa (UID) a identita skupiny (GID) sú 16-bitové čísla. Niektoré hodnoty UID majú špeciálny význam (môžu sa meniť medzi rôznymi systémami), ale superpoužívateľ (root) má vždy hodnotu 0. Príklady UID: • -2 : nobody, 0 : root, 1 : deamon, 2 : uucp, 3 : bin, 4 : games, 9 : audit. • Informácie o identitách používateľov a identitách skupín sú uložené v používateľských kontách a v domovských adresároch • Používateľské kontá – sú uložené v súbore /etc/passwd. Položky tohto súboru majú formát user name:password:UID:GID:ID string:home directory:login shell • User name – je reťazec dlhý najviac 8 znakov. Identifikuje používateľa pri prihlásení, ale sa nepoužíva pri riadení prístupu. Unix nerozlišuje medzi používateľmi s rovnakými UID. • Password – je uložené zašifrovane (hašovacia hodnota) • ID string – obsahuje plné meno používateľa • Home directory – špecifikuje domovský adresár používateľa • Shell – dostupný Unix shell používateľovi po úspešnom prihlásení • Ďalšie používateľsky špecifické nastavenia sú definované v súbore .profile v používateľovom domovskom adresári. Aktivity vykonané systémom po nalogovaní používateľa sú špecifikované v súbore /etc/profile • Zobrazenie súboru passwd napríklad príkazom cat /etc/passwd alebo less /etc/passwd zobrazí položky ako dieter:RT.QsEEsxT92:10026:53:Dieter Gollmann:/home/staff/dieter:/usr/local/bin/bash 3
Identita používateľa a identita skupiny • Superuser (root)- v každom unixovom systéme je používateľ so špeciálnymi privilégiami. • Superuser (superpoužívateľ) má UID 0 a zvyčajne sa mu hovorí root. • Konto root je používané operačným systémom na základné úlohy ako je login, zaznamenanie auditného logu alebo prístup k I/O zariadeniam. • Pre superpoužívateľa sú vypnuté všetky bezpečnostné kontroly a superpoužívateľ môže v systéme vykonať skoro všetko. Napríklad superpoužívateľ sa môže stať lubovoľným iným používateľom, môže zmeniť systémové hodiny. • Superpoužívateľ je schopný nájsť cestu na obídenie prípadných malých obmedzení, ktoré mu boli nastavené. Napríklad superpoužívateľ nemôže zapísať do súborového systému, ktorý je namontovaný ako read only, ale môže ho odmontovať a opätovne namontovať ako writable. • Superpoužívateľ nemôže odhaliť heslo, pretože je uložené iba jeho hašovaná hodnota. 4
Identita používateľa a identita skupiny 5 • Skupiny - používatelia patria do jednej alebo viacerých skupín.Zaraďovanie používateľov do skupín je pohodlný spôsob na rozhodovanie v riadení prístupu. • Je možné všetkých používateľov, ktorí majú prístup k emailu dať do skupiny mail, prípadne všetkých operátorov dať do skupiny operator. • Každý používateľ patrí do primary group (primárnej skupiny). GID primárnej skupiny je uložené v súbore /etc/passwd • Súbor /etc/group obsahuje zoznam všetkých skupín. Položky v súbore majú formát group name:group password:GID:list of users. Napríklad položka infosecwww:*:209:chez, af • Vo vyššie uvedenom prípade má skupina infosecwww zablokované heslo, identita skupiny je GID 209 a má dvoch členov chez a af. • Existujú špeciálne skupiny GID: 0 : system (wheel), 1 : deamon, 2 : uucp, 3 : mem, 4 : bin, 7 : terminal • V Unixe system V môže byť používateľ v danom čase iba v jednej skupine. Aktuálna skupina je zmenená príkazom newgrp. Používatelia sa môžu voľne nastaviť do skupiny v ktorej sú členmi. Ak sa používateľ snaží nastaviť do skupiny, v ktorej nie je členom, po zadaní príkazu newgrp sa vyžiada heslo a udelí sa dočasné členstvo v prípade, že používateľ vložil správne heslo.
Subjekty Proces Reálne UID Efektívne Reálne GID Efektívne /bin/login root root system system Používateľ dieter sa naloguje, proces logon verifikuje username a heslo a mení UID a GID /bin/login dieter dieter staff staff Proces logon vykonáva shell z loginu používateľa /bin/bash dieter dieter staff staff Zo shellu používateľ vykonáva príkaz ls /bin/ls dieter dieter staff staff Používateľ vykonáva príkaz su na štart nového shellu ako root /bin/bash dieter root staff system 6 • Subjekty – sú procesy • Každý proces je identifikovaný PID (process ID) • Nové procesy sú vytvárané príkazmi exec alebo fork • S každým procesom je zviazané reálne UID/GID a efektívne UID/GID • Reálne UID je zdedené z rodičovského procesu, typicky je to UID nalogovaného používateľa • Efektívne UID je zdedené z rodičovského procesu alebo je zdedené zo súboru, ktorý sa práve vykonáva
Subjekty 7 • Login a heslo – v Unixe sú používatelia identifikovaní pomocou username a autentizovaní heslami • Keď sa systém zavedie (boot) login proces je odštartovaný ako root • Keď sa do systému prihlási používateľ, login proces verifikuje username a heslo. Ak je verifikácia úspešná, UID/GID sa zmení podľa používateľa a vykonáva sa shell z používateľovho loginu. • Login roota môže byť obmedzený na terminály vymenované v /etc/ttys. Ostatné nalogovanie používateľa je zaznamenané v /usr/adm/lastlog a môže byť zobrazené, napríklad príkazom finger. • V mnohých systémoch Unix je dĺžka hesla obmedzená na 8 znakov. Systém obsahuje nástroj na kontrolu kvalitného hesla. Heslo je hašované algoritmom crypt(3). Tento algoritmus opakuje 25 krát málo modifikovaný DES algoritmus, pričom dátový blok sú samé 0 a heslo je šifrovací kľúč. Hašovacie hodnoty sú uložené v súbore /etc/passwd. • Keď pole hesla je prázdne, používateľ nemusí pri logine zadávať heslo. Keď pole hesla začína * (asterisk), používateľ sa nedokáže nalogovať, pretože asterisk nemôže byť hašovacou hodnotou žiadneho hesla. (Toto je bežná metóda zablokovania používateľovho konta.) • Heslá sa menia príkazom passwd. Používateľ je vyzvaný zadať staré heslo (ochrana pred zmenou hesla pri neobsadenom termináli). Pretože sa text hesla na termináli nezobrazuje, pre istotu je potrebné napísať nové heslo dva razy (odstránenie prípadného preklepu pri prvom zadávaní nového hesla). Po zmene hesla sa tento efekt prejaví pri novom logine alebo pri vykonaní príkazu su (set user).
Subjekty 8 • Tieňový súbor hesiel – Shadow Password File • Bezpečnejšie verzie Unix ponúkajú ďalšie opatrenia na bezpečnosť hesiel. Súbor etc/passwd je čitateľný pre other, pretože obsahuje údaje používateľských kont, ktoré sú potrebné iným programom. Útočník si môže skopírovať súbor hesiel a v režime off-line môže skúšať slovníkové útoky. Aby sa odstránila táto zraniteľnosť, sú heslá uložené v tieňovom súbore hesiel /.secure/etc/passwd a tento súbor je prístupný iba rootovi. Tento súbor môže byť využitý na bezpečnostný mechanizmus „stárnutia hesla“ a po expirácii hesla k zablokovaniu konta. • Položka v tieňovom súbore hesiel obsahuje: • Username • Heslo • Dátum ostatnej zmeny • Minimálny počet dní medzi zmenami hesla • Maximálny počet dní platnosti hesla • Koľko dní dopredu je používateľ upozornený na expiráciu hesla • Počet dní, počas ktorých môže byť používateľ neaktívny • Dátum, po ktorom nemôže byť login viac použitý • Rezervované • Solenie hesla je ďalším bezpečnostným mechanizmom na spomalenie slovníkových útokov. Soľ je 12 bitová hodnota, ktorá sa pridáva k vlastnému heslu. Soľ sa ukladá v otvorenom tvare.
Objekty 9 • Objekty v riadení prístupu predstavujú súbory, adresáre, pamäťové zariadenia a I/O zariadenia • Pre účely riadenia prístupu je so všetkými objektmi zaobchádzané rovnako ako so zdrojmi. • Zdroje sú organizované v súborovom systéme do stromovej štruktúry. • Každý súborový záznam v adresári je ukazovateľom do údajovej štruktúry, ktorá sa nazýva inode. • Nižšie je uvedený zoznam polí, ktoré sú relevantné pre riadenie prístupu. • mode – typ súboru a prístupové práva • uid – používateľ vlastniaci súbor • gid – skupina vlastniaca súbor • atime – doba prístupu • mtime – doba modifikácie • itime – doba modifikácie inode • block count – veľkosť súboru • - fyzické umiestnenie. • Každý adresár obsahuje ukazovateľ na seba (súbor „.“) a ukazovateľ na svoj rodičovský adresár (súbor „..“). • Každý súbor má svojho vlastníka, zvyčajne používateľa, ktorý súbor vytvoril. • Každý súbor patrí do skupiny.
Objekty 10 • V závislosti na verzii Unix, novovytvorený súbor patrí do skupiny svojho tvorcu alebo do skupiny adresára. • Predtým než sa rozoberú polia v inode, je možné analyzovať adresár príkazom ls –l a získať výpis –rw-r–r– 1 diego staff 1617 Oct 28 11:01 adcryp.tex prípadnevýpis drwx- - - - - - 2 diego staff 512 Oct 25 17:44 ads/ . Tieto výpisy obsahujú niektoré informácie, ktoré hľadáme: • Prvý znak udáva typ súboru: „-“ indikuje súbor, „d“ indikuje adresár, „b“ indikuje súbor blokového zariadenia a „c“ indikuje súbor znakového zariadenia • Ďalších 9 znakov udáva súborové oprávnenia (uvedie sa ďalej) • Nasledujúce číselné pole je linkové počítadlo (link counter), napočítavajúce počet linkov (ukazovateľov) na súbor • Ďalšie dve polia sú mená vlastníka súboru a skupiny súboru • Potom nasleduje veľkosť súboru v bajtoch • Čas a dátum je mtime, čas ostatnej modifikácie. Príkaz ls –l zobrazuje atime, čas ostatného prístupu. Príkaz ls –lc zobrazuje itime, čas ostatnej modifikácie inode. • Posledným poľom je meno súboru. Znak „/“ po mene ads indikuje adresár. Meno súboru je uložené v adresári a nie v inode. • Súborové oprávnenia sú zoskupené do troch trojíc, ktoré definujú prístup čítania (read), zápisu (write) a vykonania (execute) pre vlastníka (owner), skupinu (group) a ostatných (other alebo world). Znak „-“ indikuje, že právo nebolo pridelené. To znamená, že • rw-r- -r- - dáva vlastníkovi oprávnenia čítania a zápisu a skupine oprávnenia čítania • rwx- - - - - - dáva vlastníkovi oprávnenia čítania, zápisu a vykonania a žiadne oprávnenia skupine alebo ostatným
Objekty 11 • Súborové oprávnenia v Unixe sú tiež špecifikované oktetovými číslicami tak, že 9 oprávnení je rozdelených na tri skupiny po troch. Každé prístupové právo je binárne vyjadrenie (1-udelené, 0-neudelené). Základné oprávnenia vyjadrené oktetovými číslicami sú takéto: • 400/040/004 – čítanie vlastníkom/skupinou/ostatnými • 200/020/002 - zápis vlastníkom/skupinou/ostatnými • 100/010/001 – vykonanie vlastníkom/skupinou/ostatnými • Súborové oprávnenia vzniknú kombináciou základných súborových oprávnení a teda súčtom ich odpovedajúcich oktetov. Napríklad súborové oprávnenia rw-r- -r- - sa oktetovo vyjadrí číslom 644, oprávnenia rwx- - - - - - sa oktetovo vyjadrí číslom 700. • Prednastavené oprávnenia – unixové utility (editori, prekladače) typicky používajú prednastavené oprávnenia 666 pri vytvorení nového súboru a oprávnenia 777 pri vytvorení nového programu • Tieto oprávnenia môžu byť ďalej nastavené pomocou umask (trojciferný oktet určujúci odobraté právo). umask s hodnotou 777 odoberá všetky oprávnenia, umask s hodnotou 000 nekladie žiadne ďalšie obmedzenia na oprávnenia. • Citlivé prednastavenia umask sú: • 022 – všetky oprávnenia pre vlastníka, oprávnenie čítania a vykonávania pre skupinu a ostatných • 037 - všetky oprávnenia pre vlastníka, oprávnenie čítania pre skupinu a žiadne oprávnenia pre ostatných • 077 - všetky oprávnenia pre vlastníka, žiadne oprávnenie pre skupinu a ostatných
Objekty 12 • Aktuálne oprávnenia sú potom odvodené maskovaním prednastavených oprávnení unixovými utilitami a pomocou umask • Vypočítajú sa logickým AND bitov prednastavených oprávnení a inverzných bitov umask. Napríklad: • Prednastavené oprávnenia sú 666 a umask je 077. Potom aktuálne oprávnenia sú 666 AND NOT(077) čo je 600, čo je oprávnenie vlastníka na čítanie a zápis • Hodnota umask môže byť zmenená príkazom umask [-S] [mask], kde príznak –S indikuje symbolický režim. Ak mask nie je špecifikované, príkaz vráti aktuálny umask. • umask v etc/profile definuje prednastavenú hodnotu v celom systéme. Táto prednastavená hodnota môže byť prepísaná pre jednotlivých používateľov uložením umask do domovských adresárov používateľov. • Oprávnenia pre adresáre – každý používateľ má domovský adresár (home directory), napríklad /home/staff/dieter. Podadresáre sa vytvárajú príkazom mkdir. Používateľ musí mať správne súborové oprávnenia pre adresár, aby mohol vložiť súbory alebo podadresáre do adresára • Oprávnenie čítania umožňuje používateľovi nájsť súbory v adresári, napríklad vykonaním príkazu ls • Oprávnenie zápisu umožňuje používateľovi pridávať súbory a odstraňovať súbory z adresára • Oprávnenie vykonania sa vyžaduje pri vytvorení adresára v aktuálnom adresári a na vytvorenie súborov vnútri adresára. Súbor je možné otvoriť, ak je známe, že existuje . Nie je možné použiť príkaz ls na vylistovanie adresára.
Objekty 13 • Oprávnenia pre adresáre • Takže, aby ste sa dostali do vlastných súborov, potrebujete na adresár oprávnenie vykonania. Aby ste zabránili čítaniu vašich súborov inými používateľmi môžete podľa toho nastaviť oprávnenia prístupu k súborom alebo môžete zakázať prístup do adresára. • Na zrušenie súboru potrebuje používateľ na adresár oprávnania zápisu a vykonania. Nepotrebuje žiadne oprávnenie na samotný súbor (aj keď patrí inému používateľovi). • Pozostatkom zo starších verzií Unixu je sticky bit. Pôvodným účelom tohto bitu bolo zabezpečiť, aby kódový segment programu po ukončení programu zostal vo swapovacom priestore pamäti (a nevracal sa späť do virtuálnej pamäti). Systém tak zabránil častému prenosu programového kódu často používaného programu z virtuálnej pamäti do fyzickej pamäti. Dnes sa sticky bit používa na obmedzenie práva na zrušenie súboru. • Napríklad rady úloh sú často zapisovateľné ostatnými, takže ktokoľvek môže do rady pridať súbor. Takisto v tomto prípade môže byť ktokoľvek schopný aj súbor zrušiť. Keď adresár rady úloh má nastavený sticky bit, potom súbor z rady úloh môže byť odstránený alebo premenovaný iba vlastníkom súboru, vlastníkom adresára a musí zapísať oprávnenie pre adresár, alebo superpoužívateľom. • Keď sa na adresár s nastaveným sticky bitom aplikuje príkaz ls –l, oprávnenie vykonania pre ostatných bude nastavené na t a nie na x.
Riadenie prístupu 14 • Riadenie prístupu – je založené na atribútoch subjektov (procesov) a objektov (zdrojov). • Štandardný systém Unix spojuje s každým zdrojom tri množiny prístupových práv odpovedajúce vlastníkovi, skupine a ostatným. • Superpoužívateľ nepodlieha takémuto spôsobu riadenia prístupu. • Unix narába so všetkými zdrojmi rovnakým spôsobom, nerobí rozdiel medzi súbormi a zariadeniami. • Bity oprávnenia sú kontrolované v takomto poradí: • Ak uid používateľa indikuje, že je vlastníkom súboru, bity oprávnenia vlastníka rozhodnú, či používateľ prístup dostane • Ak používateľ nie je vlastníkom súboru, ale používateľovi gid indikuje, že jeho skupina vlastní súbor, potom bity oprávnenia skupiny rozhodnú, či používateľ prístup dostane • Ak používateľ nie je ani vlastník súboru a ani nie je členom skupiny, ktorá vlastní súbor, potom bity oprávnenia ostatní rozhodnú, či používateľ prístup dostane • Je možné aj také nastavenie bitov oprávnení, že vlastník súboru má menej prístupových práv k súboru ako ostatní používatelia. Môže sa to zdať ako prekvapenie, ale tento fakt môže slúžiť ako cenné všeobecné ponaučenie. Pre každý mechanizmus riadenia prístupu je nevyhnutné presne poznať, v akom poradí sú vyhodnocované (kontrolované) rôzne prístupové kritériá.
Riadenie prístupu 15 • Nastavenie UserID (SUID) a nastavenie GroupID (SGID) • Opäť sa vraciame k obľúbenej téme riadeného vyvolania (controlled invocation) • Na vykonanie istých funkcií operačného systému (napríklad iba root môže počúvať na dôveryhodných portoch 0-123) potrebuje Unix privilégiá superpoužívateľa, ale používateľom nemôže byť udelený status superpoužívateľa. • Ako to urobiť, aby boli splnené obidve požiadavky? Riešením sú programy SUID (set userID) a SGID (set groupID). Tieto programy sa vykonávajú s efektívnym používateľským ID jeho vlastníka(čo štandardne býva superpoužívateľ) alebo s efektívnym skupinovým ID, ktoré dávajú dočasný alebo obmedzený prístup k súborom bežne nedostupným ostatným používateľom. • Keď sa aplikuje ls –l na program SUID, zobrazenie vykonávacieho oprávnenia vlastníka bude dané ako s a nie ako x, t.j. –rws- - x- - x 3 root bin 16384 Nov 16 1996 passwd* • Keď sa aplikuje ls –l na program SGID, zobrazenie vykonávacieho oprávnenia skupiny bude dané ako s a nie ako x. V oktetovej reprezentácii oprávnení bude pridaný štvrtý oktet pred oprávnenia vlastníka, skupiny a ostatných. Tento oktet indikuje programy SUID a SGID a adresáre s nastaveným sticky bitom. • Oktetová reprezentácia oprávnení programov SUID a SGID: • 4000 – nastav používateľove ID na vykonávanie • 2000 – nastav skupinové ID na vykonávanie • 1000 – nastav sticky bit • Ak je root vlastníkom programu SUID (čo je štandardným prípadom), používateľ počas vykonávania tohto programu získa status superpoužívateľa
Riadenie prístupu 16 • Nastavenie UserID (SUID) a nastavenie GroupID (SGID) • Dôležité SUID programy sú: • /bin/passwd – zmena hesla • /bin/login – program login • /bin/at – zaslanie batch úlohy • /bin/su – program zmeny UID • V tejto súvislosti je potrebné dôležité bezpečnostné upozornenie. Pretože počas vykonávania programu SUID má používateľ privilégiá vlastníka programu, tento program by mal robiť iba to, čo používateľ zamýšľa urobiť. Ak útočník, ktorý je schopný zmeniť správanie programu SUID, napríklad prerušením jeho činnosti, môže vstupovať do akcií vyžadujúcich status superpoužívateľa nie iba počas útoku, ale môže byť schopný zmeniť systém, t.j. status superpoužívateľa môže získať aj pri iných príležitostiach. • To znamená, že ohrozenie programom SUID prichádza z interakcie s používateľom. Preto všetky vstupy od používateľa, vrátane parametrov v riadkových príkazoch a premenných prostredia, musia byť zadávané s mimoriadnou pozornosťou. • Zvláštnou nástrahou je opustenie shellu (shell escape), ktoré dáva používateľovi k príkazom shellu s privilégiamu superpoužívateľa. • Programy by mali mať status SUID iba vtedy, keď je to absolútne nevyhnutné. Administrátor by často mal kontrolovať integritu programov SUID (zistiť prípadnú modifikáciu útočníkom).
Riadenie prístupu 17 • Zmeny oprávnení – súborov sa vykonajú príkazom chmod, ktorý môže vykonať iba vlastník súboru alebo superpoužívateľ. • Príkaz má takýto formát: • chmod [-fR] absolute_mode file – definuje hodnotu pre všetky bity oprávnení • chmod [-fR] [who]+permission file – pridáva oprávnenia • chmod [-fR] [who]-permission file – odoberá oprávnenia • chmod [-fR] [who]=permission file – prestavuje oprávnenia podľa špecifikácie • V absolútnom režime, súborové oprávnenia sú špecifikované priamo oktetovým číslom. V symbolickom režime sú modifikované aktuálne oprávnenia. Parameter who môže nadobúdať tieto hodnoty: • u – zmena oprávnení vlastníka, g – zmena oprávnení skupiny • o – zmena oprávnení ostatných • a – zmena všetkých oprávnení • Parameter oprávnenie môže nadobúdať tieto hodnoty: • r – oprávnenie čítania, w – oprávnenie zápisu • x – oprávnenie vykonania pre súbory, oprávnenie prehľadávania pre adresáre • X – oprávnenie vykonania iba ak súbor je adresár alebo aspoň jeden vykonávací bit je nastavený • s – oprávnenie set-user-ID alebo set-group-ID • t – oprávnenie uchovania textu (nastavenie sticky bitu)
Riadenie prístupu 18 • Zmeny oprávnení • Prepínač –f potláča chybové hlášky, prepínač –R aplikuje rekurzívne špecifikované zmeny do všetkých podadresárov aktuálneho adresára. Oprávnenia SUID programu môžu byť nastavené napríklad takto: • chmod 4555 file – nastavenie suid príznaku • chmod u+s file – nastavenie suid príznaku • chmod 555 file – nulovanie suid príznaku • chmod u-s file – nulovanie suid príznaku • Oprávnenia GUID sa nastavujú použitím písmena g namiesto písmena u. • Príkaz chown vykonáva zmenu vlastníka súboru, príkaz chgrp vykonáva zmenu skupiny v súbore. • Príkaz chown by mohol byť potenciálnym zdrojom nevítaného SUID programu. Používateľ by mohol vytvoriť SUID program a potom zmeniť vlastníka na roota. Aby sa zabránilo takýmto útokom, niektoré verzie Unixu dovoľujú vykonávať príkazy chown iba superpoužívateľovi.Niektoré iné verzie dovuľujú používateľovi použiť chown iba pre ním vlastnené súbory, ktoré majú vypnuté SUID a GUID bit. Podobné opatrenia sa týkajú aj príkazu chgrp.
Riadenie prístupu 19 • Obmedzenia v riadení prístupu v Unixe • Súbory majú špecifikovaného iba jedného vlastníka a jednu skupinu. • Oprávnenia riadia iba prístup čítania, zápisu a vykonania. Ostatné prístupové práva, napríklad právo odstavenia systému alebo právo vytvoriť nového používateľa musia byť mapované do základných súborových prístupových oprávnení. • Iné operácie ako čítanie, zápis a vykonanie musia byť ponechané aplikáciám. Vo všeobecnosti je často nepraktické implementovať komplexnejšiu bezpečnostnú politiku s unixovými mechanizmami riadenia prístupu. Z tohto pohľadu unixová bezpečnosť je umiestnená viac na strane stroja než na strane používateľa (administrátora).
Príklady všeobecných bezpečnostných princípov 20 • V tejto časti sa demonštruje ako niektoré bezpečnostné princípy našli svoje uplatnenie v kontexte s Unixom. • Použitie riadeného vyvolania • Citlivé, ale dostupné zdroje, ako je napríklad webový server, môžu byť chránené vzorom riadeného vyvolania, ktorý kombinuje koncepty vlastníctva, bitov oprávnenia a programy SUID • Vytvor nové UID webového servera, ktorý vlastní zdroje a všetky programy, ktoré potrebujú pristúpiť k zdroju • Prideľ prístupové právo k zdroju iba jeho vlastníkovi • Definuj všetky programy, ktoré pristupujú k zdroju, ako SUID webového programu • V tomto prípade vidíme príklad techniky, ktorá je často použitá v návrhoch bezpečnostných mechanizmov. Abstraktný atribút je reprezentovaný údajovou štruktúrou v systéme. Táto údajová štruktúra je potom znovu použitá ďalším bezpečnostným mechanizmom na iný účel. UID bolo zavedené ako reprezentácia reálnych používateľov v systéme. Teraz je UID použité pre nový typ riadenia prístupu, kde UID viac nekorešponduje s reálnymi používateľmi. • Poučenie: vyvaruj sa prehnanej ochrane. Ak odmietneš používateľom priamy prístup k súboru, ktorý používatelia potrebujú na vykonanie svojej úlohy, musíš zabezpečiť nepriamy prístup prostredníctvom programov SUID. Chybný program SUID môže dať používateľom viac príležitostí na prístup než múdro vybraté bity oprávnení. Toto je zvlášť pravda, ak vlastník zdroja a program SUID je privilegovaný používateľ ako je root.
Príklady všeobecných bezpečnostných princípov 21 • Zrušenie súborov • objekty existujú v logickej a fyzickej pamäti. Čo sa stane, ak odstránime (zrušíme) súbor zo súborového systému? Existuje stále v nejakej forme? • Unix má dva spôsoby na kopírovanie súborov. Príkaz cp vytvára identickú, ale nezávislú kópiu, ktorú vlastní používateľ vykonávajúci príkaz cp. Príkaz link a ln vytvára nový názov súboru s ukazovateľom na originálny súbor a zvyšuje počítadlo linkov (link counter) originálneho súboru. Nový súbor zdieľa obsah s originálom. Ak originálny súbor je zrušený príkazom rm alebo rmdir, súbor zmizne zo svojho rodičovského adresára, ale obsah súboru ako aj jeho kópia stále zostáva. Z tohto dôvodu si používatelia môžu myslieť, že súbor zrušili, zatiaľ čo súbor existuje v inom adresári, a navyše súbor aj stále vlastnia. Aby sa bolo možné presvedčiť, že súbor bol zrušený, superpoužívateľ musí vykonať príkaz ncheck na vylistovanie všetkých liniek na tento súbor a potom tieto linky zrušiť. Navyše ak nejaký proces mal súbor otvorený, ktorý potom bol svojím vlastníkom zrušený, súbor bude existovať dovtedy, pokiaľ proces súbor nezatvorí. • Akonáhle bol súbor zrušený, pamäťový priestor alokovaný tomuto súboru sa stane opäť voľný (dostupný). Avšak, pokiaľ tieto pamäťové lokácie nebudú aktuálne opäť použité, budú stále obsahovať obsah súboru. Aby sme sa vyhli takýmto pamäťovým rezíduám, musíme súbor pre jeho zrušením vyčistiť prepísaním jeho obsahu samými nulami alebo inými vzormi vhodnými pre pamäťové médium. Dokonca aj potom súbor nemusí byť kompletne zrušený, pretože vyspelé súborové systémy, napríklad defragmenter, môžu súbory presunúť, ponechajúc na disku viacero kópií súboru.
Príklady všeobecných bezpečnostných princípov 22 • Ochrana zariadení • Nasledujúca záležitosť sa stále dotýka rozlíšenia medzi štruktúrami logickej a fyzickej pamäti. Unix narába so zariadeniami ako so súbormi. To znamená, že prístup do pamäti alebo prístup k tlačiarni môže byť riadený ako prístup k súboru prostredníctvom nastavenia bitov oprávnení. Zariadenia sú vytvárané použitím príkazu mknode, ktorý môže byť vykonateľný iba rootom. Malá vzorka zariadení, ktorá môže byť spoločne nájdená v adresári /dev je: • /dev/console konzolový terminál • /dev/mem zariadenie mapujúce hlavnú pamäť (image fyzickej pamäti) • /dev/kmem zariadenie mapujúce pamäť kernelu-jadra (image virtuálnej pamäti) • /dev/tty terminál • Útočníci môžu obísť opatrenia nastavené na súboroch alebo adresároch, ak môžu dostať prístup k pamäťovým zariadeniam, na ktorých sú tieto súbory uložené. Ak sú bity oprávnenia čítania alebo zápisu pre other na pamäťovom zariadení nastavené, môže útočník po pamäti browsovať alebo modifikovať údaje v pamäti bez toho, aby menil povolenia pre súbory umiestnené v tejto pamäti. Preto skoro všetky zariadenia by mali byť pre other bez povolenia čítania a zápisu. • Príkazy ako príkaz process status ps zobrazí informáciu o používaní pamäti a preto vyžaduje povolenie prístupu na pamäťové zariadenia. Definovaním ps ako nejaké SUID na program rootu dovoľuje ps získať nevyhnutné povolenia, ale kompromitáciou príkazu ps by zostali útočníkovi privilégiá roota. Elegantnejším riešením je mať ps ako program SGID a nechať skupinu mem vlastniť pamäťové zariadenia.
Príklady všeobecných bezpečnostných princípov 23 • Ochrana zariadení • Terminálové zariadenia tty sú ďalším zaujímavým príkladom. Keď sa používateľ naloguje, je terminálový súbor alokovaný používateľovi, ktorý sa stane vlastníkom súboru pre reláciu. (Keď nie je použitý terminálový súbor, je vlastnený rootom.) Je praktické urobiť tento súbor pre other čitateľný a zapisovateľný, aby tak používateľ mohol prijímať správy od ostatných strán. Avšak toto nám tiež prináša slabiny. Strana other je teraz schopná monitorovať celú premávku na a z terminálu, ktorá potenciálne môže obsahovať používateľovo heslo. Strana other môže na používateľský terminál poslať príkazy, napríklad preprogramovať funkčné kľúče a môže nechať tieto príkazy vykonať nevedomému používateľovi. V niektorých systémoch môžu inteligentné terminály automaticky vykonať príkazy. Toto dáva útočníkovi možnosť poslať príkazy použitím privilégií iného používateľa. • Zmena roota súborového systému • Riadenie prístupu môže byť implementované obmedzením podozrivých procesov do pieskoviska (sandbox). Prístupu k objektom mimo pieskoviska je zabránené. V Unixe zmena rootu príkazom chroot obmedzuje dostupnosť časti súborového systému neautorizovanému používateľovi. Tento príkaz môže byť vykonaný iba rootom. Príkaz chroot <directory> <command>zmení adresár roota z / do adresára (directory) kde sa vykonáva príkaz (command). Následne sú dostupné iba súbory pod novým rootom. Keď použijeme túto stratégiu, musíme si byť istí, že používateľove programy nájdu všetky systémové súbory, ktoré potrebujú. „Očakáva sa“, že tieto súbory budú v adresároch ako sú /bin, /dev, /etc, /tmp alebo /usr. Nové adresáre s tými istými menami musia byť vytvorené pod novým rootom a vybavené súbormi, ktoré používateľ bude potrebovať, kopírovaním alebo linkovaním odpovedajúcich súborov z originálnych adresárov.
Príklady všeobecných bezpečnostných princípov 24 • Namontovanie súborového systému • V prípade, že máte rôzne bezpečnostné domény a zavediete do vášho systému objekt z ďalšej domény, musíte redefinovať týmto objektom atribúty riadenia prístupu. • Súborový systém Unixu je zostavený nalinkovaním spolu súborových systémov uložených na rôznych fyzických zariadeniach pod jedným rootom, ktorý sa označuje „/“. Toto sa zabezpečí príkazom mount. V sieťovom prostredí môže byť vzdialený súborový systém (NFS) namontovaný z iných sieťových uzlov. Podobne, používateľom môže byť dovolené namontovať súborový systém zo svojich vlastných pamäťových médií (automount). • Pokiaľ ste bezpečnostným expertom, mali by ste zbystriť pozornosť. Namontované súborové systémy by mohli obsahovať všetky druhy nechcených súborov, ako sú SUID na rootove programy umiestnené v útočníkovm adresári. Akonáhle bol súborový systém namomtovaný, môže útočník vykonaním takýchto programov získať status superpoužívateľa. Nebezpečenstvo tiež prichádza zo súborov zariadení, ktoré dovoľujú priamy prístup do pamäti (kde boli nastavené oprávnenia), a tak má útočník prístup k týmto súborom. Z tohto dôvodu príkaz mount[-r][-o options] device directory má príznak –r , ktorý špecifikuje namontovanie iba s čítaním a s voľbami: • nosuid– vypína bity SUID a SGID na namontovanom súborovom systéme • noexec – z namontovaného systému nie je možné spustiť žiadny binárny kód • nodev - zo súborového systému nie je možné pristúpiť k žiadnemu blokovému alebo znakovému špeciálnemu zariadeniu. • Opäť, rôzne verzie Unixu implementujú rôzne voľby pre príkaz mount.
Príklady všeobecných bezpečnostných princípov 25 • Namontovanie súborového systému • Poučenie: UID a GID sú lokálne identifikátory, ktoré nemusia byť interpretované rovnakým spôsobom na rôznych unixových systémoch (od rôznych dodávateľov). Pri namontovávaní vzdialených súborových systémov môžu klienti nesprávne interpretovať tieto identifikátory. Z tohto dôvodu by mali byť v celej sieti použité globálne jednoznačné identifikátory.
Príklady všeobecných bezpečnostných princípov vyhľadávacia cesta pre príkazy shellu PATH TERM typ terminálu DISPLAY meno dispeja LD_LIBRARY_PATH cesta na hľadanie objektov a zdieľaných knižníc HOSTNAME meno unixového hosta PRINTER prednastavená tlačiareň HOME cesta do domovského adresára PS1 prednastavený prompt IFS oddeľovanie znakov v argumentoch príkazového riadku 26 • Premenné prostredia • Premenné prostredia sú držané shellom a sú normálne použité na konfigurovanie správania sa programových utilít. V tabuľke je uvedených niekoľko premenných prostredia pre bash shell. Proces automaticky dedí premenné prostredia od svojho rodičovského procesu a program vykonávajúci ďalší program môže pre volaný program nastaviť premenné prostredia na ľubovolné hodnoty
Príklady všeobecných bezpečnostných princípov 27 • Premenné prostredia • Toto je problém, pretože vyvolávač programov SUID/SGID ovláda premenné prostredia, ktoré sú dané týmto programom. Útočník by mohol skúsiť prevziať riadenie vykonávania nastavením premenných prostredia na nebezpečné hodnoty. Navyše, mnoho knižníc a programov sú riadené premennými prostredia nejasným a nedokumentovaným spôsobom. Napríklad, útočník môže nastaviť IFS na nezvyklé hodnoty na oklamanie ochranných mechanizmov, ktoré vyfiltrujú nebezpečné vstupy do programov SUID/SGID. Ako protiopatrenie, program SUID/SGID by mohol vymazať celé prostredie a potom nastaviť malú množinu potrebných premenných prostredia na bezpečné hodnoty. • Poučenie: dedené veci, ktoré nechcete alebo o ktorých neviete, sa môžu stať bezpečnostným problémom.
Príklady všeobecných bezpečnostných princípov 28 • Vyhľadávacia cesta (searchpath) • Naším posledným favoritom je vykonávanie programov, ktoré sú vzaté z „nesprávnej“ lokácie. Používatelia Unixu interagujú s operačným systémom prostredníctvom shellu (interpreter príkazového riadku). Z dôvodu pohodlnosti môže používateľ spustiť program iba napísaním jeho mena bez špecifikovania plnej cesty, ktorá dá lokáciu programu v rámci súborového systému. Shell potom bude program hľadať nasledovaním vyhľadávacej cesty (searchpath), ktorá je špecifikovaná v premennej prostredia PATH v súbore .profile v domovskom adresári používateľa. (Použi príkaz ls –a na prezretie všetkých súborov v tvojom domovskom adresári a príkaz more .profile na prezretie tvojho profilu.) Keď je nájdený adresár obsahujúci program so špecifikovaným menom, vyhľadávanie skončí a program sa vykoná. Typická vyhľadávacia cesta vyzará takto: PATH = . : $HOME/bin : /usr/ucb : /bin : /usr/bin : /usr/local : /usr/new : /usr/hosts . V tomto prípade, adresáre vo vyhľadávajúcej ceste sú oddelené „:“, prvá položka „.“ je súčasný adresár. Teraz je možné vložiť „Trójskeho koňa“ tak, že útočník mu dá rovnaké meno ako má existujúci program a uloží ho do adresára, ktorý je prehľadaný skoršie ako adresár obsahujúci originálny program. • Na ochranu proti takýmto útokom volajúci program zadá plnú cestu, napríklad /bin/su namiesto zadania iba su. Tiež sa treba presvedčiť, že súčasný adresár nie je vo vyhľadávacej ceste programov, ktoré vykonáva root.
Príklady všeobecných bezpečnostných princípov 29 • Obaly (wrappers) • Riadenie prístupu a auditné mechanizmy prezentované doposiaľ neboli veľmi sofistikované. Pridržiavajú sa tradičnej bezpečnosti operačných systémov a koncentrujú sa na riadenie prístupu k zdrojom. Je možné implementovať opatrenia na „medziľahlej úrovni“ rozumným použitím základných mechanizmov riadenia prístupu. Alternatívne môžeme modifikovať samotný Unix na dosiahnutie tohto cieľa. V tomto prípade je potrebné nájsť komponent Unixu, ktorý môže byť zmenený takým spôsobom, že sú pridané užitočné bezpečnostné opatrenia pričom zvyšok operačného systému zostane nedotknutý. • TCP obaly veľmi elegantne demonštrujú tento návrhový prístup. Sieťové služby Unixu ako telnet alebo ftp sú postavené na nasledovnom princípe. Démon inetd počúva prichádzajúce sieťové spojenia. Keď sa spojenie vytvorí, inetd odštartuje príslušný serverový program, a potom sa vráti na počúvanie ďalších spojení. Démon inetd má konfiguračný súbor, ktorý mapuje služby (čísla portov) do programov. Položky v tomto konfiguračnom súbore majú formát: service type protocol waitflag userid executable command-line . Napríklad, položka pre telnet by mohla byť: telnet stream tcp nowait root /usr/bin/in.telnetd in.telnet . Keď inetd príjme žiadosť o službu, ktorú obsluhuje, konzultuje konfiguračný súbor a vytvorí nový proces, ktorý vykoná špecifikované executable. Meno tohto nového procesu je zmenené na meno dané v poli príkazového riadku.
Príklady všeobecných bezpečnostných princípov 30 • Obaly (wrappers) • Zvyčajne je meno executable a meno dané v príkazovom riadku rovnaké. Táto nadbytočnosť otvára dvere na pekný trik. Nasmeruj démon inetd na program obalu (wrapper), namiesto nasmerovania na originálny executable, a použi meno procesu na zapamätanie mena originálneho executable, ktorý chcete vykonať potom ako obal vykonal svoje bezpečnostné opatrenia. V našom prípade, položka v konfiguračnom súbore pre telnet by mohla byť nahradená týmto: telnet stream tcp nowait root /usr/bin/itcpd in.telnet . Teraz vykonávaný program je /usr/bin/tcpd. Toto je TCP obal executable. Proces vykonávajúci obal je stále nazývaný in.telnet. V rámci tohto obalu je možné vykonať akékoľvek riadenia prístupu alebo logovanie. V originálnej aplikácii boli obaly použité na filtrovanie adries IP. Pretože obal pozná adresár v ktorom sa nachádza, t.j. /usr/bin a svoje vlastné meno, t.j. /usr/bin/in.telnet, obal môže potom zavolať originálny serverový program, t.j. /usr/bin/in.telnet. Používateľ nevidí žiadny rozdiel a dostane presne tú istú službu ako predtým. • Poučenie: pridanie ďalšej úrovni nepriamosti je výkonný nástroj v informatike. V bezpečnosti tento nástroj môže byť použitý na útok proti systému a na ochranu systému. Vložením TCP obalu medzi démon inetd a serverový program sme schopní pridať bezpečnostné opatrenia bez zmeny zdrojového kódu démona alebo zdrojového kódu serverového programu. • Krása tohto príkladu je v jeho všeobecnosti. Rovnaký princíp môža byť použitý na ochranu celej množiny sieťových služieb Unixu.
Príklady všeobecných bezpečnostných princípov 31 • Obaly (wrappers) • Poučenie: TCP obaly kombinujú základný návrhový princíp riadeného vyvolania a elegantný trik, ktorý urobí možným pridať bezpečnostné kontroly do služieb bez nutnosti zmeniť program, ktorý volá tieto služby. Toto je ideálna situácia, keď je potrebné dovybaviť bezpečnosť do existujúceho systému.
Záležitosti spravovania operačného systému 32 • Spravovanie superpoužívateľa – konto root je používané operačným systémom na vykonanie jeho základných úloh, ale tiež aj na určité iné úlohy administrácie systému. • Privilégiá superpoužívateľa sú hlavnou slabinou Unixu. Ak útočník získa status superpoužívateľa, zmocní sa celého systému. Preto prístup k statusu superpoužívateľ musí byť veľmi starostlivo chránený. • Ak útočník je schopný editovať súbor hesiel /etc/passwd, môže sa stať superpoužívateľom zmenou svojho UID na 0. To znamená, že súbory /etc/passwd a /etc/group musia byť chránené proti zápisu. Na redukciu dopadu kompromitácie sa odporúča oddeliť povinnosti administrátora systému, napríklad zavedením špeciálnych používateľov ako uucp alebo deamon pre narábanie so sieťovaním. V prípade, že by bol kompromitovaný jeden z týchto špeciálnych používateľov, ešte nie je všetko stratené. • Administrátori systému by nemali používať konto root ako svoje osobné konto (bežný používateľ systému). Pokiaľ je to nevyhnutné, zmena na roota je možná napísaním príkazu etc/su (bez špecifikácie používateľa). Operačný systém nezavolá inú verziu príkazu su uloženú v inom adresári, ale originálnu verziu. • Je dobrou praktikou logovať do auditu všetky pokusy o vykonanie príkazu suspolu s používateľom, ktorý tento príkaz zadal.
Záležitosti spravovania operačného systému 33 • Dôveryhodné hosty – v priateľskom prostredí môže byť postačujúce používateľa autentizovať iba raz, aj keď používateľ pristupuje k viacerým rôznym hostom. • Unix podporuje tento režim prevádzky – prevádzka dôveryhodné hosty. • Používateľ z dôveryhodného hosta sa môže nalogovať na druhý host bez autentizácie. Jedinou podmienkou je, že na oboch hostoch musí mať rovnaké meno (username). Dôveryhodné hosty stroja sú špecifikované v /etc/host.equiv. Dôveryhodné hosty používateľa sú špecifikované v súbore .rhosts v domovskom adresári. • Mená používateľov musia byť medzi hostami synchronizované. Táto úloha môže byť obtiažna v prípade rastu počtu hostov. (Navyše existujú špecifické konfigurácie dodávateľov, ktoré treba pre tento prípad upraviť.) • Akonáhle bol host zavedený do súboru /etc/host.equiv, všetci používatelia hosta získavajú tieto prístupy. Výnimky sa veľmi ťažko konfigurujú. • Auditné logy a detekcia prienikov – akonáhle bol systém inštalovaný a je v prevádzke, jeho bezpečnostné mechanizmy by mali zabraňovať ilegálnym aktivitám používateľov. • Avšak ochranné mechanizmy nemusia byť adekvátne alebo môžu byť vadné. • Nevhodné bezpečnostné mechanizmy môžu byť direktívne, aby vôbec bol systém schopný prevádzky. (Aplikácia nebeží so SP2!?) • Preto sú potrebné ďalšie mechanizmy na detekciu narušenia bezpečnosti alebo iných podozrivých udalostí, ktoré práve teraz nastávajú alebo sa stali v minulosti.
Záležitosti spravovania operačného systému 34 • Auditné logy a detekcia prienikov • Niektoré bezpečnostne relevantné udalosti operačný systém Unix automaticky zaznamenáva do svojich logovacích súborov: • /usr/adm/lastlog – zaznamenáva čas ostatného nalogovania používateľa, táto informácia môže byť zobrazená príkazom finger • /var/adm/utmp – zaznamenáva účtovacie informácie použité príkazom who • /var/adm/wtmp – zaznamenáva každý čas nalogovania a odlogovania používateľa, táto informácia môže byť zobrazená príkazom last. Aby tento súbor neprepísal všetku dostupnú pamäť, súbor môže byť v pravidelných intervaloch redukovaný. • /var/adm/acct – zaznamenáva všetky vykonávané príkazy, táto informácia môže byť zobrazená príkazom lastcom • Presné mená a lokácie uvedených súborov môžu byť odlišné pre rôzne verzie Unix. • Na auditné účely môže byť využitá aj funkcia účtovateľnosti, ktorá sa zapína príkazom accton. Pozorovanie systému Unix je možné ďalej zabezpečiť pomocou príkazov find, grep, ps, users. • Pri preskúmaní zoznamu zaznamenaných bezpečnostne relevantných udalostí zistíme, že väčšina týchto udalostí má súvis s používateľom, takže položka v zázname by mala obsahovať UID procesov, spôsobujúcich túto udalosť. Ako je potom auditovanie ovplyvnené programami SUID? Takýto program sa vykonáva s UID svojho vlastníka a nie s UID používateľa vykonávajúceho program. Odtiaľ vyplýva, že položky v logu by mali obsahovať reálne UID procesov.
Záležitosti spravovania operačného systému 35 • Auditné logy a detekcia prienikov • Poučenie: Používateľské identifikátory sú bezpečnostný atribút, ktorý je použitý na dva účely a to riadenie prístupu a účtovateľnosť. Nie je vždy možné využiť ten istý atribút na obidva účely v tú istú dobu. Pokiaľ UID korešponduje „reálnemu“ používateľovi, riadenie prístupu je založené na oprávneniach a auditovanie je obom komplementárne. Pokiaľ vytvoríte identity špeciálnych používateľov na ochranu prístupu k zdrojom prostredníctvom programov SUID alebo SGID, získate atribút s limitovaným použitím na auditovanie.