WordPress w prasie. Chroń własnymi rękami

14

WordPress – wygodna platforma do publikowania artykułów i zarządzania, która opiera się na ogromnej liczbie różnych witryn. Ze względu na swoją powszechność ten CMS od dawna jest łakomym kąskiem dla hakerów.

Niestety, podstawowe ustawienia nie zapewniają odpowiedniego poziomu ochrony, pozostawiając wiele odkrytych dziur w spłacie kredytu. W tym artykule przejdziemy przez typową „modelową" witrynę hakerską na WordPress i pokażemy, jak naprawić zidentyfikowane luki.

Obecnie najpopularniejszym systemem zarządzania treścią jest WordPress. Jego udział wynosi 60,4% ogólnej liczby witryn korzystających z silników CMS. Spośród nich, według statystyk, 67,3% witryn opiera się na najnowszej wersji oprogramowania. Tymczasem w ciągu dwunastu lat działania silnika internetowego znaleziono 242 luki różnego rodzaju (nie licząc luk znalezionych we wtyczkach i motywach firm trzecich). Statystyki dodatków innych firm są jeszcze smutniejsze. W związku z tym firma przeprowadziła analizę 2350 szablonów Revisium Russified dla WordPress, zaczerpniętych z różnych źródeł. W rezultacie odkryli, że ponad połowa (54%) była zainfekowana Web Shell, backdoorami, linkami i skryptami blackhat seo („spam”) oraz skryptami zawierającymi krytyczne luki w zabezpieczeniach. Więc usiądź wygodnie, teraz zrozumiemy, jak przeprowadzić audyt na stronie WordPress i wyeliminować znalezione niedociągnięcia. Używana będzie wersja 4.

Strona indeksująca

Pierwszym krokiem w każdym teście jest zwykle zebranie informacji o celu. A wtedy bardzo często pomaga błędna konfiguracja Indeksowanie serwisu, które umożliwia nieautoryzowanym użytkownikom przeglądanie zawartości określonych sekcji serwisu i np. uzyskiwanie informacji o zainstalowanych wtyczkach i motywach, a także dostęp do poufnych danych czy kopii zapasowych baz danych. Aby sprawdzić, które katalogi są widoczne z zewnątrz, najłatwiej skorzystać z Google. Wystarczy uruchomić zapytanie Google Dorks typu site: example.com intitle: «index of» inurl: / wp-content /. Operator inurl: Możesz określić następujące katalogi:

/wp-content/
/wp-content/languages/plugins
/wp-content/languages/themes
/wp-content/plugins/
/wp-content/themes/
/wp-content/uploads/

Jeśli możesz przeglądać /wp-content /plugins/, następnym krokiem jest zebranie informacji o zainstalowanych wtyczkach i ich wersjach jest znacznie uproszczone. Oczywiście możesz zapobiec indeksowaniu za pomocą pliku robots.txt. Tak więc domyślnie nie jest on zawarty w pakiecie instalacyjnym WordPressa, konieczne jest utworzenie i wrzucenie się do katalogu głównego serwisu. Instrukcji tworzenia i pracy z plikiem robots.txt jest całkiem sporo, więc zostaw ten temat dla siebie. Aby podać tylko jedną z możliwych opcji:

User-Agent: *
Disallow: /cgi-bin
Disallow: /wp-login.php
Disallow: /wp-admin/
Disallow: /wp-includes/
Disallow: /wp-content/
Disallow: /wp-content/plugins/
Disallow: /wp-content/themes/
Disallow: /?author=*
Allow: /

Jeśli pliki przechowywane w folderze uploads są informacjami poufnymi, dodaj do tej listy wiersz: Disallow: / wp-content / uploads /. Z drugiej strony plik robots.txt nie jest zalecany do umieszczania linków do katalogów, które zostały utworzone specjalnie do przechowywania poufnych informacji. W przeciwnym razie ułatwisz w ten sposób zadanie atakującemu, ponieważ jest to pierwsze miejsce, w którym zwykle wszyscy szukają „yammy”.

Wtyczki bezpieczeństwa dla WordPress
Połącz .htaccess

Aby ograniczyć dostęp do poufnych informacji lepiej użyć pliku .htaccess – jest to plik konfiguracyjny używany przez Apache Web Server. Rozważ możliwość pliku z punktu widzenia bezpieczeństwa. Dzięki niemu możesz: odmówić dostępu do katalogów i plików, zablokować różne wstrzyknięcia SQL i złośliwe skrypty. Ten standardowy plik .htaccess dla CMS WordPress 4.1 trzeba trochę rozwinąć. Aby zamknąć listę plików i folderów, dodaj:

