Как замедлить хакера

17

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

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

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

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

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

  • Я предполагаю, что сон (15000) в его ветке будет плохой новостью для других посетителей сайта.
  • Раскручивание новой нити только для него кажется излишним.
  • Есть ли другой способ отправить отложенный ответ?
  • Как долго мы можем заставить его браузер ждать? Я полагаю, мне не важно, получит ли он 403 Unauthorizedошибку или в конечном итоге истечет время ожидания, так что мы могли бы даже сделать неопределенное / бесконечное ожидание.
Flipster
источник
36
Есть ли причина, по которой вы не можете просто настроить брандмауэр для отбрасывания трафика, приходящего с его IP-адреса? Эта проблема будет лучше решена на уровне сети, чем на уровне приложений. Отбрасывание трафика будет означать, что ему придется сидеть там до истечения времени ожидания запроса на подключение. И вообще не отвечать гораздо эффективнее, чем отбрасывать «неавторизованные» ответы, так как это фактически не дает ему информации для проверки.
cdhowie
3
Почему бы просто не заблокировать его IP?
Хоган
2
Отключите ваш сервер.
сказал Ибрагим Хашими
Посмотрите на мой ответ - это стандартная вещь, я удивлен, что вы не получили ответ, который указывает на какую-то систему обнаружения вторжений ранее.
причины
@ Говорят, отключение вашего сервера - одна из худших вещей, которые вы можете сделать. Помимо DoSing себя, см. Также security.stackexchange.com/q/181/33
AviD

Ответы:

37

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

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

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

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

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

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

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

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

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

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

неразумность
источник
4

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

ip ro add blackhole 10.69.96.0/24
ip ro flush cache

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

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

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

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

sybreon
источник
2

То, что вы ищете, это модуль 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 на основе аномалий и, возможно, обучить систему самостоятельно. Но это вряд ли произойдет, если у вас нет настоящих больших врагов или кого-то с корпоративной повесткой дня.

vagarwal
источник
0

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

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

РЕДАКТИРОВАТЬ: Согласен с вышеизложенным, это больше похоже на вопрос о сбое сервера.

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

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

Крис ван дер Маст
источник
0

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

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

Натан Чер
источник
это не совсем решение, резать желе топором. И B, DDOS не очень хорошая рекомендация (хотя, как я полагаю, вы шутили), нет причин для того, чтобы а) сделать что-нибудь, б) увеличить нагрузку на ваш сервер!
Труфа
0

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

Корин
источник
0

если вы программист, вы можете работать с событием .net Begin_Request и поместить туда свой "сон"

Letseatlunch
источник