Programování

Zabezpečovací architektura Java

Sloupec „Under The Hood“ z tohoto měsíce je první ze čtyřdílné série o bezpečnostním modelu Java. Čtyři články se zaměří na bezpečnostní infrastrukturu zabudovanou do virtuálního stroje Java (JVM) a knihovny java.lang. Tento první článek poskytuje přehled bezpečnostního modelu a popisuje bezpečnostní funkce JVM.

Proč bezpečnost?

Model zabezpečení Java je jednou z klíčových architektonických funkcí jazyka, díky čemuž je vhodná technologie pro síťová prostředí. Zabezpečení je důležité, protože sítě poskytují potenciální útočnou cestu každému počítači připojenému k nim. Tento problém se stává obzvláště silným v prostředí, ve kterém je software stahován přes síť a prováděn lokálně, jako je tomu například u Java appletů. Protože soubory třídy pro applet se automaticky stáhnou, když uživatel přejde na webovou stránku obsahující v prohlížeči, je pravděpodobné, že se uživatel setká s applety z nedůvěryhodných zdrojů. Bez zabezpečení by to byl pohodlný způsob šíření virů. Bezpečnostní mechanismy Java tedy pomáhají přizpůsobit prostředí Java sítím, protože vytvářejí potřebnou důvěru v bezpečnost síťového a mobilního kódu.

Bezpečnostní model Java je zaměřen na ochranu uživatelů před nepřátelskými programy staženými z nedůvěryhodných zdrojů v síti. K dosažení tohoto cíle poskytuje Java přizpůsobitelné „pískoviště“, ve kterém běží programy Java. Program Java musí hrát pouze uvnitř svého izolovaného prostoru. Může dělat cokoli v mezích svého izolovaného prostoru, ale nemůže podniknout žádnou akci mimo tyto hranice. Sandbox například pro nedůvěryhodné applety Java zakazuje mnoho činností, včetně:

  • Čtení nebo zápis na místní disk
  • Vytváření síťového připojení k libovolnému hostiteli, kromě hostitele, ze kterého applet pochází
  • Vytváření nového procesu
  • Načítání nové dynamické knihovny a přímé volání nativní metody

Tím, že je nemožné, aby stažený kód provedl určité akce, model zabezpečení Java chrání uživatele před hrozbou nepřátelského kódu.

Pískoviště definováno

Před spuštěním jste tradičně museli softwaru důvěřovat. Zabezpečení jste dosáhli tím, že budete opatrní pouze při používání softwaru z důvěryhodných zdrojů a pravidelným skenováním virů, abyste se ujistili, že jsou věci bezpečné. Jakmile nějaký software získal přístup do vašeho systému, měl plnou kontrolu. Pokud by to bylo škodlivé, mohlo by to poškodit váš systém, protože runtime prostředí vašeho počítače na software neomezovalo. Takže v tradičním bezpečnostním schématu jste se pokusili zabránit tomu, aby škodlivý kód vůbec získal přístup k vašemu počítači.

Model zabezpečení izolovaného prostoru usnadňuje práci se softwarem pocházejícím ze zdrojů, kterým plně nedůvěřujete. Místo toho, aby bylo zajištěno zabezpečení tím, že budete muset zabránit tomu, aby se jakýkoli kód, kterému nedůvěřujete, nikdy nedostal do vašeho počítače, model sandbox vám umožní uvítat kód z jakéhokoli zdroje. Ale jak běží, karanténa omezuje kód z nedůvěryhodných zdrojů v provádění jakýchkoli akcí, které by mohly poškodit váš systém. Výhodou je, že nemusíte zjišťovat, kterému kódu můžete a nemůžete důvěřovat, a nemusíte skenovat viry. Samotná karanténa zabrání poškození virů nebo jiného škodlivého kódu, který můžete do počítače pozvat.

Pískoviště je všudypřítomné

Pokud máte správně skeptickou mysl, budete muset být přesvědčeni, že pískoviště nemá úniky, než mu důvěřujete, že vás ochrání. Aby se zajistilo, že karanténa nebude mít žádné úniky, zahrnuje bezpečnostní model Javy všechny aspekty její architektury. Pokud by v architektuře Javy existovaly oblasti se slabým zabezpečením, mohl by škodlivý programátor („cracker“) tyto oblasti potenciálně využít k „obcházení“ karantény. Abyste porozuměli karanténě, musíte se podívat na několik různých částí architektury Java a pochopit, jak spolupracují.

Základní komponenty zodpovědné za karanténu prostředí Java jsou:

  • Bezpečnostní funkce zabudované do virtuálního stroje Java (a jazyka)
  • Architektura zavaděče tříd
  • Ověřovatel souboru třídy
  • Správce zabezpečení a rozhraní Java API