The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

30.12.2011 10:22  Универсальный способ DoS-атаки, затрагивающий PHP, Java, Ruby, Python и различные web-платформы

На проходящей в Берлине конференции Chaos Communication Congress (28c3) обнародован новый способ нарушения работоспособности web-сервисов, основанный на особенности реализации структур хэшей, используемых для организации хранения наборов данных в представлении ключ/значение, в широком спектре языков программирования. Манипулируя используемыми в качестве ключей данными, атакующий может затратив минимальные ресурсы инициировать возникновение предсказуемых коллизий в алгоритме хэширования, разрешение которых требует дополнительных значительных процессорных ресурсов.

Большинство web-фреймворков и web-приложений на этапе разбора HTTP POST-запроса автоматически размещают передаваемые пользователем параметры в хэше, что позволяет атакующему контролировать наполнение хэша. В зависимости от языка программирования для достижение 100% загрузки CPU достаточно сформировать поток запросов интенсивностью всего в несколько килобит в секунду. При этом степень создаваемой нагрузки пропорциональна размеру передаваемого в хэш числа ключей с коллизиями. Хэш-функция генерирует на основании строки 64- или 32-разрядное целое число, при возникновении коллизии две разные входные строки дают одинаковое итоговое число. При обнаружении коллизии в хэш-функциях используются различные методы для обеспечения хранения вызывающих коллизии значений, как правило требующие дополнительного перебора и сверки значений (совпадающие значения сохраняются в виде дерева или линейного списка). Трудоёмкость добавления "n" проблемных ключей составляет O(n**2), т.е. на разбор большого числа вызывающих коллизии ключей современному CPU могут потребоваться часы.

Например, при лимите на размер POST запроса в 1 Мб, Python фреймворк Plone тратит около 7 минут процессорного времени на запись в хэш 1 Мб данных (набор специально оформленных ключей), вызывающих коллизии (для успешной DoS-атаки на CPU Core Duo достаточно потока в 20 kbit/s). Для фреймворков на языке Ruby 1.8.7 при лимите на размер POST-запроса в 2 Мб на парсинг двухмегабайтного блока данных на CPU i7 будет потрачено около 6 часов (!), т.е. для поддержания постоянной 100% нагрузки достаточно потока в 850 бит в секунду. Для PHP разбор POST-запроса размером 300 Кб занимает примерно 30 секунд процессорного времени, 500 Кб - минуту, 8 Мб - около 5 часов.

Проблеме подвержены все языки программирования и фреймворки, в которых не используется дополнительная рандомизация значений в функциях хэширования, например, уязвимы Java (Tomcat, Geronimо, Jetty, Glassfish), JRuby, PHP, Python, Rubinius, Ruby 1.8.7, V8 JavaScript Engine и ASP.NET. Проблема не затрагивает язык Perl и ветку Ruby 1.9.x, так как в этих языках уже используется внесение случайных изменений при формировании хэшей. В Perl проблема была устранена ещё в 2003 году, после публикации отчёта о возможности совершения подобной атаки. В PHP уязвимость исправлена в версии 5.4.0RC4, также планируется выпустить корректирующий релиз PHP 5.3.9. Проблема также исправлена в CRuby 1.8.7-p357, JRuby 1.6.5.1, Apache Tomcat 5.5.34/6.0.34/7.0.22, Rack 1.4.0/1.3.6/1.2.5/1.1.3. Эксплуатация проблемы в Python и Ruby имеет дополнительные нюансы, отличающиеся для 64- и 32-разрядных сборок.

Предсказать вызывающие коллизии значения не представляет труда, так как в вышеупомянутых языках как правило используются две реализации хэш-функций DJBX33A и DJBX33X, разработанные Дэниэлом Бернштейном (Daniel Bernstein, автор qmail и djbdns). Хэш-функция DJBX33A используется в PHP5, Ruby 1.8 и Java. DJBX33X в PHP4, ASP.NET, Python и JavaScript (v8). Кроме языков программирования данные хэш-функции применяются в широком спектре проектов, от ядра Linux до социальной сети Facebook, а также в таких языках, как Lua, Erlang и Objective-C, что открывает возможные новые векторы для атак.

