AJAX и интерактивные веб-сервисы являются основой web 2.0 приложений. Новые технологии ставят и новые задачи по обеспечению безопасности. В этой статье мы рассмотрим некоторые методы, инструменты и приемы анализа web 2.0 приложений и обнаружения уязвимостей при помощи браузера Firefox и его плагинов.
Обзор работы web 2.0
Термин web 2.0 применяют к web-приложениям нового поколения, появившимся по мере развития технологий. Новые приложения предлагают мощный пользовательский интерфейс, основанный на Ajax и Flash. Технологический рывок целиком повлиял на архитектуру приложений и коммуникации между клиентом и сервером. В то же время он открыл новые направления обеспечения безопасности и защиты приложений.
Новые черви типа Yamanner, Samy и Spaceflash эксплуатируют клиентские Ajax структуры, открывая новые возможности для взлома и похищения клиентской информации.
Как показано на рисунке, действия браузера на клиентской стороне можно разделить на следующие слои:
- Presentation layer - HTML и CSS обеспечивают отображение информации в окне браузера.
- Logic & Process - JavaScript в браузере позволяет приложениям исполнять заданную логику.
- Transport - XMLHttpRequest (XHR). Этот уровень обеспечивает асинхронную связь и механизм XML обмена между клиентом и сервером по HTTP(S).
Серверные компоненты справа обычно располагаются за файрволом и могут включать развернутые web-сервисы и традиционные web-приложения. Ajax ресурсы в броузере клиента могут напрямую обращаться к основанным на XML web-сервисам и обмениваться с ними информации без обновления страницы. Этот обмен скрыт от конечного пользователя, другими словами он не чувствует никаких переходов или обновлений. Использование обновлений и переходов было основой логики первого поколения приложений. В web 2.0 они по большей части устранены внедрением Ajax.
Оценка Web 2.0
В асинхронной структуре, приложениям не требуется много обновлений или переходов между страницами. Как результат, многие интересные серверные ресурсы, которые можно взломать, скрыты от глаз. Ниже три главные задачи которые стоят перед хакером при понимании web 2.0 приложений:
- Обнаружение скрытых вызовов. Одна из главных задач это понимание XHR вызовов, которые делает загруженная в браузере страница. Она использует JavaScript over HTTP(S) для осуществления этих запросов к своему рабочему серверу.
- Проблемы обзора всех ресурсов (Crawling challenges). Традиционные пауки лажаются в двух вещах: воспроизведении поведения броузера и определении ключевых серверных ресурсов в процессе. Если доступ к ресурсам происходит через XHR объект при помощи JavaScript-а, вполне вероятно нормальные краулеры не смогут справиться с обоими задачами.
- Определение логики. В настоящее время web-приложения используют JavaScript-ы и трудно отделить логику приложения от обработки событий. Каждая страница может загружать три или четыре файла со скриптами с сервера. Каждый из файлов может иметь множество функций, однако лишь малая часть из них может использоваться для реализации логики.
Нам надо исследовать и определить методологию и инструменты для преодоления этих препятствий в процессе исследования web-приложений. В данной статье мы используем Firefox в качестве браузера и ряд его плагинов для работы с задачами.
Обнаружение скрытых вызовов
Web 2.0 приложения могут загружать одну страницу сервера, но делать несколько XHR вызовов при создании полноценной страницы. Эти вызовы могут тянуть контент или скрипты с сервера асинхронно. В нашем сценарии задача состоит в том, что бы определить все XHR вызовы и ресурсы, запрашиваемые с сервера. Эта информация поможет определить возможные уязвимости. Давайте же начнем с простого примера.
Представим, что мы хотим прочитать сегодняшние новости посетив простой сайт, располагающийся по адресу:
http://example.com/news.aspx
В браузере она выглядит так:
Запросы страницы мы может определить при помощи утилиты Firebug, плагина для Firefox, способного определять вызовы XHR объектов.
Перед открытием страницы , убедимся, что перехват этих запросов включен:
Включив в Firebug опцию перехвата XMLHttpRequest запросов, мы снова обращаемся к той же странице для определения всех обращений страницы к серверу.
Можно увидеть несколько запросов браузера при помощи XHR. Он загрузил dojo AJAX framework с сервера и в то же время обратился к серверу для получения новостной статьи:
http://example.com/ getnews.aspx?date=09262006
Если внимательно посмотреть на код, то можно увидеть следующую функцию в JavaScript-е:
function getNews()
{
var http;
http = new XMLHttpRequest();
http.open("GET", " getnews.aspx?date=09262006", true);
http.onreadystatechange = function()
{
if (http.readyState == 4) {
var response = http.responseText;
document.getElementById('result').innerHTML = response;
}
}
http.send(null);
}
Вышеописанный код делает асинхронное обращение к бекэнд серверу с запросом ресурса getnews.aspx?date=09262006. Содержание этой страницы помещается в элемент с id = 'result' на странице клиента. Это самый типичный Ajax запрос с использованием XHR объекта.
Анализируя это приложение мы можем определить уязвимый внутренний URL, запрос и сконструировать свой POST запрос уже с нужными нам параметрами. Например, в приведенном примере параметр date может быть уязвим к SQL-инъекции.
(Продолжение следует)