Jak spowolnić hakera

17

Niektóre dzieciaki ze skryptów w Delhi w Indiach próbują włamać się na naszą stronę od ostatniej nocy. Napisał skrypt przeglądarki, który wysyła żądania do naszego serwera w ogromnych zagnieżdżonych pętlach, próbując wszystkiego pod słońcem.

Nigdzie się nie przedostaje i nie omija nawet naszej podstawowej obrony (ale wypełnia nasze pliki dziennika).

Odsyłamy odpowiedź 403 Unauthorizedna jego prośby prawie jak tylko się pojawią, ale im szybciej blokujemy jego prośby, tym szybciej działa skrypt.

Chcielibyśmy wprowadzić pewnego rodzaju „opóźnienie” przed odesłaniem odpowiedzi 403. Im dłużej, tym lepiej.

Pytanie: Jak możemy opóźnić próby włamania bez wpływu na resztę strony?

  • Zakładam, że Sleep (15000) w jego wątku byłby złą wiadomością dla innych odwiedzających stronę.
  • Rozpinanie nowego wątku tylko dla niego wydaje się przesadą.
  • Czy istnieje inny sposób wysłania opóźnionej odpowiedzi?
  • Jak długo możemy zmusić jego przeglądarkę do czekania? Przypuszczam, że nie dbam o to, czy dostanie 403 Unauthorizedbłąd, czy w końcu przekroczy limit czasu, więc prawdopodobnie moglibyśmy nawet czekać na czas nieokreślony / nieskończony.
Flipster
źródło
36
Czy istnieje powód, dla którego nie można tak skonfigurować zapory sieciowej, aby zmniejszała ruch pochodzący z jego adresu IP? Ten problem można lepiej rozwiązać na poziomie sieci niż na poziomie aplikacji. Zmniejszenie ruchu oznacza, że ​​będzie musiał tam siedzieć, aż upłynie limit czasu żądania połączenia. Brak odpowiedzi w ogóle jest o wiele bardziej skuteczny niż odrzucanie „nieautoryzowanych” odpowiedzi, ponieważ nie daje mu żadnych informacji do sprawdzenia.
cdhowie,
3
Dlaczego nie zablokować jego adresu IP?
Hogan,
2
Odłącz serwer.
Sayed Ibrahim Hashimi,
Spójrz na moją odpowiedź - to standardowa rzecz, jestem zaskoczony, że wcześniej nie dostałeś odpowiedzi, która wskazuje na jakiś system wykrywania włamań.
Nieuzasadniony
@Sayed, odłączenie serwera to jedna z najgorszych rzeczy, jakie możesz zrobić. Oprócz DoSing siebie, zobacz także security.stackexchange.com/q/181/33
AviD

Odpowiedzi:

37

Gdzieś przed twoim serwerem powinna znajdować się osobna zapora ogniowa. Chcesz zablokować żądania dostępu do twojego serwera, tak aby jego adres IP już nie istniał.

Joel Coel
źródło
1
Cześć Joel, to jest odpowiedź „zaakceptowana”, ale ponieważ pytanie zostało przeniesione z StackOverflow, wydaje się, że nie mam uprawnień, aby je zaakceptować. Dałem twoją odpowiedź +1. Tak właśnie zrobię.
Flipster,
2
@flip kliknij swoje imię i nazwisko, a następnie link „konta” w połowie strony po prawej stronie. To pozwoli ci powiązać to z powrotem z kontem przepełnienia stosu i odzyskać własność pytania.
Joel Coel,
1
ale chcesz to zrobić automatycznie - nie ma sensu zajmować się takimi kwestiami indywidualnie dla każdego przypadku. (patrz moja odpowiedź)
Unreason
5

Istnieją duże i małe systemy wykrywania włamań, które zrobią to automatycznie w zależności od różnych filtrów, honeypotów i innych mechanizmów

Na przykład zobacz fail2ban, który można skonfigurować tak, aby podejmował działania na podstawie analizy dzienników.

