(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Защита Internet Explorer 8. Анализ эффективности

Источник: securitylab
Дмитрий Евтеев, Сергей Гордейчик

Что такое XSS?

Наличие уязвимости "Межсайтовое выполнение сценариев" (Cross-site Scripting, XSS) позволяет атакующему передать серверу исполняемый код, который будет перенаправлен браузеру пользователя. Этот код обычно создается на языках HTML/Javascript, но могут быть использованы VBScript, ActiveX, Java, Flash, или другие поддерживаемые браузером технологии.

Переданный код исполняется в контексте безопасности (или в зоне безопасности) уязвимого сервера. Используя эти привилегии, код получает возможность читать, модифицировать или передавать важные данные, доступные с помощью браузера. У пользователя, в отношении которого производиться атака, может быть скомпрометирован аккаунт (кража cookie), его браузер может быть перенаправлен на другой сервер, или осуществлена подмена содержимого сервера. В результате тщательно спланированной атаки злоумышленник может использовать браузер жертвы для просмотра страниц приложения от имени атакуемого пользователя. Код может передаваться злоумышленником в URL, в заголовках HTTP запроса (Cookie, User-agent, Referrer), значениях полей форм и т.д.

Уязвимостям класса Cross-Site Scripting подвержено огромное количество Web-приложений. Это подтверждает как практика проводимых компанией Positive Technologies тестов на проникновение, так и независимые исследования. По данным исследования Web Application Security Consortium за 2007 год [1] самой распространенной уязвимостью является Cross-Site Scripting, эта уязвимость присутствует почти в 60% проанализированных сайтов (см. Рис. 1).

Рис. 1 Статистика WASC за 2007 г. "Процент уязвимостей от общего числа"

Продолжительное время степень риска, связанная с уязвимостями типа Cross-Site Scripting, недооценивалась. И лишь после многочисленных успешных атак с использованием XSS, а также с появлением Интернет-червей [2], способных размножаться путем эксплуатации уязвимостей Cross-Site Scripting, пришло осознание того, что необходимо как-то защищаться от подобной напасти.

И как с ним бороться?

Для борьбы с уязвимостью Cross-Site Scripting не достаточно только фильтровать данные, поступающие в Web-приложение со стороны пользователя. Например, уязвимость Cross-Site Scripting могла эксплуатироваться в контексте Web-сайта с помощью обращения к обычному PDF-документу [3], который содержится на этом Web-узле. Хотя существует множество полезных инструментов, которые помогают смягчить последствия XSS-атаки (например, Web Application Firewall), эти инструменты не удовлетворяют нуждам обычного пользователя по защите их самих от Cross-Site Scripting, когда они путешествуют в сети Интернет.

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

Так в новой версии Internet Explorer 8 появился XSS-фильтр, который делает реализацию XSS-атаки в нем намного более сложной задачей для злоумышленника. В настоящее время для скачивания доступна IE версии 8b2, собственно, про XSS-фильтр, реализованный в этой версии Интернет-браузера, и пойдет речь в данной статье. Логика работы фильтра описана в документе "IE 8 XSS Filter Architecture / Implementation", и за детальной информацией предлагается обращаться к первоисточнику [4]. Что же касается результатов работы, то при попытке передать на уязвимый сервер сакраментальный запрос:

http://www.example.com/script.asp?val=><script>alert("xss")</script>

пользователю будет выдано сообщение в строке уведомлений, а в HTML-код будут внесены изменения, препятствующие выполнению кода.

Рис. 2 Реакция IE8 на проверку уязвимости Cross-Site Scripting

Методика исследования

Большинство исследователей выделяет три типа уязвимостей и атак, связанных с XSS: постоянные (сохраненные, persistent, stored, Type-2), непостоянные (отраженные, non-persistent, reflected, Type-1) [5] и DOM-based XSS (Type-3)[6]. Основным отличием между ними заключается в том, что в отраженном варианте передача кода серверу и возврат его клиенту осуществляется в рамках одного HTTP-запроса, а в сохраненном - может происходить и в разных запросах. Осуществление непостоянной атаки требует, чтобы пользователь перешел по ссылке, сформированной злоумышленником (ссылка может быть передана по email, ICQ и т.д.). В процессе загрузки сайта код, внедренный в URL или в заголовки запроса, будет передан клиенту и выполнен в его браузере. Сохраненная разновидность уязвимости возникает, когда код передается серверу и сохраняется на нем на некоторый промежуток времени. Наиболее популярными целями атак в этом случае являются форумы, почта с Web-интерфейсом и чаты. Для атаки пользователю не обязательно переходить по ссылке, достаточно посетить уязвимый сайт. Третий тип XSS (DOM-based) может присутствовать как в сохраненном, так и в отраженном варианте, но выделяется тем, что внедрение кода осуществляется с использованием AJAX-технологий (например, Javascript document.write и т.д.).

В ходе исследования анализировалась применимость механизмов противодействия XSS, встроенных в Internet Explorer beta 2, для всех трех вариантов атаки. При этом использовались распространенные методы обхода XSS-фильтров, описанные в XSS Cheat List [7], и собственные разработки авторов. В ближайшее время планируется расширить XSS Cheat List особенностями Internet Explorer 8.0.

Сохраненный вариант

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

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

DOM-based XSS

Как говорилось ранее, уязвимость данного типа возникает, когда внедрение кода динамически осуществляется с использованием Javascript и AJAX-технологий. Эксперименты показали, что фильтр XSS в Intenet Explorer beta 2 реализует защиту от большинства сценариев данного типа атак, но в некоторых случаях логику фильтра можно обойти. Примерами являются операторы выполнения скриптов напрямую (eval), изменение URL документа (document.location) и т.д. Ниже приведен пример уязвимого приложения, использующего клиентский Javascript для выполнения кода напрямую через метод eval().

Рис. 3 Уязвимый код web-приложения на языке PHP

Тогда, несмотря на фильтр XSS в IE8b2, возможно успешно провести атаку Cross-Site Scripting (см. рис 4).

Рис. 4 Эксплуатация DOM-based Cross-Site Scripting

В других распространенных случаях, когда Javascript используется для записи в код HTML-страницы или изменения DOM-объектов напрямую, атака блокируется фильтром.

Отраженный вариант

Можно выделить четыре основных ситуации, в которых возможен отраженный вариант атаки Межсайтовое выполнение сценариев:

  • внедрение кода в Javascript;
  • внедрение кода в тег;
  • внедрение кода в параметр тега;
  • внедрение кода в HTML.

Далее рассмотрено противодействие Internet Explorer в каждом их этих случаев.

Внедрение кода в Javascript

Данная ситуация очень схожа с DOM-based XSS. Однако код внедряется непосредственно в блок Javascript без использования функций AJAX. Пример уязвимого кода приведен ниже.

Рис. 5 Уязвимый java-script код

В этом случае злоумышленник может передать в качестве значения параметра XSS-значение:

500 ); alert( document. cookie); //

