Статья опубликована в рамках: Научного журнала «Студенческий» № 15(269)
Рубрика журнала: Информационные технологии
Скачать книгу(-и): скачать журнал часть 1, скачать журнал часть 2, скачать журнал часть 3, скачать журнал часть 4, скачать журнал часть 5
JAVA ПОД ПРИЦЕЛОМ: ПОГРУЖЕНИЕ В МИР УЯЗВИМОСТЕЙ И ИСКУССТВО ЗАЩИТЫ
Данная статья рассматривает популярность и уязвимости языка программирования Java. Описываются сильные стороны Java, такие как универсальность и обширная экосистема, а также наиболее распространенные уязвимости, с которыми сталкиваются разработчики, такие как инъекции кода и SQL, а также инъекции XPath. Подробно анализируется критическая уязвимость в библиотеке log4j (CVE-2021-44228), названная "Log4Shell". Статья предлагает рекомендации для предотвращения и устранения уязвимостей.
Java, без сомнения, является одним из самых популярных и широко используемых языков программирования в мире. Его универсальность, кроссплатформенность и обширная экосистема делают его идеальным выбором для разработки разнообразных приложений, от веб-сервисов и мобильных приложений до корпоративных систем и игр. Однако, как и любая другая технология, Java не лишена своих уязвимостей.
В этой статье мы рассмотрим, как сильные стороны Java, так и его потенциальные слабые места в контексте безопасности. Мы обсудим наиболее распространенные уязвимости, с которыми сталкиваются разработчики, и рассмотрим способы их предотвращения и устранения.
Java входит в топ языков программирования с наибольшим количеством обнаруженных уязвимостей (хотя безусловным лидером является язык C с 47% всех уязвимостей). Но значит ли это, что такие языки менее безопасны?
При оценке таких рейтингов важно учитывать возраст языка, объем написанного на нем кода и активную работу сообщества над выявлением проблем безопасности. Java — один из самых популярных языков программирования в мире с 28-летней историей. Логично предположить, что за 28 лет существования в Java идентифицировали больше уязвимостей, чем, например, в Go, вышедшем в 2009 году. Более того, у Java одно из наиболее динамичных и обширных сообществ, куда входят как индивидуальные разработчики, так и крупные компании, вносящие вклад в поддержание безопасности и развитие платформы. Поэтому большое количество идентифицированных уязвимостей, скорее, выгодно отличает Java от языков, где над безопасностью работают не так активно.
Давайте рассмотрим примеры уязвимостей в языке Java.
1. Инъекции кода
Веб-приложения, которые принимают пользовательский ввод, уязвимы для инъекций кода. Инъекция кода происходит, когда данные, переданные через вход, вызывают непреднамеренные побочные эффекты на то, как ваше серверное приложение Java запускает или возвращает данные.
Форма - это двусторонний процесс между пользователем и базой данных, при котором серверная сторона потребляет данные и возвращает результат. Когда этот результат не такой, как вы ожидаете, он может оставить уязвимость веб-безопасности на своем месте.
Инъекции кода происходят постоянно, и их легче выполнить.
Самый простой способ защиты от этой уязвимости безопасности - применить проверку ввода с дезинфекцией и побегом вывода. Это означает, что любые попытки отправки HTML-кода будут разоборены или отклонены, в зависимости от того, что делает ваше веб-приложение. Проверка пользовательского ввода также может предотвратить запуск дополнительного кода JavaScript, что приведет к дальнейшим проблемам, если червь будет введен в ваше веб-приложение.
2. Атаки SQL Injection
Атаки SQL-инъекций - это процесс введения вредоносного SQL в запросы данных и получения доступа к базе данных через них. Это может привести к тому, что сервер вернет конфиденциальные данные или выполнит вредоносный скриптов для изменения данных в базе данных. Этот тип атаки может быть дополнительно использован для отправки ненадежных данных в качестве надежного источника.
Это может привести к доступу к конфиденциальным данным и нарушениям конфиденциальности. Инъекции SQL также могут привести к потере или повреждению данных и потенциально заблокировать вашу собственную базу данных. Эту уязвимость безопасности лучше всего предотвратить путем внедрения проверки на стороне сервера. Сервер является бэкстопом для предотвращения попадания нежелательных символов, таких как пробелы и кавычки.
3. Инъекция XPath
В то время как JSON является восходящей звездой для структурирования данных, XML-документы все еще популярны и широко используются. XPath - это синтаксис, используемый для определения частей XML-документа. Идея инъекций XPath похожа на инъекции SQL.
Единственное различие между SQL injection и XPath заключается в том, что последний находится в формате XML. Этот процесс отправки неправильно сформированных данных может быть легко достигнут, если злоумышленник выяснит структуру XML.
Это позволяет злоумышленнику перемещаться по XML-документам, получая доступ к различной информации, такой как имя пользователя и пароль.
Часто инъекция XPath происходит, когда запрос построен на непроверенных входных данных. Хитрость предотвращения инъекций XPath заключается в использовании предварительно скомпилированных XPaths. Избегайте приема полных выражений из незащищенного источника. Если вам нужно параметризировать XPath, изолируйте его только для строковых параметров, чтобы предотвратить захват вашего запроса.
А теперь немного истории или как в Java нашли уязвимость, угрожающую сотням тысяч серверов.
Критическая уязвимость в Java, в библиотеке log4j, которая используется в тысячах сервисов, начиная от Minecraft и заканчивая Apple Cloud, быстро превращается в серьезную угрозу для организаций по всему миру. Уязвимости подвержены сервера Apple, Valve, Microsoft и других.
«Интернет сейчас в огне» - сказал Адам Мейерс, старший вице-президент компании Crowdstrike, занимающейся кибербезопасностью. — «Люди изо всех сил стараются исправить это, и в то же время самые разные люди пытаются это использовать». С момента обнаружения уязвимости, она была «полностью поставлена на вооружение», и злоумышленники разработали и распространили инструменты для ее использования.
Уязвимость позволяет злоумышленникам удаленно выполнять код на уязвимых серверах, давая им возможность импортировать вредоносное ПО, которое может полностью скомпрометировать любые машины.
Уязвимость обнаружена в log4j, библиотеке логирования Java-программ с открытым исходным кодом. Ее используют тысячи игр и приложений, в том числе облачные сервера и корпоративное ПО. Почти каждая сетевая система безопасности запускает какой-то процесс регистрации, что дает огромные возможности популярным библиотекам, таким как log4j. Затронуты все системы и службы, использующие библиотеку логирования Java, Apache Log4j между версиями 2.0 и 2.14.1, включая многие службы и приложения, написанные на Java.
Уязвимость, получившая название «Log4Shell», может стать самой серьезной, обнаруженной за последние годы. Ей подвержены крупные компании и даже сайты правительства стран. С её помощью даже новички в области программирования могут получить доступ к внутренним сетям, где они могут похищать ценную информацию, устанавливать вредоносные программы, стирать важные данные и так далее.
В чем опасность
Уязвимость CVE-2021-44228 (или Log4Shell) относится к классу Remote Code Execution и присутствует только в версиях Log4j с 2.0-beta9 до 2.14.1.
Log4Shell для подключения к серверу использует JNDI (Java Naming and Directory Interface). Это API, которое предоставляет единообразный механизм взаимодействия Java-программы с различными службами имен и каталогов. Зная JNDI-имя LDAP-сервера, базы данных или месседж-брокера, можно получить доступ к ним, используя операцию lookup.
Еще одно уязвимое место касается безопасности строк. Часто бывает так, что переменные раскрываются не только в конфигурационном файле, важном звене взаимодействия с библиотекой логирования, но и в строках. В ситуации с небезопасными строками библиотека сканирует сообщения пользователей и если видит в них исходный код, исполняет его. После этого хакер может загрузить вредоносный код на сервер — исследователи из SecurityLab описывают случаи, когда Log4Shell использовали для майнинга криптовалют или для DDoS-атак.
Что делать с уязвимостью
Лучший совет, который можно дать в сложившейся ситуации — обновить Log4j до версии 2.15 или Java до версии 11. Если обновление — это проблема, есть несколько альтернативных решений:
- Если приложение использует Log4j и запускается через команду java -d, можно выставить параметру system property значение true: java -Dlog4j2.formatMsgNoLookups=true.
- Еще один вариант — подтянуть текущую настройку из переменных окружения (LOG4J_FORMAT_MSG_NO_LOOKUPS=true). Во втором случае никакие дополнительные параметры выставлять не нужно, они автоматически подтянутся из окружения.
В заключении можно отметить, что уязвимости в безопасности Java и виртуальной машины Java представляют собой серьезную угрозу для информационной безопасности. Важно осознавать потенциальные риски и принимать меры по их предотвращению, такие как регулярное обновление программного обеспечения, использование проверенных библиотек и фреймворков, а также обучение персонала безопасным практикам программирования. С учетом быстрого развития технологий и современных угроз, важно проявлять внимательность и готовность к адаптации для обеспечения надежной защиты информационных систем.
Список литературы:
- Log4shell - угрожает Minecraft или УЯЗВИМОСТЬ НУЛЕВОГО ДНЯ– YouTube [Электронный ресурс] – URL: https://www.youtube.com/watch?v=6N5nzse3QjA (Дата обращения: 20.04.2024).
- Безопасность Java [Электронный ресурс]. URL: https://axiomjdk.ru/announcements/2023/12/07/bezopasnost-java/?ysclid=lv96nsaz3c665632118 (Дата обращения: 21.04.2024).
Оставить комментарий