Poznáváme C# a Microsoft .NET – 75. díl – Bezpečnost

Bezpečnost je pojmem, který je v souvislosti se softwarovými aplikacemi velmi často skloňován. Výjimkou není ani platforma .NET a tudíž dnešní článek se jí bude věnovat. Jelikož je tento článek úvodem do problematiky bezpečnosti, seznámíme se hlavně se základními principy implementace zabezpečení aplikací v rámci .NET.

Základní koncepty V oblasti vývoje softwarových aplikací je potřeba z bezpečností řešit několik otázek. Například jaké operace, aplikace nebo zásuvný modul, které pocházejí z nějakého méně důvěryhodného zdroje, například sítě internet, mohou po spuštění v našem počítači provádět. Asi se shodneme na tom, že by nebylo úplně šťastné kdyby, se na pozadí stažený zásuvný modul aplikace po stažení postaral o zasílání našich emailů správci webu nebo o nějaké další nepříjemné překvapení . Další řešenou problematikou v oblasti zabezpečení aplikací je fakt, že ne každá osoba pracující s aplikací má potřebná práva pro provádění všech operací, které daná aplikace poskytuje a je tedy potřeba rozlišit chování aplikace v závislosti na aktuálně pracujícím uživateli.

Tyto otázky jsou rámcem .NET řešeny velmi efektivně. Běhové prostředí CLR při nahrávání každé assembly sestavuje sadu informací o nahrávané assembly (legitimace sestavení - assembly evidence), kam mimo jiné zaznamená z jakého umístění je daná assembly nahrána. Na základě těchto informací jsou tedy assembly, jako základní jednotce pro přiřazení bezpečnostních práv, povoleny pouze specifické operace. Pro řešení otázky s různými osobami, které pracují s aplikací je rámec .NET připraven pracovat s několika různými druhy autentikace. Údaje získané pomocí mechanismu autentikace mohou být v aplikaci použity na rozlišení operací, které mohou osoby, pracující s aplikací, provádět. Pojďme se na tyto koncepty podívat pěkně zvlášť a trochu blíže.

Zabezpečení přístupu ke kódu Zapezpečení přístupu ke kódu – Code Access Security (CAS) je přístup využívaný rámcem .NET pro udělení stupně důvěry určité assembly. Pokud se kód v assembly pokouší přímo nebo nepřímo přistupovat k nějakému zdroji (soubor, proměnné prostředí..) a není mu udělena taková důvěra, kterou pro tento přístup potřebuje, je vyhozena výjimka SecurityException. To jakou důvěru určitá assembly získá je definováno pomocí dvou základních konceptů – kódových skupin a sad oprávnění.

Kódové skupiny seskupují assembly s určitými charakteristickými vlastnostmi. Mezi vlastnosti, které slouží k tomuto seskupování jsou například vydavatel assembly, adresář ze kterého assembly pochází či silné jméno assembly. Ke každé kódové skupině je přiřazena určitá sada oprávnění. Každé oprávnění se váže k určitým akcím, které mohou být kódem vykonány. Existuje oprávnění pro přístup k souborům, pro využívání izolovaných úložišť, používání proměnných prostředí a tak dále. Je tedy v praxi možné definovat kódovou skupinu, do níž budou spadat všechny assembly od určitého vydavatele a díky specifické sadě oprávnění definovat jaké všechny operace budou kódy v assembly od daného vydavatele smět vykonávat.

Kromě možnosti definovat vlastní kódové skupiny a sady oprávnění je zde i skupina předdefinovaných skupin (Lokální počítač, Lokální intranet, Internet..) i sad oprávnění (Veškerá oprávnění, Spouštění, Žádná oprávnění..). Správci systémů mohou kódové skupiny spravovat buď pomocí utility pro příkazový řádek (caspol.exe) nebo mnohem pohodlněji pomocí modulu snap-in konzole MMC.

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

Správa zabezpečení pomocí modulu snap-in konzole MMC Se zabezpečením přístupu kódu lze pracovat nejen na úrovni administračních nástrojů, ale také na úrovni zdrojového kódu. Touto problematikou se budeme hlouběji zabývat v příštím článku, ale nyní si alespoň řekneme, že každé oprávnění je představováno objekty určitého typu a že s těmito objekty lze provádět různé operace. Jednou s nejužívanější operací je operace vyžádání daného oprávnění, kde zjistíme zda-li volající kód disponuje potřebným oprávněním pro provedení specifické akce, na což můžeme v aplikaci nějakým způsobem reagovat.

//vytvorime objekt opravneni pristupu k souboru
FileIOPermission filePermission = new FileIOPermission(FileIOPermissionAccess.AllAccess, "C:/file.dll");
try
{
      //vyzadame toto opravneni
      filePermission.Demand();
      Console.WriteLine("Pristup k souboru byl povolen! Aplikace ma dostatecna prava");
}
catch (SecurityException secEx)
{
     Console.WriteLine("Pristup k souboru byl odepren! Aplikace nema dostatecna opravneni");
}

Zabezpečení založené na rolích Zabezpečení přístupu ke kódu řeší problémy různých původů assembly. Jistě je to velmi inteligentní způsob toho jak odlišit jaké oprávnění má assembly od daného vydavatele čí z daného umístění získat , avšak kromě tohoto zabezpečení obsahuje rámec .NET podporu zabezpečení založeného na rolích. Při tomto způsobu zabezpečení jsme schopni určit chování aplikace v závislosti na tom, za je či není aktuální uživatel aplikace ve specifické roli.

