Počítačová bezpečnost 2. Bezpečnost v OS Obsah: jádro, procesy, knihovny, privilegovaný režim, systémové volání, změna kontextu, multitasking, ochrana paměti, výceuživatelský systém, oprávnění (DAC, MAC), chroot, sandbox © Milan Keršláger 2018/5/27 http://www.pslib.cz/ke/slajdy http://creativecommons.org/licenses/by-nc-nd/3.0/
Jádro operačního systému jádro se zavádí při startu počítače přebírá kontrolu nad počítačem vynucuje si „poslušnost“ nad procesy i uživateli prostředky procesům přiděluje a hlavně odebírá: preemptivně → lze odebrat násilím nepreemptivně → proces musí sám prostředku vzdát zajišťuje multitasking zajišťuje víceuživatelské prostředí různé typy jader podle návrhu: monolitické jádro, mikrojádro, hybridní jádro
Typy jader OS monolitické jádro – monolithic kernel jeden celek řeší celý problém (průběžný vývoj) varianta: modulární jádro mikrojádro – microkernel idea jako u strukturovaného programování ještě menší: exokernel, nanokernel, picokernel hybridní jádro – hybrid kernel něco mezi monolitickým a mikrojádrem snaha o využití „toho lepšího“ z obou
Vznik procesu algoritmus zápis postupu pro vyřešení úlohy program zápis algoritmu v nějakém programovacím jazyce proces spuštěný program thread (vlákno) odlehčený proces (proces má jedno či více vláken)
Proces spuštěný program stejný program může být spuštěn vícekrát každý má svoje vlastní data například dva prohlížeče, v každém jiná webová stránka jádro registruje popis každého procesu v PCB Process Control Block číslo procesu, vlastník, priorita, otevřené soubory, ... proces používá knihovny knihovna je v paměti součástí procesu o použití knihoven rozhoduje programátor
Knihovny snaha o opakované použití kódu v jazyce C je standardní knihovna (libc) zjednodušuje jazyk, standardizuje šířeji jazyk nemusí být klíčová slova pro I/O apod. knihoven jsou tisíce (její vytvoření je jednoduché) knihovna může způsobit problém program je bezchybný, ale volá knihovní funkci... dva základní typy knihoven: statické dynamické
Typy knihoven statické knihovny soubory s příponou .a knihovna se po překladu „přilepí“ k programu obstarává tzv. linker (doplněk k překladači) dynamické knihovny soubory s příponou .so (ve Windows .DLL) program obsahuje jen seznam knihoven a funkcí při spuštění musí loader zavést též knihovnu bez knihovny program nefunguje může být v paměti sdílena mezi více procesy
Privilegovaný režim některé instrukce jsou nebezpečné ohrožení stability nebo bezpečnosti počítače instrukce pro I/O nebo řízení procesoru procesor má 2 stavy (nebo více) privilegovaný lze provést jakoukoliv instrukci v tomto stavu běží jádro operačního systému neprivilegovaný pokus o použití privilegované instrukce → vnitřní přerušení program je obratem jádrem ukončen v tomto stavu běží všechny uživatelské programy
Systémové volání proces žádá jádro o provedení operace jde o změnu (přepnutí) kontextu z uživatelského do jaderného prostoru proces je v neprivilegovaném stavu vstup do jádra je možný jen softwarovým přerušením těch je omezený počet a je snadné je všechny ohlídat jádro je v privilegovaném stavu jádro může pro proces provést nedostupné operace jádro nejprve zkontroluje oprávnění procesu pak teprve provede požadovanou operaci například komunikace s I/O (zápis na port, do souboru...)
Změna kontextu anglicky: context switch kontext veškeré běhové informace o procesu PCB, stav procesoru s kontextem manipuluje jádro OS (scheduler) při střídání procesů na CPU (multitasking) stovky až tisíce změn za vteřinu → vyšší režie uložení kontextu (do RAM) → přerušení procesu obnovení kontextu (z RAM) → obnovení běhu
OS podle schopností víceuživatelský jednoúlohový CP/M DOS víceúlohový jednouživatelský víceuživatelský jednoúlohový CP/M DOS víceúlohový Windows NT (s Terminal Services) Unix Mac OS X
Víceúlohový systém lepší využití HW počítače úloha je zablokovaná, v tomto stavu čeká na dokončení I/O operace (tisk, síť, pevný disk) úloha záměrně spí (vstup od uživatele, jiná událost) potřeba oddělení jednotlivých úloh a jádra OS HW podpora v CPU (ochrana paměti, privilegovaný režim) střídání úloh při vykonávání procesorem tzv. multitasking (v jádře OS ho zajišťuje scheduler) potřebuje reentrantní jádro OS více úloh volá jádro zároveň (DOS neumožňoval)
Multitasking v počítači více (spuštěných) procesů zároveň pohodlí uživatele → paralelní zpracování DOS neuměl → jednodušší jádro OS v počítači více (běžících) procesů, než CPU → pseudoparalelismus procesy se musí o čas procesoru rozdělit střídání procesů na CPU → změna kontextu zajišťuje jádro OS dobrovolné → nepreemptivní vynucené → preemptivní
Využití multitaskingu zdánlivý běh více procesů zároveň multiprogramování programátor předpokládá současný běh procesů obstarává ho multitasking → systémové řešení paralelní výpočty → potřeba vzájemné komunikace programování síťových serverů problémy zajištění atomických operací → semafory atp. synchronizace výpočtu ve více procesech
Jádro a multitasking nepreemptivní multitasking běžící úloha se musí procesu sama vzdát úloha proto periodicky volá speciální službu jádra například Windows pro DOS (tj. včetně Win98) preemptivní multitasking jádro využije časovač → časové kvantum procesu po vyčerpání času vyvolá časovač přerušení proces je přerušen a jeho kontext uložen jádro privilegovaný režim, proces je v neprivilegovaném režimu scheduler vybere z fronty proces, který poběží např. řada Windows NT, Linux, Mac OS X atd.
Ochrana paměti jádro při multitaskingu zajišťuje ochranu paměti nutná podpora v procesoru typicky metoda zámků a klíčů, též segmenty (mezní reg.) každý proces má vlastní virtuální adresní prostor využívání stránkování nebo segmentace některé úseky paměti jsou mezi procesy sdíleny sdílené knihovny kód knihovny je pouze pro čtení má-li knihovna vlastní data, má každý proces vlastní instanci sdílená paměť mezi procesy (řídí programátor) pro čtení i zápis (při zápisu pozor na souběh)
Víceuživatelský systém podpora více uživatelů zároveň nutné zavedení oprávnění (MAC nebo DAC) zavedení pozice správce (root, administrátor) správce řídí ostatní uživatele potřebujeme vícenásobné uživatelské rozhraní textové rozhraní typické připojení přes emulaci terminálu + vzdálený shell grafické rozhraní obraz je v RAM, ke klientovi se přenáší změny GUI plochy Unix: X Window System (umožňuje samo o sobě), VNC, ... Windows NT: tzv. „vzdálená plocha“, VNC
Oprávnění oprávnění slouží k: odlišení uživatelů vyjádření možnosti přístupu ke zdrojům počítače zdrojem jsou typicky soubory, adresáře ale i přístup k síti, I/O zařízením atd. několik základních metod řízení přístupu: DAC – přístup na základě vlastnictví či skupin MAC – přístup na základě existence atributů
DAC Discretionary access control DAC je definováno podle TCSEC na úroveň C přístup ponechaný na „volném uvážení“ ve smyslu možnosti předání oprávnění na jiný objekt tj. vlastník může nastavovat oprávnění pro „své“ objekty implementace s vlastníkem (a skupinami) potomek přebírá oprávnění od svého rodiče objekt má vlastníka, který řídí přístup k objektům implementace se způsobilostmi tzv. „capabilities“, lze je též předávat (ne nutně vždy) program má způsobilost k provedení operace Fedora 15 bude nahrazovat SUID aplikace pomocí způsobilostí
Implementace s vlastníkem v unixových systémech, Windows NT, ... systém definuje uživatele a skupiny každý uživatel má své UID a GID (těch může být více) spuštěné procesy přebírají UID a GID svého vlastníka potomek procesu dědí oprávnění svého rodiče objekty mají definovány vlastníka a skupinu objektem je míněn adresář nebo soubor oprávnění pro vlastníka (UID), skupinu (GID), ostatní přístup procesu k objektům na základě UID, GID výjimky řeší speciální oprávnění (SUID, SGID a sticky bit)
MAC Mandatory access control MAC je definováno podle TCSEC na úroveň B subjekty i objekty mají definovány bezpečnostní atributy subjekt je typicky proces (thread) objektem může být soubor, adresář, síťový port, sdílená paměť... při přístupu subjektu k objektu jsou atributy porovnány porovnání provádí centrálně jádro operačního systému vlastník nemůže atributy měnit jako u MAC umožňuje definovat garantované politiky pro přístup ke zdrojům
Využití MAC pro systémy s MLS (Multilevel security) definováno podle TCSEC, Common Criteria zpracovávání dat s různou úrovní zabezpečení dokumenty s různým stupněm utajení např. důvěrné, tajné, přísně tajné lidé s různým stupněm pověření vyšší pověření může poskytnout přístup pro nižší pověření při přístupu lze data klasifikovaná na vyšší stupeň odstranit jako doplňky ke klasickému DAC: Linux: SELinux, AppArmor Windows Vista: Mandatory Integrity Control
chroot unixové systémové volání provede změnu kořenového adresáře vytváří tzv. chroot jail (vězení) může jen root (možnost podvržení /etc/passwd atp.) používá se pro „zvýšení bezpečnosti“ není-li provedeno správně, lze z něj uniknout při chybě v jádře nebo programu ztrácí význam spíše ochrana proti běžným chybám například smazání souboru omylem, čtení cizího souboru... nebylo původně jako bezpečnostní prvek míněno (!) pro bezpečné uzamčení je určen sandbox
Sandbox uzavření programu do „bezpečné obálky“ při návrhu je cíleno bezpečnostní hledisko virtualizace je speciální (hardwarový) případ sandboxu jádro poskytuje různé úrovně uzavření programu omezení přístupu k souborovému systému omezení přístupu k systémovým voláním jádra omezení přístupu k dalším prostředkům (paměť, síť) oblíbené pro „nedůvěryhodné programy“ webový prohlížeč Chrome využívá sandbox pluginy uvnitř prohlížeče vyžívají sandbox možné využít ale i pro vývoj software apod.