В качестве мер для минимизации влияния представленной атаки называется ограничение максимального процессорного времени, затрачиваемого на выполнение скрипта (RLimitCPU в Apache или max_input_time в настройках PHP), ограничение максимального размера POST-запроса (для PHP - post_max_size) и ограничение максимального числа разбираемых параметров (в php 5.4 или suhosin-сборке PHP - suhosin.post.max_vars и suhosin.request.max_vars).

  1. Главная ссылка к новости (https://cryptanalysis.eu/blog/...)
Лицензия: CC-BY
Тип: Проблемы безопасности
Ключевые слова: hash, java, ruby, python, dos, attack, security, web
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение Линейный вид | Ajax | Показать все | RSS
 
  • 1.1, Анонимоус, 11:45, 30/12/2011 [ответить] [смотреть все]
  • +13 +/
    хмм.. а в Германии, оказывается, куча спецов по компьютерной безопасности
     
     
  • 2.5, Аноним, 12:58, 30/12/2011 [^] [ответить] [смотреть все] [показать ветку]
  • +3 +/
    http://en.wikipedia.org/wiki/Chaos_Computer_Club
     
     
  • 3.16, pavlinux, 15:41, 30/12/2011 [^] [ответить] [смотреть все]
  • +3 +/
    4-й рейх? :)
     
     
  • 4.28, Аноним, 20:42, 30/12/2011 [^] [ответить] [смотреть все]
  • +1 +/
    > 4-й рейх? :)

    0xC3-й.

     
     
  • 5.45, pavlinux, 03:37, 31/12/2011 [^] [ответить] [смотреть все]
  • +1 +/
    https en wikipedia org wiki Chaos_Computer_Club The CCC is based in Germany an... весь текст скрыт [показать]
     
     
  • 6.47, лки Новый Год, 06:22, 31/12/2011 [^] [ответить] [смотреть все]  
  • +2 +/
    Австрия если только, С википедии Germany Austria Switzerland Liechten... весь текст скрыт [показать]
     
     
  • 7.65, pavlinux, 20:13, 31/12/2011 [^] [ответить] [смотреть все]  
  • +1 +/
    Ключевое слово навскидку , то есть из мозга А как один из государственных, ... весь текст скрыт [показать]
     
  • 6.72, anonymous, 09:41, 02/01/2012 [^] [ответить] [смотреть все]  
  • +/
    бывшие германские колонии?
     
     
  • 7.73, Линуся, 17:20, 02/01/2012 [^] [ответить] [смотреть все]  
  • +/
    бывшие немецкие территории, до мировых войн...
     
  • 1.2, Аноним, 11:51, 30/12/2011 [ответить] [смотреть все]  
  • +/
    тоесть в чём суть исправления как я понимаю при создании каждого Хэш-объекта... весь текст скрыт [показать]
     
     
  • 2.23, arisu, 19:24, 30/12/2011 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    суть исправления в том, чтобы подсаливать хэш рандомными но, натурально, постоя... весь текст скрыт [показать] [показать ветку]
     
  • 1.3, Oleksiy Kovyrin, 12:32, 30/12/2011 [ответить] [смотреть все]  
  • +3 +/
    Так как для Ruby EE патча еще нет, то мы портировали решение из последнего Ruby 1.8.7: http://kovyrin.net/2011/12/29/ree-hash-collision-patch/
     
  • 1.4, ЬТЛ, 12:53, 30/12/2011 [ответить] [смотреть все]  
  • +2 +/
    приятно что такие решения "отдают" для фикса, а не используют.
     
     
  • 2.14, const86, 15:29, 30/12/2011 [^] [ответить] [смотреть все] [показать ветку]  
  • +1 +/
    Точно не используют Может, уже извлекли, так сказать, выгоду и настало время по... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.20, oxyum, 18:18, 30/12/2011 [^] [ответить] [смотреть все]  
  • +/
    ...годика эдак 2... а кое-где и все 5 лет... :(
     
     
  • 4.25, Аноним, 19:44, 30/12/2011 [^] [ответить] [смотреть все]  
  • +2 +/
    В новости сказано, что в Perl проблема исправлена уже в 2003 г, т е проблема из... весь текст скрыт [показать]
     
  • 1.6, YetAnotherOnanym, 13:08, 30/12/2011 [ответить] [смотреть все]  
  • +1 +/
    Изящно и утончённо :)
     
  • 1.7, Анонимус 84705648, 13:15, 30/12/2011 [ответить] [смотреть все]  
  • +/
    интересно, а те хеши, которые используются в iptables/conntrack, тоже уязвимы?
     
     
  • 2.9, Аноним, 13:19, 30/12/2011 [^] [ответить] [смотреть все] [показать ветку]  
  • +1 +/
    В хэш netfilter произвольное значение не передать, там жестко структурированные ... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.11, Анонимус 84705648, 13:56, 30/12/2011 [^] [ответить] [смотреть все]  
  • +/
    ну, можно, например, попробовать зафлудить целевой узел udp-пакетами с поддельны... весь текст скрыт [показать]
     
     
  • 4.66, XoRe, 04:18, 01/01/2012 [^] [ответить] [смотреть все]  
  • +/
    Боюсь, 95 трафика идет с одинаковыми параметрами src_ip src_port Как передаю... весь текст скрыт [показать]
     
  • 3.13, фклфт, 15:29, 30/12/2011 [^] [ответить] [смотреть все]  
  • –2 +/
    Вы не поверите но я уже несколько раз за последние года 4 у себя в логах замечал... весь текст скрыт [показать]
     
     
  • 4.29, Аноним, 20:45, 30/12/2011 [^] [ответить] [смотреть все]  
  • +1 +/
    Чувак, я не хочу тебя расстраивать, но у тебя кажется на серваке что-то идет не ... весь текст скрыт [показать]
     
     
  • 5.40, Аноним, 23:15, 30/12/2011 [^] [ответить] [смотреть все]  
  • +/
    Есть такая штука - libvirt Считает, что гораздо лучше админа знает, какие прави... весь текст скрыт [показать]
     
     
  • 6.44, 12у34, 03:12, 31/12/2011 [^] [ответить] [смотреть все]  
  • +/
    поясните каким образом связаны библиотека для виртуализации и iptables.
     
     
  • 7.46, Аноним, 05:06, 31/12/2011 [^] [ответить] [смотреть все]  
  • +/
    Посмотрите на список правил до и после запуска libvirtd.
     
  • 2.17, Аноним, 16:34, 30/12/2011 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Нет, там используются хеши Дженкинса ... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.24, arisu, 19:36, 30/12/2011 [^] [ответить] [смотреть все]  
  • –5 +/
    я тебе сейчас секрет скажу, только ты присядь сначала от типа хэш-функции налич... весь текст скрыт [показать]
     
     
  • 4.27, Аноним, 20:37, 30/12/2011 [^] [ответить] [смотреть все]  
  • +3 +/
    Если использовать криптографически стойкое хеширование да еще индивидуальной сол... весь текст скрыт [показать]
     
     
  • 5.49, Аноним, 13:45, 31/12/2011 [^] [ответить] [смотреть все]  
  • +/
    наверно в нашем случае достаточно всего лишь индивидуальной соли добавить - ... весь текст скрыт [показать]
     
  • 4.39, Аноним, 23:12, 30/12/2011 [^] [ответить] [смотреть все]  
  • +/
    Ну найдите мне хоть коллизию для conntrack tuple, а то языком трепать все горазд... весь текст скрыт [показать]
     
  • 2.42, Аноним, 23:50, 30/12/2011 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Судя по строчке из nf_conntrack_core c там используется добавление случайной сол... весь текст скрыт [показать] [показать ветку]
     
  • 1.18, vasek, 17:52, 30/12/2011 [ответить] [смотреть все]  
  • +2 +/
    оп, Perl и CRuby молодцом =)
     
  • 1.19, Аноним, 18:11, 30/12/2011 [ответить] [смотреть все]  
  • –1 +/
    для asp.net пофиксили сразу
    давно в винапдейтах
     
     
  • 2.41, Аноним, 23:21, 30/12/2011 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Не сразу, а с опозданием на 8 лет Сразу - это в перле пофиксили Мелокософт, ка... весь текст скрыт [показать] [показать ветку]
     
  • 1.35, evgeny_t, 22:37, 30/12/2011 [ответить] [смотреть все]  
  • +1 +/
    c таким прогрммирование страно что мир ещё работает )
     
     
  • 2.67, XoRe, 04:20, 01/01/2012 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Тссс, никому не говорите ... весь текст скрыт [показать] [показать ветку]
     
  • 1.36, evgeny_t, 22:39, 30/12/2011 [ответить] [смотреть все]  
  • +/
    да проще взять дерево и всё будет ок )
     
  • 1.43, svn, 01:05, 31/12/2011 [ответить] [смотреть все]  
  • +2 +/
    Проще не дерево, а обрабатывать параметны по мере получения. А не так как делает пыхпых читая мегабайты, засовывая их в хешмап, даже если обработчик post запроса вообще не нуждается в параметрах.

    В стандарт http добавить порядок параметров, чтобы авторизация шла первой.

    Скрипты обязать регистрировать входные параметры ПЕРЕД началом обработки полученных от клиента данных, чтобы все не заявленные данные post запроса игнорировались. Ключи хеша определяются на стороне сервера - значит нет проблемы.

     
     
  • 2.50, Аноним, 13:50, 31/12/2011 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    всё это предложенное -- замечательно - но если предположить что уязвимость ... весь текст скрыт [показать] [показать ветку]
     
  • 2.51, Аноним, 13:58, 31/12/2011 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    а она первой и идёт там там header-поле WWW-Authenticate а уж толь... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.52, Аноним, 14:02, 31/12/2011 [^] [ответить] [смотреть все]  
  • +/
    поясню немного глубже header-поле WWW-Authenticate не обязательно испо... весь текст скрыт [показать]
     
  • 3.69, terr0rist, 16:36, 01/01/2012 [^] [ответить] [смотреть все]  
  • +/
    Не пишите ересь Чем AJAX HTTP-запрос отличается от обычного вам не приходит в ... весь текст скрыт [показать]
     
     
  • 4.76, Аноним, 14:46, 03/01/2012 [^] [ответить] [смотреть все]  
  • –1 +/
    всмысле если обычный -- это form form -- то отличия весьма очевидны... весь текст скрыт [показать]
     
  • 2.64, Аноним, 20:05, 31/12/2011 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Вот всегда находится какой-нибудь вырезано цензурой , который предлагает ошибки... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.71, Аноним, 04:27, 02/01/2012 [^] [ответить] [смотреть все]  
  • +1 +/
    Вот всегда находится какой-нибудь вырезано цензурой , который путает ошибки реа... весь текст скрыт [показать]
     
     ....нить скрыта, показать (7)

  • 1.59, Денис, 17:17, 31/12/2011 [ответить] [смотреть все]  
  • +1 +/
    Для php 5.2 тоже патчи вышли
    https://github.com/laruence/laruence.github.com/tree/master/php-5.2-max-input-
     
     
  • 2.74, Аноним, 21:18, 02/01/2012 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Уйдет в порты FreeBSD в 5 2 17_5 http www freebsd org cgi query-pr cgi pr 1637... весь текст скрыт [показать] [показать ветку]
     
  • 1.75, Аноним, 10:20, 03/01/2012 [ответить] [смотреть все]  
  • +/
    Я все жду когда в PHP появиться поддержка распарсить параметер по требованию Чт... весь текст скрыт [показать]
     
     
  • 2.79, Аноним, 19:53, 03/01/2012 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Какая хакеру разница, заткнется сервак сам по себе или по твоему требованию ... весь текст скрыт [показать] [показать ветку]
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:


      Закладки на сайте
      Проследить за страницей
    Created 1996-2017 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by Ihor TopList