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 Unauthorized
na 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 Unauthorized
błąd, czy w końcu przekroczy limit czasu, więc prawdopodobnie moglibyśmy nawet czekać na czas nieokreślony / nieskończony.
Odpowiedzi:
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ł.
źródło
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
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
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.
źródło
Jeśli pochodzą z określonego adresu IP lub bloku adresu, możesz dodać do niego trasę blackhole:
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.
źródło
iptables
w jądrze zipset
funkcją może bardzo skutecznie dopasowywać ogromne listy adresów IP, ale wydaje się, że żadne z głównych dystrybucji nie włącza sięipset
w ich jądrach.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.
źródło
To, czego szukasz, to moduł Apache mod_evaisve.
W dystrybucjach opartych na Debianie zainstaluj go za pomocą
CentOS / RHEL
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ą.
źródło
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.
źródło
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.
źródło
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” :)
źródło
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.
źródło
jeśli jesteś programistą, możesz pracować ze zdarzeniem .net Begin_Request i umieścić tam swój „sen”
źródło