Zabezpečení na základě schopností - Capability-based security

Zabezpečení založené na schopnostech je koncept při navrhování zabezpečených výpočetních systémů, jeden ze stávajících modelů zabezpečení . Schopnosti (známý v některých systémech jako klíč ) je přenosná, nepadělatelném znamení autority. Odkazuje na hodnotu, která odkazuje na objekt spolu s přidruženou sadou přístupových práv . Uživatel programu na operačním systému schopností na bázi musí používat možnost přístupu k objektu. Zabezpečení založené na schopnostech odkazuje na princip navrhování uživatelských programů tak, aby mezi sebou přímo sdílely funkce podle zásady nejmenších oprávnění , a na infrastrukturu operačního systému nezbytnou k tomu, aby takové transakce byly efektivní a bezpečné. Zabezpečení založené na schopnostech má být v kontrastu s přístupem, který používá domény hierarchické ochrany .

Ačkoli většina operačních systémů implementuje zařízení, které se podobá schopnostem, obvykle neposkytují dostatečnou podporu, která by umožnila výměnu schopností mezi případně vzájemně nedůvěřujícími entitami být primárním prostředkem udělování a distribuce přístupových práv v celém systému. Naproti tomu systém založený na schopnostech je navržen s ohledem na tento cíl.

Schopnosti popsané v tomto článku by neměly být zaměňovány s „ schopnostmiPOSIX 1e/2c . Ty druhé jsou hrubozrnná oprávnění, která nelze přenášet mezi procesy.

Úvod

Schopnosti dosahují svého cíle zlepšit zabezpečení systému tím, že se používají místo padělaných odkazů . Vyměnitelný odkaz (například název cesty ) identifikuje objekt, ale neurčuje, která přístupová práva jsou vhodná pro tento objekt a uživatelský program, který tento odkaz obsahuje. V důsledku toho musí být jakýkoli pokus o přístup k odkazovanému objektu ověřen operačním systémem na základě okolního oprávnění žádajícího programu, obvykle pomocí seznamu řízení přístupu (ACL). Místo toho v systému s možnostmi opravňuje pouhá skutečnost, že uživatelský program má tuto schopnost, používat odkazovaný objekt v souladu s právy, která jsou daná schopností určena. Systém s schopnostmi teoreticky odstraňuje potřebu jakéhokoli seznamu řízení přístupu nebo podobného mechanismu tím, že dává všem entitám všechny a pouze schopnosti, které skutečně budou potřebovat.

Funkce je obvykle implementována jako privilegovaná datová struktura, která se skládá ze sekce, která určuje přístupová práva, a sekce, která jednoznačně identifikuje objekt, ke kterému se má přistupovat. Uživatel nepřistupuje k datové struktuře nebo objektu přímo, ale místo toho prostřednictvím popisovače . V praxi se používá podobně jako deskriptor souborů v tradičním operačním systému (tradiční popisovač), ale k přístupu ke každému objektu v systému. Operační systém obvykle ukládá funkce do seznamu, přičemž je zaveden mechanismus, který brání programu přímo upravovat obsah schopností (aby bylo možné zfalšovat přístupová práva nebo změnit objekt, na který ukazuje). Některé systémy byly také založeny na adresování založeném na schopnostech (hardwarová podpora schopností), například Plessey System 250 .

Programy, které mají schopnosti, na nich mohou vykonávat funkce, například je předávat jiným programům, převádět na méně privilegovanou verzi nebo mazat. Aby byla zachována integrita zásad zabezpečení, musí operační systém zajistit, aby se schopnostem systému mohly provádět pouze konkrétní operace.

Příklady

Schopnost je definována jako odkaz na chráněný objekt, který na základě svého vlastnictví uživatelským procesem uděluje tomuto procesu schopnost (odtud název) určitým způsobem interagovat s objektem. Tyto způsoby mohou zahrnovat čtení dat spojených s objektem, úpravu objektu, spouštění dat v objektu jako proces a další myslitelná přístupová práva. Schopnost logicky sestává z odkazu, který jednoznačně identifikuje konkrétní objekt, a sady jednoho nebo více těchto práv.