В результате код в странице приобретет вид:

setTimeout("writetitle()", 500); alert(document.cookie);//)

Два символа обратного слеша является комментарием в языке Javascript, поэтому, с точки зрения синтаксиса, здесь все верно. Таким образом, несмотря на фильтр XSS в IE8b2, возможно успешно провести классическую атаку Cross-Site Scripting (см. рис. 6).

Рис. 6 Эксплуатация внедрения java-script кода

Как часто можно встретить внедрение в код Javascript? Практика показывает, что подобные уязвимости - достаточно распространенное явление. По опыту авторов 10-15% Web-приложений, которые содержат уязвимости Cross-Site Scripting, будут содержать в том числе и уязвимость внедрения Javascript кода.

Внедрение кода в тег

Данный вариант уязвимости встречается редко, но сбрасывать его со счетов не стоит. Фильтр XSS в Internet Explorer пропускает конструкции, когда уязвимый параметр к Cross-Site Scripting встречается в следующих вариациях:

< img… $ XSS ….>

< font… $ XSS ….>

и т.п.

То есть в ситуациях, когда уязвимое значение включено в тег и не является параметром этого тега. В этом случае можно использовать обработчики событий Javascript (onClick(), onMouseover()) для передачи управления коду, используемому для атаки (см. рис. 7).

