Вопрос: Как замедлить хакер


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

Он никуда не денется, и не справляется даже с нашей основной защитой (но он заполняет наши файлы журналов).

Мы отправляем обратно 403 Unauthorized к его запросам почти сразу, как только они приходят, но чем быстрее мы блокируем его запросы, тем быстрее работает его сценарий.

Перед отправкой ответа 403 мы хотели бы ввести «задержку». Чем дольше, тем лучше.

Вопрос: Как мы можем отложить попытки взлома, не затрагивая остальную часть сайта?

  • Я предполагаю, что спать (15000) на его нити было бы плохими новостями для других посетителей сайта.
  • Скручивание новой нити только для него кажется излишним.
  • Есть ли другой способ отправить отложенный ответ?
  • Как долго мы можем заставить его браузер ждать? Полагаю, мне все равно, если он получит 403 Unauthorized ошибка или, в конечном итоге, время ожидания, поэтому мы могли бы даже сделать неопределенное / бесконечное ожидание.

17
2017-12-06 22:18


Источник


Есть ли причина, по которой вы не можете просто настроить свой брандмауэр для отказа от трафика, исходящего из его IP-адреса? Эта проблема будет лучше решена на сетевом уровне, чем уровень приложения. Снижение трафика будет означать, что он должен будет сидеть там до тех пор, пока не истечет время ожидания подключения. И вообще не реагировать на них гораздо эффективнее, чем отбрасывать «несанкционированные» ответы, поскольку он не дает ему фактически никакой информации для проверки. - cdhowie
Почему бы не просто заблокировать его ip? - Hogan
Отключите ваш сервер. - Sayed Ibrahim Hashimi
Посмотрите на мой ответ - это стандартная вещь, я удивлен, что вы не получили ответа, который указывает на некоторые системы обнаружения вторжений ранее. - Unreason
@Sayed, отсоединение вашего сервера - одна из худших вещей, которые вы можете сделать. Помимо DoSing, см. Также security.stackexchange.com/q/181/33 - AviD


Ответы:


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


38
2017-12-06 22:22



Привет, Джоэл, это «принятый» ответ, но, поскольку вопрос был перенесен из StackOverflow, похоже, что у меня нет полномочий на его принятие. Я дал ваш ответ +1. Это именно то, что я буду делать. - Flipster
@flip нажмите на свое имя, а затем ссылку «учетные записи» на части справа. Это позволит вам связать это обратно с вашей учетной записью переполнения стека и восстановить право собственности на вопрос. - Joel Coel
но вы также хотите сделать это автоматически - нет смысла заниматься такими вопросами в каждом конкретном случае. (см. мой ответ) - Unreason


Существуют реальные системы обнаружения вторжений, большие и малые, которые сделают это автоматически для вас в зависимости от различных фильтров, приманок и других механизмов

Например, см. fail2ban который может быть настроен для принятия действий на основе анализа журналов.

Таким образом, вы можете

  • легко фильтровать один IP-адрес, из которого происходит атака, не влияя на других пользователей вашего сайта
  • вы можете написать собственное регулярное выражение для анализа журналов
  • вы можете определить свои собственные действия (дроссель вместо запрета и т. д.),

Существуют другие и более крупные инструменты, см. Также раздел Википедии.

Поскольку ваш вопрос отмечен как asp.net, я предполагаю, что ваша серверная платформа - это окна. Тем не менее, если использовать брандмауэр linux - это вариант, вы можете попробовать

  • установить брандмауэр Linux между WAN и вашим сервером
  • предоставить доступ к брандмауэру в журналы IIS
  • написать регулярное выражение, чтобы проанализировать его
  • подключить его к существующим шаблонам для запрета

Такой брандмауэр можно запускать на очень скромном оборудовании - подумайте даже о маршрутизаторах Linksys (см. Вот) для очень приличных полос пропускания канала.


5
2017-12-07 09:33





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

ip ro add blackhole 10.69.96.0/24
ip ro flush cache

