Programovanie

Bezpečnostná architektúra Java

Tento mesiac je stĺpec „Pod kapotou“ prvou zo štvordielnej série o bezpečnostnom modeli Java. Štyri články sa zamerajú na bezpečnostnú infraštruktúru zabudovanú do virtuálneho stroja Java (JVM) a knižnice java.lang. Tento prvý článok poskytuje prehľad bezpečnostného modelu a popisuje bezpečnostné prvky JVM.

Prečo bezpečnosť?

Bezpečnostný model Java je jedným z kľúčových architektonických prvkov jazyka, ktorý z neho robí vhodnú technológiu pre sieťové prostredia. Zabezpečenie je dôležité, pretože siete poskytujú potenciálnu cestu útoku na akýkoľvek počítač, ktorý je k nim pripojený. Táto obava sa stáva obzvlášť silnou v prostredí, v ktorom je softvér sťahovaný cez sieť a vykonávaný lokálne, ako je to napríklad v prípade appletov Java. Pretože sa súbory triedy pre applet sťahujú automaticky, keď používateľ prejde na webovú stránku, ktorá obsahuje stránku, v prehliadači, je pravdepodobné, že sa používateľ stretne s appletmi z nedôveryhodných zdrojov. Bez zabezpečenia by to bol pohodlný spôsob šírenia vírusov. Bezpečnostné mechanizmy Java teda umožňujú, aby bola Java vhodná pre siete, pretože vytvárajú potrebnú dôveru v bezpečnosť sieťovo-mobilného kódu.

Bezpečnostný model Java je zameraný na ochranu používateľov pred nepriateľskými programami sťahovanými z nedôveryhodných zdrojov v sieti. Na dosiahnutie tohto cieľa poskytuje Java prispôsobiteľné „karanténu“, v ktorej bežia programy Java. Program Java musí hrať iba vo svojom karanténe. Môže robiť čokoľvek v medziach svojho pieskoviska, ale nemôže podniknúť žiadne kroky mimo týchto hraníc. Sandbox napríklad pre nedôveryhodné applety Java zakazuje mnoho aktivít, vrátane:

  • Čítanie alebo zápis na lokálny disk
  • Vytvára sa sieťové pripojenie k ľubovoľnému hostiteľovi, okrem hostiteľa, z ktorého applet pochádza
  • Vytváranie nového procesu
  • Načítanie novej dynamickej knižnice a priame volanie natívnej metódy

Tým, že bezpečnostný model Java znemožňuje vykonanie určitých akcií stiahnutým kódom, chráni používateľa pred hrozbou nepriateľského kódu.

Pieskovisko definované

Pred spustením softvéru ste tradične museli dôverovať softvéru. Zabezpečenie ste dosiahli tým, že ste opatrní iba pri používaní softvéru z dôveryhodných zdrojov a pravidelným skenovaním vírusov, aby ste sa ubezpečili, že sú veci bezpečné. Akonáhle nejaký softvér získal prístup do vášho systému, mal úplnú kontrolu. Ak by to bolo škodlivé, mohlo by to spôsobiť veľké poškodenie vášho systému, pretože runtime prostredie vášho počítača na softvér neurčovalo žiadne obmedzenia. V tradičnej bezpečnostnej schéme ste sa teda pokúsili zabrániť tomu, aby škodlivý kód vôbec niekedy získal prístup k vášmu počítaču.

Sandboxový bezpečnostný model uľahčuje prácu so softvérom, ktorý pochádza zo zdrojov, ktorým úplne nedôverujete. Namiesto zabezpečenia, ktoré vyžaduje, aby ste zabránili tomu, aby sa akýkoľvek kód, ktorému nedôverujete, niekedy dostali do vášho počítača, model sandbox umožňuje privítať kód z ľubovoľného zdroja. Pieskovisko karantény, keď je spustené, obmedzuje kód v nedôveryhodných zdrojoch na vykonávanie akýchkoľvek akcií, ktoré by mohli poškodiť váš systém. Výhodou je, že nemusíte zisťovať, ktorému kódu môžete a nemôžete dôverovať, a nemusíte vyhľadávať vírusy. Sandbox sám osebe zabraňuje vírusom alebo iným škodlivým kódom, ktoré do počítača pozvete, aby poškodili.

Pieskovisko je všadeprítomné

Ak máte správne skeptickú myseľ, budete musieť byť presvedčení, že pieskovisko nemá úniky, skôr ako mu uveríte, že vás ochráni. Aby sa zabezpečilo, že karanténa nebude mať žiadne úniky, bezpečnostný model Java zahŕňa všetky aspekty jej architektúry. Ak by v architektúre Javy boli oblasti, v ktorých bola slabá bezpečnosť, mohol by škodlivý programátor (cracker) tieto oblasti potenciálne využiť na „obídenie“ karantény. Aby ste pochopili karanténu, musíte sa pozrieť na niekoľko rôznych častí architektúry Java a pochopiť, ako spolupracujú.

Základné komponenty zodpovedné za karanténu Java sú:

  • Bezpečnostné prvky zabudované do virtuálneho stroja Java (a do jazyka)
  • Architektúra nakladača tried
  • Verifikátor súboru triedy
  • Správca bezpečnosti a rozhranie Java API
$config[zx-auto] not found$config[zx-overlay] not found