Atak Brute Force na WordPress

4 środki zapobiegające atakom typu brute force na twojego WordPressa

Czym są ataki typu brute force, dlaczego napastnicy je stosują i jak możesz zapobiec tym atakom na swoim WordPressie? Z pewnością zadasz sobie takie pytania, gdy będziesz zajmował się tym tematem. Zebraliśmy odpowiedzi na powyższe pytania.

Czym są ataki brute force?

Ataki typu brute force to próby uzyskania dostępu do systemu (w twoim przypadku prawdopodobnie do WordPressa). Odbywa się to poprzez próbę odgadnięcia nazwy użytkownika i hasła. W końcu to konto ma już dostęp do systemu. 

Jest to bardzo prosta i prymitywna metoda (nazwa mówi sama za siebie - brute force), która jednak jest bardzo skuteczna. Jednocześnie bardzo łatwo można temu zapobiec.

Jakie są rodzaje ataków typu brute force?

Istnieją niewielkie, ale subtelne różnice między atakami brute force i ich scenariuszami. Najczęściej spotykane typy można podzielić na 5 kategorii:

  1. Prosty atak brute force
  2. Atak słownikowy
  3. Hybrydowy atak brute force
  4. Odwrotny atak brute force / Password Spraying
  5. Credential Stuffing

Poniżej przedstawiamy szczegółowo każdą z tych kategorii.

"*" wyświetla wymagane pola

Zgoda*
To pole służy do weryfikacji i nie powinno być zmieniane.

1. Prosty atak brute force

Jest to najczystsza forma ataku brute force. Wypróbowuje po kolei dowolne kombinacje znaków - bez żadnych badań czy odrębnych procedur poza zwykłym liczeniem znaków w górę lub w dół.

WordPress Brute Force prosty atak
Credit: Matthias Held

Ta metoda jest prosta, ale wymaga czasu i dużej mocy obliczeniowej. Niemniej jednak, w obliczu coraz potężniejszych procesorów lub możliwości uwolnienia wielu różnych systemów jednocześnie na cel ataku (na przykład za pomocą botnetów lub serwerów w chmurze), jest to nadal ważna metoda. 

Istnieją zarówno eksperymenty laboratoryjne, jak i aplikacje, które potrafią złamać 8-znakowe hasło w mniej niż 12 minut. Wraz z postępem technicznym osiągnięcie celu będzie jeszcze szybsze i łatwiejsze. Dlatego też metoda ta jest popularna wśród napastników, którzy obierają sobie jako cel konkretny obiekt.

Zaleta: Każde hasło może zostać odgadnięte.
Wada: W pewnych okolicznościach może to trwać długo i wymaga dużego wysiłku obliczeniowego.

Dobre metody obrony: Używaj długich haseł o szerokim zakresie znaków.

2. Atak słownikowy

W przeciwieństwie do prostej metody brute force, atak słownikowy wykorzystuje do testowania istniejący rekord.

Mogą to być dane pochodzące z różnych źródeł:

  1. Rzeczywiste słowniki, na przykład wszystkie słowa z Duden.
  2. Listy haseł, takie jak 10 000 najczęściej używanych haseł.
  3. Hasła z poprzednich naruszeń (nazwy użytkowników i hasła z poprzednich włamań do stron internetowych i aplikacji).

Pierwszy wariant staje się coraz mniej ważny, ale dwa ostatnie z biegiem lat stają się coraz silniejsze, ponieważ wraz z rosnącą liczbą cyberataków w naturalny sposób rośnie też ilość danych na tych listach.

WordPress Brute Force atak słownikowy
Credit: Matthias Held

Zaleta: Ponieważ użytkownicy lubią używać haseł, które są także łatwe do zapamiętania, często ułatwiają sobie zadanie i używają pojedynczych słów ze słownika lub imion i robią to wielokrotnie we wszystkich usługach, stronach internetowych i aplikacjach. Dlatego prawdopodobieństwo sukcesu jest dość wysokie, a metoda jest znacznie szybsza niż zwykłe brute force.


