2014-04-08 9 views
2

Недавно было обнаружено, что библиотека openssl имеет серьезный недостаток, который позволяет злоумышленникам читать до 64 КБ памяти.Является ли стандартная Java невосприимчивой к ошибкам безопасности memcpy, как недавняя открытая ошибка ssl heartbeat?

http://blog.existentialize.com/diagnosis-of-the-openssl-heartbleed-bug.html

Причина, как представляется, из-за использование тетсра и не пересекают проверки размера данных, представленных злоумышленник.

Если мы предполагаем, что стандартные библиотеки (не вызывая C), является ли Java уязвимой к этим типам недостатков безопасности?

Чтобы уточнить тип дефекта безопасности, я не имею в виду доверительный ввод пользователя, но, в частности, ограниченный доступ к памяти.

+1

Определить «иммунный»? Я бы сказал, безопаснее, чем C. Нет такой вещи, как бесплатное программное обеспечение. Кроме того, операционная система может быть скомпрометирована. Java не является панацеей. –

+0

Нет, но я не претендую на бесплатное программное обеспечение, вместо того, чтобы его иммунитет к определенному классу ошибок. В этом примере я могу быть предельным, Linux явно невосприимчив к исполняемым вирусам Windows, поскольку он даже не может их запускать. – bmillare

+0

См. Раздел «Получить ответы на практические, подробные вопросы» в http://stackoverflow.com/tour –

ответ

3

Java более безопасен, поскольку он не использует арифметику указателя, не проверяет границы и не позволяет (обычно) разрешать доступ к произвольным фрагментам памяти (см. sun.misc.Unsafe!).

Однако подобные проблемы могут возникнуть, в принципе, при чтении и записи байтов из массива ByteBuffer и т. Д. В соответствии с смещениями, предоставленными ненадежным клиентом. Проблема значительно уменьшена, поскольку можно только атаковать данные в пределах этого массива (или аналогичного контейнера), а не данные в произвольных смежных объектах.

Даже с Unsafe, как правило, это безопасно, поскольку он имеет тенденцию использовать его для выделения и доступа к очень определенному набору критически важных объектов, а не всему приложению (включая ключи шифрования, пароли и т. Д.).

Основная проблема заключается в доверительном вводе пользователей, и это может произойти на любом языке и в целом ряде контекстов, например. SQL-инъекция.

+0

бит 'java.misc.Unsafe' означает, что ответ на вопрос является простым« нет ». –

+2

Нет, Java не застрахован ;-). Тем не менее, «Unsafe» довольно экзотичен, и нужно сознательно выбирать, использовать эту экзотическую (недокументированную!) Функцию, чтобы определить небезопасный регион памяти, а не случайно, используя обычное использование языка. – DNA

+0

Я разместил вариант, который не включает 'java.misc.Unsafe'. –