Конференция BLACK HAT USA. Ботнет из миллиона браузеров. Часть 1

Мэтт Йохансон: сейчас я покажу, как вводить этот код. Существует множество рекламных сетей, но мы выбрали эту, потому что она позволяет нам делать то, что мы хотим.



Вы можете выбрать изображение баннера достаточно большого размера, вставить его сюда и присвоить ему URL, так, чтобы после нажатия на баннер пользователь переходил на нужный сайт. Владельцы этой рекламной сети предоставляют опцию HTML JavaScript, это звучит очень хорошо.
Мы начали с того, что показано в верхней части слайда и должны были пойти через весь процесс утверждения, что было, наверное, самое сложное в нашем исследовании. Это произошло не по тем причинам, о которых вы подумали, а потому, что они не очень хорошо представляют значение JavaScript и особо об этом не заботятся. На самом деле они заботились о том, чтобы объявление выглядело красиво и работало как реклама, так что я не мог продолжать идти нашим невидимым путём и просто разметить где-то на заднем плане наш мистический код JavaScript.

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



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

Итак, мы разместили код прямо в рекламном баннере, вписав туда только скрипт источника, где находился наш файл, который мы могли менять в любое время без всякого утверждения со стороны владельцев рекламной сети. Таким образом, даже если бы они каким-то образом наняли людей, разбирающихся в статическом анализе кода JavaScript, мы могли бы просто изменить наш файл на вполне доброкачественный JavaScript. Так что обнаружить наши махинации при таком способе внедрения вредоносного кода было бы очень сложно.

На следующем слайде показан наш рекламный баннер.



Они одобрили один из этих вариантов дизайна. Мне лень было искать другие изображения, поэтому я просто взял эту идею с корпоративного сайта WhiteHat. Текст очень простой: «Получите бесплатный 30-тидневный пробный период, требуйте уже сейчас!», так что кликайте на баннер, это совершенно бесплатно!

Джереми Гроссман: внутри кода баннера находился скриптовый тег месторасположения нашего файла campaign.js по адресу: ec2-23-20-141-160.compute-1.amazonaws.com/campaign.js, выглядевший таким образом:

for (var i = 0; i < 10000; i++) {
var img = new Image();
var url = 'http://<amazon_aws>/iclick/id?' + i;
img.src = url;
}

Мы могли изменять его как угодно и когда угодно без всякого утверждения. Мы не знали, как долго эти браузеры должны были просматривать наши объявления в этой конкретной рекламной сети, так что вместо 100, 200 или 300 просмотров мы сразу остановились на 10000, надеясь на лучшее.
Мэтт Йохансон: начав с малого, мы хотели посмотреть, сможем ли мы заставить пользователей связаться с нами. Мы могли видеть это на своём конце сети, мы видели всех людей, которые прошлись по нашей ссылке, потому что запросы исходили из их браузеров и мы могли определить их IP-адреса. Сначала мы хотели посмотреть, как мы развернули эту вещь и как работает код, потому что это был не тот сервис, где вы платите за клики, мы платили за гарантированное время просмотров.

Джереми Гроссман: вот ещё один скриншот, это «лёгкая» демонстрация, которую мы подготовили специально для BlackHat.



Внизу слева вы видите сервер Amazon AWS, который продолжает работать прямо сейчас. Внизу показана начальная метрика: время работы сервера в рекламной сети Мэтта, — 8 минут, общее количество доступов – 4130, это не количество уникальных посетителей сайта, а актуальные веб-запросы с общим объёмом трафика 1,9 МБ, число одновременных запросов – 5. Мы видим протокол регистрации метрик, логи веб-сервера, а также количество минут реального времени посещений сайта, которое мы оплатили.

Мэтт Йохансон: если посмотреть на следующий слайд, то можно заметить скачок, который произошёл между 8 и 10 минутами — общее количество доступов увеличилось до 15 тысяч.



