Главная » Инф-ая безопасность » A03:2021- Внедрение кода

A03:2021- Внедрение кода

A03:2021- Внедрение кода
Инф-ая безопасность
12 ноябрь 2021
0

Обзор


Внедрение кода опускается на третью позицию. 94 % приложений были протестированы на наличие той или иной формы инъекций с максимальным коэффициентом встречаемости 19 %, средним коэффициентом встречаемости 3 % и 274 тыс. инцидентов. Известные CWE: CWE-79: Межсайтовый скриптинг, CWE-89: Внедрение SQL и CWE-73: Внешний контроль имени файла или пути.

Описание


Приложение уязвимо для атаки, когда:

  • Предоставленные пользователем данные не проверяются, не фильтруются и не обрабатываются приложением.
  • Динамические запросы или не параметризованные вызовы без контекстно-зависимого экранирования используются непосредственно в интерпретаторе.
  • Враждебные данные используются в параметрах поиска объектно-реляционного сопоставления (ORM) для извлечения дополнительных конфиденциальных записей.
  • Враждебные данные используются напрямую или объединяются. SQL или команда содержит структуру и вредоносные данные в динамических запросах, командах или хранимых процедурах.

Некоторые из наиболее распространенных инъекций – это SQL, NoSQL, команды операционной системы, объектно-реляционное сопоставление (ORM), LDAP и язык выражений (EL) или внедрение библиотеки навигации по графам объектов (OGNL). Концепция идентична у всех интерпретаторов. Проверка исходного кода - лучший метод определения уязвимости приложений к инъекциям. Настоятельно рекомендуется автоматизированное тестирование всех параметров, заголовков, URL-адресов, файлов cookie, JSON, SOAP и входных данных XML. Организации могут включать статические (CAST), динамические (CAST) и интерактивные (IAST) средства тестирования безопасности приложений в конвейер CI/CD для выявления внедренных ошибок перед развертыванием.

Как предотвратить


Предотвращение внедрения требует хранения данных отдельно от команд и запросов:

  • Предпочтительным вариантом считается использование безопасного API, который полностью исключает использование интерпретатора, предоставляет параметризованный интерфейс или переходит на инструменты объектно-реляционного сопоставления (ORM).

Примечание. Даже при параметризации хранимые процедуры все равно могут вводить SQL-инъекцию, если PL/SQL или T-SQL объединяют запросы и данные или выполняют враждебные данные с помощью EXECUTE IMMEDIATE или exec().

  • Используйте положительную или "белую" проверку ввода на стороне сервера. Это не полная защита, так как многим приложениям требуются специальные символы, такие как текстовые области или API для мобильных приложений.
  • Для любых остаточных динамических запросов экранируйте специальные символы, используя специальный синтаксис экранирования для этого интерпретатора.

Примечание: Структуры SQL, имена таблиц, имена столбцов и т.д., не могут быть экранированы, и поэтому имена структур, предоставленные пользователем, опасны. Это распространенная проблема в программном обеспечении для написания отчетов.

  • Используйте ОГРАНИЧЕНИЯ и другие элементы управления SQL в запросах, чтобы предотвратить массовую утечку записей в случае внедрения SQL.

Примеры сценариев атак


Сценарий № 1: Приложение использует ненадежные данные при построении следующего уязвимого вызова SQL:

String query = "SELECT \* FROM accounts WHERE custID='" + request.getParameter("id") + "'";

Сценарий № 2: Аналогично, слепое доверие приложения к фреймворкам может привести к запросам, которые все еще уязвимы (например, язык запросов Hibernate (HQL)):

Query HQLQuery = session.createQuery("FROM accounts WHERE custID='" + request.getParameter("id") + "'");

В обоих случаях злоумышленник изменяет значение параметра "id" в своем браузере, чтобы отправить: "или "1"=’1. Например:

http://example.com/app/accountView?id=' or '1'='1

Это изменяет значение обоих запросов, возвращая все записи из таблицы "Учетные записи". Более опасные атаки могут изменять или удалять данные или даже применять хранимые процедуры.

Об авторе
admin Пользователь не указал информацию о себе
Ctrl
Enter
Заметили ошЫбку
Выделите текст и нажмите Ctrl+Enter
31
0
00
Комментарии (0)