Контакты

Для связи с нами можно использовать:
irc://irc.chatnet.ru:#gfs
icq://546460
email://cobalt[@]gfs-team.ru

Все материалы предоставлены только с ознакомительной целью
ГлавнаяСтатьиПереводыВзлом приложений WEB 2.0 из Firefox
© перевод Cobalt 29.11.2007 статья не оптимизирована

Представляем вашему вниманию перевод статьи Shreeraj Shah "Взлом приложений WEB 2.0
из Firefox" Оригинал статьи на английском расположен тут

Введение

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

Эта статья рассматривает некоторе методы, уловки и инструменты предназначенные
для выявления потенциальных уязвимостей технологии Web 2.0 (в том числе и AJAX),
а также предназначенные для этой цели дополнения и плагины к Firefox. Ключевые
задачи этой статьи:

 * прикладная архитектура приложений web 2.0 и задачи по ее безопасности
 * Обнаружение скрытых вызывов и раскрытие логики AJAX
 * раскрытие XHR вызывов используюя утилиту Firebug
 * моделирование автоматических событий браузера плагином Chickenfoot 
 * отладка приложения с точки зрения безопасности используя Firebug debugger
 * методический подход к обнаружению уязвимостей
 
Краткий обзор технологии Web 2.0

Недавно упоминавшаяся технология Web 2.0 подразумевает собой следующее поколение 
сетевых приложений, которые логически эволюционировали с принятием новых 
технологических векторов. XML-ные сервисы запускаемые на SOAP, XML-RPC и REST. 
Новые приложения предлагают мощные интерфейсы конечного пользователя, использующие 
AJAX и другие компоненты (FLASH) интернет-приложений.

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

Новые черви, такие как Yamanner, Samy и Spaceflash, используют баги в 
"клиентской" части AJAX, предоставляющей новые пути для проведения атак и
угрозы конфеденциальности информации.