Всё это может сделать только 1 объявление, размещённое в рекламной сети. Если вы можете просто добавить больше средств в рекламную сеть, это будет выглядеть как «пик в долине». Я хочу сказать, что это всё это стало возможно благодаря купленным минутам браузера, и в течении 10 минут работы сервера с рекламной сетью мы получили около 15 тысяч запросов.

Затем мы заметили интересную вещь. Напомню, что у нас была не традиционная рекламная сеть, мы заплатили за минуты браузера, то есть кто-то предоставлял нам свой браузер, чтобы он стал частью этой магической сети, фактически продавал нам время своего браузера и время своего процессора. Мы решили посмотреть, что происходит на заднем плане этой сети, какие браузеры там используются, мы хотели немного «поиграть» с Firefox и тому подобное.

И тут мы обнаружили, что в нашу сеть поступает целая куча вызовов от PhantomJS. Кто из присутствующих знаком с PhantomJS? Я вижу, всего несколько человек.



PhantomJS – это «безголовый» браузер, то есть браузер, который можно запускать на устройствах без экрана, таких, как сервер. То есть это не кто-то сидящий в интернете и щелкающий по вкладкам браузера на своём рабочем столе, а робот. Его можно использовать для модульных тестов и он запускается из командной строки. То есть кто-то вёл свою игру в нашей системе, пытаясь получить минуты. Так что другие люди злоупотребляют этим различными способами, и нам забавно было за этим наблюдать. Мы убедились, что минуты представляют не реальные люди, кликающие по своему браузеру, а боты PhantomJS.

Джереми Гроссман: следующие слайды показывают динамику развития процесса: за 15 минут мы получили 28 000 запросов, за 20 минут почти 44 000 запросов, за 22 минуты число запросов достигло 61500.

Мэтт Йохансон: вы можете заметить, что общий трафик очень маленький, мы просто посылаем им URL-адрес, которого не существует, так что 8,5 МБ за 20 минут означают, что пользователи просто получали ошибку 404.

Джереми Гроссман: почти 26 минут, и мы получаем 82 тысячи просмотров, далее 35 минут, 9 одновременных запросов и почти 102 тысячи доступов.

Мэтт Йохансон: мы приберегли свои деньги до конца, чтобы совершить решающий удар нашими «впечатлениями», которые обошлись почти в $20, после того, как рекламная сеть проработает от 30 до 45 минут в обычном режиме. Собственно, я намеревался тратить максимум $10 в день на это исследование. Итак, через 43 минуты у нас было 255 запросов, 133,5 тысячи доступов, а пика посещаемости наша сеть достигла через 54 минуты – 256 запросов и 244425 посещений.



Посмотрите на одновременные запросы, на которые мы нацелены – 255, сервер Apache не будет работать быстрее, далее на скриншотах видно, что сервер не хочет перезагружаться, чтобы обновить данные метрики. После того, как число обращений достигло 130 тысяч, а трафик составил 36 МБ, мы решили несколько увеличить пропускную способность сервера и указали им на загрузку приложения «Aplication Security Specialist (ASS)», так что теперь у нас появилось ещё больше сертифицированных «задниц» в области безопасности. После этого объём трафика резко увеличился до 117 МБ. Через 55 минут у нас было 256 тысяч посещений с трафиком 253 МБ.

Джереми Гроссман: наконец, спустя 59 минут 48 секунд, то есть спустя час после начала работы сервера и через 20 минут после загрузки изображения количество трафика достигло 1 ГБ. После этого мы решили просто оставить это на некоторое время, например, на семь часов, пусть работает.

На следующем слайде вы видите результат работы нашей системы через 8 часов: более 4 миллионов посещений, 114,7 ГБ трафика.