Options +FollowSymLinks -Indexes
 
RewriteCond %{QUERY_STRING} base64_encode[^(]*([^)]*) [OR]

Odwołania do bloków zawierające kodowanie Base64. Pozbądź się linków zawierających tag <script>:

RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]

Aby przeciwdziałać skryptom próbującym ustawić zmienne globalne lub zmienić _REQUESTzmienną za pomocą adresu URL:

RewriteCond %{QUERY_STRING} GLOBALS (=|[|%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST (=|[|%[0-9A-Z]{0,2})

Aby przeciwdziałać żądaniom blokującym wstrzykiwanie kodu SQL do adresu URL zawierającego określone słowa kluczowe:

RewriteCond %{query_string} concat.*( [NC,OR]
RewriteCond %{query_string} union.*select.*( [NC,OR]
RewriteCond %{query_string} union.*all.*select [NC]
RewriteRule ^(.*)$ index.php [F,L]

Aby zepsuć życie zwykłym narzędziom hakerskim, filtruje niektóre aplikacje klienckie:

SetEnvIf user-agent «Indy Library» stayout=1
SetEnvIf user-agent «libwww-perl» stayout=1
SetEnvIf user-agent «Wget» stayout=1
deny from env=stayout
Chroni pliki

Byłoby miło ograniczyć dostęp do krytycznych plików, które przechowują konfigurację lub po prostu mogą dać atakującemu pewne informacje. Możesz wybrać następujących kandydatów:

  • Wp-config.php zawiera nazwę bazy danych, nazwę użytkownika, hasło i prefiks tabeli;
  • .htaccess;
  • Readme.html i ru_RU.po, które zawierają wersję WordPressa;
  • Zainstaluj.php.

Odbywa się to w następujący sposób:

<Files file_name>
Order Allow,Deny
Deny from all
</Files>

Plik .htaccess zawierający te linie powinien znajdować się w tym samym katalogu, w którym plik jest chroniony. Następnie nie zezwalaj na wyświetlanie użytkowników (pamiętaj, trochę wyżej, rozmawialiśmy o tym, jak łatwo jest uzyskać listę użytkowników?):

RewriteCond %{QUERY_STRING} author=d
RewriteRule ^ /? [L,R=301]

Więc co jeszcze? Możesz zezwolić na wejście tylko z określonych adresów IP. Aby to zrobić, utwórz plik .htaccess w swoim wp-admin z następującymi zasadami:

AuthUserFile /dev/null
AuthGroupFile /dev/null
AuthName "Access Control"
AuthType Basic
order deny,allow
deny from all
allow from 178.178.178.178  # IP Home computer
allow from 248.248.248.248  # IP Work computer

Ta metoda nie jest zbyt elastyczna i ma zastosowanie tylko wtedy, gdy pracujesz z ograniczoną liczbą stałych adresów IP. W przeciwnym razie zaleca się ustawienie hasła do folderu wp-admin panel poprzez hosting (jeśli ta funkcjonalność).

WWW

Zestaw reguł 5G Blacklist i 6G Blacklist beta od Perishable Press, który pozwala radzić sobie z powszechnymi złośliwymi żądaniami adresów URL dla WordPress.

Dodatkowe środki

Oprócz tego, co zostało powiedziane powyżej, można dodać następujące zalecenia. Po pierwsze, używaj tylko najnowszych wersji WordPressa i jego komponentów – wyeliminuje to znane luki w zabezpieczeniach. Po drugie, usuń wtyczki i motywy, które mogą być również proekspluatirovat. Po trzecie, pobierz motywy i wtyczki WordPress z wiarygodnych źródeł, takich jak strony programistów i oficjalna strona WordPress. Oprócz komputera domowego musisz okresowo sprawdzać swój zasób internetowy Antywirus sieciowy, na przykład AI-Bolit. Jeśli masz dostęp do serwera WWW, nastrój praw dostępu do plików i katalogów. Zazwyczaj WordPress ustawia pełne prawa w fazie instalacji, ale w razie potrzeby można ustawić ręcznie chmod. Dla katalogu – chmod 755 dla plików – chmod 644. Upewnij się, że prawa 777 są przypisane tylko tym urządzeniom, które tego potrzebują (czasami jest to konieczne do normalnego działania niektórych wtyczek). Jeśli WordPress przestał działać normalnie, poeksperymentuj z prawami dostępu: najpierw wypróbuj 755, potem 766 i na koniec 777. Aby cały plik htaccess udostępnił chmod 444 (tylko do odczytu). Jeśli witryna już nie działa, spróbuj poeksperymentować z wartościami 400, 440, 444, 600, 640, 644.

Przenieś plik wp-config.php. Ten plik zawiera informacje o ustawieniach, MySQL, prefiksie tabeli, tajnych kluczach i nie tylko. Dlatego konieczne jest przeniesienie do pliku, który nie był dostępny z Internetu. Jeśli witryna nie znajduje się w folderze public_html, to przeciągnij plik wp-config.php na poziom folderu powyżej, a WordPress automatycznie znajdzie go w katalogu głównym (dotyczy sytuacji, gdy jest tylko jeden hosting tego CMS-a).

Aby skomplikować powłokę castingową, wyłącz możliwość edycji wątków konsoli WordPress. W tym celu wstaw następującą linię do pliku wp-config.php:

define ('DISALLOW_FILE_EDIT', true) ;

Kolejny słaby punkt – plik install.php (w folderze wp-admin). Dlatego lepiej jest usunąć, zablokować lub zmienić. Wykonaj jedną z następujących czynności:

  1. Po prostu usuń ten plik – po instalacji nie jest już potrzebny.
  2. Odmów dostępu do pliku przez .htaccess.
  3. Zmień nazwę oryginalnego pliku install.php (np. install.php.old) i utwórz nowy plik install.php o następującej zawartości:
<?php header("HTTP/1.1 503 Service Temporarily Unavailable"); ?>
<?php header("Status 503 Service Temporarily Unavailable"); ?>
<?php header("Retry-After 3600"); // 60 minutes ?>
<?php mail("[email protected]", "Database Error", "There is a problem with teh database!"); ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xml:lang="en"xmlns="http://www.w3.org/1999/xhtml"lang="en">
<head>
<meta http-equiv="Content-Type"content="text/html; charset=utf-8" />
<title>Error Establishing Database Connection</title>
</head>
<body>
<h1>Error Establishing Database Connection</h1>
<p>We are currently experiencing database issues. Please check back shortly. Thank you.</p>
</body>
</html>

Oprócz powiadamiania odwiedzających witrynę skrypt ten wykonuje następujące czynności:

  • Wysyła klientowi i wyszukiwarkom kod statusu 503 („Usługa niedostępna”);
  • Określa przedział czasu, przez który klienci i wyszukiwarki mogą wrócić na stronę (parametr regulowany);
  • Poinformuj e-mailem o problemie z bazą danych w celu podjęcia odpowiednich działań.

Fakt, że we wcześniejszych wersjach WordPressa (<=2.7.1) z błędami MySQL (np. atak DDoS) CMS umożliwia ponowną instalację. Ponadto może się zdarzyć i usterka/uszkodzenie jednej z tabel WordPress. W szczególności atak jest możliwy w przypadku uszkodzenia tabeli ks29so_options (w WordPress 2.6.2) lub ks29so_users (w WordPress 2.0.3 i 2.0.11). Oznacza to, że w różnych wersjach WP różne tabele przy głównym sprawdzaniu w instalatorze – może to być albo tabela ks29so_options, albo ks29so_users.

Na koniec odłącz rejestrację nowych użytkowników, jeśli nie jest to konieczne. Jeśli jednak przewiduje rejestrację online, zadbaj o to, aby nowi użytkownicy po rejestracji otrzymali minimalne uprawnienia.

Przydatne linki
Zamknięcie

WordPress – dość duży i złożony produkt, z jego plusami i minusami. Niestety w domyślnej konfiguracji jego bezpieczeństwo jest wątpliwe, ponieważ nawet w obecności zwykłego skriptkidisa i internetu uda się przełamać zabezpieczenia. Dlatego zdecydowanie zalecamy sprawdzenie zasobu w taki sam sposób, jak w artykule. A jeśli znajdziesz wady – napraw je, aby zredukować szanse atakującego na złamanie zasobu do minimum.

Comments are closed, but trackbacks and pingbacks are open.

Ta strona korzysta z plików cookie, aby poprawić Twoje wrażenia. Zakładamy, że nie masz nic przeciwko, ale możesz zrezygnować, jeśli chcesz. Akceptuję Więcej szczegółów