Рис. 7 Эксплуатация Cross-Site Scripting в тегах

Внедрение кода в параметр тега

Данная ситуация является одним из самых распространенных случаев XSS. Она возникает, когда уязвимый параметр к Cross-Site Scripting встречается в параметре тега:

<img… src=$XSS ….>

<font… size=$XSS ….>

< a… href=$ XSS ….>

и т.п.

Тестирование показало, что фильтр Internet Explorer прекрасно справляется с данным видом атак, включая все опробованные комбинации и кодировки.

Внедрение кода в HTML

Классическая ситуация, в которой внедрение происходит непосредственно в HTML, и для проведения атаки необходимо открыть тег. И в этом случае фильтр Internet Explorer показал себя с лучшей стороны, отфильтровав все опробованные комбинации и кодировки.

Использование расщепления HTTP-ответа

Для тех разработчиков Web-приложений, которые захотят отключить фильтр XSS на своих сайтах, в Internet Explorer подобная возможность предусмотрена путем установки HTTP-заголовка "X-XSS-Protection: 0" в возвращаемом Web-сервером ответе.

Однако это можно использовать для обхода фильтра XSS. Такая возможность возникает, когда приложение уязвимо для XSS и для уязвимости типа "Расщепление HTTP-ответа" (HTTP Response Splitting). Используя расщепление, злоумышленник может внедрить дополнительный HTTP-заголовок, который будет отключать фильтр XSS, и эксплуатировать уязвимость (см. рис. 8).

Рис. 8 Эксплуатация Cross-Site Scripting совместно с HTTP Response Splitting

Не смотря на то, что подобная ситуация встречается не часто, ее тоже необходимо учитывать. По статистике Web Application Security Consortsium, ручной анализ позволяет идентифицировать HTTP Response Splitting в 7,75% всех приложений.

Заключение

Исследование механизма противодействия атакам "Межсайтовое выполнение сценариев", встроенного в браузер Internet Explorer 8b2, показало, что подход защиты от Cross-Site Scripting на стороне клиента может быть достаточно эффективным в борьбе с отраженным вариантом XSS. К сожалению, решить проблему с сохраненным типом атаки лишь на стороне клиента в настоящее время не представляется возможным (отключение Javascript и прочих активных объектов - это не решение проблемы), поэтому это тема лежит за рамками поддерживаемого функционала XSS-фильтра в IE8. Кроме того, не поддерживается фильтрация некоторых DOM-based атак, которые весьма актуальны в современном мире AJAX и Web 2.0. Неплохим расширением функций фильтра была бы фильтрация атак типа HTTP Response Splitting, что позволило бы избежать некоторых методов обхода фильтра.

Сводная таблица возможностей Internet Explorer 8 в части фильтрации XSS приведена ниже.

Таблица 1. Фильтрация XSS в Internet Explorer 8 beta 2


Сохраненный вариант

Нет

DOM-Based

Частично

Отраженный вариант

В теге

Нет

В Javascript

Нет

В HTML

Да

В параметре тега

Да

Учитывая, что отраженный вариант Межсайтового выполнения сценариев является самым распространенным типом уязвимостей этого типа, возможности Internet Explorer позволяют значительно снизить количество успешных атак с использованием данного вектора.

Ссылки по теме


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 26.11.2008 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
VMware Workstation 14 Player for Linux and Windows, ESD
SAP Crystal Reports XI R2 Dev 2006 INTL WIN NUL License (Version 11)
Oracle Database Standard Edition 2 Processor License
GFI FaxMaker и 1 год поддержки (10-49 лицензий)
Kaspersky Endpoint Security для бизнеса – Стандартный Russian Edition. 10-14 Node 1 year Base License
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Безопасность компьютерных сетей и защита информации
OS Linux для начинающих. Новости + статьи + обзоры + ссылки
Один день системного администратора
Программирование на Visual С++
Все о PHP и даже больше
Windows и Office: новости и советы
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100