Рубрики
Без рубрики

Топ-10 Наиболее распространенных уязвимостей Java, которые вам необходимо предотвратить

Легко думать, что наш код безопасен. Часто дело в уязвимостях или потенциальных эксплойтах… Помеченный как java, кибербезопасность.

Легко думать, что наш код безопасен. Уязвимости или потенциальные эксплойты часто являются тем, о чем мы думаем в последнюю очередь. Большую часть времени наши мысли заняты спринтами, схватками, записями о встречах и тем, что было одобрено последним маркетингом pivots.

В мире, где скорость разработки имеет приоритет над безопасностью кода, это может быть серьезной проблемой. Нарушение или взлом могут стоить бизнесу больших долларов, если не убить его полностью. Согласно отчету IBM о стоимости нарушения данных за 2020 год, средняя общая стоимость нарушения составляет 3,86 миллиона долларов США.

Хуже всего то, что на выявление и локализацию нарушения уходит в среднем 280 дней. Данные – это цифровое золото, а ваш код – это сосуд, в котором они хранятся.

Хотя Java считается относительно безопасным, поскольку это серверный язык, все еще существует множество способов атаковать и получить доступ к вещам, которые вы хотите сохранить в тайне.

Чтобы помочь вам получить представление об эксплойтах, которые могут возникнуть в вашем коде, мы перечислили 10 наиболее распространенных уязвимостей Java и о том, как вы можете (и должны) их предотвратить.

1. Инъекции кода

Каждое приложение, принимающее входные данные, уязвимо для инъекций кода. Внедрение кода происходит, когда данные, передаваемые через входные данные, вызывают непреднамеренные побочные эффекты в том, как ваша программа выполняется или возвращает данные.

Если вы подумаете об этом, форма – это двусторонний процесс. Кто-то вводит данные, приложение потребляет данные и возвращает результат. Когда этот результат оказывается не тем, что вы ожидаете, а чем-то другим, это может привести к тому, что ваше приложение окажется в уязвимом состоянии.

Инъекции кода происходят часто, и выполнить их гораздо проще, чем вы думаете. В 2010 году японский разработчик заметил, что вы можете отправлять HTML в виде твитов. Добавив немного JavaScript в HTML, он отправил маленького червя в Твиттере около полуночи, когда на самом деле никто не должен был бодрствовать.

Что сделал этот маленький фрагмент кода?

Каждый раз, когда пользователь наводил на него курсор, он мгновенно ретвитил его. Поэтому, когда один из их подписчиков просматривал страницу, они могли просто ретвитнуть этого маленького червячка. Это привело к цепному эффекту из более чем 3000 ретвитов в течение нескольких минут.

Хотя Twitter использует Java не только в своем стеке, предупреждающее событие может быть применено для защиты ваших форм ввода.

Самый простой метод – применить проверку входных данных с очисткой выходных данных и экранированием. Это означает, что любые попытки отправки HTML-кода будут проанализированы или отклонены, в зависимости от того, что делает ваше приложение.

2. Командные инъекции

Внедрение команд операционной системы, или также широко известное как внедрение оболочки, представляет собой уязвимость в системе безопасности, которая позволяет злоумышленникам выполнять команды оболочки на сервере, на котором запущено ваше приложение.

PHP часто является целью для командных инъекций, потому что по умолчанию он вызывает sh/bash/cmd. Java, однако, выполняет fork() данной команды для создания дочерних процессов и передачи им заданных аргументов.

Однако это не гарантирует, что ваш код безопасен.

Ваше приложение может быть разделено на различные уровни устаревшего кода, сшитого вместе, чтобы сформировать конечный продукт. Эти устаревшие продукты могут выступать в качестве входных путей для инъекций команд оболочки.

Иногда вам может потребоваться отправить командную строку на ваш сервер – например, отправить электронное письмо с подтверждением. Вместо того, чтобы использовать Runtime.exec() для подключения к серверу, лучше использовать доступный Java API, расположенный по адресу javax.mail. *

3. Ввод Соединительной Струны

Строки подключения – это набор определений, которые используются для подключения приложения к источнику данных. Он может подключаться к вашим реляционным базам данных, каталогам и файлам LDAP.

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

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

Проблема здесь в том, что некоторые поставщики баз данных не имеют ограничений и работают по алгоритму “последний выигрывает”. Это означает, что злоумышленник может запустить несколько строк ввода соединения, загрязнить их повторяющимися параметрами, и база данных примет допустимую комбинацию.

В результате злоумышленник в конечном итоге обходит обычный процесс аутентификации, не будучи заблокированным.

Например, введенная строка подключения может выглядеть примерно так:

Data Source = myDataSource; Initial Catalog = db; Integrated Security = no; User ID = myUsername; Password = XXX; Intergrated Security = true; Data Source = myDataSource; Initial Catalog = db; Integrated Security = no; User ID = myUsername; Password = XXX; Intergrated Security = no;

Войдя в систему, злоумышленник может перехватить учетные данные и изменить их так, как ему заблагорассудится.

4. Внедрение LDAP

Внедрение LDAP использует проверки входных данных и вводит исполняемые запросы. LDAP – это облегченный протокол доступа к каталогам, который представляет собой открытый и кроссплатформенный протокол, используемый для аутентификации службы каталогов.

LDAP – это язык связи, который приложения могут использовать для доступа к серверам каталогов. Эти серверы каталогов часто хранят имена пользователей, пароли, данные учетной записи и другую информацию, которой можно поделиться с другими объектами в сети.