Wada: Prawdopodobieństwo sukcesu nie wynosi już 100%.

Dobre metody obrony: Nie używaj pojedynczych słów ze słownika ani nazw, przedmiotów itp. Ponadto używaj tego samego hasła tylko do jednego konta, a nie do kilku.  

3. Hybrydowy atak brute force

Hybrydowy atak brute force jest połączeniem prostego ataku brute force i ataku słownikowego.


Tutaj słowo z prostego brute force jest brane i łączone z potencjalnymi liczbami, które są często używane, takimi jak rok urodzenia czy rocznica ślubu. To drastycznie ogranicza liczbę potencjalnych prób, a tym samym upraszcza proces ataku.

Hybrydowy atak Brute Force na WordPressa
Credit: Matthias Held

Zaleta: Ta metoda ma taką samą zaletę jak Słownikowy brute force, tylko że tutaj liczba prób jest zwiększona i wydłużona o znaczną liczbę prób z prostym dodawaniem znaków, takich jak emotikony w formie tekstowej lub daty (Maga2020 jest słynnym przykładem).
Wada: Prawdopodobieństwo sukcesu nie wynosi już 100%, jak w przypadku Słownikowego brute force.

Dobre metody obrony: Nie używaj w hasłach ważnych dla Ciebie dat i liczb.

4. Odwrotny atak brute force lub password spraying

Atakujący próbują łączyć hasło z różnymi nazwami użytkowników. Nazwa użytkownika jest różna, ale hasło pozostaje takie samo.

WordPress Brute Force Atak odwrotny
Credit: Matthias Held

Zaleta: Jak już opisano powyżej, ludzie są skłonni do wielokrotnego używania swoich haseł i do używania jak najbardziej zapamiętanych. Dotyczy to również tego typu ataków. Ponadto umożliwia obejście blokady (blokady logowania do konta), jeśli na tym samym koncie użytkownika podejmowanych jest zbyt wiele prób.

Wada: Ta metoda może prowadzić do wielu dostępów, ale być może nie do tych kont, które chcesz.

Dobre metody obrony: Ponieważ tutaj również najczęściej używane są standardowe listy kont użytkowników (o ile nie można ich odczytać), warto, podobnie jak w przypadku hasła, wybrać nazwę użytkownika, która jest trudna do odgadnięcia i zawiera wiele znaków alfanumerycznych i specjalnych.

5. Credential Stuffing

Dane z poprzednich naruszeń (patrz Atak słownikowy, punkt 2) również odgrywają tutaj rolę. Credential stuffing to nic innego jak ponowne wykorzystanie danych logowania z istniejących naruszeń.

Więc, na przykład, jeśli użyłeś nazwy użytkownika yourmail@yourwebsite.com i hasła Cola123
w jakimś miejscu na stronie internetowej lub w aplikacji
i dane te wydostały się przez naruszenie, napastnicy użyją ich do zalogowania się także do innych usług i aplikacji.

WordPress Brute Force Credential Stuffing
Credit: Matthias Held

Ten atak ma bardzo duże szanse powodzenia i staje się coraz bardziej popularny. Dlatego jest jednym z najbardziej niebezpiecznych w tej chwili.

Na stronie haveibeenpwned.com możesz sprawdzić, czy któreś z Twoich kont zostało już naruszone.

Raidboxes i Breaches

Podczas tworzenia nowego konta użytkownika Raidboxes sprawdza, czy hasło nie zostało już wcześniej złamane (anonymous and untraceable).

Zaleta: Tutaj również w grę wchodzi fakt, że ludzie są stworzeniami nawykowymi. Większość ludzi używa tego samego adresu e-mail i hasła do wielu usług. Zapobiega to również blokadzie kont, jak w przypadku odwrotnego ataku brute force.