Мэтт Йохансон: мы совершили ту же ошибку, что и в первый раз мы — мы пошли на обед. Так что прежде чем мы начали играть в рекламную сеть, вы знаете, у нас было, например 30 000 просмотров за кучу часов, и мы все еще возились с нашим кодом, так что мы думали, что получим за время обеда ещё тысяч десять просмотров. Когда мы вернулись, то посмотрели, ага, нормально, чуть больше 30 тысяч, но потом спохватились – не 30 тысяч, а на порядок больше – 300 000 просмотров!

Если бы потратили больше денег, то получили бы намного больше «впечатлений» намного быстрее, но в нашем случае через 18 часов 42 минуты работы сервера у нас был почти миллион просмотров и 240 ГБ трафика, так что хостинг Amazon обошёлся нам дороже, чем взлом рекламной сети.

Джереми Гроссман: наконец, через 1 день и 6 часов при трафике 241 ГБ у нас было почти полтора миллиона просмотров. Как видно из этого слайда, на то время мы израсходовали почти все наши минуты в системе, и решили, что нам не нужно больше минут. Однако мы не знали, как там пойдёт дело дальше и что будет происходить в середине ночи, поэтому занялись электронной коммерцией ради BlackHat и купили ещё минуты.



Мэтт Йохансон: вам я этого не рекомендую, потому что мне пришлось нарушить свое правило не тратить больше $10 в день.



Джереми Гроссман: теперь у нас было почти 250 ГБ трафика. Вы видите быстро бегущие на экране строки, это логи Apache – сервера, дальше вы видите скриншот «Эта страница не доступна», потому что сервер не справился с нагрузкой и благополучно скончался. Мы бы могли пролистать все логи до конца, но это займёт слишком много времени. Итак, за всё удовольствие мы заплатили всего $20 и в конце получили классический отказ сервиса DoS, выраженный в отказе запроса загрузки изображения. После этого я просто отключил загрузку картинок, просто сбросив настройки. Я мог бы включить её снова, но не хочу показывать вам мой root-пароль.

Мэтт Йохансон: обратите внимание, мы отключили изображение, потому что заметили, что фактические посещения замедлялись, когда мы предоставляли изображение. Мы даже не исчерпали весь лимит соединений. Мы не использовали для этого взлома Firefox, у нас было всего 6 одновременных соединений на браузер. Мы очень нервничали, поэтому не нажали эту большую красную кнопку, чтобы начать обход по FTP, так как не знали, что при этом может произойти. Мы остановились на законных способах, но даже использование легальных методов нас достаточно впечатлило.



Поэтому даже не пробуя хакерские методы и не тратя много денег, вы можете достичь приличных результатов. На слайде показано, что через 1 день 20 часов и 40 минут на просмотры было затрачено 243 ГБ трафика, то есть его объём практически не изменился, так как картинки больше не загружались. Когда мы встретились здесь сегодня утром перед началом конференции, я думал что у нас будет около 15 миллионов, так что сейчас, через несколько часов, у нас как раз получилось 20 миллионов просмотра страницы с ошибкой 404.

Джереми Гроссман: единственная причина, по которой мы оказались неспособны «прокачать» больше трафика заключается в производительности сервера. Мы могли бы использовать более мощную платформу и достичь 100 миллионов или миллиарда просмотров, но для одного относительно медленного Apache-сервера это непосильная задача.

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

Джереми Гроссман: ну что же, теперь, когда мы достигли этого результата, попробуем всё-таки обойти ограничения браузера на количество соединений с помощью FTP, запустим наш скрипт и посмотрим, что произойдет.

Мэтт Йохансон: да, множество людей приезжают в Лас-Вегас, чтобы потратить свои деньги на игральные автоматы, а мы тратим здесь свои деньги на рекламные сети.

Джереми Гроссман: итак, мы зациклили 400 FTP соединений на сервер Amazon, так что кто знает, что сейчас произойдёт?

У нас появилась метрика сервера, потом опять исчезла, веб-страница снова недоступна, но вы видите, как быстро мелькают строки записи логов. Давайте просто перезагрузимся, потому что сервер фактически мертв и браузер берёт тайм-аут.