Вы также можете выполнить это с помощью правила iptables, но поймите, что правила iptables проходят линейно, поэтому, если вы начинаете добавлять правила iptables для каждого злоумышленника, который приходит, вы можете начать есть много CPU. Таблицы маршрутизации оптимизированы для обработки многих и многих записей. Например, у одного из моих ящиков есть 350K записей в таблице маршрутизации без проблем. Но если бы у меня были правила 3K iptables, ящик почти наверняка упал бы.

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


4
2017-12-07 03:52



+1. Мне понравилась ваша информация об относительной эффективности маршрутизации vs netfilter в этой ситуации. iptables на ядре с ipset возможность очень эффективно сопоставляет огромные списки IP-адресов, но, похоже, ни один из основных дистрибутивов не позволяет ipset в их ядрах. - Steven Monday
Хорошая точка, ipset - это то, что кажется полезным для таких вещей, но просто не доступно. Есть еще одна система под названием nf-hipac, которая была более общим оптимизатором iptables, но последнее сообщение в списке рассылки и последней версии - с 2005 года. - Sean Reifschneider


Вы делаете не хотите замедлить его, потому что медленное его замедление приведет ваш сайт вниз, как если бы он находился под атакой DoS, потому что ваши потоки будут «заняты», обслуживая запросы этого человека. То, что вы хотите сделать, это заблокировать его IP и сделать с ним. Нет причин наставлять человека, делающего это.


3
2017-12-07 05:39





Вы ищете модуль Apache mod_evaisve.

В дистрибутивах на базе Debian установите его, используя

apt-get install libapache2-mod-evasive

CentOS / RHEL

yum install mod_evasive

mod_evasive отслеживает запросы, поступающие в Apache, и запрещает IP, используя iptables, которые передают пороговое значение. Это идеальный инструмент борьбы с атаками DoS на основе HTTP и даже с распределенными DoS-атаками, когда вы нацелены на огромный бот-сет с тысячами разных IP-адресов.

Он работает как модуль Apache, загруженный во время выполнения, а не как отдельный демон.

Хотя умный злоумышленник с управлением огромным бот-сетом все равно может сбить ваш веб-сервер, посчитав запросы, отправленные каждым зомби в бот-сети, чтобы ни один из IP-адресов не прошел пороговое значение.

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


2
2017-10-29 17:33





Если вы используете linux, используйте iptables, чтобы ограничить партию 1 байтом / с большими задержками и заставить его принять навсегда даже получить один запрос. Если он будет распространен, это не поможет.

Я не уверен, как вы это сделаете в Windows, но вы можете найти некоторые аналогичные параметры в своем маршрутизаторе или аппаратном брандмауэре, если у вас его есть.

EDIT: Согласившись с вышеизложенным, это больше похоже на вопрос об ошибке сервера.


0
2017-12-06 22:22



Этот метод иногда используется в атаках DDoS - атакующим. Выполнение этого на сервере является контрпродуктивным. <_ < - p-static
На самом деле не правильно сказать, что он используется в DDoS-атаках - этот вид эффекта цель DDoS-атак. Выполнение этого на сервере / брандмауэре, но только на атакующие компьютеры - единственная реальная защита (AFAIK). - Unreason


Если IP-адрес значительной константы парня может создать пользовательский HttpModule, подключите его через изменение в файле web.config и получите задержку, когда он будет распознан как этот IP-адрес. Или вы можете отправить ему около 404 кода или перенаправить его в другое место.


0
2017-12-06 22:25





Вы знаете, что они в Индии. У вашего сайта есть значительные индийские патроны, которые препятствовали бы просто блокировать весь их диапазон IP на уровне брандмауэра с шагом до тех пор, пока поток не остановится? Это, конечно, не твердое решение, но если вы просто имеете дело с типичной «книжной девочкой», этого должно быть достаточно, чтобы отговорить их и отправить в другую цель.

Еще лучше, если это от одного IP-адреса, вы можете ответить своей атакой отказа в обслуживании :)


0
2017-12-06 22:29



на самом деле это не решение, режущее желе с топором. И B, DDOS на самом деле не очень хорошая рекомендация (хотя я предполагаю, что вы шутите), нет причин для a) делать что-л. Illagel b) накладывать больше нагрузки на ваш сервер! - Trufa