Архитектурата на защитата на Java

Този месец колоната „Under The Hood“ е първата от поредицата от четири части за модела за сигурност на Java. Четирите статии ще се фокусират върху инфраструктурата за сигурност, вградена във виртуалната машина Java (JVM) и библиотеката java.lang. Тази първа статия дава преглед на модела за сигурност и описва характеристиките за безопасност на JVM.

Защо сигурност?

Моделът за сигурност на Java е една от ключовите архитектурни характеристики на езика, което го прави подходяща технология за мрежови среди. Сигурността е важна, тъй като мрежите осигуряват потенциална възможност за атака на всеки компютър, закачен за тях. Тази загриженост става особено силна в среда, в която софтуерът се изтегля в мрежата и се изпълнява локално, както се прави например с Java аплети. Тъй като файловете с класове за аплет се изтеглят автоматично, когато потребителят отиде на съдържащата се уеб страница в браузър, има вероятност потребителят да срещне аплети от ненадеждни източници. Без никаква сигурност това би бил удобен начин за разпространение на вируси. По този начин механизмите за сигурност на Java помагат да се направи Java подходяща за мрежи, тъй като те създават необходимото доверие в безопасността на мрежово-мобилния код.

Моделът за сигурност на Java е фокусиран върху защитата на потребителите от враждебни програми, изтеглени от ненадеждни източници в мрежа. За да постигне тази цел, Java предоставя персонализиран „пясъчник“, в който се изпълняват Java програми. Програмата на Java трябва да играе само в своята пясъчник. Той може да прави всичко в границите на своята пясъчник, но не може да предприема никакви действия извън тези граници. Пясъчникът за ненадеждни Java аплети, например, забранява много дейности, включително:

  • Четене или запис на локалния диск
  • Осъществяване на мрежова връзка с който и да е хост, с изключение на хоста, от който идва аплетът
  • Създаване на нов процес
  • Зареждане на нова динамична библиотека и директно извикване на собствен метод

Като прави невъзможно изтегленият код да извършва определени действия, защитният модел на Java защитава потребителя от заплахата от враждебен код.

Дефинирана пясъчник

Традиционно трябваше да се доверите на софтуера, преди да го стартирате. Постигнахте сигурност, като внимавате само да използвате софтуер от надеждни източници и редовно сканирате за вируси, само за да сте сигурни, че нещата са в безопасност. След като някой софтуер получи достъп до вашата система, той имаше пълна поддръжка. Ако е злонамерен, той може да причини големи щети на вашата система, тъй като няма ограничения, поставени върху софтуера от средата на изпълнение на вашия компютър. И така, в традиционната схема за сигурност първо се опитахте да предотвратите злонамерен код да получи достъп до вашия компютър.

Моделът за защита на пясъчника улеснява работата със софтуер, който идва от източници, на които не се доверявате напълно. Вместо да се установи сигурността, като се изисква от вас да попречите на кода, на който не се доверявате, да пробие път към вашия компютър, моделът на пясъчника ви позволява да приветствате код от всеки източник. Но докато работи, пясъчникът ограничава кода от ненадеждни източници да предприема каквито и да било действия, които биха могли да навредят на вашата система. Предимството е, че не е нужно да разберете на кой код можете и не можете да се доверите и не е необходимо да сканирате за вируси. Самият пясъчник предотвратява всякакви вируси или друг злонамерен код, който можете да поканите в компютъра си, да не нанесе никакви щети.

Пясъчникът е широко разпространен

Ако имате правилно скептичен ум, ще трябва да се убедите, че пясъчникът няма течове, преди да се доверите, че ще ви защити. За да се увери, че пясъчникът няма течове, защитният модел на Java включва всеки аспект от своята архитектура. Ако в архитектурата на Java имаше области, в които сигурността беше слаба, злонамерен програмист („крекер“) потенциално би могъл да използва тези области, за да „обиколи“ пясъчника. Следователно, за да разберете пясъчника, трябва да разгледате няколко различни части от архитектурата на Java и да разберете как те работят заедно.

Основните компоненти, отговорни за пясъчника на Java, са:

  • Функции за безопасност, вградени във виртуалната машина Java (и езика)
  • Архитектурата на зареждащия клас
  • Проверката на файла на класа
  • Мениджърът на сигурността и Java API