Předpokládejme, že v paměti uživatelského procesu existuje následující řetězec:

/etc/passwd

Ačkoli toto identifikuje jedinečný objekt v systému, neurčuje přístupová práva, a proto není schopností. Předpokládejme, že místo toho existují následující dvě hodnoty:

/etc/passwd
O_RDWR

Toto identifikuje objekt spolu se sadou přístupových práv. Stále to však není schopnost, protože vlastnictví těchto hodnot uživatelským procesem neříká nic o tom, zda by tento přístup byl skutečně legitimní.

Předpokládejme nyní, že uživatelský program úspěšně provede následující příkaz:

int fd = open("/etc/passwd", O_RDWR);

Proměnná fdnyní obsahuje index deskriptoru souboru v tabulce deskriptoru souboru procesu. Tento deskriptor souborů je schopnost. Jeho existence v tabulce deskriptoru souboru procesu stačí k tomu, aby věděl, že proces skutečně má legitimní přístup k objektu. Klíčovou vlastností tohoto uspořádání je, že tabulka deskriptorů souborů je v paměti jádra a uživatelský program s ní nemůže přímo manipulovat.

Sdílení mezi procesy

V tradičních operačních systémech programy často komunikují mezi sebou a s úložištěm pomocí odkazů, jako jsou ty v prvních dvou příkladech. Názvy cest jsou často předávány jako parametry příkazového řádku, odesílány prostřednictvím soketů a ukládány na disk. Tyto odkazy nejsou schopnostmi a je třeba je před použitím ověřit. V těchto systémech je ústřední otázkou „na čí autoritě je daný odkaz hodnocen?“ To se stává zásadním problémem zejména pro procesy, které musí jednat jménem dvou různých entit nesoucích autoritu. Stávají se náchylnými k programovací chybě známé jako problém zmateného zástupce , což velmi často vede k bezpečnostní díře .

V systému založeném na schopnostech jsou samotné schopnosti předávány mezi procesy a úložištěm pomocí mechanismu, který je znám operačním systémem k zachování integrity těchto schopností.

Jeden nový přístup k řešení tohoto problému zahrnuje použití ortogonálně trvalého operačního systému. V takovém systému není potřeba, aby byly entity vyřazeny a jejich schopnosti znehodnoceny, a proto vyžadují mechanismus podobný ACL k obnovení těchto schopností později. Operační systém udržuje integritu a zabezpečení schopností obsažených v celém úložišti, těkavém i energeticky nezávislém, po celou dobu; částečně tím, že všechny úkoly serializace provádí sám, místo aby to vyžadovaly uživatelské programy, jako je tomu ve většině operačních systémů. Protože jsou uživatelské programy zbaveny této odpovědnosti, není potřeba jim důvěřovat, aby reprodukovaly pouze legální možnosti, ani ověřovaly žádosti o přístup pomocí mechanismu řízení přístupu . Příkladem implementace je stroj Flex z počátku 80. let minulého století.

Možnosti POSIX

POSIX koncept 1003.1e specifikuje koncept oprávnění nazývaný "schopnosti". Možnosti POSIX se však liší od možností v tomto článku - funkce POSIX není spojena s žádným objektem; proces s funkcí CAP_NET_BIND_SERVICE může poslouchat na jakémkoli portu TCP pod 1024. Tento systém se nachází v Linuxu.

Naproti tomu Capsicum hybridizuje skutečný model systému schopností s designem UNIX a POSIX API. Funkce Capsicum jsou vylepšenou formou deskriptoru souborů, delegovatelným právem mezi procesy a dalšími typy objektů nad rámec klasického POSIXu, jako jsou procesy, lze odkazovat pomocí schopností. V režimu schopností Capsicum procesy nemohou využívat globální obory názvů (například obor názvů souborového systému) k vyhledávání objektů a místo toho je musí zdědit nebo jim být delegováno. Tento systém se nachází nativně ve FreeBSD, ale záplaty jsou k dispozici pro jiné systémy.

Implementace

Mezi pozoruhodné výzkumné a komerční systémy využívající zabezpečení založené na schopnostech patří následující:

Reference

Další čtení

POSIX „schopnosti“ v Linuxu:

externí odkazy