Безопасность Java - Java security
В Платформа Java предоставляет ряд функций, предназначенных для улучшения безопасность приложений Java. Это включает в себя обеспечение ограничений времени выполнения с помощью Виртуальная машина Java (JVM), менеджер безопасности, песочницы ненадежный код остальной части операционной системы и набор средств безопасности API что разработчики Java могут использовать. Несмотря на это, критика была направлена в адрес языка программирования и Oracle из-за увеличения числа вредоносных программ, обнаруживших уязвимости безопасности в JVM, которые впоследствии не были своевременно устранены должным образом.
Особенности безопасности
JVM
Бинарная форма программ, работающих на платформе Java, представляет собой не собственный машинный код, а промежуточный байт-код. В JVM выполняет проверка на этом байт-коде перед его запуском, чтобы предотвратить выполнение программой небезопасных операций, таких как переход к неправильным местоположениям, которые могут содержать данные, а не инструкции. Это также позволяет JVM применять ограничения времени выполнения, такие как массив проверка границ. Это означает, что программы Java значительно реже страдают от безопасность памяти недостатки, такие как переполнение буфера чем программы, написанные на таких языках, как C которые не дают таких гарантий безопасности памяти.
Платформа не позволяет программам выполнять определенные потенциально небезопасные операции, такие как арифметика указателя или не отмечен приведение типов. Он также не позволяет вручную управлять выделением и освобождением памяти; пользователи должны полагаться на автоматический вывоз мусора предоставлено платформой. Это также способствует безопасность типа и безопасность памяти.
Менеджер по безопасности
Платформа предоставляет диспетчер безопасности, который позволяет пользователям запускать ненадежный байт-код в «изолированной» среде, предназначенной для защиты их от вредоносного или плохо написанного программного обеспечения, предотвращая доступ ненадежного кода к определенным функциям платформы и API. Например, ненадежному коду можно запретить чтение или запись файлов в локальной файловой системе, выполнение произвольных команд с правами текущего пользователя, доступ к сетям связи, доступ к внутреннему частному состоянию объектов с помощью отражения или вызов JVM для выхода.
Менеджер безопасности также позволяет программам Java быть криптографически подписанный; пользователи могут разрешить выполнение кода с действительной цифровой подписью от доверенного объекта с полными привилегиями в обстоятельствах, когда в противном случае он не был бы доверенным.
Пользователи также могут устанавливать детальные политики контроля доступа для программ из разных источников. Например, пользователь может решить, что следует полностью доверять только системным классам, что коду из определенных доверенных объектов может быть разрешено читать определенные файлы, а весь другой код должен быть полностью изолирован.
API безопасности
В Библиотека классов Java предоставляет ряд API-интерфейсов, связанных с безопасностью, таких как стандартные криптографический алгоритмы, аутентификация и безопасные протоколы связи.
Возможные источники уязвимостей безопасности в приложениях Java
Есть несколько возможных источников уязвимости безопасности в приложениях Java, некоторые из которых являются общими для приложений, отличных от Java, а некоторые - специфичными для платформы Java. (Обратите внимание, что это относится к потенциал источники уязвимостей, о которых следует помнить программистам, заботящимся о безопасности: это не список действительный уязвимости.)
Примеры потенциальных источников уязвимости, общих для приложений Java и других языков:
- Уязвимости в механизмах защиты, предоставляемых аппаратное обеспечение или же Операционная система на которые приложение полагается для своей безопасности
- Уязвимости в собственных библиотеках, таких как Стандартная библиотека C, который может использоваться для реализации приложения и / или среды выполнения
- Уязвимости, вызванные исключительно ошибками в пользовательских программах (например, неправильное построение SQL запросы, ведущие к SQL-инъекция уязвимости)
Тем не менее, многие обсуждения безопасности Java сосредоточены на потенциальных источниках уязвимостей, характерных для платформы Java. К ним относятся:
- Уязвимости в механизме песочницы, позволяющие ненадежному байт-коду обойти ограничения, наложенные менеджером безопасности.
- Уязвимости в библиотеке классов Java, от которых зависит безопасность приложения.
Уязвимость в платформе Java не обязательно сделает уязвимыми все приложения Java. Когда объявляются уязвимости и патчи, например, Oracle, объявление обычно содержит разбивку того, какие типы приложений затронуты (пример ).
Например, гипотетический недостаток безопасности, который влияет на Только механизм изолированной программной среды диспетчера безопасности конкретной реализации JVM будет означать, что Только Приложения Java, которые запускают произвольный ненадежный байт-код, будут скомпрометированы: приложения, в которых пользователь полностью доверяет и контролирует весь выполняемый байт-код, не будут. Это будет означать, что, скажем, подключаемый модуль веб-браузера, основанный на этой JVM, будет уязвим для злой апплеты, загруженные с общедоступных веб-сайтов, но веб-приложение на стороне сервера, работающее на той же версии JVM, где администратор имеет полный контроль над путь к классам не будет затронут.[1]Как и в случае с приложениями, отличными от Java, уязвимости в системе безопасности могут быть связаны с частями платформы, которые изначально могут не иметь отношения к безопасности. Например, в 2011 году Oracle выпустила исправление безопасности для ошибки в Double.parseDouble
метод.[2] Этот метод преобразует нить например, "12,34" в эквивалентную двойную точность плавающая точка номер. Ошибка приводила к тому, что этот метод входил в бесконечный цикл при вызове на определенном входе. Эта ошибка имела последствия для безопасности, потому что, например, если веб-сервер преобразует строку, введенную пользователем в форму с помощью этого метода, злоумышленник может ввести строку, которая запускает ошибку. Это приведет к тому, что поток веб-сервера, обрабатывающий вредоносный запрос, войдет в бесконечный цикл и станет недоступным для обслуживания запросов от других пользователей. Повторять это на уязвимом веб-сервере было бы несложно. атака отказа в обслуживании: все потоки веб-сервера для ответа на запросы пользователей скоро застрянут в бесконечном цикле, и веб-сервер вообще не сможет обслуживать никаких законных пользователей.
Критика менеджера по безопасности
Менеджер безопасности на платформе Java (который, как упоминалось выше, разработан, чтобы позволить пользователю безопасно запускать ненадежный байт-код) был критиковали в последние годы за то, что сделали пользователей уязвимыми для вредоносное ПО, особенно в подключаемых модулях веб-браузеров, которые выполняют Java-апплеты, загруженные с общедоступных веб-сайтов, более неофициально известные как «Java в браузере».
Усилия Oracle по устранению этих уязвимостей привели к задержке выпуска Java 8.[3]
2012
An OS X троян упоминается как Воспоминания использовал уязвимость в Java, которая не была исправлена яблоко, несмотря на то что Oracle уже выпустил патч.[4] В апреле Apple выпустила инструмент для удаления Лев пользователи без Java.[5] С Java 7 Update 4 Oracle начала выпускать Java непосредственно для Lion и потом.[6]
В октябре Apple выпустила обновление, которое удалило Java плагин от всего браузеры.[7] Это было воспринято Apple как шаг к удалению OS X от Java.[8]
2013
В январе уязвимость нулевого дня был обнаружен во всех версиях Java 7, включая последнюю версию Java 7 Update 10, которая уже использовалась в «дикой природе».[9] Уязвимость была вызвана патчем для исправления более ранней уязвимости.[10] В ответ Apple занесла в черный список последнюю версию плагина Java.[11] Oracle выпустила патч (обновление 11) в течение трех дней.[12] Microsoft также выпустил патч для Internet Explorer версии 6, 7, и 8.[13]
Кибершпионаж вредоносное ПО Красный Октябрь был обнаружен эксплуатирующим уязвимость Java, исправленную в октябре 2011 года.[14] Сайт для Репортеры без границ также был скомпрометирован уязвимостью Java в версиях до обновления 11.[15]
После выпуска обновления 11 в сети начала распространяться еще одна уязвимость,[16] что позже подтвердилось.[17] Также было обнаружено, что сам режим безопасности Java был уязвим из-за ошибки.[18] В ответ, Mozilla отключена Java (а также Adobe Reader и Microsoft Silverlight ) в Fire Fox по умолчанию,[19] в то время как Apple снова занесла в черный список последний плагин Java.[20]
В феврале Twitter сообщил, что прекратил атаку. Twitter посоветовал пользователям отключить Java, но не объяснил почему.[21] Позже в том же месяце Facebook сообщил, что он был взломан в результате Java-атаки нулевого дня.[22] Apple также сообщила об атаке.[23] Было установлено, что нарушение iPhone Форум разработчиков использовался для атак на Twitter, Facebook и Apple.[24] Сам форум не знал о нарушении.[25] После Twitter, Facebook и Apple Microsoft сообщила, что она также была взломана.[26]
Другая обнаруженная уязвимость позволила полностью обойти изолированную программную среду безопасности Java в исходной версии Java 7, а также в обновлениях 11 и 15.[27] В марте был обнаружен троян McRat, эксплуатирующий уязвимость Java нулевого дня.[28] Затем Oracle выпустила еще один патч для устранения уязвимости.[29]
Смотрите также
Рекомендации
- ^ Выпущено оповещение системы безопасности для CVE-2013-0422. Корпорация Oracle. Проверено 24 апреля 2013.
- ^ Oracle выпускает исправление для ошибки Double.parseDouble в рекордно короткие сроки. InfoQ. Проверено 24 апреля 2013.
- ^ Безопасный поезд. Блог Марка Райнхольда, главного архитектора Oracle Java Platform Group. 2013-04-18.
- ^ Гудин, Дэн (2 апреля 2012 г.). «Троян Mac Flashback использует незащищенную уязвимость Java, пароль не требуется». Ars Technica. Получено 18 февраля, 2014.
- ^ Гойс, Меган (14 апреля 2012 г.). "Средство удаления вредоносных программ Flashback прибывает для пользователей Mac без Java". Ars Technica. Получено 18 февраля, 2014.
- ^ Форсман, Крис (27 апреля 2012 г.). «Забудьте об Apple: Oracle предоставит исправления безопасности Java непосредственно пользователям Mac». Ars Technica. Получено 18 февраля, 2014.
- ^ Гудин, Дэн (18 октября 2012 г.). «Apple удаляет Java из всех веб-браузеров OS X». Ars Technica. Получено 18 февраля, 2014.
- ^ Ченг, Жаки (23 декабря 2012 г.). «Где безопасность OS X после нестабильного 2012 года». Ars Technica. Получено 18 февраля, 2014.
- ^ Гудин, Дэн (10 января 2013 г.). «Критическая ошибка нулевого дня Java« массово эксплуатируется в дикой природе »(обновлено)». Ars Technica. Получено 18 февраля, 2014.
- ^ Гудин, Дэн (11 января 2013 г.). «Критическая уязвимость Java стала возможной благодаря более раннему неполному исправлению (обновлено)». Ars Technica. Получено 18 февраля, 2014.
- ^ Форсман, Крис (11 января 2013 г.). «Apple заносит Java в черный список в OS X, чтобы предотвратить последние« критические »эксплойты». Ars Technica. Получено 18 февраля, 2014.
- ^ Маттис, Натан (14 января 2013 г.). «Oracle исправляет широко распространенную ошибку нулевого дня в Java за три дня (обновлено)». Ars Technica. Получено 18 февраля, 2014.
- ^ Гудин, Дэн (14 января 2013 г.). «Microsoft выпускает экстренное обновление для исправления ошибки Internet Explorer». Ars Technica. Получено 18 февраля, 2014.
- ^ Гудин, Дэн (15 января 2013 г.). «Красный Октябрь использовал эксплойт Java для заражения ПК». Ars Technica. Получено 18 февраля, 2014.
- ^ Гудин, Дэн (22 января 2013 г.). «Только что пропатченный Java, ошибки IE, используемые для ловли сайтов, защищающих права человека». Ars Technica. Получено 18 февраля, 2014.
- ^ Гудин, Дэн (16 января 2013 г.). «За 5000 долларов вы получите доступ к другой, новой критической уязвимости Java (обновлено)». Ars Technica. Получено 18 февраля, 2014.
- ^ Гудин, Дэн (18 января 2013 г.). «В последней версии подтверждены критические уязвимости Java». Ars Technica. Получено 18 февраля, 2014.
- ^ Гудин, Дэн (28 января 2013 г.). «Новый« очень высокий »режим безопасности Java не может защитить вас от вредоносных программ». Ars Technica. Получено 18 февраля, 2014.
- ^ Гудин, Дэн (31 января 2013 г.). «Firefox для блокировки содержимого на основе Java, Reader и Silverlight». Ars Technica. Получено 18 февраля, 2014.
- ^ Форсман, Крис (31 января 2013 г.). «Второй раз за месяц Apple заносит в черный список плагин Java Web». Ars Technica. Получено 18 февраля, 2014.
- ^ Гудин, Дэн (2 февраля 2013 г.). «Twitter обнаруживает и останавливает процесс взлома паролей». Ars Technica. Получено 18 февраля, 2014.
- ^ Галлахер, Шон (15 февраля 2013 г.). «Компьютеры Facebook взломаны эксплойтом Java нулевого дня». Ars Technica. Получено 18 февраля, 2014.
- ^ Ченг, Жаки (19 февраля 2013 г.). «Штаб-квартира Apple, также подвергшаяся нападению хакеров, выпустит инструмент для защиты клиентов». Ars Technica. Получено 18 февраля, 2014.
- ^ Галлахер, Шон (19 февраля 2013 г.). «Взлом Facebook, Twitter и Apple возник на форуме разработчиков iPhone». Ars Technica. Получено 18 февраля, 2014.
- ^ Ченг, Жаки (20 февраля 2013 г.). «Сайт разработчиков Apple, хакеры Facebook не знали, что он был заминирован». Ars Technica. Получено 18 февраля, 2014.
- ^ Брайт, Питер (22 февраля 2013 г.). «Microsoft присоединяется к Apple, Facebook и Twitter; выступает жертвой взлома». Ars Technica. Получено 18 февраля, 2014.
- ^ Бродкин, Джон (25 февраля 2013 г.). «Последние проблемы безопасности Java: обнаружена новая уязвимость, атакована старая». Ars Technica. Получено 18 февраля, 2014.
- ^ Гудин, Дэн (1 марта 2013 г.). «Еще один эксплойт нулевого дня Java в дикой природе, активно атакующий цели». Ars Technica. Получено 18 февраля, 2014.
- ^ Маттис, Натан (5 марта 2013 г.). «Oracle выпускает новый патч Java для решения проблемы McRat на этой неделе». Ars Technica. Получено 18 февраля, 2014.
внешняя ссылка
- Безопасность Java SE. Корпорация Oracle. Скачан 24.04.2013.
- Рекомендации по безопасному кодированию для языка программирования Java. Корпорация Oracle. Скачан 24.04.2013.
- Как Security Manager помогает в работе по принципу наименьших привилегий .