Wada: W przypadku tego ataku ponownie trzeba się wcześniej dowiedzieć, czy osoba, do której konta chcesz się dostać, również korzysta z danej usługi/strony/aplikacji. Ale jeśli chcesz mieć dostęp przede wszystkim, to jest to bardzo skuteczna metoda.

Dobre metody obrony: Nigdy nie używaj tych samych danych do logowania więcej niż raz. Niech będą one unikalne w każdym miejscu, w którym się rejestrujesz.

Jak mogę chronić moją stronę WordPress przed atakami typu brute force?

Często czytam i słyszę radę: "Po prostu używaj bezpiecznych haseł".

W zasadzie może to być prawda, ale przy odpowiedniej ilości czasu i środków każdą kombinację logowania można złamać metodą brute force, jeśli nie stosuje się innych środków ochrony.

Ponadto takie ataki oznaczają niepotrzebne obciążenie serwera - a to nie tylko wpływa na czas ładowania się strony, ale także na Twój portfel, jeśli Twój hostingodawca pobiera opłaty za ruch. 

Najlepszą metodą jest zapobieganie takim atakom i całkowite zablokowanie dostępu.

Na poziomie serwera

Działanie 1: Zablokuj nieautoryzowane zapytania do formularza logowania

Bez względu na to, jak bezpieczną kombinację logowania zastosujesz, złamanie jej będzie wymagało dużo czasu, mocy obliczeniowej i braku dodatkowych zabezpieczeń. W rzeczywistości najskuteczniejszym sposobem jest stworzenie zabezpieczenia, które całkowicie blokuje wszelkie nieautoryzowane zapytania do formularza logowania WordPressa. Dzięki temu automatyczne i ręczne ataki nie będą miały miejsca. W końcu chroni to także Twój serwer.

Istnieje kilka możliwości, aby to osiągnąć. Nie każda możliwość pasuje, to zależy od tego, jak bardzo jesteś doświadczony technicznie i jak wiele masz opcji ustawień DNS i serwera. 

Wskazówka: Utwórz listę IP Allow


Ochrona: 🔒🔒🔒🔒🔒
Wysiłek techniczny: 🛠️🛠️🛠️

Jeśli zawsze masz dostęp do internetu z tego samego adresu IP, na przykład dlatego, że masz własny VPN lub stałe IP w swojej agencji, najbezpieczniej jest utworzyć dla tego adresu listę dozwolonych adresów IP na stronach /wp-admin i /wp-login.

Apache

Jeśli twój serwer internetowy działa na Apache, dodaj ten fragment do swojego .htaccess:

RewriteEngine on

RewriteCond %{REQUEST_URI} ^(.*)?wp-login.php(.*)$ [OR]

RewriteCond %{REQUEST_URI} ^(.*)?wp-admin$

RewriteCond %{REMOTE_ADDR} !^123$. 

RewriteRule ^(.*)$ - [R=403,L]


Ważne:
Zwróć uwagę, że w liniach zawierających REMOTE_ADDR wystarczy zastąpić LICZBY odpowiednimi numerami swojego IP.
Na przykład, jeśli Twój IP to 95.217.228.176, linia powinna brzmieć:

RewriteCond %{REMOTE_ADDR} !^95\.217\.228\.176$

Dla każdego dozwolonego adresu IP dodaj osobny wiersz. Następnie zrestartuj usługę Apache, aby zastosować zmiany.

Nginx

Dodaj ten fragment do bloku serwera w pliku wirtualnego hosta. Ponownie, dla każdego dozwolonego adresu IP musisz dodać linię allow.

location = /wp-login.php {

     allow 192.168.1.1; #adres IP 1 dla każdego dozwolonego adresu IP jedna linia

     allow 172.16.1.1; #adres IP 2

     deny all;

     include snippets/fastcgi-php.conf;

     fastcgi_pass unix:/run/php/php7.4-fpm.sock;

     }

Uruchom ponownie swoją usługę nginx, aby zastosować zmiany.

Wskazówka: Użyj zapory CDN