W ten sposób możesz

  • łatwo odfiltruj pojedynczy adres IP, z którego nadchodzi atak, bez wpływu na innych użytkowników Twojej witryny
  • możesz napisać własne wyrażenie regularne do analizy dzienników
  • możesz zdefiniować własne działania (przepustnica zamiast banowania itp.)

Istnieją inne i większe narzędzia, zobacz także sekcję na Wikipedii.

Ponieważ twoje pytanie jest oznaczone jako asp.net, zakładam, że twoją platformą serwerową jest Windows. Jeśli jednak korzystasz z zapory linuksowej, możesz wypróbować powyższe

  • umieść zaporę linux między WAN a serwerem
  • dać dostęp do maszyny firewall swoim dziennikom IIS
  • napisz wyrażenie regularne, aby to przeanalizować
  • podłącz go do istniejących szablonów banowania

Taka zapora ogniowa może być uruchomiona na bardzo skromnym sprzęcie - pomyśl nawet coś w rodzaju routerów Linksys (patrz tutaj ), aby uzyskać bardzo przyzwoitą przepustowość łącza.

Nieuzasadniony
źródło
4

Jeśli pochodzą z określonego adresu IP lub bloku adresu, możesz dodać do niego trasę blackhole:

ip ro add blackhole 10.69.96.0/24
ip ro flush cache

Możesz to również osiągnąć za pomocą reguły iptables, ale zdaj sobie sprawę, że reguły iptables są trawersowane liniowo, więc jeśli zaczniesz dodawać reguły iptables dla każdego pojawiającego się szkodnika, możesz zacząć pochłaniać dużo procesora. Tabele routingu są zoptymalizowane do obsługi wielu, wielu wpisów. Na przykład jedno z moich urządzeń ma w tabeli routingu 350 000 wpisów bez problemu. Ale gdybym miał reguły iKable 3K, pudełko prawie na pewno by się przewróciło.

Jeśli spróbujesz zrobić coś, na czym aplikacja śpi przez wiele sekund na tych połączeniach, możesz w końcu powiązać wystarczającą ilość zasobów, aby uzasadnione żądania nie mogły uzyskać żadnych zasobów.

Sean Reifschneider
źródło
1
+1. Podobało mi się twoja informacja o względnej wydajności routingu w porównaniu do netfiltera w tej sytuacji. iptablesw jądrze z ipsetfunkcją może bardzo skutecznie dopasowywać ogromne listy adresów IP, ale wydaje się, że żadne z głównych dystrybucji nie włącza się ipsetw ich jądrach.
Steven poniedziałek,
Dobra uwaga, ipset jest czymś, co wydaje się być przydatne do tego rodzaju rzeczy, ale po prostu nie jest łatwo dostępne. Istnieje inny system o nazwie nf-hipac, który był bardziej ogólnym optymalizatorem iptables, ale ostatni post na liście mailingowej i ostatnie wydanie pochodzi z 2005 roku.
Sean Reifschneider
3

Zdajesz nie chcą zwolnić go z powodu spowolnienia go nieprawidłowo weźmie swoją stronę w dół tak, jakby był pod atakiem DoS ponieważ twoi wątków będzie „zajęty” obsługi żądań tej osoby. Co chcesz zrobić, to zablokować jego adres IP i skończyć z nim. Nie ma powodu, aby nękać osobę, która to robi.

sybreon
źródło
2

To, czego szukasz, to moduł Apache mod_evaisve.

W dystrybucjach opartych na Debianie zainstaluj go za pomocą

apt-get install libapache2-mod-evasive

CentOS / RHEL

yum install mod_evasive

mod_evasive śledzi żądania przychodzące do Apache i blokuje IP za pomocą iptables, które przekraczają wartość progową. Jest to doskonałe narzędzie przeciwko atakom DoS opartym na HTTP, a nawet rozproszonym atakom DoS, gdy atakuje Cię ogromny botnet z tysiącami różnych adresów IP.

