Архитектор
0,0
рейтинг
3 февраля 2012 в 18:59

Разработка → EX.UA, LOIC и беспомощная украинская милиция

Не секрет, что Украина, это страна, где каждый «владетель» (депутат, чиновники и олигарх) думает, что он умнее всех и считает, что он контролируют процесс, а позже оказывается, что никто его не контролировал. Небольшой анализ предыстории в социально-политическом плане мы с коллегами даем на сайте Фонда качественной политики.

Что же такое JS LOIC, это простейший и не очень хорошо написанный JavaScript размером в 50 строк, технические подробности работы его, и подобных, изложены ниже. Но его уникальность в том, что каждый браузер может стать источником атак, без инсталляции специальных программ и заражения вирусом. Во-первых, каждый школьник и домохозяйка совсем скоро смогут участвовать в атаках, не разбираясь ни в чем, просто получив ссылку и нажав кнопку на странице. Более того, нажимать кнопку не так уж и обязательно, любой массовый ресурс может стать носителем такого скрипта, внедренного в него владельцами или злоумышленниками (не столь важно), но свою цель такие запросы достанут.


Так как в кросс-доменные AJAX запросы в браузерах не работают в целях безопасности, то в JS LOIC используется простая техника — динамическая вставка на страницу тега с картинкой, вот строка из кода, по которой понятна вся техника:
img.setAttribute("src", targetURL + "?id=" + rID + "&msg=" + messageNode.value);

И эту возможность ни как нельзя выкинуть из браузеров, но при хорошо написанном сайте — такая особенность не очень страшна. В идеале, запрос не должен дойти ни до базы данных ни до скриптов, исполняемых динамически, ни до обращения к файловой системе. Это просто решается в Apache, nginx, IIS, на самом деле, фильтровать запросы можно многими способами: на этапе URL-реврайтига с помощью регулярных выражений, так же, в LOIC между вызовами не удаляются cookies (т.к. они создаются в рамках другого домена) — еще один фактор фильтрации, блокировка по IP — само собой, а учитывая, что многие атакуют через прокси — то все переадресованные запросы можно сразу отбрасывать. При этом, чиновники плачутся, что им мало выделили денег на оборудование, и их железо не выдержало атак. Низкобюджетные и кривые сайты органов украинской власти не выдержали атак, денюшки то были расхищены еще до разработки бесстыдными чиновниками.

Но вернемся к техническим аспектам, динамическая вставка картинок, айфреймов, скриптов, в html — далеко не единственный и не самый эффективный способ способ браузерных атак. Есть еще протокол JSONP — это спецификация безопасных кросс-доменных запросов, но для DDOS атак такая безопасная спецификация тоже подходит, вот пример:
<script type="text/javascript" src="http://targetdomain.com/somePath?parameter1=value1&jsonp=callbackProcName1">
</script>

Если сервер понимает JSONP и запрос выполнен успешно, то результат вернется в виде вызова функции callbackProcName1({«Result1»: «value1», «SomethingMore»: «anotherValue»...}). Но для атак — получение результата не столь важно.

imageГораздо плодотворнее в этом плане другая техника — это долгожданные Веб-сокеты и Socket.io, которые многократно расширят инструментарий браузерных атак. Статистика по поддержке WebSockets на картинке. Так, что JS LOIC это всего лишь первые пробы и уже очень скоро мы столкнемся с тем, что школьники пятого класса за 30 минут смогут организоваться и ради шутки крушить что попало. Во время выборов, например, или других событий, военных действий, принятия законов, выступлений политиков, саммитов… цацка уже попала в руки, теперь не отберешь.

Вас наверное интересует истинная причина вашего визита ко мне?


И теперь обратно к EX.UA и атакам в Украине. Что же в результате:
1. Сайты госорганов, милиция и даже спецслужбы Украины показали свою полную беспомощность и некомпетентность. Целых 3 дня все лежало, ни поднять в другом месте ни защитить оперативно не смогли.
2. Политикам и чиновникам скорее всего удастся получить пользу от случившегося — есть хорошая отмазка чтобы остановить развитие электронных средств взаимодействия общества с властью, электронных сервисов и т.д. но по правде, ни кто особо их и не развивал, это действительно замечательная причина совсем все прекратить.
3. Во время следующих выборов и Евро 2012 лежать будет все что может лежать.
4. EX.UA слишком лакомый кусочек, чтобы его просто закрыть насовсем, кто же будет уничтожать то, что способно генерировать хорошие деньги на рекламе, это не по украински, придется просто передоговариваться, переразделить прибыли с нужными людьми.

