UNИX, осень 2009, 01 семинар (от 04 сентября)

Материал из eSyr's wiki.

Перейти к: навигация, поиск

[править] Зловредное применение JavaScript

Сначала лектор поговорит про базовые понятия вообще, потом про нечто более интересное.

JS --- язык, который, наверное, является самой расп. платформой длявыполнения кода в интернете. ОН присутствует в подавл количестве браузеров. Его двоюродный брат, AS, существует в Flash, поэтому можно сказать, что практ. любой польз. итнернета так или иначе с ним сталкивается.

В связи с тем, что вып. происх. локально, а создаётся он в общю случае над другой системой, при создании языка задумывались о безопасности. Думали не особо много, поск. во времена созд. языка была популярна Java, которая исп. механизм Same Orgigin Policy. Нельзя сказать ...

Same origin policy говорит, что браузер может взаимод. только с теми объектами, которые имеют то же происхождение. Например, есть некая страница, и по отн. к этой странице same origin является другой файл, нах. в том же каталоге, другом каталоге, но не явл. файл, доступный по другому протоколу, файл, расп. по другому порту, файл, расп. в другом поддомене. В принципЕ, из этого правила сущ. исключение, скрипт может установить домен, где можно усечь слева любое коилчество слов в url

...

DOM

...

Проблемы js

Xnj vj;yj cltkfnm? tckb gjzdbkcz ytrbq оы d yfitv ,hfeptht& Лектор перечислит несколько фироко распространнённых, чатсо описываемых разными всякими журналистами или т. н. security sxpert'ами, часто освкш. в пресс-релизах.

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

Второе — определение ip. Что мы в этой ситуации можем сделать? В орг. польз., когда ходят в интрнет, обычно ходят через прокси, либо они находятся за натом. В любом случае, внеш. сервер не подозревает о том, какой польз. имеет ip-адрес. Для домашних польз. это тоже примерно так. Есть неск. способов узнать, один из них — исп. возм. js обр. к методам java. Делаем socket, делаем open, делаем getLocalAddress. После того, как этот кусок java отработал, мы можем вернуть в браузер локальный ip. Что можно сделать? Наприаер, шокировать пользователя. Что ещё страшного?

Да, можно запустить java-апплет, и тут уже могут быть варианты. Если не подписан, то действует одно полиси, если подписан, то другое. Проблема в обоих случаях в том, что вопросы обычно польз. не читают.

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

Что можно сделать, если есть ip? Можно сделать сканирование. Как мы знаем, есть same origin policy, не имеет доступ к данным в другом домене. Но запрос отправить мы можем. Например, можно написать <img src="http://192.168.1.1:25/image.gif"> Если порт закрыт, то connection denied. Что происходит в js? Срабатывает excception, и если он сработал в течение первых трёх секунд, то порт наверное закрыт. Если же он открыт, то там бы сказался HELO, ему бы сказался GET, в ответ на что сказался бы "чо", в ответ на что бравзер сказал бы "чо"? И сработал бы экскепшн, но другой, и мы бы узнали, что порт открыт. Ничто не мешает то же сделать с другими хоставми и портами.

Хорошо, но мало. Что ещё можно сделать? Как мы знаем, некоторые web-серверы имеют предопр. набор опр. url. В апаче, например, есть предопр. набор иконок, если включен autoindex. Если мы обнаружим 80 порт, то туда можно сказать <img> с именем того изобр. И если exception не случилось, то мы знаем, что там апач. Если случился 404, то, наверное не апач, и так далее. Таким обр., можно отфингерпринтить тип web-сервера. Можно ещё попытаться просканировать нкотрые url, заведомо известные, например, /admin/, /forum/phpbb, ... Как следствие, можно узнать, что где-то находится админка или phpbb, и всё это из бравзера. Для предопр. набора сервисов, можно ещё отфингерпринтить приложение и, иногда, платформу. Можно определить, какой тип раутера находится на границе, если включён веб-интерфейс, например. С другой стороны, если исп. http auth, то появится довлоьно неожиданное окно от локального адреса.

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

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

