Как защищены Java-аплеты?
Наиболее уязвимыми с точки зрения безопасности компонентом Java-технологии являются аплеты, поскольку их может использовать любой клиент, который вовсе не обязан знать правила "техни-ки безопасности" при работе с этими небольшими программками. Именно поэтому для аплетов предусмотрены самые жесткие методы защиты. Хотя различные браузеры и программы просмотра аплетов могут по-разному защищать информацию пользователя от нападения, но в общем случае аплету должно быть запрещено следующее:
- читать, изменять, уничтожать и переименовывать локальные файлы;
- создавать локальные директории и читать их содержимое;
- проверять существование и параметры определенного файла;
- осуществлять доступ по сети к удаленному компьютеру;
- получать список сетевых сеансов связи, которые устанавливает локальный компьютер с другими компьютерами;
- открывать новые окна без уведомления пользователя (это необходимо для предотвращения "эмуляции" аплетом других программ);
- получать сведения о пользователе или его домашней директории;
- определять свои системные переменные;
- запускать локальные программы;
- выходить из интерпретатора Java;
- загружать локальные библиотеки;
- создавать потоки, которые не перечислены в ThreadGroup (класс, управляющий выполнением потоков - различных частей программы) этого аплета, и управлять ими;
- получать доступ к ThreadGroup другого аплета;
- определять свои объекты Class-Loader (Загрузчик Java-объектов) и SecurityManager (Диспетчер безопасности для аплетов);
- переобозначать системные объекты ContentHandlerFactory, SocketImplFactory и URLStreamHandler-Factory (эти классы управляют сетевой работой Java);
- получать доступ к любой упаковке, отличной от стандартных;
- определять классы, которые входят в локальную упаковку.
Эти правила обеспечивают следующие компоненты Java-технологии.
- Собственно виртуальный Java-процессор, который постоянно контролирует свое состояние.
- Загрузчик аплетов и Java-программ, который контролирует загружаемые коды.
- Диспетчер безопасности (Secu-rityManager), контролирующий и блокирующий опасные действия аплетов.
В классе SecurityManager перечислены методы, которые используются системой для контроля действий аплета в зависимости от характеристик окружающей среды. Программа, которая применяется для просмотра аплета, создает подкласс SecurityManager, который и реализует необходимую политику безопасности. Ссылка на этот SecurityManager записывается в объекте System.
Еще один механизм безопасности встроен в загрузчик аплетов и программ (ClassLoader). Браузер переопределяет этот класс и реализует свои собственные правила работы с сетевыми протоколами. Одна из основных функций загрузчика объектов - разделение пространства имен разных аплетов и операционной системы, что позволяет избежать их взаимного влияния.
Другая, не менее важная, функция загрузчика - верификация байт-кодов, т. е. проверка правильности полученного элемента Java-программы и его целостности. В процессе верификации выясняется следующее:
- соответствует ли версия полученного блока версиям остальных элементов системы;
- сохранен ли формат исполняемого байт-кода;
- соответствует ли программа спецификации конкретного виртуального Java-процессора;
- может ли возникнуть переполнение или исчерпание стека;
- все ли регистры Java-процессора используются правильно;
- нет ли некорректных преобразований типов.
Целями такой проверки являются выявление неправильного использования косвенной адресации, которое может привести к нарушению в работе виртуального процессора, и проверка целостности аплета. Этот механизм обеспечивает защиту и надежную работу распределенной программы, что позволяет не загружать в браузер всю Java-программу целиком, а подгружать ее небольшими блоками по мере необходимости.
Сам виртуальный Java-процессор также имеет встроенные механизмы защиты от нападения. Например, поскольку байт-коды Java интерпретируются, то можно контролировать индексы массивов, что позволяет избежать переполнение буфера - самой распространенной и опасной ошибки. Встроенные механизмы обработки исключительных ситуаций позволяют эффективно решать возникающие конфликты, а "сборщик мусора", который очищает неиспользуемую память, не дает возможности "нападающему" просмотреть "отходы", которые могут содержать полезную информацию.
Содержание раздела