Zabezpečení přístupu kódu

Dnešní vysoce propojené počítačové systémy jsou často vystaveny kódu, který pochází z různých, případně neznámých zdrojů. Kód může být připojen k e-mailu, obsažený v dokumentech nebo stažen z Internetu. Bohužel mnoho uživatelů počítačů má zkušenosti s účinky škodlivého mobilního kódu z první ruky, včetně virů a červů, které mohou poškodit nebo zničit data a stojí čas i peníze.

Nejběžnější mechanismy zabezpečení udělují práva uživatelům na základě jejich přihlašovacích údajů (obvykle heslo) a omezují prostředky (často adresáře a soubory), ke kterým má uživatel povolen přístup. Tento přístup však selhává při řešení několika problémů: uživatelé získávají kód z mnoha zdrojů, některé z nich mohou být nespolehlivé; kód může obsahovat závady nebo chyby, které umožňují zneužití škodlivým kódem; a kód někdy provádí věci, o kterých uživatel neví, že je provádí. V důsledku toho můžou být počítačové systémy poškozeny a soukromá data prozrazena, když opatrní a důvěryhodní uživatelé spouští škodlivý software nebo software plný chyb. Většina mechanismů zabezpečení operačního systému vyžaduje, aby každá část kódu byla plně důvěryhodná, aby mohla být spuštěna, s výjimkou skriptů na webové stránce. Proto je zde stále potřeba všeobecně použitelného mechanismu zabezpečení, který umožňuje kódu pocházejícímu z jednoho počítačového systému spuštění s ochranou v jiném systému, i když mezi těmito systémy není žádný vztah důvěryhodnosti.

Rozhraní .NET Framework poskytuje mechanismus zabezpečení nazvaný zabezpečení přístupu kódu, aby pomohl chránit počítačové systémy před škodlivým mobilním kódem, umožnil spuštění kódu pocházejícího z neznámých zdrojů s ochranou a pomohl bránit důvěryhodný kód před úmyslným nebo neúmyslným ohrožením zabezpečení. Zabezpečení přístupu kódu umožňuje kódu být důvěryhodný na různých úrovních v závislosti na tom, odkud kód pochází a na dalších aspektech identity kódu. Zabezpečení přístupu kódu také u kódu vynucuje různé úrovně důvěryhodnosti, které minimalizují množství kódu, které musí být plně důvěryhodné, aby bylo možné ho spustit. Používání zabezpečení přístupu kódu může snížit pravděpodobnost, že váš kód bude zneužit škodlivým kódem nebo kódem, který je plný chyb. Může snížit vaši odpovědnost, protože můžete specifikovat sadu operací, které by váš kód měl mít umožněno provádět. Zabezpečení přístupu kódu také může pomoci minimalizovat škody, které mohou plynout z chyb zabezpečení ve vašem kódu.

PoznámkaPoznámka

Hlavní změny byly provedeny v zabezpečení přístupu kódu v rozhraní .NET Framework verze 4. Nejdůležitější změna byla transparentnost zabezpečení, ale jsou zde také další významné změny ovlivňující zabezpečení přístupu kódu.Další informace týkající se těchto změn naleznete v části Změny zabezpečení v rozhraní .NET Framework 4.

Zabezpečení přístupu kódu primárně ovlivňuje kód knihovny a částečně důvěryhodné aplikace. Vývojáři knihoven musí chránit svůj kód před neoprávněným přístupem z částečně důvěryhodných aplikací. Částečně důvěryhodné aplikace jsou aplikace, které jsou načteny z externích zdrojů, jako je například Internet. Aplikace nainstalované na stolním počítači nebo v místní síti běží jako plně důvěryhodné. Plně důvěryhodné aplikace nejsou ovlivněny zabezpečením přístupu kódu, pokud nejsou označeny jako security-transparent, protože jsou plně důvěryhodné. Jediné omezení pro plně důvěryhodné aplikace je to, že aplikace, které jsou označeny atributem SecurityTransparentAttribute nemohou volat kód, který je označený atributem SecurityCriticalAttribute. Částečně důvěryhodné aplikace musí být spuštěny v izolovaném prostoru (například v aplikaci Internet Explorer) tak, aby zabezpečení přístupu kódu mohlo být použito. Jestliže aplikaci stáhnete z Internetu a pokusíte se ji spustit z vašeho počítače, pak získáte výjimku NotSupportedException se zprávou: "Byl učiněn pokus o načtení sestavení ze síťového umístění, který by způsobil izolování sestavení v předchozích verzích rozhraní .NET Framework. Tato verze rozhraní .NET Framework automaticky neaktivuje zásady CAS, tedy toto načtení může být nebezpečné." Jestliže si jste jisti, že aplikaci lze důvěřovat, je možné povolit, aby byla spuštěna jako plně důvěryhodná pomocí elementu <loadfromremotesources>. Informace týkající se spuštění aplikace v izolovaném prostoru naleznete v tématu Postupy: Spustit částečně důvěryhodný kód v izolovaném prostoru.