Пример csrf: зазодит человек на одноклассникиюру, авторизуется, получает куку, потом приходит на посторонний сайт, где прописан <img src="odnoklassniki.ru/send?to=...">, соответственно, будет сделан get-запрос, и со стороны сервера это будет выглядить как выполнение формы отправления. Сайты можно узнать через упомянуты ранее CSS hack.

Почему это происх? Сайт доверяет браузеру. Он считает, что если от польз. пришёл запрос, то он наверное залогинен на сайте. Вторая проблема в том, что пространство кук глобально.

Сейчас лектор расскажет две истории, потому, что эти истории и так все знают, и альфастрахование лектора не засудит.

В один прекрасный день какая-то девочка послала своим подружкам сообщение "если кликнуть три раза по телефону, потому .., то увидишь пасхалку". Что делает этот мальчик: он открывает весь контактлист и рассылает всем... В тот день зашли на сайт в 10 раз больше человек (50к против 5к).

Чуть ниже ролика есть некая js-конструкцияч, которая непонятно, как там появилась. Есть версия, что pr-агенство решило применить вирусный маркетинг и таким обр. поднять популярность. Проблема в том, что компьютер дизайнера был, вероятно, затроянен, и троян успешно спёр все пароли. после того, как ролик выложили, люди, которые утащили, после этого добавили этот скрипт.

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

Зачем это обычно нужно? Ситуацию с альфабанком разбирать не будем, посм. аналогичный случай: в securityblogru появился человек с такой же проблемой.

  • Оказалось, что там был запакованный шифрованный (в качестве ключа исп. )


Что можно делать?

Вездесущий google ходит ботами и узнаёт, нет ли там js, которые перенапр. на зловредные сайты? Понятие зловредности у гугла специфическое, но, поскольку он видит весь интернет, то обычно это дост. адекватно. Фуррифокс, хром и сафари обычно перед заходом на сайт заходят к гуглу и узнают, зловредный ли сайт. У ie тоже есть аналогичное, и по версии мс, оно лучше в n раз. Можно надеяться, что постепенно торговля

Как это отлаживать? На самом деле, особо инструментов и нет, есть malzilla (malzilla.sf.net), которая немного перегружена и нечего особо не умеет. Если руками, то можно использовать или дебаггер, или что-то вроде jshell.com, но при этом надо быть осторожным, чтобы не провалиться на зловреджный сайт и не огрести по полной программе.

Антивирусные компании что-то разрабатывают, но лектор ничего не видел.

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

  • Давайте заметим, что когда мы интерп. js в браузере, у нас всегда есть DOM. Через него можно обр. к функциям html-документа. Если мы в отладчике, то dom обычно нет, и на основании этого можно не работать: не линковаться, завязаться на опр. объекты на странице
  • Использование особенностей js-интерпретаторов, которые в браузерах есть. Самая популярная — условная компиляция в ie. Она позв. созд. некий эквивалент директив препроцессора, но для js. Понятно, что в браузере

Как выглдядит бравзер вирусного аналитика? ...

Когда мы говорим про зловредный/незловредный код, то есть такой подход, когда люди предпочитают сделать всё совсем примитивно, есть iframe и всё, а вся остальная логика хостится у service provider'а, откуда уже может грузиться разное. Логика может быть перенесена на сервер. И если этот хостинг находится где-то там, то ничего с этим поделать нельзя, и нужно принять это как данность. Никаких дополн. умозаключений по этому поводу сделать нельзя.

Вопросы, комментарии.


UNИX, осень 2009


00 01 02 03 04 05 06 07 08 09 10 11


Календарь

Сентябрь
23 30
Октябрь
07 14 21 28
Ноябрь
11 18 25
Декабрь
02 09 16


Эта статья является конспектом лекции.
Личные инструменты
Разделы