Ochrona: 🔒🔒🔒🔒🔒
Wysiłek techniczny: 🛠️

CDN-y mogą zapewnić bardzo dobrą ochronę, konfigurując zaporę sieciową tak, by przełączała zapytanie captcha przed formularzem logowania. Tutaj znajdziesz instrukcje dotyczące Cloudflare. W darmowym planie Cloudflare możesz stworzyć do 5 reguł.

Zaloguj się do swojego pulpitu Cloudflare, przejdź do Firewall i utwórz nową regułę firewall.

2. Dane obowiązywania reguły to:

WordPress Brute Force CDN Firewall

To było wszystko.

Wskazówka: Utwórz listę blokad poprzez Fail2Ban


Ochrona: 🔒🔒🔒🔒
Wysiłek techniczny: 🛠️🛠️🛠️🛠️

Jeśli nie masz stałego IP i nie używasz CDN, możesz stworzyć listę bloków poprzez Fail2Ban. Dobre tutoriale można znaleźć tutaj:

Zauważ jednak, że musisz dostosować to specjalnie do adresu URL /wp-login.

Wskazówka: Użyj pulpitu nawigacyjnego Raidboxes

Ochrona: 🔒🔒🔒🔒🔒
Wysiłek techniczny: 🛠️

W połączeniu z bezpieczną nazwą użytkownika i hasłem oraz Raidboxes Single Sign On.

Klienci Raidboxes mają już konfigurowalny moduł anti-brute force na każdej ze swoich instancji. Wraz z funkcją Single Sign On jest to jedno z najwyższych ustawień bezpieczeństwa, jakie można wprowadzić bez wysiłku technicznego.

W samym WordPressie

Jeśli wykonałeś te kroki, jesteś bardzo dobrze zabezpieczony przed atakami.
Jeśli jednak nie możesz zastosować tych rozwiązań, ponieważ nie masz dostępu do ustawień serwera lub rekordów DNS w celu skonfigurowania CDN, mam dla Ciebie kilka innych kroków.

Działanie 2: Zapobieganie wyliczaniu nazw użytkowników

Zanim przejdziemy do bezpiecznych haseł, zacznijmy od początku: od nazwy użytkownika.

Nazwy stanowią 50 procent dostępu - a WordPress niestety bardzo łatwo odczytuje nazwę użytkownika (login) dla wszystkich utworzonych kont z prawami administratora. I to jest zautomatyzowane. Możesz temu zapobiec, robiąc coś samodzielnie i zabezpieczając swój WordPress - lub instalując poniższe wtyczki.

Wskazówka: Rozwiązanie za pomocą wtyczek


Ochrona: 🔒🔒🔒
Wysiłek techniczny: 🛠️

Wtyczka 1: Ujednolicone komunikaty o błędach logowania
Ta wtyczka wyłącza wyświetlanie różnych komunikatów o błędach przy nieprawidłowych próbach logowania. Dzieje się tak dlatego, że obecnie WordPress wyświetla inny komunikat o błędzie, jeśli nazwa użytkownika istnieje lub nie. Dzięki temu można łatwo sprawdzić, czy wprowadzony użytkownik istnieje.

Wtyczka 2: Zatrzymaj wyliczanie użytkowników
Zatrzymaj wyliczanie użytkowników robi dokładnie to, co mówi: blokuje nieautoryzowane żądania do twojego WordPressa, na przykład odczytywanie nazw użytkowników przez archiwum autorów.

Wskazówka: Rozwiązanie poprzez functions.php

Ochrona: 🔒🔒🔒
Wysiłek techniczny: 🛠️🛠️

Jeśli wolisz samemu przejąć kontrolę, możesz dostosować plik functions.php swojego aktywnego motywu (wcześniej zrób kopię zapasową).

Dodaj następujący kod:

Kod PHP

