LINUX.ORG.RU
решено ФорумAdmin

CSRF-токен на страже защиты веб-сервера от DDoS атак. Взлетит?

 , ,


2

1

Схема работы серверов такова. dns распределяет клиентов на load balancer, load balancer распределяет нагрузку уже на бэкенды.

                                             / > nginx backend
                           / nginx balancer -  > nginx backend
Client > DNS Round Robin >
                           \ nginx balancer -  > nginx backend
                                             \ > nginx backend

Неважно какой клиент, DDoS или рядовой пользователь, обращается на веб-сервер, запрашивая абсолютно любой документ.

Идея в том, чтобы NGINX Load Balancer защищал бэкеды от ддос-атаки средством которое я только что придумал «Cookie Terminate», по аналогии с уже известным «SSL Terminate».

Клиент заходит на сайт первый раз, NGINX Load Balancer устанавливает клиенту Cookie, в которой содержится аналог CSRF-токена, — пароль, известный только серверу. Без этой Cookie сервер не пропускает запросы дальше на бэкенды, никогда.

Впервый раз у клиента ещё нет Cookie, она ему только что была установлена, поэтому показываем ему статическую заглушку, HTML-страничку с использованием JavaScript, на котором JavaScript всего-навсего перезагружает страницу, таким образом делая повторное обращение к серверу, но уже с использованием этой Cookie из браузера, и если Cookie установлена (а она уже была установлена), нам покажут уже отдачу реального бэкенда, который NGINX Load Balancer пропустил т.к. кука имеется.

Вооот.. При всех повторных обращениях никакой заглушки показано не будет, NGINX Load Balancer по наличию этой куки с аналогом CSRF-токена всегда пропускает клиента.

То есть, что имеем. NGINX Load Balaner устанавливает Cookie если её нет, и отдает заглушку с JavaScript, JavaScript заглушка перезагружает страницу спустя несколько секунд, повторяя тем самым запрос на сервер, а сервер уже отдает реальный контент по ссылке, т.к. Cookie при повторном имеется.

Сама Cookie что из себя представляет. это hash-токен, который генерируется на этом же NGINX Load Balancer'е, который невозможно сгенерировать на стороне клиента чтобы тебя всегда пропускали. hash-токен таким образом должен содержать информацию и соль известную только серверу.

К примеру, установим туда IP-адрес клиента и соль... md5($remote_addr.$salt) грубо говоря.

И при последующих запросах клиента серверу — сервер смотрит на куку, восстанавливает хэш и сверяет их, реально ли кука соответствует данным или нет. Если нет — посылаем клиента нафиг, выдаём всё ту же заглушку.

ЛОР, взлетит ли такой метод защиты от DDoS? Какие подводные камни?

Как быть, если DDoS'ящий клиент сперва зашёл на сайт, получил эту куку, а затем начинает DDoS атаку уже с использованием этой куки, по которой Load Balancer всегда клиента пропускает, с того же IP-адреса, который содержится в hash-токене. Думаю над этим =)

Как быть с поисковыми движками... А шо, можно просто включать эту защиту только на время DDoS атак. Вот. А всё остальное время пусть выключено будет.

Какие ещё будут предложения?

★★★★★

Последнее исправление: Spoofing (всего исправлений: 1)

автоматизировать можно любые действия клиента кроме ввода капчи => токены-куки не спасут. да и потом, если мы говорим именно о DISTRIBUTED dos, то нагружать приложение не будут, просто забьют канал.

anonymous
()

Поздравляю, ты придумал testcookie и Roboo. Которые в штатной ситуации не должны использоваться совсем, потому-что безумно выносят голову пользователю.

anonymous_sama ★★★★★
()
Ответ на: комментарий от anonymous_sama

ладно, ладно, всё фигня, иду переделывать. :(

Spoofing ★★★★★
() автор топика
# ss -tun | awk '{split($6, a, ":"); print a[1];}' | sort | uniq -dc | awk '{if ($1 > 5) system("echo iptables -I INPUT -s "$2" -j DROP")}'

написал такой однострочник (не бойтесь запустить, будет echo), а оказалось что снова изобрёл велосипед. для блокировки флуда до ip у iptables есть модуль iplimit и conn****какой-то там.

а ещё есть ipset чтобы ускорить обработку списков адресов в iptables.

короче всё уже изобретено до меня, надо только читать и вникать. :(

а хотел делать вот так.

#!/bin/sh

iptables -F FLOOD || {
        iptables -N FLOOD
        iptables -I INPUT -j FLOOD
}

while sleep 1m; do

        iptables -F FLOOD

        ss -tun | awk '{split($6, a, ":"); print a[1];}' | sort | uniq -dc | awk '{if ($1 > 100) system("echo iptables -I FLOOD -s "$2" -j DROP")}'

done

шоб каждую минуту блочил всех негодяев.

Spoofing ★★★★★
() автор топика

да и вообще пришёл к мнению, что делать это на уровне веб-сервера — моветон. хотя бы на уровне iptables, а в идеале, вообще этим должна заниматься отдельная железка отбивающая атаки, а всё оборудование спрятано за NAT'ом этой железки. вот так будет хорошо.

Spoofing ★★★★★
() автор топика
Ответ на: комментарий от Spoofing

Отдельная железка - soooo 2008! Сейчас залить канал на несколько десятков гигабит не сложно, потому что много амплификаторов. И вообще: ты что защищаешь? Канал? Инфраструктуру? Операционную систему? Приложение?

Делать что-то на iptables - это делать еще одну уязвимость в системе, потому что iptables расходует ресурсы и если атакующая сторона поймет, что именно твой iptables хранит и что считает, то откормит в него что-то, что наплодит тебе правил. Вообще, Линукс из коробки может и мегапакет не прожевать, даже просто на закрытые порты.

Ты почитай что пишут на эту тему. Вот тут целых 19 презентаций с разных конференций на эту тему, http://www.slideshare.net/alexanderlyamin?utm_campaign=profiletracking&ut...

Shaman007 ★★★★★
()

интересно, когда IPv6 сети найдут своё широкое распространение, а сети в каждом доме станут гигабитными, а то и все 10-20 гигабит будут у каждого через раз (уже появились десктопные материнские платы с ethernet-портами, которые можно объеденить и получить все 22гбита.)

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

Spoofing ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.