На кофе обжегшись...
АрхивКолонка ЗолотоваНа протяжении пятнадцати лет язык Java был самым безопасным языком веб-программирования. Все изменилось в миг: уязвимость в реализации Java от Sun допускает злонамеренное использование.
Язык Java, работы над которым ведутся уже добрых пятнадцать лет, помимо платформонезависимости обладает ещё одним заложенным на стадии проектирования свойством, которое - особенно по нынешним тяжёлым временам - превратилось едва ли не в самое яркое его достоинство. Это безопасность. Гарантированная абсолютная безопасность исполнения кода. Принцип всем хорошо известен: в Java программы работают в искусственной среде - внутри виртуальной машины, так что контроль полный. При желании Java-программе можно разрешить полноценно оперировать с ресурсами компьютера, но можно и существенно свободу действий ограничить. Именно такая, ограниченная модель, справедлива для так называемых апплетов: небольших программ, обычно скачиваемых с веб-сайтов и запускаемых чаще всего прямо в веб-браузерах. В Sun Microsystems очень гордятся тем, что до сих пор для Java не существует вирусов или эксплоитов. В очередной раз это было подчёркнуто совсем недавно, в ходе представления Solaris 10. И у системных архитекторов Sun есть на это полное право: в конце концов, безопасность обеспечили именно они. Помнится, на какой-то выставке, Java посвящённой, ещё в преддоткомбумовскую эпоху, забавы ради демонстрировалось форматирование жёсткого диска апплетом ActiveX - как говорится, разница очевидна.
Впрочем, человеку свойственно ошибаться, и рано или поздно это правило должно было реализоваться и для Sun. И ровно неделю назад это произошло. В прошлый вторник были опубликованы детали чрезвычайно неприятной находки - уязвимости в виртуальной машине Java от Sun Microsystems, делающей возможным построение самых настоящих Java-вирусов. Назвать её "дырой" будет не совсем правильно, скорее недоработка, опасный недосмотр проектировщиков, эксплуатируя который, Java-апплет в состоянии получить права локальной программы, то есть менять содержимое файлов, без ограничений работать с Сетью и т.п. Как и сама Java, уязвимость платформонезависима и одинаково успешно может быть использована в браузерах любых производителей (Internet Explorer, Mozilla/Firefox, Opera), работающих теоретически на любых платформах (продемонстрирована опасность для Microsoft Windows и Linux, Mac OS X не тестировалась). Находка - редкая жемчужина в океане "попсы": обусловлена она не переполнением буфера, а именно архитектурным просчётом разработчиков. Результат: сотни миллионов систем по всему миру поставлены под удар.
Чтобы прояснить вопрос, нужно погрузиться в технические дебри. Уязвимость, обнаруженная, кстати, финским исследователем Йоко Пинноненом (Jouko Pynnonen), скрыта в программе Java Plugin, которая подключается к веб-браузерам и связывает их с Java-машиной. Сама Java-машина, конечно, содержит функции (классы), с помощью которых можно организовать полноценную работу с ресурсами компьютера, но все прямые попытки Java-апплетов воспользоваться этими функциями блокируются. Однако, как оказалось, можно пойти на хитрость: подключив нужный класс с помощью скрипта на языке javascript, встроенного в веб-страничку, его потом легко передать Java-апплету. И вот здесь уже ограничения не срабатывают. Так апплет, полученный с удалённого компьютера, в состоянии "повысить" свои права до уровня локальной программы. Собственно, всем, кому интересна механика процесса, стоит обратиться на страничку самого Йоко,
где приведён пример, демонстрирующий, сколь просто воспользоваться уязвимостью.
Простота и почти ничем не ограниченный потенциал такого эксплоита заставили многих экспертов по ИТ-безопасности присвоить ему статус наивысшей важности. К счастью, и первооткрыватель, и компания-разработчик постарались предельно минимизировать риск для конечных пользователей. Йоко сделал своё открытие ещё в апреле, после чего обратился в Sun и те работали над заплаткой добрых полгода. В октябре была выпущена обновлённая версия Java (J2SE 1.4.2_06) и только в конце ноября была поставлена в известность пресса. Вместе с тем расслабляться рано. Неизвестно, в какой степени подвержены проблеме другие реализации языка Java - в частности, свободная Kaffe и диалект Java от Microsoft. Хочется верить, проблема существовала только для имплементации Sun...