Имонн Салливан  (PC Week Labs)

 

Средства обеспечения безопасности в JDK 1.2 стали более гибкими, но и более сложными

 

Фирма Sun Microsystems пошла на определенный риск, внеся в JDK 1.2 некоторые изменения в наиболее ценную часть Java: модель безопасности. Новая схема обеспечения безопасности будет намного более гибкой, но и намного более сложной.

Как устанавливается политика безопасности с помощью JDK 1.2

     

В комплекте JDK 1.2, вышедшем в конце 1997 г. на стадию бета-тестирования (готовый продукт должен появиться в I квартале 1998 г.), используется модель безопасности на основе прав доступа. Эта модель позволит проводить крайне гибкую политику обеспечения безопасности в корпорациях, но для среднего пользователя она только создаст дополнительные трудности. Впервые новая модель безопасности была представлена на шестой ежегодной конференции по World Wide Web, прошедшей в июне 1997 г. в г. Санта-Кларе (шт. Калифорния). В начале декабря разработчики фирмы сделали более подробный доклад на эту тему на конференции USENIX Symposium on Internet Technologies and Systems в Монтерее (шт. Калифорния).

 

В новой модели локальный код (приложения, запускаемые с локального жесткого диска) и снабженные цифровыми подписями внешние приложения и компоненты не рассматриваются как заслуживающие полного доверия. В то же время стены так называемой “песочницы” (среды, в которой Java-код исполняется практически без доступа к локальным ресурсам) стали более проницаемыми: меняя политику безопасности, можно предоставлять загруженным по сети приложениям ограниченный доступ к локальным и сетевым ресурсам.

 

Последуют ли за Sun производители браузеров, включая корпорации Microsoft и Netscape Communications, остается пока неясным.

 

Возможность разрешить приложениям работать вне “песочницы” и осуществлять доступ к локальным ресурсам имелась в технологии Java всегда, однако использовалась она только в браузере Sun HotJava.

 

До JDK 1.1 организация доступа “пришлых” приложений к локальным ресурсам была непростой программистской задачей,  сопряженной с опасностью совершения многочисленных ошибок. Поэтому специалисты Microsoft и Netscape отказались от применения данной возможности технологии Java в своих продуктах.

 

В JDK 1.1 появилась поддержка программных компонентов, снабженных цифровыми подписями, которым разрешалось выходить за рамки “песочницы”; как Microsoft, так и Netscape поддержали эту идею, однако каждая реализовала ее собственным несовместимым способом.

 

В JDK 1.2 система обеспечения безопасности полностью переработана с целью упрощения решения задач, чаще всего встающих перед программистами исполняющих сред для Java-приложений, таких, как браузеры и ОС со встроенными виртуальными Java-машинами. Добавлен ряд новых классов, а в прежние внесены изменения, облегчающие как создание политики безопасности, так и ее использование.

 

Представляется вполне вероятным, что в первую очередь основанная на правах доступа модель обеспечения безопасности будет реализована в ОС, что позволит администраторам гораздо более полно контролировать развертывание и использование клиент-серверных приложений на базе Java. Например, перед развертыванием в корпоративной сети локальных клиент-серверных приложений им можно назначить ровно столько привилегий, сколько необходимо для работы, и благодаря этому защититься от потенциально опасных ошибок в коде.

 

Доменная схема безопасности

 

Еще один интересный аспект модели обеспечения безопасности JDK 1.2  -  управление доступом на базе доменов. “Доменом” (в схеме безопасности) называют среду или контекст приложения, для которого определен собственный набор допущений и требований. Например, к службам ОС для ПК предъявляются иные требования с точки зрения обеспечения безопасности, нежели к текстовому процессору.

 

Многие, если не все “дыры” систем обеспечения безопасности образуются на пересечении различных доменов. Например, приложение пользовательского уровня может использовать ошибку в собственном модуле ОС для получения дополнительных полномочий.

 

В JDK 1.2 введен механизм, автоматически проверяющий пересечение множеств привилегий, действующих в различных доменах. Он исключает возможность получения менее привилегированным процессом дополнительных полномочий путем обращения к более привилегированному коду, исполняющемуся в рамках соседнего домена.

 

Если все будет работать, как планируется (а это весьма смелое допущение), Java-приложения не смогут использовать ошибки в драйвере принтера либо ином системном модуле для получения прямого доступа к аппаратуре.

 

В версии JDK 1.2 по-прежнему не реализована старая, как сами компьютеры, концепция аутентификации пользователей. Чтобы избежать какой-либо зависимости от механизмов аутентификации конкретных ОС, специалистам Sun придется в будущем разработать собственную систему аутентификации пользователей или, по крайней мере, уровень абстракции над соответствующими средствами ОС.

 

Нереализованной остается и концепция делегирования  -  исполнения кода “на правах” некоторого конкретного пользователя  -  особенно полезная при работе серверных Java-приложений.

 

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

 

Классы, обеспечивающие распределение прав

 

Права доступа абстрагированы в новом классе: java.security.permission. Доступ к ним может осуществляться с помощью других классов, например java.io.FilePermission (для файловой системы) или java.net.SocketPermission (для сетевых ресурсов).

 

Администраторы смогут, как правило, распространять сформированные наборы прав доступа в виде текстовых файлов. Разрешение предоставляется (или не предоставляется) на основании информации о том, из какого источника был загружен код и какими цифровыми подписями он заверен. Например, если программный компонент загружен с адреса www.company.com с цифровой подписью компании, то ему должен быть предоставлен доступ к определенным каталогам на чтение, к другим  -  на запись, а также право соединения с некоторым множеством серверов.

 

Новые классы JDK 1.2 позволяют разработчику заранее определить, разрешена или нет та или иная операция. Так, обратившись к методу нового класса java.security.AccessController, разработчик может легко проверить, разрешено ли его программе начать выполнение определенной операции.

 

Кроме того, Java-машина автоматически проверяет все полномочия всех процессов, находящихся в стеке вызовов, чтобы убедиться, что текущее приложение не нарушает требований действующей политики безопасности путем обращения к более привилегированному коду.