среда, 14 октября 2009 г.

Трюк который еще работает. Защита от DDoS на уровне javascript

Кто бы сомневался, что ботоводы - люди ленивые, иногда даже очень, очень. Вы думаете, что если у них много ботов, превосходный софт и предостаточно классных модулей к ботам то они будут это все сразу таки использовать, отнюдь - нет. Обычно, все начинается с простых GET запросов, даже не рандомных, на главную страницу и еще на несколько других тяжелых страниц, например - форум, фотогалерея и т.д. И только при неудаче, могут быть задействованы другие методы, рандомизация всего чего только можно, SYN flood, атака POST запросами, ICMP flood . . .

Предположим, что у нас есть сайт http://www.example.gov, его атакуют, по логам видно, что громадное количество GET запросов идет на:

http://www.example.gov/
http://www.example.gov/foto/
http://www.example.gov/forum/

В большинстве таких случаев можно обмануть ботов используя js-редирект. Старые и не профессионально написанные боты не содержат в себе js интерпретатора. Поэтому такой метод срабатывает лучше, чем можно было ожидать. Мы добьемся того, что боты не смогут нагружать базу данных, трафика будет в разы меньше.

Создаем index.html в корне сайта и в корне foto, forum каталогов.
прописываем туда наш простой js-редирект
И так с каждым разделом который атакуют GET запросом прямо в корень.Размер файла получится всего 90 байт, что гораздо лучше чем когда бот соприкасается к ~20кб странице и подтягивает ~10 SQL запросов. Легитимные пользователи у которых не отключен javascript в браузере будут перенаправлены на index.php. Единственное, что плохо, так это то, что поисковые-боты тоже не оборудованы js-интерпретаторами и точно так же как атакующие боты будут утопать в js редиректе.

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


8 комментариев:

somereal комментирует...

а если он гетает не картинки допустим а все подрят php, и с таким редиректом начнёт их же гетать с лицевой?

Юрий Игнатко комментирует...

Трюк с js-редиректом срабатывает только при условии, что GET запросы идут прямиком в корень сайта/каталога.

Иногда можно извратиться, вписать js редирект в начало PHP скрипта на который идет атака.

Например, копируем index.php в index2.php, прописываем в index.php js-редирект
на index2.php, а тех кто не прошел редирект смело отправляем в die();

Если идут рандомные GET-запросы, т.е выбирается случайная ссылка, тогда js редирект не спасет.

Няшкин комментирует...

Я делаю так
<html><head><title>redirect</title> <meta http-equiv="Refresh"
content="0;URL=index.php"></head><body><a href="index.php">Перейти на сайт</a>
</body></html>

и редерект есть и ссылка по которой может перейти поисковой бот.

Юрий Игнатко комментирует...

Спасибо NetSoul, у меня тоже была идея так сделать, как-то руки не дошли опробовать ее подчас атаки :)

Анонимный комментирует...

не проще ли
.htaccess (deny from ...) заюзать в таком случае? =)

Няшкин комментирует...

чтобы небыло нагрузки на сервер надо установить nginx а apache только для php файлов. так как apache использует много ресурсов системы.

Cloudcom Protected Hosting комментирует...

Если нужна надежная Защита от ддос, Защищенный сервер или Облако, то милости просим на Защищенный хостинг Cloudcom

И никакие атаки не страшны...

P.S. Защита идет бесплатно!

Ярослав комментирует...

При удачной настройке iptables nginx попросту блокирует атакующие адреса и они не нагружают системные ресурсы сервера, ну а для решения серьезных проблем нужная хорошая аппаратная защита. Могу порекомендовать ребят из Simplyway.net, отлично справляются как с ддос атаками так и толково шарят в администрировании