// If the user is not authenticated as an admin
if (!is_admin()) {
// RegEx to check if the request went to an “/author=INT” endpoint
if (preg_match('/author=([0-9]*)/i', $_SERVER['QUERY_STRING'])) die();    add_filter('redirect_canonical', 'stop_user_enum', 10, 2);
}
function stop_user_enum($redirect, $request) {
// // RegEx to check if the the request went to an “/author=INT” endpoint but with the permalink furl format
if (preg_match('/\?author=([0-9]*)(\/*)/i', $request)) die(); else return $redirect;
}

Wskazówka: Użyj pulpitu nawigacyjnego Raidboxes


Ochrona: 🔒🔒🔒
Wysiłek techniczny: 🛠️

Klienci Raidboxes korzystają z gotowych rozwiązań w pulpicie Raidboxes Dashboard. Nie ma nic więcej do zrobienia niż włączenie ich.

Działanie 3: "Wystarczy używać silnych haseł".

Uwaga: W Raidboxes, podczas rejestracji nowego konta, przy nadawaniu haseł pytamy o rzeczy, które sprawiają, że zapytania brute force są znacznie trudniejsze. Obejmuje to:  

  • ustawiona minimalna długość
  • złożoność
  • czy hasło można znaleźć w słowniku (angielskim lub niemieckim)
  • czy zawiera datę
  • czy hasło zostało już złamane (anonimowo i bez możliwości śledzenia)

Hasła są wadliwe: ponieważ można je odgadnąć (brute force), odczytać (key logger itp.), przeczytać (z powodu braku lub słabego szyfrowania/przechowywania w pamięci danych), rozpoznać jedynie autoryzację urządzenia końcowego, ale nie tożsamość osoby, która się za nim kryje, i zazwyczaj są trudne do zapamiętania (jeśli są "bezpieczne").

W przypadku tego ostatniego problemu istnieją menedżery haseł, takie jak 1Password, BitWarden, KeePass i inne. 

W środowisku WordPressa musimy zaakceptować fakt, że musimy używać haseł.

Czym więc jest „bezpieczne” hasło?

Silne hasło to długie hasło o pewnym stopniu złożoności. 

Tak, długość hasła jest ważniejsza niż jego złożoność. 8-znakowe hasło może zostać odgadnięte za 25$USD w ciągu 12 minut, nawet jeśli składa się z wielu znaków specjalnych, dużych liter i cyfr.

Poniższy GIF dobrze ilustruje, dlaczego długość ma większe znaczenie niż złożoność:

Bezpieczne hasło do WordPressa metodą Brute Force
Credit: Intel Security // Intel.com

Hakerzy nie chcą też inwestować pieniędzy ani czasu w intensywne obliczanie długich haseł. Dlatego zasada brzmi: im dłuższe hasło, tym lepiej!

Ale długie i złożone hasła są trudne do zapamiętania!

To prawda, ale w erze menedżerów haseł wystarczy zapamiętać jedno długie i złożone hasło, a resztę można utworzyć i przechowywać za pomocą tych menedżerów.

Jeśli mamy to jedno hasło i w najlepszym wypadku zmieniamy je od czasu do czasu, jesteśmy bezpieczni.

Oto sekret, jak tworzyć długie, złożone hasła i pamiętać je przy pierwszej próbie:

WordPress Brute Force - złożone hasła
Credit: xkcd.com 

Oznacza to, że możemy wziąć sobie do serca ten komiks XKCD i stworzyć długie hasło według jednego z poniższych wzorów:

Siedzenie w pociągu + droga polna - 7 mrugnięcie okiem

Albo używamy całych zdań z dodatkową złożonością:

Lubię szpinak_tylko_3_razy_na_dzień

Stworzyliśmy stosunkowo mało znaczące zdanie ze znakami specjalnymi i liczbą, które jest bardzo trudne do odgadnięcia, a jednocześnie zapada w pamięć (plus punkty za rym). Nazywa się to również frazą dostępu.

Wiele menedżerów haseł, takich jak BitWarden, tworzy dla Ciebie takie zapamiętane, ale złożone hasła.

