Zabezpieczenie WordPress, czyli wszystko co powinieneś zrobić zanim opublikujesz witrynę

02.02.2022 | Autor: Marcin

WordPress…wszędzie wordpress, tak właśnie wygląda dzisiejszy internet. Z dużym prawdopodobieństwem można stwierdzić, że w najbliższej przyszłości nic tutaj się nie zmieni. Jakie niesie to za sobą konsekwencje oraz zagrożenia? Z całą pewnością trzeba poważnie podchodzić do kwestii bezpieczeństwa, gdyż każde niedociągnięcie prędzej czy później sprawi, że będziemy cierpieć.

Zabezpieczenie systemu WordPress

Po stronie serwera

Jest kilka bardzo ważnych aspektów po stronie serwera, które należy mieć na uwadze.

Dostęp do systemu plików

Najpopularniejszą metodą dostępu do plików na serwerze jest protokół FTP. Niestety ma on swoje ograniczenia, które sprawiają że z jednej strony jest prosty w użyciu, natomiast z drugiej narażają nas na pewne niebezpieczeństwo. Chodzi przede wszystkim o brak szyfrowania komunikacji oraz przesyłanie haseł czystym tekstem.
W dość łatwy sposób możemy zwiększyć poziom bezpieczeństwa naszego systemu korzystając z protokołu ssh/sftp. Najlepszym rozwiązaniem jest gdy do szyfrowanego połączenia dodamy uwierzytelnianie przy pomocy klucza publicznego. Wtedy nie musimy się obawiać wycieku haseł.

Prawa zapisu na serwerze

Temat praw dostępu do plików strony jest rozległy i można stosować tutaj kilka strategii w zależności od środowiska oraz naszych preferencji jako administratorów systemu. Na wstępnie należy określić co dokładnie chcemy osiągnąć, a następnie powinniśmy wprowadzić reguły odpowiadające naszym potrzebom.

Najpopularniejszą konfiguracją jest taka, w której WordPress ma możliwość instalacji nowych wtyczek oraz aktualizacji. W takiej sytuacji powinniśmy zapewnić użytkownikowi, z którego korzysta nasz web serwer, pełne prawa do plików w folderze wordpress. Pozostali użytkownicy w systemie nie powinni mieć możliwości odczytu. Ta reguła nie jest idealna, gdyż naraża nas na możliwość zainfekowania naszej strony poprzez ewentualne dziury w silniku wordpress, a co bardziej prawdopodobne we wtyczkach. Musimy mieć zatem świadomość, iż kompromis na który się zgadzamy daje nam wygodę działania, ale naraża nas na ryzyko.

Zdecydowanie bezpieczniejszym rozwiązaniem jest ręczne instalowanie aktualizacji oraz nowych wtyczek np. z poziomu wp-cli. W takiej sytuacji nasz web serwer wystarczy, że będzie mieć możliwość zapisu jedynie do katalogu /wp-content/uploads/, który jest miejscem gdzie odkładane są media wrzucane przez użytkowników wordress. Cała reszta systemu plików wystarczy jak będzie umożliwiać odczyt i wykonanie.

Malware detection

Jeśli posiadamy prawa administracyjne na serwerze, należy wziąć pod uwagę automatyczne skanowanie katalogu wordpress w celu wykrywania ewentualnych infekcji. Na rynku jest szereg rozwiązań, które potrafią wykonywać tego typu zadania. Jednym z popularniejszych jest maldet.

Wtyczki typu „all in one”

Istnieje wiele narzędzi, które działają jako wtyczka wordpress, wykonujących szereg zadań mających na celu podniesienie poziomu bezpieczeństwa naszego wordpressa. Najczęstszym wyborem użytkowników jest „wordfence”, które posiada ogromną ilość przydatnych opcji.

Należy jednak pamiętać, że tego typu wtyczki powinny być prawidłowo skonfigurowane, gdyż korzystanie z nich bez odpowiedniej rozeznania może spowodować wiele problemów. Podstawową sprawą o jaką powinniśmy zadbać to wskazanie w jaki sposób wordfence powinien ustalać adres IP naszych użytkowników. Jeśli wykorzystujemy reverse proxy jakim jest np. cloudflare, wtedy musimy wskazać dokładny nagłówek, z którego powinien korzystać wordfence.
Powinniśmy dostosować również ustawienia dotyczące rate limitera oraz firewalla.

Wordfence będzie wykrywał podejrzane działania użytkowników oraz blokował niepożądane zachowania. Co jakiś czas będzie też wykonywał skanowanie naszej aplikacji pod kątem występowania malware jak również różnic pomiędzy plikami wordpress zainstalowanymi na naszym serwerze, a tymi znajdującymi się w repozytorium.

Zachęcam do zapoznania się z całą masą dostępnych funkcji, które dostarcza ta wtyczka w wersji darmowej jak również premium.

Najsłabszym ogniwem jest użytkownik

