Некоторый сценарист в Дели, Индия, пытается взломать наш сайт с прошлой ночи. Он написал браузерный скрипт, который обрабатывает запросы нашего сервера в виде массивных вложенных циклов, пробуя все под солнцем.
Он никуда не денется и не преодолеет даже нашу основную защиту (но он заполняет наши лог-файлы).
Мы отправляем ответ 403 Unauthorized
на его запросы почти сразу после их поступления, но чем быстрее мы блокируем его запросы, тем быстрее выполняется его сценарий.
Мы хотели бы ввести некоторую «задержку» перед отправкой ответа 403. Чем дольше, тем лучше.
Вопрос: Как мы можем отложить попытки взлома, не затрагивая остальную часть сайта?
- Я предполагаю, что сон (15000) в его ветке будет плохой новостью для других посетителей сайта.
- Раскручивание новой нити только для него кажется излишним.
- Есть ли другой способ отправить отложенный ответ?
- Как долго мы можем заставить его браузер ждать? Я полагаю, мне не важно, получит ли он
403 Unauthorized
ошибку или в конечном итоге истечет время ожидания, так что мы могли бы даже сделать неопределенное / бесконечное ожидание.
Ответы:
Где-то перед вашим веб-сервером должен быть отдельный брандмауэр. Вы хотите, чтобы запросы там никогда не доходили до вашего сервера, чтобы его IP больше не существовал.
источник
Существуют настоящие большие и маленькие системы обнаружения вторжений, которые сделают это автоматически для вас в зависимости от различных фильтров, приманок и других механизмов.
Например, см. Fail2ban, который можно настроить для выполнения действий на основе анализа журналов.
Таким образом, вы можете
Существуют и другие, более крупные инструменты, см. Также раздел «Википедия».
Поскольку ваш вопрос помечен как asp.net, я предполагаю, что ваша серверная платформа - Windows. Тем не менее, если вы используете Linux брандмауэр, вы можете попробовать выше
Такой брандмауэр может быть запущен на очень скромном оборудовании - подумайте даже о маршрутизаторах Linksys (см. Здесь ) для очень приличной пропускной способности канала.
источник
Если они приходят с определенного IP-адреса или адресного блока, вы можете добавить к нему черный маршрут:
Вы также можете сделать это, используя правило iptables, но при этом понимайте, что правила iptables обходятся линейно, поэтому, если вы начнете добавлять правила iptables для каждого возникающего злоумышленника, вы можете начать израсходовать много ресурсов ЦП. Таблицы маршрутизации оптимизированы для обработки многих, многих записей. Например, один из моих блоков имеет 350K записей в своей таблице маршрутизации без проблем. Но если бы у меня были правила 3K iptables, коробка почти наверняка упала бы.
Если вы попытаетесь сделать что-то, где ваше приложение не будет спать в течение многих секунд на этих соединениях, вы можете в итоге связать достаточно ресурсов, чтобы законные запросы не могли получить никаких ресурсов.
источник
iptables
в ядре сipset
такими возможностями можно очень эффективно сопоставлять огромные списки IP-адресов, но, похоже, ни один из основных дистрибутивов не включаетipset
их ядра.Вы не хотите замедлять его, потому что при неправильном замедлении ваш сайт будет отключен, как если бы он подвергался DoS-атаке, поскольку ваши потоки будут «заняты», обслуживая запросы этого человека. Что вы хотите сделать, это заблокировать его IP и покончить с этим. Нет никаких причин для приманки человека, делающего это.
источник
То, что вы ищете, это модуль Apache mod_evaisve.
На дистрибутивах на основе Debian установите его, используя
CentOS / RHEL
mod_evasive отслеживает запросы, поступающие в Apache, и блокирует IP, используя iptables, которые превышают пороговое значение. Это идеальный инструмент для защиты от DoS-атак на основе HTTP и даже от распределенных DoS-атак, когда вы нацелены на огромный ботнет с тысячами разных IP-адресов.
Он работает как модуль Apache, загружаемый во время выполнения, а не как отдельный демон.
Хотя умный злоумышленник, управляющий огромным ботнетом, все равно может отключить ваш веб-сервер, синхронизируя запросы, отправляемые каждым зомби в ботнете, чтобы ни один из IP-адресов никогда не превышал пороговое значение.
В этом случае вы должны использовать IDS на основе аномалий и, возможно, обучить систему самостоятельно. Но это вряд ли произойдет, если у вас нет настоящих больших врагов или кого-то с корпоративной повесткой дня.
источник
Если вы используете linux, используйте iptables, чтобы ограничить парня до 1 байта / с с большими задержками и заставить его потратить целую вечность даже на выполнение одного запроса. Если он распространяется, это не сильно поможет.
Я не уверен, как бы вы это делали в Windows, но вы можете найти некоторые похожие опции в вашем маршрутизаторе или аппаратном брандмауэре, если он у вас есть.
РЕДАКТИРОВАТЬ: Согласен с вышеизложенным, это больше похоже на вопрос о сбое сервера.
источник
Если IP-адрес парня довольно постоянный, вы можете создать собственный HttpModule, подключите его через изменение в файле web.config и задержите его, когда он будет распознан как этот IP-адрес. Или вы можете отправить ему обратно около 404 кодов или перенаправить его куда-нибудь еще.
источник
Вы знаете, что они в Индии. Есть ли у вашего сайта значительные индийские клиенты, которые не позволят просто блокировать весь диапазон IP-адресов на уровне брандмауэра с шагом до тех пор, пока поток не прекратится? Это, конечно, не твердое решение, но если вы просто имеете дело с типичным «детским сценарием», этого должно быть достаточно, чтобы отговорить их и отправить их к другой цели.
Еще лучше, если это с одного IP, вы можете ответить своей атакой отказа в обслуживании :)
источник
В дополнение к полученному ответу вы захотите сохранить свою документацию (журналы, следы) и предоставить ее своему поставщику услуг. Это наиболее эффективно во время инцидента, поскольку ваш поставщик может стать свидетелем вторжения. Даже если вы добились успеха в своих мерах, важно ограничить дальнейшие попытки, и это поможет вашему провайдеру перевести запрос к провайдеру злоумышленника; возможно, наиболее эффективным действием для провайдера злоумышленника является отказ от обслуживания своего клиента, идентифицированного злоумышленника.
источник
если вы программист, вы можете работать с событием .net Begin_Request и поместить туда свой "сон"
источник