Безопасна ли Java?
Не всегда хорошие идеи столь же хорошо воплощаются. Так случилось и с Java. Хотя защитные механизмы этой технологии очень хорошо продуманы, но их реализация еще далека от совершенства. Поэтому далее будет приведен небольшой список возможных "нападений". Не берусь судить, насколько серьезна опасность, связанная с каждым из описанных дефектов защиты, - я не хакер. Я просто хочу предупредить об этой опасности. При этом мне бы не хотелось. чтобы у читателя сложилось мнение, что Java "беззащитна". Не стоит забывать: Java все-таки имеет достаточно мощную защиту, "взломать" которую не так-то просто.
Блокировка сервиса
Это "нападение", в результате которого частично или полностью блокируется работа пользователя и даже может быть выведен из строя браузер. Вот далеко не полный список возможных вариантов такого "нападения":
- загрузка процессора бессмысленными действиями (например, бесконечным циклом);
- заполнение всей свободной памяти (например, в результате выполнения бесконечного цикла);
- захват важных системных классов, например java.net.-INetAddress.
"Тайные" каналы
Эти каналы позволяют "нападающему" получать информацию даже через систему защиты (брандмауэры). Существование "тайных" каналов в браузере делает его очень опасным. В качестве "тайного" канала можно использовать следующие действия аплетов:
- посылку почты через SMTP-порт сервера (причем почта посылается от имени пользователя, который работает с аплетом);
- запрос на поиск по несуществующему URL-адресу, в котором в качестве параметров передаются необходимые "взломщику" данные;
- попытку доступа по несуществующему адресу (последовательность директорий может содержать необходимые данные).
Информация, известная аплетам
С помощью этой информации "нападающий" может получить некоторые сведения, которые впоследствии могут быть им использованы для "взлома". Эту информацию можно передавать даже через брандмауэры по тайным каналам, которые описаны выше.
Аплетам обычно известна следующая системная информация:
- системное время;
- установки функции hashcode( );
- название и производитель Java-интерпретатора;
- версия JavaAPI;
- название и версия операционной системы;
- архитектура процессора.
Ошибки реализации
Это основной способ "нападения". Ошибки обычно очень трудно находить и исправлять. Причем для исследования пользовательской системы можно использовать информацию, которая доступна аплетам. Например, если "нападающий" знает, что в определенной версии Internet Explorer есть "полезная" для него ошибка, то, считывая с помощью аплета название и версию браузера и передавая эту информацию по тайным каналам (запрос по несуществующему URL), он получает информацию о своей "жертве".
Перехват ошибок
Java предусматривает перехват исключительных ситуаций. Это необходимо для составления более наглядных программ, благодаря которым обработку всех ошибок можно выполнять централизовано. Однако перехват ошибок позволяет игнорировать исключительные ситуации, создаваемые, например, SecurityManager. Такая ситуация очень опасна, так как позволяет "нападающему" заменить ClassLoader, SecurityManager и другие ключевые объекты. Естественно, хотелось бы блокировать подобные ситуации еще при загрузке аплета, но современные загрузчики этого не умеют. Вероятно, этот недостаток будет скоро исправлен.
Имя упаковки
Если "/" - первый символ имени упаковки, то система попытается загрузить эту упаковку с локального диска, причем загружается она с меньшими требованиями к безопасности, так как предполагается, что запускаемому с локального диска аплету можно доверять. Таким образом, любой Java-класс, который "атакующий" может записать на локальный диск, может быть загружен с ослабленной защитой. Причем "опасные" классы могут быть записаны на диск с помощью механизма кэширования браузера. Поэтому становится возможной загрузка "агрессивного" класса с ослабленной защитой.
Вероятно, и этот недостаток загрузчиков будет скоро исправлен.
* * *
Перечисленные лазейки в системе безопасности Java не означают полной беззащитности пользователей при возможных "нападениях". Чтобы воспользоваться этими ошибками, хакерам еще предстоит изрядно попотеть. Поэтому не спешите стирать свой браузер, а просто относитесь к аплетам и Java-программам чуть более настороженно.
Установить баланс между возможностями загружаемых аплетов и защитой клиентской системы довольно сложно. Некоторые компании предлагают усилить защиту клиентской системы от "агрессивных" аплетов, не ограничивая при этом возможностей "благонадежных" программ. К сожалению, предлагаемые решения невозможно сделать независимыми от конкретной платформы, что противоречит требованию абсолютной переносимости Java-программ. Поэтому, видимо, информационная безопасность еще долгое время будет оставаться одним из сложных и спорных вопросов Java-технологии.
Валерий Коржов - сотрудник компании Jet Infosystems. С ним можно связаться по тел.: 972-11-82 или электронной почте
* На основе "Ответов на часто задаваемый вопросы по безопасности WWW", которые можно найти по адресу .