Zajímavou informací je, že tento způsob oproti bezpečnosti přístupu ke kódu také znatelně rychlejší. Zabezpečení založené na rolích je implementováno pouze na úrovni zdrojového kódu aplikace. Při implementaci tohoto typu zabezpečení je využíváno kontextu zabezpečení uživatele, který je představován typem implementujícím rozhraní IPrincipal. Těchto typů je několik a toho správného je použito v závislosti na tom s jakým způsobem ověřování je asociována daná aplikační doména. Asi nejčastěji je využíváno integrovaného ověřování systému Windows, ale používá se i ověřování technologie ASP .NET či technologie passport. Existují i další a dobré je vědět, že tuto množinu lze doplnit vlastní implementací.

//nastavime politiku vazani identity          AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
           
//ziskame objekt predstavujici uzivatele
IPrincipal principal = Thread.CurrentPrincipal;
//zjistime jestli je obsazen v roli Administrator
bool isAdmin = principal.IsInRole("Administrator");

if (isAdmin)
{
    Console.WriteLine("Uzivatel je obsazen v roli Administrator");
}
else
{
    Console.WriteLine("Uzivatel neni obsazen v roli Administrator");
}

Tolik ke stručnému představení bezpečnosti založené na rolích. Podobně jako v případě zabezpečení přístupu ke kódu, tak i tomto způsobu zabezpečení bude podrobněji pojednávat jeden z dalších článků.

Příklady ke článku lze stáhnout zde.

Příští díl bude podrobněji pojednávat o bezpečnosti přístupu ke kódu.

Témata článku: Software, Microsoft, Bezpečnost, Programování, Snap, Catch

6 komentářů

Nejnovější komentáře

  • aredhel 24. 6. 2006 18:33:49
    autentikace ma byt co, autentizace?

    autentikace = autentizace =...
  • gully, gully 22. 6. 2006 10:35:05
    Ano, je to zcela legalni. Je to vydane se souhlasem jak pana Puse, tak i...
  • mifko 20. 6. 2006 13:33:43
    Bohuzial, slovo ramec sa ozaj ako ekvivalent slova...
Určitě si přečtěte

Operační systém běžným počítačům nedal Bill Gates, ale Gary Kildall

Operační systém běžným počítačům nedal Bill Gates, ale Gary Kildall

** Gary Kildall pochopil, že levné výpočetní čipy mohou posloužit jako univerzální počítače pro všechny ** Připravil pro ně proto první operační systém ** Později mu systém vyfoukl Microsoft a nazval ho MS DOS

23.  4.  2017 | Pavel Tronner | 52

Umělá inteligence je sice v plenkách, už teď ale přestáváme rozumět, jak vlastně funguje. To je problém

Umělá inteligence je sice v plenkách, už teď ale přestáváme rozumět, jak vlastně funguje. To je problém

** Už je to tady, lidé přestávají chápat počítače ** Systémy neuronových sítí začínají pracovat tak, že ani jejich tvůrci přesně neví, co se uvnitř děje ** Do budoucna to může být závažný problém

24.  4.  2017 | Jakub Čížek | 112

Před 35 lety měl premiéru legendární počítač ZX Spectrum. Připomeňte si „Gumáka“

Před 35 lety měl premiéru legendární počítač ZX Spectrum. Připomeňte si „Gumáka“

** Slavný osmibitový počítač Sinclair ZX Spectrum byl uveden právě před 35 lety ** Připomeňte si tento průkopnický počítač v tematických článcích ** Podívejte se, jak funguje dnes

23.  4.  2017 | Pavel Tronner | 13

Správný počítač má alespoň dva monitory. Anebo je to jinak?

Správný počítač má alespoň dva monitory. Anebo je to jinak?

** David si nedokáže představit práci bez dvou a více monitorů ** Kubovi naopak stačí jeden a ve více displejích se ztrácí ** Jaký přístup je lepší?

23.  4.  2017 | Jakub Čížek | 59

Český Google Překladač začal používat umělou inteligenci. Konec „drahoušků zákazníků“

Český Google Překladač začal používat umělou inteligenci. Konec „drahoušků zákazníků“

** Google ve svém překladači roky používal statistickou technologii ** Nyní zavádí strojové učení a neuronové sítě ** Rozdíl by měl být zvláště na větších textech patrný už nyní

20.  4.  2017 | Jakub Čížek | 31

Brno otevřelo největší českou dílnu pro bastlíře. Kladívka, vrtačky, 3D tiskárny, laserové řezačky. Je tu vše

Brno otevřelo největší českou dílnu pro bastlíře. Kladívka, vrtačky, 3D tiskárny, laserové řezačky. Je tu vše

** Máte nápad, ale chybí vám stroje a pořádná dílna? ** Chcete postavit ptačí budku, nebo krabičku pro Arduino? ** Brno otevřelo svůj FabLab – laboratoř pro bastlíře

19.  4.  2017 | Jakub Čížek | 31


Aktuální číslo časopisu Computer

První test AMD Ryzen

Velké testy: 22 powerbank a 8 bezdrátových setů

Radíme s koupí Wi-Fi routeru

Co dokáží inteligentní domy?