Мэтт Йохансон: мы не знаем, как себя поведёт FTP по отношению к рекламным сетям и не знаем, что случилось бы, если бы здесь использовались не боты, а браузеры реальных пользователей. Я надеюсь, что вы, ребята, понимаете, что мы никого не взламывали, а просто выясняли, как работает сеть, для чего специально арендовали серверы. Мы полностью соблюли юридическую сторону вопроса, а вы получили идеи, как весело можно провести время в рекламных сетях.

Мы даже не пытались нарушить закон, прошли этот процесс утверждения, у нас был относительно доброкачественный, а не вредоносный JavaScript, мы даже не тронули «взрослые» рекламные сети, хотя вы увидели, что им зачастую всё-равно, что происходит с рекламными баннерами.

Джереми Гроссман: я услышал хороший вопрос – откуда берутся логи Apache?

Действительно, по умолчанию в Apache нет никаких логов. Возможно, я расскажу об этом позже. У нас имеется Austin Apache, я просто скачал и установил его. Давайте я запущу его – вы видите, здесь нет логов, это локальный сервер. На сервере Amazon вы видите ошибку 408 – сервер не отвечает, так как превышено время ожидания ответа на запрос страницы. Здесь не используется отправка HTTP, но порт 80 всё ещё открыт и держит много соединений. Вернёмся к нашим слайдам — здесь у нас всё хорошо, можно их закрывать.

Итак, вы видели то, что мы сделали, оставаясь на правильной стороне закона. Очевидно, как сказал Мэтт, мы могли бы пойти гораздо дальше, как это обычно происходит в мире информационной безопасности. Рекламные сети, о которых вы знаете, располагают большим количеством разработчиков программного обеспечения. Но поверьте нам, в действительности они не разработчики программного обеспечения, а просто управляют своими рекламными сетями на своих рекламных площадках.



Одним из инструментов, который они широко используют, является OpenX – рекламный сервер, или рекламный движок. Это программное обеспечение с открытым исходным кодом.
Его используют множество рекламных сетей, и как это обычно бывает, несколько недель назад кто-то обнаружил в нём серьёзные уязвимости, которые подвергают риску миллионы пользователей рекламных платформ. Этот рекламный сервер может быть взломан путём выполнения случайного PHP-кода, который создаёт условия для проведения атаки межсайтового скриптинга XSS.

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

Мэтт Йохансон: мы фактически просто вложили деньги в игральный автомат, который разместил наше объявление, и очень трудно выяснить, кто сделал это рекламное объявление, представляющее собой iframe. Мы исследовали, как iframe разрушает код и озаботились взломом браузера, но смысл нашего исследования состоял в том, что мы пытались использовать браузер для того, чтобы другие люди взламывали себя сами, своими руками.

Джереми Гроссман: это исследование будет продолжено, мы используем наш сервер Amazon и попытаемся собрать вместе некоторых из наших партнёров, чтобы попробовать атаковать сайты с DDoS-защитой и посмотреть, сколько трафика мы сможем на них направить, потому что мы не защищаемся, а нападаем – такова суть наших исследований.

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



Джереми Гроссман: я снова повторю – мы можем мобилизовать миллион браузеров, возможно, не одновременно, но вы можете получить этот миллион браузеров примерно за $500 и создать мощнейшиё ботнет.

Я достаточно проработал в области веб-безопасности, и вспоминаю, что давно говорил – мы должны взломать Интернет, чтобы обеспечить его безопасность, взломать существующие в Интернете бизнес-модели, чтобы знать, от чего и как их защитить. Дэн Каминский сказал мне 21 декабря 2010 года: «Никто не сможет взломать Интернет, чувак. Ни сейчас, ни когда-нибудь». До сих пор он был прав.