Рис 1, Архетектурные уровни Web 2.0
Как показано на Рис 1, процессы браузера с левой стороны, могут делиться на следующие уровни: * Слой представления - HTML/CSS обеспечивает полное отображение приложения в окне браузера * Логика и Процеыы - JavaScript, работающий в браузере отвечает за бизнеслогику и комуникации приложения. AJAX работает именно в этом уровне. * Транспортный уровень - XMLHttpRequest (XHR). Этот уровень предоставляет механизмы для асинхронной связи и обмена XML-данными между клиентом и HTTP- сервером Серверная часть (на Рис 1 справа) обычно находится за внутрекорпоративным фаерволом и может предоставлять на ряду с традиционными сетевыми прикладными ресурсами также и развертываемые сетевые сервисы. Ajax, выполняемый в браузере, может по средствам XML обмениваться данными с сервисыми на сервере без перезагрузки страницы. Весь этот обмен скрыт от пользователя, другими словами, пользователь никак не сможет принять участия в обмене данными между сервером и клиентом. Использование "Обновления" и "Перенаправления" - были краеугольным камнем в логике первого поколения веб приложений. В web 2.0, за счет применения AJAX, от них постарались уйти. Web 2.0 оценка вызывов В этой асинхронной технологии нет большого количества "Обновлений" и "Перенапра- влений". В результате, большинство интересных серверных ресурсов, которые мог бы использовать злоумышленник от него скрыто. Для понятия web 2.0 технологии с точки зрения безопасности, есть три важных проблемы: 1 Обнаружение скрытыч вызовов - Крайне важно, определить XHR-управляемые запросы, произведенные загруженой в браузере страницей. Они используют JavaScript через HTTP чтобы связаться с серверной частью. 2 Сканирование вызовов - Традиционные сканеры приложений, терпят неудачу по двум основным направлениям: вопервых, повторяя поведения браузера и вовторых, определяя ключевую серверную часть ресурсов в этом процессе. Если к ресурсу производиться доступ через XHR, то более чем вероятно, что сканирующее приложение не получает этих ресурсов совсем. 3 Логическое изучение - Web приложения сегодня используются совместно с JavaScript, и довольно трудно выявить логику для каждого конкретного случая. Каждая HTML страница может загружать три или четыре JavaScript ресурса с сервера. Каждый из этих файлов может состоять из большого объема функций, но далеко не все из них могут быть необходимы для выполнения конкретных действий Нам необходимо установить инструменты и методы для преодаления барьеров на пути оценки безопасности приложения. В контексте этой статьи мы будем использовать Firefox в качестве браузера и установим некоторые его плагины для преодаления вышеописанных проблем. Изучение скрытых вызывов Web 2.0 приложения могут загружать единственную страницу, но могут использовать XHR-вызовы для формирования еге окончательного вида. Эти вызовы могут асинхронно "вытаскивать" с сервера содержимое либо JavaScript. В таком случае, проблема - определить все вызовы XHR и все ресурсы передаваемые с сервера. Эта информация сможет помоч в идентификации всех возможных ресурсов и связанных с ними уязвимостей. Давайте начнем с простого примера. Предположим, что мы можем получить сегодняшние деловые новости посетив простой новостной портал, расположенный по адресу: http://example.com/news.aspx На рисунке ниже изображен скриншет этой страницы в браузере.
Рис 2, Простой новостной портал
Будучи web2.0 приложением, вызовы AJAX делаются к серверу используя объекты XHR. Мы можем определить эти вызовы используя инструмент известный как Firebug. Firebug является плагином для браузера Firefox и может выявить скрытые XHR вызовы. До просмотра страницы с плагином, убедитесь что опция отлова XHR установлена также как на рисунке ниже:
Рис 3, Установка опции отлова XHR
С выбранной опцией Firebug, разрешающей отлов XHR, мы просмотрим данную страницу, чтобы определить ресурсы которые вызываются с сервера. Этот процесс изображен на Рис 4:
Рис 4, Отловленные AJAX вызовы
Мы можем видеть несколько запросов сделанных браузером с использованием XHR. С помощью AJAX он загрузил последние новость. 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. Полученные данные он поместил в HTML код, туда, где находиться объект с id=result. Это естественно вызов AJAX с использованием XHR. Анализируя приложение с этой точки зрения мы можем выявить уязвимости внутренних URLов, стоковых запросов и POSTов. Например, в примере выше, параметр data уязвим к атаке типа SQL-injection Сканирование вызовов и моделирование поведения браузера Важный инструмент изучения, при проведении сетевого анализа безопасности - сетевой сканер. Сканер анализирует каждую страницу и собирает все HREF(ссылки). А что если эти ссылки содержатся в AJAX вызовах XHR? Сетевой сканер их может и пропустить. Во многих случаях это довольно большая проблема. Например здесь есть набор простых ссылок: <a href="#" onclick="getMe(); return false;">go1</a><br> <a href="/hi.html">go2</a><br> <a href="#" onclick="getMe(); return false;">go3</a><br> При щелчке на ссылку go1 выполниться функция getMe() (которая приведена ниже). Причем заметьте, что данная функция может находиться и совсем в другом файле. function getMe() { var http; http = new XMLHttpRequest(); http.open("GET", "hi.html", true); http.onreadystatechange = function() { if (http.readyState == 4) { var response = http.responseText; document.getElementById("result").innerHTML = response; } } http.send(null); } Этот код выполняет простой запрос к ресурсу hi.html на сервере. Возможно ли эмулировать это щелкание? Да! Вот один из подходов, основанный на использовании расширения Firefox под названием Chickenfoot которое расширяет програмный интерфейс браузера. Используя плагин Chickenfoot, вы можете написать простой JavaScript, чтобы автоматизировать поведение браузера. С этой методологией, такие простые задачи как например переход по веб-страницам могут быть с легкостью автоматизированы. Например, простой сценарий следования “щелкнет” все анкеры с onClick событиями. Преимущество этого расширения над традиционными сетевыми сканерами ясно: каждое из этих onClick событий выполняет внутренний XHR AJAX запрос, который возможно пропускается традиционным сканером, потому как сканр пробует собрать обычные ссылки но не может анализировать onClick поля. l=find("link") for(i=0;i<l.count;i++){ a = document.links[i]; test = a.onclick; if(!(test== null)){ var e = document.createEvent("MouseEvents"); e.initMouseEvent("click",true,true,document.defaultView,1,0,0,0, 0,false,false,false,false,0,null); a.dispatchEvent(e); } } Вы можете загрузить этот скрипт в Chickenfoot консоль и выполнить его как показано на Рис 5:
Рис 5, Эмуляция onClick AJAX вызовов с использованием Chickenfoot
Таким образом, возможно написав JavaScript изучить AJAX приложения из браузера. Есть несколько API вызовов которые могут использоваться в Chickenfoot плагине. Одна из полезных - команда "fetch" чтобы создать сканирующую утилиту. Изучение логики и разбор приложений Для того чтобы разобрать основанное на AJAX приложение, необходимо проследить за каждым событием очень тщательно, для того чтобы определить логику процесса. Первый путь определения логики - пройти по каждой строчке процесса. Зачастую, в каждом конкретном случае, процесс требует только несколько функций. Следовательно, необходимо использовать технологию позвалающую шагать только по нужному коду в браузере. Есть несколько довольно мощьных отладчиков для JavaScript, которые можно использовать для достижение вышеописанной задачи. Firebug - один из них. Другой - venkman. В нашем примере мы снова будем пользоваться Firebug. Давайте возмеме простой пример процесса логина. Страница login.html принемает от пользователя логин и пароль как показано на Рис 6. Используйте функцию "inspect" плагина Firebug чтобы определить свойства формы.
Рис 6, Изучение Firebug-ом свойств формы
После изучения свойст формы, становится ясно, что запрос делается через функцию "auth". Мы можем сейчас воспользоваться функцией отладчика Firebug-а для изучения логики событий.
Рис 7, Отладка при помощи Firebug
Мы можем видеть весь JavaScript выполняемый на этой странице. Запросы делаются к скриптам ajaxlib.js и validation.js. Эти два скрипта должны иметь несколько функций. Можно сделать вывод, что процесс логина использует некоторые из этих функций. Мы можем использовать "контрольную точку" для пошаговой отладки. Как только произойдет останов в контрольной точке, можно будет ввести тестовую информацию, щелкнуть кнопку "Submit" и наблюдать за процессом. В нашем примере мы установили контрольную точку в функции "auth" как показано на Рис 8:
Рис 8, Установка контрольной точки и наблюдения процесса исключений
Мы сейчас проводим пошаговую отладку, нажимая кнопку "step in", которая была выделена на Рис 8. Выполнение JavaScript переходит на другую функцию (userval) находящуюся в файле validation.js, как показано на Рис 9:
Рис 9, Переход на страницу скрипта validation.js
На предыдущем снимке экрана заметно, что для проверки имени пользователя используется регулярное выражение. Как только условие выполняется, процесс переходит к функции callGetMethod, как показано на Рис 10:
Рис 10, Вызов Ajax
И наконец, мы можем наблюдать вызов Ajax к внутрисерверным сервисам как изображено на Рис 11:
Рис 11, Вызов вебсервиса в Firebug консоли
Так мы определили расположение ресурса внутренних сервисов http://example.com/2/auth/ws/login.asmx/getSecurityToken? username=amish&password=amish По этой ссылке ясно, что она предоставляет некоторые данные через .NET framework. Такой процесс вскрытия выявил очень интересную деталь - проверку имени пользователя регулярным выражением, которое очень легко можно обойти. А это - угроза безопасности. Исходя из нашей оценки, мы можем сейчас получить доступ к webсервису и его конечным точкам, используя файл DWSDL и непосредственно брутфорс. Мы можем провести несколько нападений-иньекций - SQL или XPATH, используя такие инструменты как wsChess. В данном конкретном случае приложение уязвимо к инъекции XPATH. Методология оценки безопасности сетевых сервисов довольно многогранна, и не входит в рамки этой статьи. Однако она описывает методы, позволяющие выявить несколько типов нападения на стороне клиента, такие как XSS, манипулирование DOM, обход контроля безопасности на стороне клиента, злономеренного кода AJAX и так далее. Заключение Серверно-риентированная архитектура (SOA), AJAX, обогащенные интернет прило- жения (RIA) - критические компоненты вебтехнологий следующего поколения. Чтобы шагать в ногу со временем, и иемть высокотехнологичные и безопасные службы, необходимо проектировать и развивать различные методы и инструменты. Одна из эффективных методик оценки безопасности приложений совсем рядом - веб браузер. В этой статье мы рассмотрели три метода оценки безопасности Web 2.0 приложений. Используя эти методы можно выявить некоторые связанные с использованием AJAX уязвимости. Написание скриптов, эмулирующих работу браузера, может помоч нам сгенерировать сетевую активность и изучить ее. А это в свою очередь может помочь выявить и устранить угрозы сетевой безопасности. Приложения следующего поколения повсюду используют JavaScript. Инструменты для его отладки - наши рыцари в блестящей броне. Приведенные в этой статье методы - исходные пункты для изучения безопасности web 2.0 в браузере Firefox. Об Авторе Shreeraj Shah, BE, MSCS, MBA, - основатель Net Square. Также он проводит там консультации, подготовку кадров, исследования и разработку. Ранее он работал с Foundstone, Chase Manhattan Bank и IBM. Он также автор Hacking Web Services (Thomson) и соавтор Web Hacking: Attacks and Defense (Addison-Wesley). Кроме того, он опубликовал ряд рекомендаций, инструментов и докладов. Присутствовал на многочисленных конференциях, в том числе RSA, AUSCERT, InfosecWorld (Misti), HackInTheBox, Blackhat, OSCON, Bellua, Syscan, и т.п. Вы можете посетить его блог: http://shreeraj.blogspot.com/. © Shreeraj Shah 2006-10-11



© перевод Cobalt 29.11.2007 статья не оптимизирована

e-Commerce Partners Network
Ujin написал:

На самом деле всё верно, но не до конца.. Многие из этих атак невозможны, если программер позаботился о правильной работе бекенда (все проверки, которые есть на клиенте ДОЛЖНЫ дублироваться на беке)...
Спасибо за статью!

Ник:

Текст:
P Br B I Qute



Код: обновить
Последние комментарии
22.09.2017 18:36:49 Avito777jaf написал:
<b>Пополение баланса Авито (Avito) за 50%</b> | <b>Телеграмм @a1garant</b> <b>Здравствуйте,...
Новый релиз
22.09.2017 18:26:34 Avito777jaf написал:
<b>Пополение баланса Авито (Avito) за 50%</b> | <b>Телеграмм @a1garant</b> <b>Приветствую...
Сайт снова работает!
22.09.2017 18:12:48 Avito777jaf написал:
<b>Пополение баланса Авито (Avito) за 50%</b> | <b>Телеграмм @a1garant</b> <b>Приветствую...
Новая статья
Реклама

Тут должна была быть ваша реклама, но мы потеряли глиняную табличку с ее текстом. SapeId: 665044

Rambler's Top100