Элементы ActiveX компании Microsoft
Изъяны в системе защиты Java
В 1990 году компания Sun Microsystems решила создать парадигму программирования, которая помогла бы решить многие проблемы разработки программ, стоящие перед их создателями еще со времен зарождения вычислительной техники. В результате одним выстрелом удалось убить двух зайцев: создать новый язык Java и попутно решить многие традиционные проблемы обеспечения безопасности. Большинство людей полагают, что язык Java безопасен на все 100%, поскольку с самого начала был задуман как нечто исключительное. Это мнение в значительной мере подкрепляется маркетинговой политикой компании Sun. Конечно же, обеспечить абсолютную безопасность невозможно. Однако пути ее повышения, применяемые в Java, несомненно, представляют определенный интерес. (Ниже будет рассмотрена архитектура Java 2, или JDK 1.2, которая в момент написания книги являлась текущей.)
Java – тщательно продуманный язык, позволяющий программистам избежать многих ошибок, которые могут привести к таким проблемам безопасности, как переполнение буфера. На этапе компиляции и выполнения виртуальной машиной Java (JVM – Java Virtual Machine) и встроенным механизмом проверки байт-кода осуществляется строгий контроль типов, что помогает защитить используемые программой области памяти. Кроме того, в языке Java не поддерживается доступ к памяти и манипуляция ею с помощью указателей, позволяющих программисту управлять использованием и загрузкой кода.
Кроме того, в JVM есть встроенный диспетчер безопасности (Security Manager), выполняющий контроль доступа к системным ресурсам. Его работа основана на политике безопасности, задаваемой пользователем. Наряду с проверкой типов эти концепции создают ограничительный барьер, не позволяющий коду Java выполнять привилегированные действия без явного согласия пользователя. В дополнение ко всему вышесказанному язык Java позволяет использовать сертификаты, определяющие степень "надежности" загруженного извне кода или доверия к нему. Основываясь на своем доверии к данному сертификату, пользователь принимает решение, запускать данный код или нет (что во многом напоминает работу Authenticode).
Наконец, спецификация Java открыта для широкой общественности, с которой без проблем можно познакомиться по адресу http://java.sun.com. Очевидно, такая открытость для критики и анализа приводит к естественному отбору и избавлению от различных недостатков.
Теоретически эти механизмы преодолеть крайне сложно (фактически, для многих из них имеется формальное доказательство их безопасности). Однако на практике механизмы безопасности Java были взломаны много раз. Это произошло по той же хорошо известной причине, когда в процессе реализации нарушаются принципы, заложенные при проектировании. Хороший обзор, посвященный истории развития механизмов обеспечения безопасности в Java, можно найти на Web-странице Secure Internet Programming Принстонского университета. В последующих разделах описываются основные проблемы последних реализаций Java, предоставляющие наибольший интерес для пользователей клиентских приложений.
Ошибки JVM браузера Netscape Communicator
В апреле 1999 года сотрудник Марбургского университета (Германия) Карстен Зор (Karsten Sohr) обнаружил изъян важного компонента безопасности JVM браузера Netscape Communicator. При определенных обстоятельствах виртуальная машина Java не проверяет загружаемый в нее код. Использование этого изъяна позволяет взломщику запустить код, разрушающий механизмы проверки типов Java, и реализовать взлом со смешением типов (type confusion attack). Это классический пример отступления реализации от первоначального замысла.
Отключение Java в браузере Netscape
Обновите текущую версию Netscape, или отключите Java, выполнив следующие действия (рис. 16.3).
- В программе Communicator выберите команду Edit › Preferences.
- В появившемся диалоговом окне Preferences выберите категорию Advanced.
- В этом же диалоговом окне сбросьте флажок Enable Java.
- Щелкните на кнопке ОК.
Авторы считают, что возможность использования сценариев JavaScript можно оста-вито включенной. К тому же в настоящее время сценарии JavaScript настолько интенсивно используются Web-узлами, что от них практически невозможно отказаться. Однако мы настоятельно рекомендуем отключить возможность применения JavaScript в почтовом клиенте и приложении чтения новостей программы Netscape, как это показано на рис. 16.3.
Рис. 16.3. Отключите Java в Netscape Communicator, чтобы защититься против опасных аплетов Java. Сценарии JavaScript представляют собой меньшую опасность, однако этот резким должен быть отключен для служб Mail и News