reklama

Poznáváme C# a Microsoft .NET – 76. díl – CAS

Minulý díl poodhalil základní koncepty zabezpečení platformy .NET. My se dnes začneme zabývat konceptem CAS – Code Access Security, což v češtině znamená zabezpečení přístupu ke kódu.

Použití CAS

Smyslem CAS je řízení přístupu k chráněným prostředkům, jako jsou síť, místní disk, proměnné prostředí atd. Primárním účelem ovšem není ochrana těchto prostředků před uživateli aplikace, ale ochrana před zlomyslným kódem, který si například můžeme stáhnout z internetu či jiného nedůvěryhodného umístění. Tento systém zabezpečení běží neustále na pozadí a kontroluje zda-li všichni volající v zásobníku volání mají přístup k danému prostředku.

Pokud tomu tak není je vyhozena bezpečnostní výjimka. Možná některé z vás zarazilo ono neustálé procházení zásobníku volání a kontrola oprávnění a položili jste si otázku „A co výkon?“. Ano toto procházení zásobníku volání si bere svou daň v podobě výkonu, ale je to velmi důležité, jinak by totiž mohla assembly, která nemá dostatečnou důvěru a tedy i práva, využít volání jiné assembly s vyšší důvěrou a zneužít ji k narušení bezpečnosti.

Kromě této automatické práci na pozadí jsme schopni tento systém zabezpečení i využít na úrovni našich zdrojových kódů. Můžeme zjistit, jestli jsou v daném kontextu k dispozici potřebná oprávnění a podle toho reagovat chováním aplikace, nebo můžeme povolit či zakázat přístup k určitému prostředku ostatním assembly. Možnosti jsou opravdu bohaté a s většinou se pokusíme v rámci článků o bezpečnosti seznámit. Nyní přejděme k pojmům, se kterými jsme se seznámili v minulém díle, tedy ke kódovým skupinám a sadám oprávnění a podívejme se na ně blíže.

Kódové skupiny

K tomu, aby běhové prostředí CLR vědělo jaké oprávnění má přidělit assembly v době kdy ji zavádí do paměti, musí zjistit do jaké kódové skupiny daná assembly patří. Oprávnění totiž nejsou definována pro jednotlivé assembly, ale pro jejich skupiny, což konfiguraci zabezpečení činí velmi příjemnou. To jaké assembly budou patřit do jakých skupin, může být určeno několika různými cestami. Vždy je totiž potřeba přesně definovat podle jaké vlastnosti budou assembly přiřazovány k určité kódové skupině. Těmito vlastnostmi mohou být například:

  • Zóna – zóna odkud assembly pochází (Internet, Intranet, Lokální počítač, Důvěryhodné server…)
  • Server – server odkud assembly pochází
  • Silný název assembly
  • Vydavatel assembly
  • URL – URL odkud assembly pochází
  • Aplikační adresář – znamená, že assembly pochází z adresáře aplikace nebo z adresáře vnořeného

Nejčastěji používanou vlastností používanou pro určení členství v určité skupině je zóna, vydavatel assembly či silné jméno.

Po instalaci .NET frameworku je již několik kódových skupin předpřipraveno. Všechny tyto předpřipravené skupiny mají jako podmínku členství použitu právě zmíněnou zónu. Pro případy, kdy chceme přiřadit oprávnění assembly na základě jiných podmínek než je zóna původu musíme definovat vlastní kódovou skupinu. Při definici vlastní kódové skupiny totiž určujeme podmínku členství jednotlivých assembly do dané skupiny. Touto podmínkou může být právě jedna z možných vlastností. Assembly samozřejmě může splňovat více podmínek členství kódových skupin a tím pádem může být členem více různých kódových skupin.

Ke konfiguraci zabezpečení platformy .NET můžeme použít dvou cest. Tou první je utilita caspol.exe, se kterou se pracuje pomocí příkazového řádku a druhá cesta je představována modulem snap-in do konzoly MMC. Podle mého názoru je konfigurace příjemnější pomocí modulu, ale každý nechť činí konfiguraci podle svého gusta.

Konfigurace kódových skupin probíhá na třech různých úrovních a to na úrovni Enterprise (podniková – rozlehlá síť), Machine (počítače) a User (uživatele), což se projeví při výpočtu efektivních oprávnění pro danou assembly. Na to se podíváme později. Implicitně jsou kódové skupiny definovány pouze na úrovni počítače, tudíž oprávnění definována pouze pro ně.

Klepněte pro větší obrázek

Karta podmínka členství ve skupině v modulu snap-in ke správě zabezpečení .NET frameworku

Klepněte pro větší obrázek

Založení nové kódové skupiny pomocí modulu snap-in

Sady oprávnění

Již tedy víme, že běhové prostředí CLR při každém zavádění assembly do paměti shromažďuje legitimaci assembly a na základě těchto informací přiřadí assembly do jednotlivých skupin. To jaké operace je umožněno kódům v assembly provádět je definováno pomocí sad oprávnění. Sada oprávnění jsou to z důvodu, že v .NET frameworku se k jednotlivým kódovým skupinám neasociují jednotlivá oprávnění, ale přidružují se k blokům, které mohou obsahovat několik oprávnění. Každá kódová skupina definuje, kterou sadu oprávnění získá kód, který do ní patří.

Klepněte pro větší obrázek

Karta zobrazující přidruženou sadu oprávnění k určité kódové skupině

