Руководство по XSS, часть 1 |
24.12.2019 00:00 |
Авторы: Джейкоб Каллин и Ирен Лобо Валбуэна (Jakob Kallin, Irene Lobo Valbuena) Общая информацияЧто такое XSS? Межсайтовый скриптинг (XSS) – это атака инъекции кода, позволяющая атакующему запустить вредоносный JavaScript в браузере другого пользователя. Злоумышленник не целится в жертву напрямую. Вместо этого он пользуется уязвимостью на сайте, который посещает жертва, чтобы заставить сайт передать вредоносный JS. В браузере жертвы этот JS будет казаться полноправной частью сайта, и в результате сайт действует как невольный союзник злоумышленника. Как проводится инъекция вредоносного JavaScript Единственный способ, путем которого злоумышленник может запустить свой вредоносный JavaScript в браузере другого пользователя – это вставка этого кода на одну из страниц, которые жертва загружает с сайта. Это может произойти, если сайт напрямую включает пользовательский ввод на своих страницах – злоумышленник может вставить туда строку, которую браузер жертвы воспримет, как код. В примере ниже приведен простой серверный скрипт, отображающий последний комментарий на сайте: print "<html>" Скрипт предполагает, что комментарий состоит только из текста. Однако так как пользовательский ввод включается напрямую, то злоумышленник может опубликовать комментарий "<script>...</script>". Пользователь, зашедший на эту страницу, теперь получит такой ответ: <html> Когда браузер пользователя загрузит страницу, он выполнит JavaScript-код, заключенный между тэгами <script>. Атака злоумышленника удалась. Что такое вредоносный JavaScript? Начнем с того, что возможность запуска JavaScript в браузере жертвы может казаться не особенно ужасной. В конце концов JavaScript работает в очень закрытом окружении, имеющем крайне ограниченный доступ к пользовательским файлам и операционной системе. Так-то вы можете открыть JavaScript-консоль вашего браузера прямо сейчас и запустить любой JavaScript, который придет вам в голову – и вы вряд ли каким-то образом навредите своему компьютеру. Однако возможности вредоносного JavaScript станут яснее, если поразмышлять вот о чем:
В совокупности эти факторы могут вызвать серьезные прорехи в безопасности, и мы поговорим о них подробнее чуть позже. Последствия вредоносного JavaScript Помимо прочего, возможность запускать любой JavaScript в браузере другого пользователя позволяет злоумышленнику проводить следующие типы атак: Кража временных файлов Злоумышленник, используя document.cookie, может получить доступ к временным файлам жертвы, связанным с сайтом, отправить их на свой собственный сервер, и использовать для извлечения закрытой информации – например, об ID сессии. Кейлоггинг Злоумышленник может зарегистрировать слушателя событий клавиатуры при помощи addEventListener, а затем отправлять все нажатия клавиш на свой сервер, потенциально фиксируя закрытую информацию – скажем, пароли и номера кредитных карт. Фишинг Злоумышленник может вставить фальшивую форму авторизации на страницу, используя DOM-манипуляцию, заставить action-атрибут формы отправлять все на свой собственный сервер, и затем обмануть пользователя и получить его авторизационные данные. Эти атаки сильно различаются, но в одном они критически похожи: так как злоумышленник внедрил код в страницу вебсайта, вредоносный JavaScript выполняется в контексте этого сайта. Это означает, что он обрабатывается так же, как и любой другой скрипт этого сайта: у него есть доступ к данным пользователя для сайта (например, к временным файлам), а имя хоста в URL-строке будет соответствовать сайту. Скрипт фактически воспринимается как правомочная часть сайта, что позволяет ему делать все то, что может сам сайт. Это приводит нас к ключевому моменту: Если злоумышленник может использовать ваш сайт для запуска произвольного JavaScript в браузере другого пользователя, то безопасность вашего сайта и его пользователей находится под угрозой. Дабы четче донести эту мысль, ряд примеров в этом руководстве не будет детально демонстрировать вредоносный скрипт, вместо этого показывая только теги <script>...</script>. Это значит, что само присутствие внедренного злоумышленником скрипта – уже проблема, вне зависимости от конкретного кода, который в нем выполняется. XSS-атакиАгенты XSS-атаки Прежде чем разобраться в деталях, как работает XSS-атака, нам нужно определить агентов, вовлеченных в нее. В целом XSS-атака включает трех агентов: сайт, жертву и злоумышленника.
Пример сценария атаки В этом примере мы предположим, что цель злоумышленника – украсть временные файлы (cookies) пользователя, используя XSS-уязвимость сайта. Это можно сделать, заставив браузер жертвы обработать код: <script> Этот скрипт перенаправляет браузер пользователя на другой URL, провоцируя HTTP-запрос к серверу злоумышленника. URL включает куки жертвы как параметр запроса, и злоумышленник может извлечь их из запроса, когда запрос дойдет до его сервера. Как только он приобрел куки-файлы, он может использовать их для имитации жертвы и запуска дальнейших атак. Здесь и далее HTML-код, приведенный выше, будет описываться как вредоносная строка или вредоносный скрипт. Важно отметить, что строка вредоносна только тогда, когда она обрабатывается как HTML в браузере жертвы – а это происходит только при наличии на сайте XSS-уязвимости. Как работает пример атаки Диаграмма ниже демонстрирует, как эта атака может быть выполнена злоумышленником.
В следующей части этого руководства будут обсуждаться различные типы XSS-атак. |