Як сповільнити хакера


17

Деякий сценарій малюк у Делі, Індія, намагається зламати наш сайт з минулої ночі. Він написав сценарій браузера, який робить запити нашого сервера в масивних вкладених петлях, намагаючись усе під сонцем.

Він нікуди не дістається і не минає навіть наших основних засобів захисту (але він заповнює наші файли журналів).

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

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

Питання: Як ми можемо відкласти спроби злому, не впливаючи на решту сайту?

  • Я припускаю, що сон (15000) на його темі буде поганою новиною для інших відвідувачів сайту.
  • Скручування нової нитки тільки для нього здається непосильним.
  • Чи є інший спосіб надіслати відповідь із затримкою?
  • Як довго ми можемо змусити його браузер чекати? Я вважаю, що я не дуже переймаюся, чи отримає він 403 Unauthorizedпомилку або з часом вийде, тому ми могли, мабуть, навіть зробити невизначене / нескінченне очікування.

36
Чи є причина, що ви не можете просто налаштувати ваш брандмауер, щоб скинути трафік, що надходить з його IP-адреси? Цю проблему краще вирішити на мережевому рівні, ніж на рівні додатків. Упадання трафіку означає, що йому доведеться сидіти там, поки не вичерпається запит на з'єднання. І зовсім не відповідати набагато ефективніше, ніж відкидати "несанкціоновані" відповіді, оскільки це фактично не дає йому інформації для перевірки.
cdhowie

3
Чому б просто не заблокувати його ip?
Хоган

2
Відключіть підключення сервера.
Сказав Ібрагім Хашімі

Подивіться на мою відповідь - це стандартна річ, я здивований, що раніше ви не отримали відповіді, яка вказує на якусь систему виявлення вторгнень.
Нерозумно

@ Скажімо, відключення вашого сервера - одна з найгірших речей, яку ви можете зробити. Окрім DoSing себе, дивіться також security.stackexchange.com/q/181/33
AviD

Відповіді:


37

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


1
Привіт Джоеле, це "прийнята" відповідь, але оскільки питання було передано від StackOverflow, виявляється, що я не маю повноважень реально його прийняти. Я дав вашу відповідь +1. Це саме те, що я зроблю.
Фліпстер

2
@flip натисніть своє ім’я, а потім посилання "акаунти" внизу сторінки праворуч. Це дозволить вам пов’язати це назад із вашим обліковим записом переповнення стека та відновити право власності на питання.
Джоель Коель

1
але ви також хочете робити це автоматично - немає сенсу займатися подібними питаннями в кожному конкретному випадку. (див. мою відповідь)
Нерозумно

5

Існують фактичні великі та малі системи виявлення вторгнень, які робитимуть це автоматично для вас залежно від різних фільтрів, медових горщиків та інших механізмів

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

Таким чином можна

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

Є інші та більші інструменти, дивіться також дивіться також розділ у Вікіпедії.

Оскільки ваше запитання позначено як asp.net, я вважаю, що ваша платформа сервера - це windows. Але якщо використання брандмауера Linux є можливим, ви можете спробувати вище

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

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


4

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

ip ro add blackhole 10.69.96.0/24
ip ro flush cache

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

Якщо ви спробуєте зробити щось, коли ваша програма спить протягом багатьох секунд на цих з'єднаннях, ви, можливо, зв’яжете достатньо ресурсів, щоб законні запити не змогли отримати жодних ресурсів.


1
+1. Мені сподобалась ваша інформація про відносну ефективність маршрутизації проти netfilter у цій ситуації. iptablesна ядрі з ipsetможливістю може дуже ефективно відповідати величезним спискам IP-адрес, але, здається, жоден з основних дистрибутивів не дозволяє ipsetїх ядрами.
Стівен, понеділок,

Добре, ipset - це те, що здається, було б корисно для подібних речей, але просто недоступне. Існує ще одна система під назвою nf-hipac, яка була більш загальним оптимізатором iptables, але остання публікація у списку розсилки та останній реліз - з 2005 року.
Шон Рейфшнайдер

3

Ви не хочете уповільнювати його, оскільки повільне його уповільнення призведе до того, що ваш сайт буде начебто під атакою DoS, оскільки ваші теми будуть "зайняті" обслуговуванням запитів цієї людини. Що ви хочете зробити, це заблокувати його IP та зробити з ним. Немає причин приманкувати людину, яка це робить.


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 на основі аномалії та, ймовірно, самостійно навчати систему. Але це навряд чи станеться, якщо у вас немає справжніх великих ворогів чи хтось із корпоративним планом.


0

Якщо ви використовуєте Linux, використовуйте iptables, щоб обмежити хлопцеві сподобався 1 байт / с з великими затримками і змусити його вічно зайняти навіть один запит. Якщо він буде розподілений, це не дуже допоможе.

Я не впевнений, як би ви це зробили в Windows, але ви можете знайти подібні параметри в брандмауері або апаратному брандмауері, якщо у вас є.

EDIT: Погоджене з вищезазначеним, це більше нагадує питання про помилку сервера.


2
Цей прийом іноді використовується в DDoS-атаках - зловмисником. Робити це на сервері - це свого роду контрпродуктивно. <_ <
p-статичний

Не дуже правильно сказати, що він використовується в DDoS-атаках - такий ефект є метою DDoS-атак. Робити це на сервері / брандмауері, але лише атакувати комп’ютери - це єдиний справжній захист (AFAIK).
Нерозумно

0

Якщо IP-адреса хлопця є досить постійною, ви можете створити користувальницький HttpModule, підключіть його через зміну файлу web.config і затримайте його, коли він буде визнаний цією IP-адресою. Або ви можете надіслати йому назад якісь 404 коди або перенаправити його кудись кудись.


0

Ви знаєте, що вони в Індії. Чи є на вашому сайті значні індійські меценати, які б перешкоджали просто блокувати весь діапазон IP на рівні брандмауера з кроком, поки потік не припиняється? Це, звичайно, не є надійним рішенням, але якщо ви просто маєте справу з типовим «сценарієм малюка», його повинно вистачити, щоб відбити їх і відправити до іншої цілі.

Ще краще, якщо це з однієї IP-адреси, ви можете відповісти власною атакою відмови в службі :)


це насправді не рішення, різання желе сокирою. І B, DDOS насправді не дуже хороша рекомендація (хоча я припускаю, що ви жартували), немає причин для того, щоб a) зробіть що-небудь іллагель б) додайте більше навантаження на ваш сервер!
Труфа

0

Крім отриманої відповіді, ви захочете зберегти свою документацію (журнали, сліди) та надати їх своєму постачальнику послуг. Це найбільш ефективно під час інциденту, оскільки ваш провайдер може стати свідком настання. Незважаючи на те, що ви досягли успіху в своїх заходах, важливо скоротити подальші спроби, і це допоможе вашому провайдеру в ескалації запиту до постачальника послуг зловмисника; Можливо, найефективнішою є дія, яка надає зловмисникові відмову від послуги своєму клієнту, визначеному зловмиснику.


0

якщо ваш програміст, ви можете працювати з подією .net Begin_Request і покласти там «сон»

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.