UPD: По поводу подгрузи картинок, вспомнился еще один хороший метод, очень даже применимый для атак:

images = new Array();
...
images[n] = new Image();
images[n].src = "http://targetdomain.com/images/img"+i+".jpg";
...


UPD2: Вообще красиво получается, пока высшие чиновники просто воровали — все молчали, но когда посягнули на святое, лишили фильмов — сразу война!

UPD3: Многих интересует, где брать исходники JS LOIC, можно их посмотреть, например тут: pastehtml.com/view/bmp0uzp8a.html (специально не оформляю как ссылку, чтобы случайно не кликнули)

UPD4: Самые простые способы защиты, доступные всем и внедряемые за 5 минут такие:
  • Фильтрация по URL — одна строка в .htaccess решила бы проблему для Украины: RewriteRule .*msg=.* /staticHelloLOIC.html
  • Фильтрация по полю {HTTP_REFERER} в .htaccess — это 5-6 строк с самыми распространенными хостингами JS LOIC
  • И как крайняя мера, временно, можно было отфильтровать диапазоны IP основных провайдеров, от которых шли атаки, все это знает любой мало мальски практикующий админ.

Это бы предотвратило запуск скриптов и обращения скриптов в базу (основные причины нагрузки), не говоря уже, что запросы можно фильтровать на маршрутизаторе, но на оборудование денег в стране не хватило, это мы уже поняли.