Но сейчас мы видим проблему. Я не знаю, чья это проблема – рекламных сетей, или проблема поставщиков браузеров, или проблема владельцев сайтов, но она действительно существует. И мы не знаем, чья это ответственность и кто должен это исправить.

Мэтт Йохансон: мы показали вам, что можно натворить, просто загрузив картинку в рекламную сеть, но мы не пошли дальше, мы не нанесли людям никакого ущерба, хотя имели для этого все возможности. И мы не знаем, как от этого защититься – мы просто показали вам механизм, которым могут воспользоваться злоумышленники.

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

Мэтт Йохансон: или как вариант – вообще отключитесь от Интернета.

Джереми Гроссман: я слышу вопрос, во сколько нам обходится сервер Amazon – сейчас, наверное, около $100.

Мэтт Йохансон: сегодня, когда мы действительно сбрасывали деньги в рекламную сеть, перед нашим выступлением мы заплатили $75, и я постарался выжать из них всё, что только возможно.

И я отвечу на последний вопрос насчёт IP-адреса — когда мы получили одобрение своего баннера, мы видели IP-адрес того, кто сделал это одобрение, но он не мог видеть наш IP-адрес и не мог о нас знать ничего, кроме адреса электронной почты.

Спасибо всем, кто пришёл нас послушать!


Спасибо, что остаётесь с нами. Вам нравятся наши статьи? Хотите видеть больше интересных материалов? Поддержите нас оформив заказ или порекомендовав знакомым, 30% скидка для пользователей Хабра на уникальный аналог entry-level серверов, который был придуман нами для Вас: Вся правда о VPS (KVM) E5-2650 v4 (6 Cores) 10GB DDR4 240GB SSD 1Gbps от $20 или как правильно делить сервер? (доступны варианты с RAID1 и RAID10, до 24 ядер и до 40GB DDR4).

VPS (KVM) E5-2650 v4 (6 Cores) 10GB DDR4 240GB SSD 1Gbps до декабря бесплатно при оплате на срок от полугода, заказать можно тут.

Dell R730xd в 2 раза дешевле? Только у нас 2 х Intel Dodeca-Core Xeon E5-2650v4 128GB DDR4 6x480GB SSD 1Gbps 100 ТВ от $249 в Нидерландах и США! Читайте о том Как построить инфраструктуру корп. класса c применением серверов Dell R730xd Е5-2650 v4 стоимостью 9000 евро за копейки?

Комментарии (3)


  1. nafgne
    17.10.2018 02:42

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


    1. HostingManager
      17.10.2018 14:41
      +1

      Забавно видеть такой комментарий от человека с кармой -28, несомненно, Ваше мнение крайне важно и нам интересно. Интересно посмотреть на пруф, где гугл даёт точно такой же перевод.


      1. nafgne
        17.10.2018 15:41

        Вы сами-то читать свой текст пробовали? У вас каждое первое предложение — лет ми спик фром май харт, а каждое третье просто невозможно понять.

        Например, один раз почтовое приложение раскрыло теги скриптов, весь код JavaScript исчез, и мне пришлось его переместить. Пришлось объяснять им, почему здесь нужно поставить меньше на 1 знак, а там на 1 знак больше[...]

        Что это за бред? Смотрим оригинал:
        I think their email application was stripping script tags so all the JavaScript stuff was was going away so I actually replaced it with «please put a less-than sign inside here» «please put a great-than sign here»[...]

        Как из вашего перевода можно понять, что автор отсылал код по почте, и служба поддержки получала его в искажённом виде, и чтобы избежать этого, он заменил < и > на «вставьте здесь символ 'меньше'» и «вставьте здесь символ 'больше'»?
        И такая чушь в каждом абзаце, я даже затрудняюсь выбрать наиболее глупые ошибки, потому что их МНОГО. Даже если скормить гуглу автоматически сгенерированные субтитры без знаков препинания, он качественнее переводит.