Dodatek: Używaj bezpiecznej nazwy użytkownika

Jak już wspomniano: 50 procent twojego dostępu to nazwa użytkownika.

Jeśli osoba atakująca zna tę część dostępu, to połowa sukcesu jest już osiągnięta. Pozostaje tylko hasło. Nie używaj nazw użytkowników, takich jak admin, administrator czy twoje imię, nie używaj nazwy strony, domeny ani niczego, co ma związek z samą stroną. 

Przykład

Jeśli Twoja strona nazywa się www.ireallylovecats.com, nie używaj nazwy, która ma cokolwiek wspólnego z kotami

Jeszcze lepiej, wykorzystaj tę samą sztuczkę z hasłem z góry i użyj długiego zdania oraz dodaj złożoności, np. sphalt/can/also/with/7/spices.

Utwórz hasło w Raidboxes

Stwórz hasło i nazwę użytkownika o maksymalnej długości (w WordPressie obecnie 60 znaków dla nazwy użytkownika i 64 znaki dla hasła, zobacz Właściwości bazy danych), z wieloma literami, cyframi i znakami specjalnymi - wtedy po prostu użyj Single Sign On w Dashboardzie. Bezpieczne logowanie za pomocą jednego kliknięcia.

Środek 4: Wtyczki bezpieczeństwa

Wskazówka: Uniwersalne wtyczki

Ochrona: 🔒🔒🔒🔒

Wysiłek techniczny: 🛠️🛠️ do 🛠️🛠️🛠️

Na przykład na rynku jest wiele wtyczek bezpieczeństwa WordPressa:

Wszystkie te wtyczki bezpieczeństwa oferują wbudowaną ochronę przed atakami typu brute force i wiele innych. Dla większości stron internetowych WordPressa instalacja i utrzymanie tych wtyczek będzie wystarczającą ochroną. Podobnie, konfiguracja i konserwacja jest minimalna.

Jednak wtyczki mają jedną (w większości przypadków niewielką) wadę: obciążenie serwera spowodowane stosowaniem brute force nie może być zmniejszone przez takie wtyczki. Te wtyczki wymagają procesu PHP, który sprawdza, czy dostęp jest ważny, czy IP nie znajduje się na liście blokad itd.

Wszystko to sprawia, że każde żądanie obciąża serwer. Oczywiście, to wciąż mniej niż sama próba logowania - a dopóki serwer nie zostanie naprawdę dotknięty, atak musi przybrać rozmiary niemal D/DOS - ale nie można tego lekceważyć.

Wróćmy jednak do wielu zalet wtyczek: jeśli są one zawsze aktualne, nowe typy ataków są szybko wykrywane i łagodzone bez konieczności robienia czegokolwiek samemu.

Wskazówka: Ukryj logowanie do WP

Ochrona: 🔒

Wysiłek techniczny: 🛠️

"Security through obscurity" to wyrażenie często używane w odniesieniu do tej metody.

W ostatecznym rozrachunku oznacza to próbę powstrzymania ataków poprzez ukrycie problemu. To działa dobrze w kilku przypadkach, ponieważ ataki brute force nie przechodzą przez formularz logowania, ale używają parametrów zapytania do rozpoczęcia prób logowania.


Tylko dlatego, że domyślny adres URL, taki jak /wp-admin lub /wp-login.*, nie jest dostępny, ataki te nie ustaną.

Wnioski

Mam nadzieję, że udało mi się wyjaśnić różne rodzaje ataków brute force i dać ci wskazówki, jak w przyszłości chronić przed nimi swój WordPress. Jeśli masz jakieś pytania, chętnie się z nimi zapoznamy!

Spodobał Ci się ten artykuł?

Zostawiając opinię pomożesz nam udoskonalać publikowane przez nas treści.

Napisz komentarz

Twój adres e-mail nie zostanie opublikowany. Pola wymagane oznaczone są *.