Tyto sady tedy obsahují výčet oprávnění pro vykovávání přístupů k prostředkům, mezi nejpoužívanější patří například tyto typy oprávnění:

  • FileIOPermission – oprávnění pro práci se soubory a s adresáři
  • DnsPermission – oprávnění pro práci se službou DNS
  • EventLogPermission – oprávnění pro práci z protokolem událostí
  • EnvironmentPermission – oprávnění pro práci s proměnnými prostředí
  • OleDbPermission – oprávnění k přístupu k databázím pomocí rozhraní OLE DB
  • PrintingPermission – oprávnění k tisku
  • ReflectionPermission – oprávnění k používání mechanismu reflexe
  • RegistryPermission – oprávnění k používání registrů systému Windows
  • SecurityPermission – oprávnění ke spouštění kódu, využívání mechanismu zabezpečení, volání neřízeného kódu…
  • SqlClientPermission – oprávnění k využívání funkčnost datového poskytovatele pro SQL server
  • SocketPermission – oprávnění k přijímání či vytváření spojení transportní vrstvy protokolu TCP/IP
  • UIPermission – oprávnění k využívání uživatelského rozhraní
  • WebPermission – oprávnění k přístupu ke zdrojům pomocí protokolu HTTP

Stejně jako v případě kódových skupin jsou i oprávnění definována na třech úrovních (Uživatel, počítač, podniková síť). Na úrovní počítače jsou po instalaci prostředí .NET vytvořeny základní sady oprávnění:

  • FullTrust – Tato sada oprávnění uděluje kódu neomezený přístup k chráněným prostředkům. Jinými slovy pokud je assembly členem kódové skupiny, ke které je přidružena tato sada oprávnění, může její kód provádět takřka vše.
  • SkipVerification – Umožňuje přeskočit ověřování bezpečnostním systémem
  • Execution – Povoluje spouštění kódu v assembly avšak ne přístup k chráněným prostředkům
  • Nothing -Tato sada neobsahuje žádné oprávnění ani oprávnění na spouštění kódu assembly
  • LocalIntranet – Výchozí sada oprávnění pro kód pocházející z místního intranetu
  • Internet – Výchozí sada oprávnění pro kód pocházející z internetu
  • Everything – Tato sada oprávnění obsahuje všechna oprávnění kromě oprávnění přeskočit ověřování

Klepněte pro větší obrázek

Zobrazení sady oprávnění

Klepněte pro větší obrázek

Založení nové sady oprávnění

Výsledná oprávnění kódu

Jak jsem zmínil o pár řádek výše, tak assembly může patřit do několika různých kódových skupin. Jelikož každá kódová skupina má k sobě přidruženu jednu sadu oprávnění je otázkou, jaké má vlastně assembly výsledná oprávnění, pokud patří do různých kódových skupin. Navíc ještě když můžou být kódové skupiny definovány na třech úrovních. Není to ale vůbec složité. Na jedné úrovni jsou celková oprávnění sjednocením všech oprávnění, které jsou jednotlivým skupinám přiřazena. Lze tedy jinými slovy říci, že každým členstvím ve skupině assembly přibývají oprávnění.

Pokud nám do tohoto výpočtu celkových oprávnění vstoupí ještě různé úrovně, na kterých mohou kódové skupiny a sady oprávnění existovat, musíme vědět to, že výsledná práva jsou průnikem celkových oprávnění na jednotlivých úrovních. To znamená, že na nižších úrovních mohou být jednotlivá oprávnění překryta, což velmi zpříjemňuje práci správcům, kteří jsou díky této vlastnosti schopni určit specifická oprávnění pro konkrétní uživatele.

Příštím dílem se již začneme zaobírat programovým využitím systému zabezpečení.

Témata článku: Software, Microsoft, Programování, Internet, Snap

5 komentářů

Nejnovější komentáře

  • Kris 28. 7. 2006 9:55:50
    Zdravim,
    chcel by som sa opytat, ci je mozne nejako programovo zmenit...
  • gully, gully 12. 7. 2006 10:55:19
    Diky. Abych se priznal, zatim jsem o teto moznosti neuvazoval.
  • SneakerXZ 6. 7. 2006 14:21:59
    Šikovna věc ta offline verze, ale neuvažujete taky do exportu do PDF?...
reklama
Určitě si přečtěte

Microsoft: Zbavte se už konečně zastaralých a děravých Windows 7

Microsoft: Zbavte se už konečně zastaralých a děravých Windows 7

** Microsoft pomalu začíná kritizovat svůj nejpopulárnější OS ** Chce konečně dostat podniky na Desítky ** Bezpečnostní podpora Sedmiček vydrží ještě necelé tři roky

17.  1.  2017 | Jakub Čížek | 404

Český státní blacklist už funguje. Ministerstvo financí se pochlubilo s detaily

Český státní blacklist už funguje. Ministerstvo financí se pochlubilo s detaily

** Dva týdny po Novém roce zajím zeje prázdnotou ** Ministerstvo vydalo metodický pokyn ** Takhle to bude fungovat v praxi

16.  1.  2017 | Jakub Čížek | 49

8 produktů, o kterých byste neřekli, že nesou značku Apple

8 produktů, o kterých byste neřekli, že nesou značku Apple

** Věděli jste, že Apple vyvinul celkem 45 modelů tiskáren? ** ** Monitor na výšku, plotter nebo herní konzole - to vše měl Apple ve své nabídce ** Většinu z těchto produktů pohřbil Steve Jobs

19.  1.  2017 | Stanislav Janů | 34

Opera Neon: Takto prý bude vypadat prohlížeč budoucnosti. Chcete to?

Opera Neon: Takto prý bude vypadat prohlížeč budoucnosti. Chcete to?

** Opera představila Neon ** Koncepci prohlížeče budoucnosti ** Připomíná Chrome OS

16.  1.  2017 | Jakub Čížek | 35


Aktuální číslo časopisu Computer

99 nejlepších programů pro váš počítač

Zvykejte si na umělou inteligenci

Velké testy PC zdrojů a gamepadů

Alternativní zdroje energie

reklama
reklama