Типы XSS (межсайтового скриптинга)

Межсайтовый скриптинг (XSS) – уязвимость, когда злоумышленник заставляет браузер цели выполнить вредоносный скрипт. Последствия могут включать воровство cookie сессии и выдачу себя за пользователя. Также XSS может комбинироваться с социальной инженерией для эскалации к более разрушительным атакам, таким как похищение конфиденциальных данных.

Типы XSS (общепринятая классификация):

Stored/Persistent (сохраненный) XSS

Что это:

Наиболее опасный тип межсайтового скриптинга.

Для его реализации преступник внедряет вредоносное содержимое (это называется полезной нагрузкой), чаще всего код JavaScript, в веб-сайт. Если проверка входных данных отсутствует, этот вредоносный код сохраняется веб-приложением, например, в базе данных.

Возможный сценарий:

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

Когда пользователь открывает эту страницу, полезная нагрузка XSS передается в его браузер как часть HTML-кода (как легитимный комментарий), и тогда выполняется злонамеренный скрипт.

Reflected/Non-persistent (отображенный) XSS

Что это:

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

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

Возможный сценарий:

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

DOM-based XSS (XSS на основе DOM)

Что это:

Это продвинутая XSS-атака, которая возможна для реализации, если скрипты на стороне клиента записывают данные, предоставленные пользователем, в модель объектов документов (DOM). После этого данные с DOM считываются веб-сайтом и выводятся в браузер.

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

Атака XSS на основе DOM часто является атакой на стороне клиента, поэтому вредоносная полезная нагрузка не отправляется на сервер. Это еще больше усложняет ее обнаружение для брандмауэров веб-приложений (WAF) и инженеров безопасности, анализирующих логи сервера, поскольку они даже не увидят атаку.

Объекты DOM, которыми чаще всего манипулируют, включают URL-адрес (document.URL), часть URL-адреса якоря (location.hash) и Referrer (document.referrer).

Возможный сценарий:

Злоумышленник размещает вредоносную ссылку с компрометированным URL на стороннем ресурсе и делает SMS-рассылку с ней разным номерам. Цель заходит туда, клиентский скрипт читает URL и вставляет содержимое в DOM, после чего выполняется вредоносный код.

Относительно предотвращения XSS, у нас есть статья, с которой вы можете ознакомиться.

Обнаружение XSS

Как это делает DAST (black-box тестирование):

Динамическое тестирование безопасности приложений (например Invicti на основе Netsparker и Acunetix) собирает структуру сайта во время его выполнения, находя формы ввода и другие точки входа. Далее он внедряет безопасные полезные нагрузки, имитирующие действия хакера, таким образом проверяя, присутствует ли данная уязвимость.

Как это делает SAST (white-box тестирование):

Статическое тестирование безопасности приложений (например, от Mend.io) проверяет исходный код веб-приложения, ища там ошибки, вероятно, свидетельствующие о наличии уязвимости, грубо говоря, как в тексте.

Лучшая практика – комбинация методов

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

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

Во-вторых, с помощью DAST нельзя просканировать всю базу кода; тестируется только запущенное веб-приложение, что делает невозможным внедрение этого метода в ранних стадиях разработки (но можно имплементировать позже).

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

Вы можете бесплатно протестировать платформы Invicti (DAST, IAST) и Mend.io (SAST, SCA, безопасность контейнеров), которые бесшовно интегрируются, для этого, пожалуйста, оставьте ваши данные в форме ниже:

Запрос на бесплатное тестирование Invicti/Mend.io

Оставьте контакты и мы с вами свяжемся

Подписаться на новости