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

tball

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

Киберпреступники используют эту уязвимость, вводя строки исполняемого вредоносного кода и тем самым внедряя вредоносный код в контент целевого сайта, чтобы навредить его пользователям. Код также может на самом деле не являться частью сайта, но казаться таковым пользователю. Создается впечатление, что сайт действительно скомпрометирован киберпреступниками.

Киберпреступники также могут использовать эту уязвимость, чтобы взять под контроль или напрямую скомпрометировать сайт, а также использовать другие существующие уязвимости на сервере или в программном обеспечении сайта.

Как работает XSS

  • Киберпреступники выбирают целевой сайт и выискивают уязвимые функции, которые принимают данные от пользователей. Например, строки поиска, формы входа и поля для комментариев.

  • В выбранную функцию вводится вредоносный код. Вредоносный код может быть написан на HTML, JavaScript или других языках.

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

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

  • Пользователи могут стать жертвами, если перейдут на скомпрометированную страницу по ссылке, полученной от киберпреступников, или откроют ее сами, в зависимости от планов злоумышленников.

  • Действия, которые введенный код выполняет в системе жертвы, могут быть просто раздражающими или очень опасными. Это может быть что-то относительно безвредное, например неожиданное изображение в опубликованном на сайте контенте, или ссылка, перенаправляющая пользователя на вредоносный сайт, или автоматическая загрузка вредоносных файлов в систему. Кроме того, злоумышленники могут украсть персональные данные жертвы, например логин и пароль.

Почему межсайтовый скриптинг опасен? 

С помощью XSS киберпреступники превращают надежные веб-сайты во вредоносные, нанося непоправимый ущерб не только жертвам, но и репутации надежного сайта.

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

Как пользователи могут защититься?

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

Рекомендации для разработчиков и владельцев сайтов:

  • Убедитесь, что все страницы на сайте, которые принимают данные от пользователя, отфильтровывают код, например на HTLM и JavaScript.

  • Сканируйте веб-приложения на наличие уязвимостей и вносите соответствующие исправления

  • Обновляйте программное обеспечение сайта и сервера, чтобы устранять известные уязвимости.

Рекомендации для пользователей:

  • Отключайте скрипты на страницах, где они не требуются, или отключите их полностью.

  • Не переходите по ссылкам из подозрительных электронных писем или постов, поскольку они могут вести на скомпрометированные страницы.

  • Переходите к сайтам, напрямую вводя их адрес в браузере, а не через сторонние источники или ссылки.

  • Регулярно обновляйте системное программное обеспечение и приложения, чтобы предотвратить использование известных уязвимостей.

Типы XSS-атак

Согласно Open Web Application Security Project (OWASP), XSS-атаки делятся на три категории: отраженные, хранимые и модель DOM (объектная модель документов). Они подробно описаны ниже.

Отраженные XXS-атаки (без сохранения) 

Отраженная XSS-атака происходит, когда хакер внедряет вредоносный скрипт в уязвимое веб-приложение, а сервер затем возвращает его в HTTP-ответе. Браузер жертвы выполняет вредоносный скрипт как часть HTTP-ответа, подвергая риску законного пользователя и отправляя закрытую информацию хакеру.

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

Главное средство защиты от XSS-атак — фильтрация контента и проверка вводимых пользователем данных. Вы можете использовать безопасные списки и списки блокировки поставщиков скриптов для отклонения рискованных шаблонов данных.

Кроме того, вы можете внедрить строгую политику безопасности контента, которая помогает определить источник встроенных скриптов, снижая риск отраженных XSS-атак. Надежная политика безопасности контента позволяет контролировать скрипты и расположение веб-страниц, на которых они могут загружаться и запускаться.

Хранимые XSS-атаки (с сохранением) 

При хранимой XSS-атаке вредоносный скрипт сохраняет пользовательские данные на целевом сервере. В отличие от отраженной XSS-атаки, которая выполняется на сервере, хранимая XSS-атака выполняется в браузере пользователя. Злоумышленники используют современные приложения HTML5, обычно взаимодействующие с базами данных HTML, для постоянного хранения вредоносных скриптов в браузере.

При хранимой XSS-атаке скрипт сохраняется и выполняется на сервере каждый раз, когда пользователь переходит на соответствующий сайт. Злоумышленники легко охватывают большое количество жертв, и результат сохраняется надолго. Хранимые XSS-атаки также происходят, когда необученные пользователи пытаются извлечь данные из программного обеспечения, не принимая никаких мер предосторожности для их санации или проверки.

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

Очищать данные можно с помощью автоматического экранирования специальных символов или HTML-кодирования. Необходимо кодировать выходные данные, чтобы сервер не интерпретировал их как активное содержимое. Это означает, что приложение будет обрабатывать специальные символы в сохраненных данных как HTML-тег, а не обычный HTML. 

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

Еще один способ предотвратить XSS-атаки в реальном времени — использовать динамическую безопасность, которая активно ищет попытки эксплуатации уязвимостей. Блокируя известные паттерны, вы можете предотвратить использование злоумышленниками существующих лазеек.

Наконец, вы можете использовать межсетевые экраны веб-приложений (Web Application Firewall, WAF) для обнаружения и блокировки XSS-атак в реальном времени.

XSS-атаки в DOM-модели

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

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

Для этого типа атак можно использовать те же методы, что и для других двух, но следует проявлять особую осторожность при санации кода со стороны клиента. Два самых эффективных способа — запретить пользовательским источникам менять потенциально опасные функции JavaScript (приемники) или разрешать только надежный контент из «белого списка». С учетом этих мер предосторожности строки, которые могут угрожать DOM-модели, не будут попадать в приемники. Вы также можете санировать данные с помощью встроенных функций браузера, чтобы защититься от проблем, связанных с изменениями в работе парсера.

Новый метод защиты от атак такого типа — использование надежных типов. Это механизм безопасности браузера, который гарантирует, что все рискованные части DOM-модели могут использоваться только данными, которые соответствуют заданным правилам. Он предотвращает передачу произвольных строк в потенциально опасные приемники, что помогает браузеру различать код и данные. Тем самым мы устраняем основной источник уязвимости.

XSS на стороне сервера и XSS на стороне клиента

XSS-атаки могут происходить на стороне сервера или на стороне клиента. Программы на стороне клиента запускаются на клиентском устройстве или в браузере и воздействуют на пользовательский интерфейс и обработку данных на устройстве клиента. Программы на стороне сервера работают на серверах и создают содержимое веб-страницы.

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

XSS-атака возможна везде, где есть HTML. Все три типа XSS-атак приводят к одинаковому результату: злоумышленник получает полный контроль над веб-сеансом.

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

Платформа Trend Vision One™

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

Trend Vision One поддерживает различные гибридные ИТ-среды, автоматизирует и координирует рабочие процессы, а также предоставляет экспертные услуги по кибербезопасности, чтобы вы могли упростить и свести воедино операции по обеспечению безопасности.

fernando

Вице-президент по аналитике угроз

ручка