И повторяю, лежали не сервера, а именно ПО, по другим портам сервера отвечали, а некоторые даже очень шустро отдавали страницу с «HTTP 502 Bad gateway». Такое бывает, например, когда nginx стоит как фронтенд, а на бэекенде Apache или другой сервер с ПО (который и упал, а фронтенд должен был его защищать и кешировать).
Timur Shemsedinov @MarcusAurelius
карма
160,5
рейтинг 0,0
Архитектор
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

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

  • +10
    >Не секрет, что Украина, это страна, где каждый думает, что он умнее всех.

    По-моему, это не совсем правильно, оскорблять каждого жителя страны.

    А за статью спасибо, но хотелось бы услышать компетентное мнение — защищаться как от таких атак?
    • +1
      Ни каких оскорблений тут не вижу, живу в Киеве всю жизнь и знаю не по наслышке проблему, в сочетании с истиной, что «где два украинца там три гетьмана», это очень сложная национальная особенность, ну такие мы.

      А методы защиты опишем, в принципе, они не сложны, но поражает, что даже простейшие методы не были выдержаны, я не удивлюсь, что во всех этих сайтах куча sql-иннъекций и js-инъекций найдется в скорости.
    • 0
      Как защищаться уже ниже написал — 1 строка RewriteRule в .htaccess решила бы проблему для Украины, почему ее 3 дня не добавляли — это уже другой вопрос. И еще методы очевидные, фильтрация по {HTTP_REFERER} — ну допустим источников атак было несколько, но основных то 5-10 было, вот это еще пару строк в .htaccess ну или аналог в nginx и IIS. Ну как крайняя мера, временно, можно было отфильтровать диапазоны IP основных провайдеров, от которых шли атаки, все это знает любой мало мальски практикующий админ.
  • +2
    Не секрет, что Украина, это страна, где каждый думает, что он умнее всех

    image
    Вы сами себя хотели оскорбить?
    • +28
      нет, он думает что он умнее всех
      • 0
        Ты так говоришь, как будто это что-то плохое ©
    • +10
      Мне кажется, что это просто неправильно сформулированная ирония. Я не думаю, что автор хотел обидеть этими словами.
    • +5
      а что плохого в том, чтобы считать себя умнее всех?
    • 0
      Пост, в котором украинцы обиженный на то, что они умнее всех, доказывают, что они умнее всех
  • 0
    Начало и конец статьи — копипаста с той самой ссылки, которую автор в начале сам дал. В итоге при чтении возникает какое-то дежавю!
    • 0
      Ну сори, ресурсы разные, там политическая тема, а Хабру интереснее другой аспект, выводы так же адаптированы. На Хабре не запрещено авторское цитирование, и его тут не много.
  • +1
    Если каналы спустить, никакой nginx не поможет, да хоть ты на asm сайт пиши — не спасёт.

    Сайты — не стратегические объекты, гнать на спец. службы не обязательно.

    Выводы — не объективные.
    • 0
      Ну есть же у них отделы ИТ-шные, ну как так можно, все же лягло за 5 минут, без особых усилий. Есть даже мнение, что сайты вообще были отключены самими госорганами, чтобы потом хныкать, как их обидели и денег просить на апгрейд. А знаете ли Вы, какие средства на все эти сайты шли, у…
      • 0
        Слухи — не наш источник информации. Ну мало-ли, вдруг там 14гб/с, и защищали всё это 2 к.т.н. и 18 инженеров. Я не знаю что там было, и мало кто знает, нельзя строить такие выводы и обвинения на догадках.
        • –2
          А чего оно тогда лежало 3 дня, сложно было из бекапа поднять на других серверах и домен перепрописать? Это ведь дело престижа, ну…
          • 0
            Ну если атака на домен — новый не спасёт. По сути, проблему решить должен был провайдер. Не так все просто. Ну хабр — грамотный сайт вроде, а под DDoSом валяться тоже любит.
            • 0
              Ну о чем Вы говорите, даже если тот же домен, то DDOS работает запросы добираются до PHP и MySQL, а если они режутся на этапе обработки веб-сервером, то нагрузка минимально. Для защиты от LOIC просто добавляем в .htaccess такую строку:
              RewriteRule  .*msg=.*  /staticHelloLOIC.html
              

              и все запросы будут приводить к выдаче статического файла. Одна эта строчка и, скорее всего, в новостях бы уже не передали «хакеры взломали».
              • 0
                Скорей всего, но не факт.
                Еще раз, я говорю о том, что это не прокатит, если атака сильно сильная и слабым звеном является не CPU/RAM/HDD, а сеть.
                • 0
                  Упавшие компы были доступны по другим портам, так что это не про нынешний случай. Ну а вот крупные атаки, и не через JS LOIC, а через C# LOIC или другие инструменты, на Visa, Whitehouse, и т.д. конечно уже сеть загружали и там все ложилось еще не доходя до сервера, маршрутизаторы не выдерживают, ну после этого там же бюджеты выделены, оборудование посерьезнее и сразу выявление атак и контрудары. У нас все не на таком уровне, атака слабенькая была, и ответ вообще за страну стыдно. Но какое начальство, сытое, скупое и ленивое, такие и результаты.
                  • 0
                    > Упавшие компы были доступны по другим портам
                    Ну тогда ладно))
                    • 0
                      Я этот вопрос мониторил, почему ж я так и гневаюсь, и атаки и защиты были сопливые :)
                      • 0
                        Ну в статье я этого не видел(.
                        Мониторил это как? Кто доступ дал? Куда СБУ смотрит?
                        • 0
                          Снаружи мониторил ) telnet на порт, чтобы понять что происходит. А корме того, часть серверов выдавало страницу nginx с ошибкой, при чем очень шустро выдавало, значит nginx все же работал, а упало именно ПО.
                          • 0
                            Ну тогда стыдно авторам должно быть, согласен.
    • 0
      Какая разница на чем сайт написан? Разница есть как писать.
      В любом случае все упрется либо в канал, либо в проц, либо в память.
      • –3
        Если хорошо сайт писать, то тогда упирается в канал проц и папять, а когда они написано так, как оно сейчас все написано, в большей части в стиле говнокода (есть конечно отдельные исключения), то ни какое железо не виновато.
    • 0
      Сайты — не стратегические, но есть же специальная контора «Государственная служба специальной связи и защиты информации Украины» — dstszi.kmu.gov.ua — они не могли дописать одну строку в .htaccess оперативненько? Я уж не говорю о том, что есть много заблаговременных мер, но хоть заплатку то навесить и заблокировать в DNS основной домен loic.anonymvs.com можно было и пошустрее. Этот домен только на четвертый день стал недоступен и то, непонятно, то ли его заблокировали, то ли хозяева поддомен loic удалили сами.
  • +3
    И теперь каждый школьник и домохозяйка может стать соучастником преступления в котором легко доказать вину, потому что они ддосят со своих домашних компьютеров?
    • +1
      Если такой скрипт запускается на любом ресурсе, к которому пользователь относится не более, чем пользователь, то вины его нет.
      Я же не виноват, что пройдя по ссылке на каком-то сайте грохнул БД этого самого сайта из-за ошибки программиста? Так и тут.
      Школьник\домохозяйка не разбираются в тонкостях построения сайтов, а то, что они зашли по ссылке — это мог быть и вирус…

      Вообщем доказать, что они являются соучасниками — нет возможности…
    • 0
      Когда DDOS-ят десятки тысяч человек, то наказать можно только случайных, а их вклад в общий поток атаки ничтожен. Некоторые говорят о 5.000 человек, а другие про 300.000, тут сложно сказать. Кроме того, массово используют прокси, веб-анонимайзеры, досят из общественного вайфая, в мобильного интернета по препейд карточкам (ну тут много не надосят) и всякое такое. Я говорю больше не про этот конкретный случай, а про то, что скоро кто-то может разместить код атаки (без обязательной кнопки) на крупно портале СМИ или же полулегальных высоко посещаемых ресурсах, тогда вина будет недоказуема, т.к. человек ничего не нажимал, просто ходил по интернету.
      • +1
        В инструментарий начинающего кулхацкера теперь еще можно добавить slowhttptest. Статьи на хабре — заманчиво звучат (я об «Завалить 30 серверов с лептопа»), для сборки из исходников особого ума не надо…
  • 0
    Ругать «бездарных кодеров» и я могу. А что бы Вы сделали в данной ситуации? В ситуации, когда вас ддосят по http куча человек?

    Кстати, вопрос: а в чем принципиальные различия подгрузки через тэг img и jsonp, что Вы аж отдельно абзац выделили про последний?
    • 0
      В разных браузерах по-разному конечно, но дело в том, что JSONP специально оптимизирован под интерактивные, чатовые, веб-2.0-ные динамические задачи, и работают немного другие механизмы. Это протестировано, мы сравнительный тест делали. Кстати, ресурс мы свой собственный атаковали через JSONP, он вообще не почувствовал, но вот по логам видно, что у JSONP чисто статистически есть преимущество.
      • 0
        Ладно, а в чем отличие обычной загрузки скрипта и JSONP?
        Не схемы с коллбеком, а именно загрузки, если предположить что урл, который отдает JS, урл, который обрабатывает JSONP запрос — оба статика?

        • 0
          Черт, пятница сказывается, сам не понял, что написал. Я имел в виду, что по обоим урлам отдается статика.
          • 0
            Вообще как работает JSONP (пишу через jQuery):
            $.getJSON(url+"&callback=?", function(data) { alert("Result: " + data.parameter1); });
            

            Это приводит к генерации такого
            <script type="text/javascript" src="http://targetdomain.com/somePath?parameter1=value1&jsonp=callbackProcName1">
            </script>
            

            И в результате вызывается функция уже.

            Почему именно так делают, AJAX/JSON не позволяют сделать запрос на сервер, а вот тег script позволяет. Сначала между src картинки и src тега sctipt небыло ни какой разницы, но топом, когда JSONP начал использоваться веб-приложениями, то рзработчики браузеров начали оптимизировать поддержку этой техники, обнаружив в ней, что она более безопасна, чем, если бы AJAX был кроссдоменным. Постепенно, чтобы улучшить Гугловских, Фейсбуковских, Майкрософтовских, и др. сервисов, JSONP был возведен в стандарты и браузеры его начали выявлять и обрабатывать с оптимизацией.
            • 0
              Либо лыжи не едут…
              Как работает jsonp я знаю.
              Отвечу на свой вопрос: разницы в подгрузке браузером простого js кода и в выполнении JSONP «запроса» нет совершенно никакой.
              Вот Вы написали, AJAX/JSON не позволяют сделать запрос на сервер (Вы видимо имели в виду удаленный сервер). Ajax понятно, а вот JSON, спешу Вас расстроить даже на локальный сервер не позволяет сделать запроса, и вообще запросов делать не позволяет.
              JSON (англ. JavaScript Object Notation) — текстовый формат обмена данными (википедия).
              Так же, спешу Вас расстроить, но JSONP к транспортному уровню тоже никак не относится сам по-себе. Это так называемый «JSON с подкладкой». Позволяет Вам, подгружая скрипт, который находится на удаленном сервере, указать ему, какую Вашу локальную функцию надо вызвать с некоторыми аргументами, в которые он положит некоторые данные (например результаты поиска, которые Вы запрашивали). После такой подгрузке вам вернется обычный JS, в котором будет что-то типа localCbFn(data), где localCbFn — ваша функция, а data — ответ на ваш запрос по урлу.

              Уффф, пиво все больше действует на ясность мысли, надеюсь понятно описал.
          • 0
            Кстати, jQuery.getJSON() так же, распознает JSONP, отличая его от JSON и эмулируя привычный вызов, хотя, на самом деле происходит все через динамическую вставку тега script.
            • 0
              Нет, getJSON с локального сервера делает обычный XMLHttpRequest, при этом ожидая, что в ответ ему придет JSON, который впоследствии будет передан в коллбек.
              • 0
                Что имеете в веду под «локальный сервер»? localhost что ли? А кого он в вебе интересует?
                • 0
                  Same origin. На тот же сервер, с которого был подгружен.
                  • 0
                    Знаете я проверял только такую штуку — getJSON для обращений к тому же серверу но к другому порту, так оно именно через JSONP идет, а к тому же порту — не проверял, но проверю, интересно, хотя практического применения поменьше. Обычно нужно из JS, загруженного с обычного веб-сервера, обратиться к URL-у на другой порт, где стоит специализированный сервер, например APE или node.js приложение или любой другой прикладной сервер на сокетах.
  • +3
    Я вообще не понимаю как подобный скрипт мог составить хоть какую-то проблему для вэб ресурса. Запросы-то все одинаковые, блочится все одной! строчкой в фаерволле, ну еще второй можно логи собирать.
    Нормальному администратору справиться с таким «ддосом» пару минут делов, как можно было провалятся 3 дня, это вообще нонсенс. У меня в голове не укладывается какими нужно быть криворукими.

    Тут правда был один момент скорее всего. Специалистов-то в Украине хватает, просто внутренние распорядки запрещают скорее всего привлекать сторонних админов, а свои работают за еду.
    • –1
      В голове не укладывается, с 10 компов можно организовать более серьезную атаку с любого языка, в котором есть сокеты и URL-ы можно как-то лучше генерировать, например, прокравлить все урлы на сайтах и по ним атакующих диверсифицировать или найти URL-лы с параметрами. А если куки не будут приходит, как из браузера приходят, то не исключено, что от одного выделения сессий там может все обрушиться.
    • +1
      Зарплаты в гос. секторе порядка 2К грн (около 250 долларов). Вопрос: откуда там мотивация и квалификация?
      • +1
        Ради интереса погуглил, зарплат ИТ шников не нашел, но вот рядовые сотрудники делятся кто сколько получает police-ua.com/showthread.php?t=6355. Грустно конечно. На такую з/п явно протянуть можно только ноги.

        Вполне понятна тогда ситуация со специалистами. Хотя обычно ИТ шникам стараются платить побольше чем рядовым сторудникам объеденяя ставки и т.д, ибо иначе в госструктурах спецов не удержать.
        • +1
          Какой бы ты ни был специалист, а больше чем начальнику не заплатят. Такие дела. А то, что начальники выбираются по географическому, а не профессиональному принципу, никому не секрет.
          • 0
            Ну последнее время всем работникам МВД платят президентскую надбавку в размере равном зарплате, так что умножаем на 2 все. А ЗП нынче у работника МВД 2000-4000 грн. Кроме того, ну можно же 2-3 зарплаты склеить и одного ИТ-шника нанять, я понимаю, что им на удаленку нельзя, аутсорсить нельзя, субподряд нельзя, сложно все, но это у МВД сложно, а вот у других госорганов, сайты которых так же лежали — все можно. Хотя соглачен, по большей части это вина руководства, выделяющего мизерные финансы, но из бюджета то финансы ого какие идут на эти сайы.
  • +3
    Да как не верифицируй, реферер-то всегда передаваться будет. По нему и заблочить прямо в iptables еще на подлете.
    Все эти методы действуют если ресурс на самом дешевом шаред хостинге или админ заочник первого курса, да и то не по ИТ специальности.
    Так что скрипты эти все для жураналистов и тех, кто их читает/слушает.
  • 0
    По просьбам, вопросам и обсуждениям в конце статьи внесены дополнения.
  • 0
    Спохватились, даже ЗП в $180 дают — kiev.pravda.com.ua/news/4f3e7040d0337/

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.