Nic nam po doskonale zabezpieczonej aplikacji i serwerze, jeśli hasła użytkowników wpadną w posiadanie osób(robotów) do tego niepowołanych. Powinniśmy zwrócić szczególną uwagę na poziom trudności haseł. Bardzo dobrą praktyką jest wykorzystanie uwierzytelniania dwu-etapowego. Można go wdrożyć stosunkowo prostymi metodami(wordfence 2fa oraz google authenticator), a efekt znacząco wpłynie na bezpieczeństwo w dostępie do systemu.

Customizacja WordPress

Aby podnieść poziom bezpieczeństwa możemy wprowadzić szereg zmian w naszym WordPress, które ograniczą funkcje dostępne „out of box”, a nie są na co dzień wykorzystywane.

Rest API

Domyślnie WordPress udostępnia ogromne narzędzie jakim jest wbudowany mechanizm Rest API. Bardzo rzadko się jednak zdarza korzystać z tego rozwiązania, dlatego należy ograniczyć do niego dostęp. Całkowite wyłączenie tego interfejsu nie jest najlepszym rozwiązaniem, gdyż panel administracyjny obficie z niego korzysta. Co za tym możemy zrobić aby zablokować dostęp do API niepowołanym do tego osobom. Z pomocą przychodzi nam oficjalna dokumentacja, według której możemy wprowadzić obligatoryjne uwierzytelnianie przy każdym wywołaniu API. Poniższy kod należy dodać np do functions.php.

add_filter( 'rest_authentication_errors', function( $result ) {
    // If a previous authentication check was applied,
    // pass that result along without modification.
    if ( true === $result || is_wp_error( $result ) ) {
        return $result;
    }
 
    // No authentication has been performed yet.
    // Return an error if user is not logged in.
    if ( ! is_user_logged_in() ) {
        return new WP_Error(
            'rest_not_logged_in',
            __( 'You are not currently logged in.' ),
            array( 'status' => 401 )
        );
    }
 
    // Our custom authentication check should have no effect
    // on logged-in requests
    return $result;
});

XML-RPC

Czym jest XML-RPC?

XML-RPC czyli remote procedure calling jest to protokół stworzony na bazie XML w celu komunikacji pomiędzy systemami. WordPress wiele lat temu zaimplementował to rozwiązaniu z myślą o możliwości wymiany danych pomiędzy blogami, aplikacjami zewnętrznymi etc. W obecnych czasach rozwiązanie to straciło na znaczeniu i praktycznie nie jest wykorzystywane. Bardzo często jest to jednak miejsce, w które uderzają roboty próbujące sforsować zabezpieczenia systemu metodą brute force, ddos.

Jak sobie z tym poradzić?

Profilaktycznie powinniśmy zamknąć ten kanał komunikacji. Najprostszą metodą osiągnięcia tego celu jest wprowadzenie reguły do pliku .htaccess

<files xmlrpc.php>
Order allow,deny
Deny from all
</files>

User enumaration

Kolejną podatnością wordpress jest tzw. user enumaration, czyli możliwość uzyskania nazwy użytkownika systemowego. W związku z faktem, iż wordpress został zaprojektowany jak system blogowy, to zapewnia wiele funkcji związanych z autorami wpisów. Niestety sprawia to, że potencjalny atakujący może uzyskać login użytkownika skąd już jest prosta droga do przejęcia kontroli nad witryną poprzez brute force. Aby się przed tym skutecznie bronić należy wprowadzić szereg modyfikacji.

  • Wyłączenie xml-rpc
  • Wyłączenie/ograniczenie dostępu do Rest API
  • Blokada wywołania strony z parametrem ?author=
  • Zmiana domyślnego adresu do wp-admin oraz wp-login.php

Filtracja danych pochodzących od użytkowników

Jest to złota zasada odnosząca się nie tylko dla aplikacji WordPress, ale wszystkich aplikacji internetowych. Uchroni nas to przed wieloma kłopotami które kryją się pod enigmatycznymi skrótami tj. sql injection, xss etc. Sprowadza się to do filtrowania wszystkich danych, które przychodzą do naszej aplikacji z zewnątrz:

  • dane pochodzące z formularzy
  • parametry GET
  • cookies

W przypadku wordpress, który ma w sobie wbudowany system komentarzy należy zwrócić szczególną uwagę na rzeczy wprowadzane przez użytkowników. W sytuacji gdy nasz szablon nie implementuje formularza komentarzy, wtedy najlepiej jest w ustawieniach wyłączyć możliwość komentowania. To nas zabezpieczy przed prezentowaniem niechcianych treści na naszej witrynie. Jest to podatność która stała się jednym z podstawowych narzędzi spamerskich.

Podsumowanie

Na koniec proponuję przygotować tzw. check listę, która służyć nam będzie jako narzędzie do weryfikacji witryn przed ich uruchomieniem. W ten sposób na pewno nie pominiemy żadnego ważnego elementu dotyczącego bezpieczeństwa aplikacji wordpress.

Porozmawiaj z nami
o swoim projekcie

+48 506 160 480
[email protected]

lub napisz