SQL-инъекции для получения доступа к данным

Продолжая серию «Причины и виды уязвимости приложений» рассмотрим возможности внедрения кода в SQL-запросы. Данная уязвимость позволяет модифицировать запросы к базе данных, с тем, чтобы получить несанкционированный доступ к данным. Данная уязвимость эксплуатируется через недостаточную проверку входных данных. Часто это поисковые поля данных, куда пользователи вводят простые и безобидные запросы типа «доставка цветов», а грамотные хакеры подставляют символы и команды, способные внести изменения в БД, раскрыть пароли доступа и т.п.

Следующие особенности кода приложения свидетельствуют о потенциальной возможности SQL injection:

  • вводимые пользователем данные без проверки используются для построения запросов или как параметры хранимых процедур;
  • при построении запросов используется конкатенация строк;
  • при построении запросов используется замена строк;
  • для выполнения запроса используется функция exec (в случае использования СУБД Microsoft SQL Server).

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

Чтобы минимизировать вероятность возникновения данной уязвимости, следует придерживаться следующих правил:

  • для проверки текстов программ использовать инструментальные средства анализа, обладающие низкой вероятностью ошибок2-города для SQL injection (т. е. низкой вероятностью пропуска уязвимости в исходных кодах приложения). Существует широкий набор инструментальных средств для анализа исходного кода. Например, Ounce Labs, Parasoft’s Jtest & C++test, Klocwork Insight, Fortify Source Code Analyzer (SCA), GrammaTech CodeSonar, Coverity Prevent;
  • проверять все данные, введенные пользователем, разрешая только заведомо корректные данные;
  • использовать параметризированные запросы;
  • не использовать конкатенацию или замену строк при построении кода запроса в тексте приложения;
  • не использовать учетную запись администратора для подключения к БД;
  • для доступа к данным использовать представления, непосредственный доступ к таблицам должен быть запрещен;
  • для выполнения динамически созданного запроса использовать команду spexecutesql вместо exec (для СУБД Microsoft SQL Server);
  • для проверки параметров хранимых процедур использовать функцию quotename (для СУБД Microsoft SQL Server).

Добавить комментарий

Ваш адрес email не будет опубликован.

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.