Działa jako moduł Apache ładowany podczas działania, a nie jako osobny demon.

Chociaż inteligentny atakujący, który kontroluje ogromny botnet, może nadal obniżyć twój serwer WWW, regulując czas żądań wysyłanych przez każde zombie w botnecie, tak aby żaden adres IP nigdy nie przekroczył wartości progowej.

W takim przypadku musisz użyć systemu IDS opartego na anomalii i prawdopodobnie samodzielnie szkolić system. Jest to jednak bardzo mało prawdopodobne, chyba że masz prawdziwych dużych wrogów lub kogoś, kto ma agendę korporacyjną.

Vagarwal
źródło
0

Jeśli używasz Linuksa, użyj iptables, aby ograniczyć faceta do polubienia 1 bajtu / s z dużymi opóźnieniami i sprawić, że zajmie mu to wieczność, nawet jeśli uda mu się zrealizować jedno żądanie. Jeśli jest rozpowszechniany, to niewiele pomoże.

Nie jestem pewien, jak zrobiłbyś to w systemie Windows, ale możesz znaleźć podobne opcje w routerze lub zaporze sprzętowej, jeśli taką masz.

EDYCJA: Zgodnie z powyższym jest to bardziej pytanie o awarię serwera.

Robert
źródło
2
Ta technika jest czasami stosowana w atakach DDoS - przez atakującego. Robienie tego na serwerze przynosi efekt przeciwny do zamierzonego. <_ <
p-statyczny
Nie jest słuszne stwierdzenie, że jest on wykorzystywany w atakach DDoS - taki efekt jest celem ataków DDoS. Robienie tego na serwerze / firewallu, ale tylko atakowanie komputerów jest jedyną prawdziwą obroną (AFAIK).
Nieuzasadniony
0

Jeśli adres IP faceta jest dość stały, możesz utworzyć niestandardowy moduł HttpModule, podłącz go poprzez zmianę w pliku web.config i opóźnij go, gdy zostanie rozpoznany jako ten adres IP. Możesz też odesłać mu jakieś 404 kody lub skierować go w inne miejsce.

Kris van der Mast
źródło
0

Wiesz, że są w Indiach. Czy Twoja witryna ma znaczących indyjskich klientów, co wykluczałoby po prostu blokowanie całego zakresu adresów IP na poziomie zapory ogniowej do momentu zatrzymania przepływu? Z pewnością nie jest to zdecydowane rozwiązanie, ale jeśli masz do czynienia z typowym „skrypciarzem”, powinno wystarczyć, aby ich zniechęcić i wysłać do innego celu.

Co więcej, jeśli pochodzi z jednego adresu IP, możesz odpowiedzieć własnym atakiem typu „odmowa usługi” :)

Nathan Chere
źródło
to nie jest tak naprawdę rozwiązanie, przecinanie galaretki siekierą. I B, DDOS nie jest tak naprawdę dobrą rekomendacją (choć zakładam, że żartujesz), nie ma powodu, aby a) robić coś w stylu b) obciążać twój serwer!
Trufa,
0

Oprócz otrzymanej odpowiedzi będziesz chciał zapisać swoją dokumentację (dzienniki, ślady) i dostarczyć ją swojemu usługodawcy. Jest to najskuteczniejsze podczas incydentu, ponieważ usługodawca może być świadkiem wtargnięcia. Nawet jeśli Twoje środki są skuteczne, ważne jest, aby ograniczyć dalsze próby i pomaga to twojemu dostawcy w eskalowaniu zapytania do dostawcy usług osoby atakującej; prawdopodobnie najskuteczniejszym działaniem dla dostawcy atakującego jest odmowa obsługi jego klienta, zidentyfikowanego atakującego.

Corin
źródło
0

jeśli jesteś programistą, możesz pracować ze zdarzeniem .net Begin_Request i umieścić tam swój „sen”

Letseatlunch
źródło