Všechen spravovaný kód, který se zaměřuje na modul CLR (Common Language Runtime) získává výhody zabezpečení přístupu kódu, i když tento kód neprovádí jediné volání zabezpečení přístupu kódu. Další informace naleznete v tématu Základy zabezpečení přístupu kódu.

Klíčové funkce zabezpečení přístupu kódu

Zabezpečení přístupu kódu pomáhá omezit přístup ke kódu, který má chráněné prostředky a operace. Zabezpečení přístupu kódu v rozhraní .NET Framework plní následující funkce:

  • Definuje oprávnění a sady oprávnění, které představují práva pro přístup k různým systémovým prostředkům.

  • Umožňuje kódu požadovat, aby jeho volající měli určitá oprávnění.

  • Umožňuje kódu požadovat, aby jeho volající vlastnili digitální podpis, čili volání chráněného kódu povoluje pouze volajícím z určité organizace nebo webu.

  • V době běhu vynucuje na kódu omezení porovnáním udělených oprávnění každého volajícího v zásobníku volání s oprávněními, které volající musí mít.

Procházení zásobníku volání

K určení, zda je kód oprávněn pro přístup k prostředku nebo k provedení operace, systém zabezpečení modulu runtime prochází zásobník volání, porovnává udělená oprávnění každého volajícího s požadovanými oprávněními. Pokud nějaký volající v zásobníku volání nemá požadované oprávnění, je vyvolána výjimka zabezpečení a přístup je zamítnut. Procházení zásobníku je navrženo tak, aby pomáhalo předcházet lákajícím útokům, ve kterých méně důvěryhodný kód volá kód s vyšší důvěryhodností a používá ho k provedení neoprávněných akcí. Požadování oprávnění všech volajících v době běhu ovlivňuje výkon, ale je to nezbytné z důvodu ochrany kódu před lákajícími útoky, které provádí méně důvěryhodný kód. Chcete-li optimalizovat výkon, můžete nechat váš kód provést méně procházení zásobníku, ale musíte si být jisti, že vždy, když toto provedete, nevystavíte slabé stránky zabezpečení.

Následující ilustrace znázorňuje procházení zásobníku, když metoda v sestavení A4 požaduje, aby její volající měli oprávnění P.

Procházení zásobníku zabezpečení

Zabezpečení přístupu ke kódu

Příbuzná témata

Title

Popis

Základy zabezpečení přístupu kódu

Popisuje zabezpečení přístupu kódu a jeho nejčastější použití.

Transparentní kód pro zabezpečení, úroveň 2

Popisuje model transparentnosti zabezpečení v rozhraní .NET Framework 4.

Používání knihoven z částečně důvěryhodného kódu

Popisuje, jak povolit knihovny pro použití s nespravovaným kódem a způsob použití knihoven z nespravovaného kódu.

Psaní zabezpečených knihoven tříd

Popisuje důležité informace o zabezpečení pro knihovny tříd.

Vytvoření vlastního kódu přístupových oprávnění

Popisuje, jak vytvořit vlastní oprávnění.

Klíčové koncepty zabezpečení

Obsahuje přehled mnoha klíčových pojmů a konceptů používaných v systému zabezpečení rozhraní .NET Framework.

Zabezpečení založené na rolích

Popisuje, jak zahrnout zabezpečení založené na rolích.

Služby šifrování

Popisuje jak včlenit kryptografii do vašich aplikací.

Security Tools (.NET Framework)

Popisuje nástroje, které slouží k implementaci a správě systému zabezpečení rozhraní .NET Framework.