Статьи ⇒ AJAX ⇒ Проблемы безопасности в AJAX

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

Опубликовано: 6 апр 2011 в 10:23
Автор: Shreeraj Shah  Перевод: freeeeez 

Одним из центральных компонентов Web 2.0 приложений является AJAX (Asynchronous JavaScript and XML), в основе которого лежит JavaScripts. Появление этой технологии превратило Web в суперплатформу. И не удивительно, что эти преобразования также породили новое поколение червей и вирусов, таких как Yamanner, Samy и Spaceflash. К тому же, за последние несколько месяцев порталы, такие как Google, Netflix, Yahoo и MySpace, стали свидетелями новых уязвимостей, которые могут использоваться злоумышленниками для выполнения фишинга, XSS- и CSRF-атак.

С появлением этой технологии значительно изменился подход к разработке веб-приложений. Раньше сериализация объектов и данных была довольно трудной задачей, когда использовались DCOM или CORBA. Теперь же, с помощью AJAX можно использовать XML, HTML, JSON, JS-объекты, используя простые GET, POST или SOAP запросы. Такая интеграция привела к относительно прозрачному обмену данными между сервером и браузером. Давайте рассмотрим ключевые проблемы безопасности Web 2.0 приложений.

1. Множество конечных точек и скрытых вызовов

Основным различием между Web 2.0 и Web 1.0 приложениями является механизм доступа к информации. Web 2.0 приложения имеют несколько точек вызовов AJAX по сравнению с его предшественником Web 1.0. Вызовы AJAX разбросаны по всей странице и могут быть вызваны пользователем. Конечно, это не уязвимость, но при такой структуре легко запутаться при разработке приложения, а это и приводит к появлению уязвимостей.

2. Путаница с проверкой

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

3. Ненадежные источники информации

Web 2.0 приложения используют информацию из различных ненадежных источников, таких как блоги, результаты поиска и т.п. Эта информация не проходит проверку до того, как дойдет до браузера, что может привести к XSS эксплуатации. Кроме того, можно загрузить JavaScript в браузер, заставляя использовать междоменные соединения. Это может привести к печальным последствиям.

4. Сериализации данных

Если JS-объекты, каналы, XML-файлы, HTML или JSON будут перехвачены и изменены, то злоумышленник сможет манипулировать браузером, заставляя его выполнять вредоносные сценарии. Сериализации данных с ненадежной информацией может оказаться губительной для безопасности конечных пользователей.

5. Динамическое построение и исполнение скриптов

AJAX открывает канал, получает информацию от сервера и передает его в DOM. Для этого одним из требований является динамическое выполнение сценариев JavaScript для обновления состояния DOM. Это достигается путем вызова настроенных функций. Как следствие этого, количество непроверенного контента или небезопасных вызовов будет варьироваться от сессии к сессии.

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

Основные дыры в безопасности AJAX

  • Неправильная сериализация объектов
  • Инъекция в JSON
  • Отправление JS-массива
  • Инъекция скрипта в DOM
  • Бомбы в один клик

Неправильная сериализация объектов

JavaScript поддерживает методы Объектно-Ориентированного Программирования (ООП). Это позволяет использовать как различные встроенные объекты, так и создавать свои новые. Новый объект можно создать с помощью new object() или с помощью простого кода, как показано ниже:
message = {

from : "john@example.com",

to : "jerry@victim.com",

subject : "Я в порядке",

body : "Здесь длинное сообщение",

showsubject : function(){document.write(this.subject)}

};
Вот простой объект сообщения, необходимый для отправки электронной почты. Вы можете обработать его как переменную или заключить в eval(). Однако, если злоумышленник введет в поле subject на исполняемый скрипт, получатель станет жертвой XSS-атаки. JS-объект может быть как данными, так и методами. Неправильная сериализация объектов может открыть дыру в безопасности, которой могут воспользоваться хитрые хакеры, для инъекции кода.

Инъекция в JSON

JavaScript Object Notation (JSON) является легким и эффективным методом обмена данными, который может содержать объект, массив, хеш-таблицы, вектора и список структуры данных. JSON используется с JavaScript, Python, C, C++, C# и Perl языками. Сериализация JSON является очень эффективным механизмом обмена в Web 2.0 приложениях. Разработчики часто используют JSON для передачи информации в DOM. Вот простой пример JSON-объекта "закладок":
{"bookmarks":[{"Link":"www.example.com","Desc":"Интересная ссылка"}]}
Здесь можно внедрить вредоносный сценарий в качестве ссылки (Link) или ее описания (Decs). Если инъекция вводится в DOM и исполняется, то это попадает под категорию XSS-атаки.

Отправление JS-массива

JS-массив еще один популярный объект для сериализации. Это кроссплатформенный и эффективный межъязыковой фреймворк. Отправление JS-массива достигается в контексте DOM.

Поговорим об использовании JS-массива для XSS-атаки. Вот пример:
new Array(“Ноутбук”, “Acer”, “500$”, “Хорошее состояние, пользовался 2 года”)
Этот массив передается на доску объявлений для подержанных ноутбуков. Если массив недостаточно обрабатывается на стороне сервера, хакер может внедрить скрипт в последнее поле. Эта инъекция может поставить под угрозу безопасность клиентов и может быть использована для атаки на сервер.

Инъекция скрипта в DOM


После того, как браузер получает сериализованный объект, ставится задача по доступу к DOM. Цель состоит в том, чтобы изменить содержание DOM на новое. Для этого можно использовать eval() или document.write(). Однако, если вызовы совершаются от необработанных источников, браузер может быть уязвим к манипуляциям в DOM.

Например, рассмотрим этот JavaScript код:
document.write(product-review)
Product-review является внешней переменной, и если она содержит JavaScript, то он будет выполнен в браузере.

Бомбы в один клик

Очередность событий Web 2.0 приложений не может быть нарушена, но это можно сделать используя инъекцию события. Используя вредоносную ссылку с событием OnClick, можно поставить браузеру бомбу замедленного действия. Она будет активирована несчастным пользователем по первому клику. Это может привести к угону сессии через вредоносный скрипт. И снова эта уязвимость появляется при обработке информации из ненадежных источников без проверки.

Меры противодействия

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

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

Заключение

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

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

P.S. Подробнее о уязвимостях AJAX приложений и их устранении читайте в книге AJAX SECURITY.

прогноз погоды Санкт-Петербург
Источник: Help Net Security внешняя ссылка
2 комментария
5 671 просмотр


#1 Zak, 13 май 2011 в 10:44
Отвратительная статья, ничего интересного по делу в ней не говорится, только общие слова.
#2 freeeeez, 13 май 2011 в 10:49
Да. Вы правы.

Оставить комментарий:

Имя:
Email:
Сайт:
Комментарий:

Допустимые теги: <em> • <strong> • <u> • <sub> • <sup> • <blockquote>

Проверочный код:

Введите проверочный код, для подтверждения, что вы не робот.
P.S. Если вы робот, то, к сожалению, вы
не сможете прочитать символы с картинки.