включить редактирование

Собираем информацию, используя javascript hijacking

Создан:

 Веб-технологии растут и развиваются. Вот и сегодня мы познакомимся еще с одной техникой, которая позволит нам «ломать» что-то. Конечно, она боро­дата, с длиной бороды лет на пять, но это не мешает нам эксплуатировать ее и сейчас, даже против крупных ресурсов. К тому же в ней есть интересней­шая техническая специфика.
 Давай вспомним с тобой такую основополагающую вещь в веб-безопасности, как Same Origin Policy (SOP). В очень упрощенном виде: исполь­зуя JavaScript (и аналогичные технологии), мы можем взаимодействовать толь­ко с сайтом, на котором он загружен, и не можем взаимодействовать с другими сайтами. Например, если мы зайдем на www.mail.ru, JS, загруженный на нем, сможет отправлять запросы Ha www.mail.ru и получать на них ответы, но не смо­жет с files.mail.ru. Под сайтом в данном случае подразумевается связка: схема (HTTP, HTTPS), имя домена (точное совпадение) и порт (см. рис. 1).
 Здесь стоит отметить, что это ограничения именно для JS, а не для «HTML'a» (если можно так не очень корректно выразиться). То есть ресурсы сайта, как, например, картинки, файлы стилей или те же файлы с JavaScript'oM, могут быть расположены на других сайтах, и они будут об­работаны/отображены браузером вне SOP. Типа <img src="anyhost.com/xxx. jpg"> отобразит картинку.
Вообще, есть различные методы «легального обхода» SOP, поскольку круп­ные интернет-порталы из-за него испытывают проблемы. Ведь для SOP разде­ление идет в основном по имени, и ему по барабану, что множество различных доменов и поддоменов одного интернет-портала для последнего являются «доверенной средой». Хотя здесь стоит сказать, что с появлением HTML5 и но­вых технологий вообще появляется возможность контролировать поведение SOP с серверной стороны. Например, технология CORS (Cross-Origin Resource Sharing). Но раньше приходилось именно придумывать хаки для обхода SOP.
 А зачем это вообще нужно? Небольшой пример. У нас есть caйт www.mail. ru и есть files.mail.ru, и с обоих мы в JS хотим знать имя пользователя, что­бы персонализировать отображение (web 2.0 и все такое). Чтобы не плодить одинаковый функционал на различных доменах, одним из решений может быть размещение на специальном поддомене (swa.mail.ru) скрипта, который бы возвращал нам это значение.
Но, повторюсь, до HTML5 в JS мы не могли получать данные с дру­гих доменов. XMLHttpRequest раньше разрешен был только в рамках SOP. И как тогда?
 Один из хаков для обхода SOP — JS Function Callback. Хотя коллбэки здесь несколько косвенно завязаны, но все же... Итак, как же действует этот способ.
Все, что требуется для решения описанной задачи с использованием коллбэков, — это разместить на swa.mail.ru скрипт (user.php), который бы генерил JavaScript с необходимыми данными, то есть с именем пользователя. Итог работы выглядит примерно так:

UserNameFuncCB ([	

                  [ 'FIO'. 'Vasya Vasin' ].	
                  [ 'Username', 'vasya@mail.ru' ],
]);

Но как это нам поможет? Очень просто. Теперь мы можем кросс-доменно подключить этот JavaScript в любую страницу на любом другом домене (file. mail.ru, www.mail.ru):

[script]
    function UserNameFuncCB(x) { alert(x); }
[/script]
[script src="http://swa.mail.ru/user.php"][/script]

Здесь во второй строке мы объявляем функцию UserNameFuncCB на своей странице, и она будет работать в рамках нашего домена. Далее, в четвертой строке, мы подгружаем JavaScript со стороннего узла. Это, считай, HTML, SOP нас здесь не ограничивает. Под-грузившись, данный скрипт просто вызывает функцию, определенную нами. Причем с параметрами, которые мы хотели получить, — имя пользователя и так далее (которые появляются здесь динамически). Таким об­разом, мы в нашей функции получаем данные с другого домена. SOP обойден. Надеюсь, идея понятна.

Сравниваем url

Хорошо. Это — махинации, которыми пользуется разработчик. Но, я думаю, ты уже понял, что этот же прием можно использовать в хакерских целях. Все, что требуется, — это разместить такую страничку с подгрузкой JS у себя на сайте, а после — заманивать к себе пользователей. Итог — ты «знаешь» всех, кто заходил к тебе. Также стоит отметить, что основной вектор атаки — это увод инфы пользователя. В самом удачном случае это будет что-то конфиденциальное. Или лучше — Anti-CSRF-токен. И тогда с использованием токена станет возможным выполнить какой-нибудь за­прос от пользователя.
Получаем необходимую информацию
Так. Теперь немного о распространенности баги. Несмотря на развитие новых технологий, не так давно такие баги были найдены в ряде распростра­ненных веб-приложений, а также в порталах Яндекса и на мэйл .ру. В послед­них двух можно было как раз получать данные об аккаунте пользователя, за­шедшего к нам страницу. Выше я не зря упомянул поддомены mail.ru. На них как раз и используется данный трик. Только возвращаются там кое-какие другие данные и вызывать надо другой URL. В общем-то, из рисунка 2 можно почерпнуть всю необходимую инфу, если захочешь повторить.
По поводу мэйл.ру здесь только одна важная заметка. Они пофиксили слив инфы через хайджекинг, так как теперь (после исправлений) проверя­ют поле Referrer HTTP-запроса. Чтобы вернулся JS-код, значение в Referrer должно быть *.mail.ru, *.odnoklassniki.ru. А достичь этого, подгружая JS-скрипт со стороннего домена (evil.com, например), не получится, так как там будет зиять именно evil.com.
Фикс, как мне кажется, не самый удачный (надеюсь, что в будем будет найдено лучшее решение). Дело в том, что фильтровать по Referrer — это, как говорится, bad practice. Особенно для столь больших порталов. Ведь есть методы для обхода Referrer. Но это уже отдельная тема для разговора.

Автор: join Просмотров: 2542


Рейтинг статьи: 0

Общий рейтинг по отношению ко всем статьям автора :
{0 [0]}[max] [ - - - - - - - - - - ]

Общий рейтинг из всех статей на сайте :
{0 [888]} [ - - - - - - - - - - ]

[?]
комментариев к данной статье нет

Добавить комментарий к статье


Ctrl+Enter

Для активации кнопки, введите символы, которые Вы видите на картинки.

новая

тема

Заметки на тему IT

Монитор поиска
[x]
Новое сообщение

Сообщения в чате

Вы спрашиваете у гостей/у зарегистрированных/ У Вас спрашивают
всем Ctrl+Enter
зарегистрированным Ctrl+Enter
Ctrl+Enter

Краткая инструкция по работе с чатом

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