Współpracownik(y): KirstenS, Paul McMillan, Raesene, Adedov, Dinis.Cruz, JoE, Daniel Waller, kingthorin
Blokowanie ataków Brute Force
częstym zagrożeniem dla twórców stron internetowych jest atak polegający na odgadnięciu hasła znany jako atak brute force.Atak brute-force to próba odkrycia hasła poprzez systematyczne wypróbowanie każdej możliwej kombinacji liter, cyfr i symboli, aż do odkrycia jedynej poprawnej kombinacji, która działa.,Jeśli Twoja strona internetowa wymaga uwierzytelnienia użytkownika, jesteś dobrym celem ataku brute-force.
atakujący zawsze może odkryć hasło za pomocą ataku brute-force, ale minusem jest to, że znalezienie go może zająć lata.W zależności od długości i złożoności hasła mogą istnieć tryliony możliwych kombinacji.
aby trochę przyspieszyć, atak brute-force może rozpocząć się od słów słownikowych lub nieco zmodyfikowanych słów słownikowych, ponieważ większość ludzi będzie używać tych, a nie całkowicie przypadkowych haseł., Ataki te nazywane są atakami słownikowymi lub hybrydowymi atakami brute-force.Ataki Brute-force narażają konta użytkowników na ryzyko i zalewają Twoją witrynę niepotrzebnym ruchem.
hakerzy uruchamiają ataki brute-force przy użyciu powszechnie dostępnych narzędzi, które wykorzystują listy słów i inteligentne zestawy reguł, aby inteligentnie i automatycznie odgadnąć hasła użytkowników. Chociaż takie ataki są łatwe do wykrycia, nie są tak łatwe do zapobieżenia.
na przykład wiele narzędzi HTTP brute-force może przekazywać żądania za pośrednictwem listy otwartych serwerów proxy., Ponieważ każde żądanie wydaje się pochodzić z innego adresu IP, nie można zablokować tych ataków po prostu blokując adres IP address.To co więcej, niektóre narzędzia próbują przy każdej próbie użyć innej nazwy użytkownika i hasła, więc nie można zablokować jednego konta Za nieudane próby hasła.
blokowanie kont
najbardziej oczywistym sposobem blokowania ataków brute-force jest po prostu blokowanie kont po określonej liczbie błędnych prób hasła.,Blokada konta może trwać określony czas, na przykład jedną godzinę, lub konta mogą pozostać zablokowane do momentu ręcznego odblokowania przez administratora.
jednak blokada konta nie zawsze jest najlepszym rozwiązaniem, ponieważ ktoś może łatwo nadużywać środków bezpieczeństwa i zablokować setki użytkowników accounts.In fakt, niektóre witryny internetowe doświadczają tak wielu ataków, że nie są w stanie wyegzekwować polityki blokady, ponieważ stale odblokowują konta klientów.,
problemy z blokadą kont to:
- atakujący może spowodować odmowę usługi (DoS) poprzez zablokowanie dużej liczby kont.
- ponieważ nie można zablokować konta, które nie istnieje, zablokowane zostaną tylko poprawne nazwy kont. Atakujący może wykorzystać ten fakt do pobrania nazw użytkowników z witryny, w zależności od odpowiedzi na błędy.
- atakujący może spowodować dywersję, blokując wiele kont i zalewając help desk połączeniami wsparcia.,
- atakujący może stale blokować to samo konto, nawet kilka sekund po odblokowaniu go przez administratora, skutecznie wyłączając konto.
- blokada konta jest nieskuteczna w przypadku powolnych ataków, które próbują tylko kilku haseł co godzinę.
- blokada konta jest nieskuteczna wobec ataków, które próbują jednego hasła przeciwko dużej liście nazw użytkowników.
- blokada konta jest nieskuteczna, jeśli atakujący używa listy kombinacji nazwy użytkownika i hasła i zgaduje poprawnie przy pierwszych kilku próbach.,
- potężne konta, takie jak konta administratora, często omijają zasady blokowania, ale są to najbardziej pożądane konta do ataku. Niektóre systemy blokują konta administratora tylko po zalogowaniu się w sieci.
- nawet po zablokowaniu konta atak może być kontynuowany, pochłaniając cenne zasoby ludzkie i komputerowe.
Blokada konta jest czasami skuteczna, ale tylko w kontrolowanych środowiskach lub w przypadkach, gdy ryzyko jest tak duże, że nawet ciągłe ataki DoS są lepsze niż kompromis konta.,W większości przypadków blokada konta jest jednak niewystarczająca do powstrzymania ataków brute-force.
rozważ na przykład serwis aukcyjny, na którym kilku oferentów walczy o ten sam przedmiot.Jeśli strona aukcyjna wymusi blokadę konta, jeden oferent może po prostu zablokować konta innych w ostatniej chwili aukcji, uniemożliwiając im złożenie wygranej bids.An atakujący może użyć tej samej techniki do blokowania krytycznych transakcji finansowych lub komunikacji e-mail.,
Pliki cookie urządzenia
można również rozważyć oddzielenie prób uwierzytelniania od znanych i nieznanych przeglądarek lub urządzeń.W artykule „spowolnione zgadywanie online za pomocą Plików cookie” zaproponowano mechanizm blokowania na podstawie informacji o tym, czy konkretna przeglądarka została już użyta do pomyślnego logowania.Protokół jest mniej podatny na ataki DoS niż zwykłe blokowanie konta, a jednocześnie skuteczny i łatwy do wdrożenia.,
znajdowanie innych środków zaradczych
jak opisano, blokady konta zwykle nie są praktycznym rozwiązaniem, ale są inne sztuczki, aby poradzić sobie z atakami brute force.Po pierwsze, ponieważ sukces ataku zależy od czasu, łatwym rozwiązaniem jest wprowadzanie losowych przerw podczas sprawdzania hasła.Dodanie nawet kilku sekundowej pauzy może znacznie spowolnić atak brute-force, ale nie będzie przeszkadzać większości legalnych użytkowników, którzy logują się na swoje konta.,
zauważ, że chociaż dodanie opóźnienia może spowolnić atak jednowątkowy, jest mniej skuteczne, jeśli atakujący wysyła wiele jednoczesnych żądań uwierzytelniania.
innym rozwiązaniem jest zablokowanie adresu IP z wieloma nieudanymi logowaniami.Problem z tym rozwiązaniem polega na tym, że możesz nieumyślnie zablokować duże grupy użytkowników, blokując serwer proxy używany przez dostawcę usług internetowych lub dużą firmę.Innym problemem jest to, że wiele narzędzi wykorzystuje listy proxy i wysyła tylko kilka żądań z każdego adresu IP przed przejściem do następnego.,
korzystając z powszechnie dostępnych list otwartych proxy, atakujący może łatwo obejść dowolny mechanizm blokowania adresów IP.Ponieważ większość witryn nie blokuje się po jednym nieudanym haśle, atakujący może użyć dwóch lub trzech prób na proxy.An atakujący z listą 1000 proxy może próbować 2000 lub 3000 haseł bez blokowania.
niemniej jednak, pomimo słabych stron tej metody, strony internetowe, które doświadczają dużej liczby ataków (w szczególności strony dla dorosłych), wybierają blokowanie adresów IP proxy.,
jednym z prostych, ale zaskakująco skutecznych rozwiązań jest zaprojektowanie witryny tak, aby nie używała przewidywalnego zachowania dla nieudanych haseł.Na przykład większość witryn internetowych zwraca kod „Błąd HTTP 401” z błędem hasła, chociaż niektóre witryny zamiast tego zwracają kod „sukces HTTP 200”, ale kierują użytkownika do strony wyjaśniającej nieudaną próbę hasła.To oszukuje niektóre zautomatyzowane systemy, ale jest również łatwe do obejścia.
lepszym rozwiązaniem może być zmiana zachowania na tyle, aby ostatecznie zniechęcić wszystkich, ale najbardziej oddanych hakerów.,Możesz na przykład za każdym razem używać różnych komunikatów o błędach lub czasami przepuścić użytkownika na stronę, a następnie poprosić go ponownie o hasło.
niektóre zautomatyzowane narzędzia brute-force pozwalają atakującemu ustawić pewne łańcuchy wyzwalające, które wskazują na nieudaną próbę hasła.Na przykład, jeśli strona wynikowa zawiera frazę „zła nazwa użytkownika lub hasło”, narzędzie będzie wiedzieć, że poświadczenia nie powiodły się i spróbuje następnego z listy.,Prostym sposobem na oszukanie tych narzędzi jest włączenie również tych zwrotów jako komentarzy w źródle HTML strony, którą otrzymują po pomyślnym uwierzytelnieniu.
Po jednej lub dwóch nieudanych próbach logowania, możesz poprosić użytkownika nie tylko o nazwę użytkownika i hasło, ale także o odpowiedź na tajne pytanie.Powoduje to nie tylko problemy z automatycznymi atakami, ale także uniemożliwia atakującemu uzyskanie dostępu, nawet jeśli poprawi nazwę użytkownika i hasło.,
można również wykryć dużą liczbę ataków w całym systemie i w tych warunkach zachęcić wszystkich użytkowników do odpowiedzi na ich tajne pytania.
Inne techniki, które warto rozważyć to:
- dla zaawansowanych użytkowników, którzy chcą chronić swoje konta przed atakiem, daj im opcję zezwalania na logowanie tylko z określonych adresów IP.
- przypisuj unikalne adresy URL logowania do bloków użytkowników, aby nie wszyscy użytkownicy mogli uzyskać dostęp do witryny z tego samego adresu URL.,
- użyj a, aby zapobiec automatycznym atakom
- zamiast całkowicie zablokować konto, umieść je w trybie blokady o ograniczonych możliwościach.
atakujący często mogą samodzielnie obejść wiele z tych technik, ale łącząc kilka technik, można znacznie ograniczyć brute-force attacks.It może być trudno powstrzymać atakującego, który jest zdeterminowany, aby uzyskać hasło specjalnie z twojej strony internetowej, ale te techniki z pewnością mogą być skuteczne w przypadku wielu ataków, w tym tych od początkujących hakerów.,Techniki te wymagają również więcej pracy ze strony atakującego, co daje więcej możliwości wykrycia ataku, a może nawet identyfikacji atakującego.
chociaż ataki brute-force są trudne do całkowitego powstrzymania, są łatwe do wykrycia, ponieważ każda nieudana próba logowania rejestruje kod statusu HTTP 401 na serwerze WWW logs.It ważne jest, aby monitorować pliki logów pod kątem ataków brute-force – w szczególności, mieszanych 200 kodów statusowych, które oznaczają, że atakujący znalazł poprawne hasło.,ins with a refering URL of someone ' s mail or IRC client
ataki brute force są zaskakująco trudne do całkowitego powstrzymania, ale dzięki starannemu projektowi i wielu środkom zaradczym można ograniczyć narażenie na te ataki.,
ostatecznie jedyną najlepszą obroną jest upewnienie się, że użytkownicy przestrzegają podstawowych zasad silnych haseł: używaj długich nieprzewidywalnych haseł, unikaj słów słownikowych, unikaj ponownego użycia haseł i regularnie zmieniaj hasła.
całkowicie zautomatyzowany publiczny test Turinga odróżniający komputery od ludzi, czyli program pozwalający odróżnić ludzi od komputerów.Po raz pierwszy szeroko stosowane przez Alta Vista, aby zapobiec automatycznym przesyłaniu wyszukiwania, s są szczególnie skuteczne w zatrzymywaniu wszelkiego rodzaju zautomatyzowanych nadużyć, w tym ataków brute-force.,
pracują przedstawiając jakiś test, który jest łatwy do przejścia dla ludzi, ale trudny do przejścia dla komputerów; dlatego mogą z pewną pewnością stwierdzić, czy po drugiej stronie jest człowiek.
Aby a był skuteczny, człowiek musi być w stanie odpowiedzieć poprawnie na test tak blisko 100 procent czasu, jak to możliwe.Komputery muszą zawieść tak blisko 100 procent czasu, jak to możliwe.Naukowcy z Carnegie Mellon ' s School of Computer Science nieustannie pracują nad doskonaleniem i wprowadzaniem nowych s…,
jeśli rozwijasz swój własny , pamiętaj, że nie liczy się to, jak trudne jest pytanie-tylko jak prawdopodobne jest, że komputer uzyska poprawną odpowiedź.Kiedyś widziałem, że przedstawia użytkownikowi zdjęcie trzech zebr, z pytaniem wielokrotnego wyboru, z pytaniem, ile zebr jest w picture.To odpowiedz na pytanie, klikasz jeden z trzech przycisków.
chociaż programowi komputerowemu byłoby bardzo trudno zarówno zrozumieć pytanie, jak i zinterpretować obraz, program mógłby po prostu losowo odgadnąć dowolną odpowiedź i poprawić ją jedną trzecią czasu., Chociaż może się to wydawać zadowalającym poziomem ryzyka, w żadnym wypadku nie jest ono skuteczne .Jeśli uruchomisz bezpłatną usługę poczty e-mail i użyjesz takiej, aby uniemożliwić spamerom tworzenie kont luzem, wszystko, co muszą zrobić, to napisać skrypt, który automatycznie utworzy 1000 kont i spodziewać się średnio, że 333 z tych prób się powiedzie.
mimo to prosty może być skuteczny przeciwko atakom brute-force.,Gdy połączysz szansę atakującego wysyłając poprawne zgadywanie nazwy użytkownika i hasła z szansą odgadnięcia poprawnie, w połączeniu z innymi technikami opisanymi w tym rozdziale, nawet proste może okazać się skuteczne.
Rysunek 1: Opóźnienie uwierzytelniania hasła: C#
Rysunek 2: opóźnienie uwierzytelniania hasła: VB.NET
Public Sub AuthenticateRequest(ByVal obj As Object, ByVal ea As System.EventArgs) Dim objApp As HttpApplication Dim objContext As HttpContext Dim ran As Random objApp = obj objContext = objApp.Context ' If user identity is not blank, pause for a random amount of time If objApp.User.Identity.Name <> "" Then ran = New Random Thread.Sleep(ran.Next(ran.Next(minSeconds, maxSeconds) * 1000)) End IfEnd Sub