Инъекции LDAP могут происходить, когда приложение вставляет несанкционированные входные данные непосредственно в инструкцию LDAP. Когда это происходит, злоумышленник может использовать синтаксис фильтра LDAP, заставляя сервер выполнять другие запросы и инструкции LDAP.

Самый простой способ предотвратить внедрение LDAP – это убедиться, что специальные символы LDAP – ( ) ! | & * экранируются или отклоняются при проверке.

5. Отраженный XSS

Отраженный XSS, или отраженный межсайтовый скриптинг, – это процесс добавления вредоносных скриптов, который активируется по ссылке. Затем запрос отправляет пользователя в другое место.

Например, отраженный XSS может быть встроен, чтобы сливаться с остальной частью сайта в разделе комментариев пользователей. Пользователь может нажать на него и в конечном итоге перейти на сторонний сайт, а затем перенаправиться обратно на исходный сайт.

Находясь на третьей стороне, могут происходить вредоносные действия, такие как кража файлов cookie или сеансов. Несмотря на то, что трудно отслеживать отраженные XSS, фильтры нежелательной почты по отправленным ссылкам могут помочь снизить частоту.

6. Вливание ресурсов

Инъекции ресурсов происходят, когда злоумышленник успешно изменяет идентификаторы ресурсов, используемые приложением для выполнения вредоносных задач. Это может быть изменение номера порта, изменение имени файла и получение возможности выполнять или получать доступ к другим ресурсам.

Как это могло случиться? Обычно, когда приложение определяет ресурс с помощью пользовательского ввода.

Например, представьте, что злоумышленник получает доступ к торговому сайту с помощью инъекции строки подключения или успешно украл данные вашего пользователя с помощью XSS. Теперь они могут изменять или запрашивать сведения с помощью внедрения ресурсов. Ваш злоумышленник может нанести ущерб, заказывая товары с сайта, изменяя или крадя дополнительную информацию о вашем клиенте без их ведома.

7. SQL-инъекция

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

Это может привести к полной компрометации хоста, доступу к данным и нарушению конфиденциальности. Мало того, внедрение SQL может привести к потере или повреждению данных и потенциально заблокировать доступ к вашей собственной базе данных. Когда это происходит, инъекция полностью переходит под контроль.

Самое простое решение этой проблемы – убедиться, что вы выполняете проверку на стороне сервера. Входные данные внешнего интерфейса можно легко обойти, а серверная часть служит опорой для предотвращения попадания нежелательных символов, таких как пробелы и кавычки ‘ ‘.

[Источник: https://xkcd.com/327/ ]

8. SQL-инъекция Второго порядка

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

Именно в этом SQL-инъекция второго порядка отличается от обычных SQL-инъекций.

Злоумышленник вводит код в строку таблицы, которая считается надежным источником. Затем вызывается эта строка таблицы, в результате чего атака переходит из состояния покоя в активное выполнение.

Тестирование SQL второго порядка сложнее из-за его часто скрытого характера.

Например, злоумышленник регистрируется с именем пользователя ‘ или ‘хакер’=’хакер

Это означает, что “идентичность ors:

ВЫБЕРИТЕ * из кредитных карт, ГДЕ;

Поэтому, когда имя пользователя равно ‘ или ‘хакер’ =’хакер, конечный запрос выглядит примерно так:

ВЫБЕРИТЕ * из кредитных карт, ГДЕ или;

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

9. Сохраненный XSS

Хранимая XSS-атака или постоянная XSS-атака происходит, когда злоумышленник вводит скрипт в содержимое веб-сайта или приложения. В отличие от отраженных XSS, в которые встроены сторонние ссылки, store XSS более опасен тем, что не требует от пользователя взаимодействия с ним.

Сайты социальных сетей особенно уязвимы для хранимых XSS-атак из-за характера платформы. Пользователям рекомендуется публиковать сообщения и взаимодействовать.

XSS также широко известен как веб-черви, когда пользователь получает вредоносный элемент, и он запускается в браузере. Эта атака может привести к краже файлов cookie, информации об учетной записи или какой-либо дополнительной функции посредством олицетворения учетной записи.

XSS может запускаться в четырех местах и часто выполняется с помощью JavaScript – @post .title, post.url, @post .id и @post .footer_attr

Чтобы предотвратить это, может быть полезно отклонить или экранировать специальные символы, такие как < > и @, перед их анализом.

10. Инъекция XPath

В то время как JSON является восходящей звездой для структурирования данных, XML-документы по-прежнему популярны и широко используются. XPath – это синтаксис, используемый для определения частей XML-документа. Идея, лежащая в основе инъекций XPath, аналогична SQL-инъекциям.

Единственное различие между SQL-инъекцией и XPath заключается в том, что последний выполнен в формате XML. Этот процесс отправки искаженных данных может быть легко осуществлен, если злоумышленник разгадает структуру XML.

Это позволяет злоумышленнику перемещаться по XML-документам, получая доступ к различной информации, такой как имя пользователя и пароль.

Часто внедрение XPath происходит, когда запрос строится на непроверенных входных данных. Хитрость для предотвращения инъекций XPath заключается в использовании предварительно скомпилированного Xpath. Избегайте использования полных выражений из незащищенного источника. Если вам нужно параметризовать свой XPath, изолируйте его, чтобы использовать только строковые параметры, чтобы предотвратить перехват вашего запроса.

Для большинства инъекций проверка пользовательских вводимых данных перед их использованием – самый простой способ предотвратить потенциальные атаки. Легко переложить задачу на передний план, но они являются лишь первой линией обороны, которая не всегда гарантированно выдержит.

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

Оригинал: “https://dev.to/eyalk100/top-10-most-common-java-vulnerabilities-you-need-to-prevent-oko”