Использование майнинга для предотвращения DDOS-атак на веб-сокеты - PullRequest
0 голосов
/ 30 мая 2018

Я думаю, что следующий способ - это хороший способ полностью и полностью предотвратить ddos ​​на моем сервере.Моя идея состоит в том, чтобы использовать тот же механизм майнинга криптовалюты (биткойн, с sha256 или любым другим хэшем) для предотвращения DDOS.

Примечание: я не предлагаю добывать криптовалюту как таковую.Я предлагаю использовать тот же механизм, чтобы избежать Сибил-атак .

Почему идея выглядит привлекательной для меня? Поскольку создание заминированного хеша стоит дорого, но проверкаэто супер-дешево.вычисление хеша стоит только один раз.

Что в двух словах означает майнинг? Это означает, что есть определенный кусок данных (скажем, идентификатор сеанса или токен JWT, чтоможет храниться на сервере в быстродействующем сервере NoSQL), а пользователь (или майнер в криптовалюте) должен создать хеш, который соответствует определенным критериям.Например, если мы используем SHA256, мы можем определить сложность как необходимое количество начальных нулей в 256-битном результирующем числе из хеша.Чем больше нулей, тем сложнее найти этот хэш.

Как это работает? : пользователь берет токен сеанса (который создается сервером) и объединяет его с nonce (число, используемое один раз)) и вычислите хеш в их интерфейсе (через WASM или иным образом с помощью javascript).Поскольку пользователь не может выполнить обратный инжиниринг SHA256, все, что он может сделать, это продолжать изменять одноразовый номер снова и снова и снова, пока он не найдет одноразовый номер, который создает хеш, удовлетворяющий требуемой сложности.1022 *

График показывает вероятность нахождения блока (нахождения правильного одноразового номера) в биткойнах, где трудность выбирается так, чтобы она составляла 10 минут.Изменение сложности сместит эту кривую и пропорционально изменит ее ширину.

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

Результат: Пользователь должен будет вычислить этот хэш с этой сложностью, прежде чем делать какие-либо запросы к серверу.Как только пользователь преуспевает, добытый токен аутентификации может быть сохранен в cookie для повторного использования пользователем.Если пользователь не сможет предоставить запрошенный хэш, его запрос на подключение будет внезапно отклонен, что предотвратит DDOS-атаку с использованием кукол-носителей.

ASIC сопротивление : использование SHA256 не рекомендуется, поскольку имеется специальное оборудование, которое может очень быстро рассчитать его, что приведет к возможной скоординированной атаке.Есть хэши, которые трудно распечатать на аппаратном уровне, такие как Scrypt и Argon2.

Выбор сложности : сложность может быть статической (что я бы не рекомендовал) или может бытьдинамически менять с нагрузкой на сеть.При высокой загрузке сети требуемая сложность возрастает.По сути, это действует как фильтр и защищает сеть во время DDOS-атак и никогда не влияет на пользователей, поскольку пользователям обычно не нужно ждать 10 секунд, чтобы создать сеанс.В случае действительно высокой нагрузки пользователи могут либо выбрать дорогой одноразовый номер, либо вернуться позже.Хостинговая компания также может принять решение о необходимости расширения инфраструктуры на основе графика сложности с течением времени.

Является ли это разумным планом защиты от DDOS в веб-сокете и аналогичных общедоступных протоколах?Я хотел бы реализовать это на моем сервере.

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

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

Например, у вас есть 2 страницы, одна отображает данные с определенной записью в дБ (с использованием первичного ключа), вторая выполняет сложный поиск ииногда в db нет необходимого индекса для быстрого поиска, или на странице много результатов.Злоумышленник захочет DDOS на второй странице и сделает поиск как можно медленнее.

Вы можете установить низкую сложность для первой страницы и высокую для второй.Основная идея может быть следующей: если вы хотите занять x процессорного времени на сервере, потратить c * x своего процессорного времени.

Если вы запрашиваете хеш-код только один раз, злоумышленник может вычислить необходимый одноразовый номер и сделать миллионзапросы с использованием одного файла cookie.

0 голосов
/ 30 мая 2018

Поскольку DDOS работает из нескольких систем на нескольких соединениях, легко противодействовать, если вы просто напишите скрипт, который будет запрашивать новый хэш SHA256 с сервера, для каждого отдельного соединения засоряет ваш сервер.Им не нужно выполнять обратный инжиниринг, а просто генерировать «токены сеансов» для каждого отдельного соединения, запрашивающего доступ к серверу.

...