Как защитить приложения на Python Flask
Узнать большеМногие веб-приложения содержат уязвимости, которые могут стать точками входа для киберпреступников, желающих завладеть доступом к конфиденциальной информации или нарушить работу ПО. Одна из самых распространенных уязвимостей позволяет внедрять в продукт вредоносный код, выполнение которого приводит к тому, что хакеры получают возможность совершать несанкционированные действия в базах данных SQL (БД). Атаки такого рода называются SQL-инъекциями и реализуются благодаря тому, что подавляющее количество баз данных строится на языке программирования Structured Query Language (далее — SQL). В статье подробно разберем механизм атаки, меры профилактики и защиты.
Что надо знать об атаках на основе SQL-инъекции
Чтобы было проще разобраться в механизме злоумышленных действий, напомним, что собой представляет SQL. Это язык программирования, лежащий в основе практически любой табличной базы данных. Он используется для совершения всех операций с информацией внутри реляционных БД.
Чтобы выполнить какую-либо манипуляцию, например передать атрибуты учетных записей через форму входа на сайт или в приложение, в БД направляется SQL-запрос. Пользователь заполняет форму входа, вводя в нее определенную информацию, например идентификатор и пароль, которая сверяется с имеющейся в базе. Если все в порядке, пользователь получает доступ к запрашиваемому ресурсу, если есть отклонения — система выдает отказ. Но опасность в том, что многие формы ввода не оснащаются механизмами, которые запрещают внесение дополнительных сведений, чем и пользуются злоумышленники. Они внедряют в форму запроса (а иногда непосредственно в URL‐адрес) собственный SQL‐запрос, который называется инъекцией. Он исполняется на сервере и позволяет совершать различные действия в базе данных, например просматривать конфиденциальную информацию или даже удалять БД.
В большинстве случаев пользователи не замечают SQL-запросов к базе данных, то есть атаки проходят бессимптомно. И все же есть признаки, по которым можно предположить наличие вредоносной активности:
- Появление рекламных блоков, которые перенаправляют пользователей на сайты, не вызывающие доверия.
- Всплывающие окна с уведомлениями об ошибках отправки запросов.
- Нетипичный отклик от формы обратной связи ресурса, например поток писем на электронную почту.
Все эти признаки могут сигнализировать и о других атаках, но в любом случае их не следует игнорировать.
Типы атак на основе SQL-инъекции
Существует несколько типов SQL-инъекций. Рассмотрим наиболее распространенные:
- Union-based инъекции — атаки через оператора Union, подразумевающие объединение нескольких запросов. В результате злоумышленники легко получают доступ к защищенным разделам БД, могут просматривать любые хранимые сведения и похищать атрибуты для входа в пользовательские аккаунты.
- Error-based — злонамеренная активность, которая может привести к тому, что БД приложения или веб-ресурса будет выдавать уведомления об ошибках. Хакеры анализируют эти сообщения и пытаются воссоздать особенности инфраструктуры базы данных.
- Time-based инъекции, или «слепые» атаки — добавление подзапросов, которые при соблюдении определенных условий замедляют работу базы данных. Атакующие сравнивают время ответа на реальные и фальшивые запросы, таким образом постепенно восстанавливая содержимое БД.
- Boolean — еще одна разновидность атаки «слепого» типа. Хакеры отправляют SQL-запрос к базе данных с намерением получить от БД отрицательный или положительный ответ.
Если у злоумышленников не получается собрать информацию через определенный канал связи или наблюдаются сбои в работе сервера, хакеры прибегают к нападениям типа Out-of-band — отправляют данные на контролируемый сервис путем использования пакетов UTL_HTTP, DNS-запросов.
Опасность SQL-инъекций
К основным угрозам, связанным с SQL-инъекциями, можно отнести:
- Несанкционированный доступ к чувствительной информации, например персональным данным пользователей приложения, атрибутам банковских карт.
- Нарушение целостности и работоспособности атакуемых веб-ресурсов и приложений.
- Вероятность утечки чувствительных данных, которые хранятся на SQL-сервере.
- Искажение и уничтожение хранимой информации. Например, киберпреступники могут модифицировать данные, полностью или частично их удалить.
- Получение общих или административных привилегий для выполнения действий в системе. Это может произойти, если проверка логинов и паролей осуществляется с помощью простых SQL-запросов. В этом случае хакеры смогут добраться до чувствительных сведений из БД даже при отсутствии атрибутов учетных записей, с помощью которых пользователи авторизуются на ресурсе.
Если перечисленные угрозы будут реализованы, компания-владелец веб-ресурса или приложения потерпит репутационный ущерб и понесет финансовые потери. Это вероятно в случае компрометации персональных данных, что, скорее всего, обернется утратой доверия клиентов.
Для примера — несколько реальных кейсов атак с использованием SQL-инъекций, которые привели к серьезным инцидентам:
- В игре Fortnite, где зарегистрировано более 300 млн пользователей, нашли точку входа для SQL-инъекции. Она была применена, в результате чего хакерам удалось получить доступ к аккаунтам пользователей.
- Уязвимость, связанную с SQL-инъекцией обнаружили в Cisco. Пробел в безопасности обеспечил хакерам возможность управлять диспетчером лицензий.
- Атаке подвергся сайт Tesla, в результате чего взломщики похитили персональные данные пользователей и использовали административные полномочия для управления веб-ресурсом.
Профилактика SQL-инъекций
Что делать, чтобы минимизировать риски SQL-инъекций? Ниже приводим краткие рекомендации:
- Контролировать ввод информации, которая нужна для входа на сайты и в приложения, например проверять ее по допустимым словам и словосочетаниям. Также следует назначить всем учетным записям, привязанным к базам данным SQL, минимальные полномочия.
- Всегда удалять входные данные, поскольку сохранять их в форме для авторизации небезопасно даже при подтверждении с помощью аутентификации.
- Исключать любые элементы, вызывающие сомнения, поскольку они могут быть частью вредоносного кода.
- Осуществлять параметризацию запросов, в ходе которой формируются запросы на основе меток с прикрепленными параметрами ввода входных данных.
- Проверять используемое программное обеспечение на безопасность. Это можно делать с помощью специальных автоматических анализаторов, способных обнаружить закладки в ПО и уязвимости. Для профилактики SQL-инъекций и других угроз эту меру необходимо внедрить еще на этапе разработки продуктов, но регулярные проверки в ходе эксплуатации программного обеспечения также важны.
- Как можно чаще обновлять программное обеспечение, т. к. эксплуатация устаревших версий значительно повышает вероятность атак на приложения.
Как защититься от атак на основе SQL-инъекций
Основной метод борьбы с уязвимостями в коде — контроль безопасности приложений для своевременного выявления слабых мест и недекларированных возможностей, которые могут эксплуатировать злоумышленники.
Методы обнаружения уязвимостей:
- Static Application Security Testing (сокращенно — SAST) — анализ исходного кода приложения, выполняемый без запуска программного обеспечения.
- Software Composition Analysis (сокращенно — SCA) — сканирование программного обеспечения с целью обнаружения фрагментов, содержащих открытый исходный код. С помощью этой проверки можно обнаружить слабые места и проблемы с лицензированием сторонних компонентов, устаревшие элементы.
- Dynamic Application Security Testing (сокращенно — DAST) — исследование приложений на наличие слабых мест путем имитации реальных атак, в том числе с использованием SQL-инъекций.
Для повышения уровня защищенности приложений и профилактики атак важно применять эти инструменты в комплексе. Они позволяют обнаруживать слабые стороны ПО еще на этапе разработки.
Solar appScreener против SQL-инъекций
Чтобы минимизировать риски атак на основе SQL-инъекций, важно внедрить практики безопасной разработки, подразумевающие тестирование программного обеспечения на каждом этапе создания продукта. В этом поможет комплексное решение Solar appScreener, включающее все основные виды анализа кода.
Покажем на примере, как Solar appScreener с помощью модуля статического анализа (SAST) может обнаружить SQL-инъекцию.
- Для начала сканирования достаточно загрузить в Solar appScreener файл с исходным кодом. Также можно вставить ссылку на приложение в магазине приложений или путь к репозиторию.
- При необходимости перед запуском анализа можно отрегулировать настройки сканирования — например, выбрать необходимые языки программирования (хотя это не обязательно — Solar appScreener умеет определять их автоматически).
- После того как Solar appScreener просканировал код, необходимо зайти в раздел «Подробные результаты». Там представлены все обнаруженные уязвимости с уровнем их критичности.
К примеру, так выглядит SQL-инъекция, которую SAST нашел в коде. В интерфейсе подсвечены конкретные строчки в коде, где обнаружена проблема, которая может стать причиной атаки.
Помимо этого, решение дает рекомендации, как устранить найденную уязвимость.
- Подробный отчет с результатами сканирования можно выгрузить в удобном формате, который можно предварительно настроить. В нем содержатся экспертные рекомендации, как устранить уязвимости и ошибки в коде приложения.
Защитите ваши приложения от SQL-инъекций с Solar appScreener
Попробовать бесплатно