WP Cerber Security 9.9
English version: WP Cerber Security 9.9
W skrócie
Wersja WP Cerber 9.9 jest już dostępna, a jej głównym założeniem jest odporność. Wprowadziliśmy mechanizm samonaprawiania ustawień wtyczki, usunęliśmy kilka obejść wykrywania w detektorze zaciemnionego JavaScriptu w Traffic Inspector oraz naprawiliśmy klasę błędów krytycznych, które mogły powodować awarie witryny w niektórych środowiskach hostingowych. Jeśli korzystasz z WP Cerber na obciążonej witrynie lub na starszym hostingu, ta aktualizacja zauważalnie zwiększa niezawodność instalacji.
Najważniejsze informacje
- Nowość: automatyczne tworzenie kopii zapasowej i odzyskiwanie ustawień wtyczki, z przejrzystymi raportami w przypadku wykonania operacji odzyskiwania.
- Bezpieczeństwo: Wielokrotne utwardzanie detektora zaciemnionego JavaScript używanego przez Traffic Inspector, zamykające rzeczywiste wektory obejścia.
- Niezawodność: WP Cerber działa teraz prawidłowo w starszych środowiskach hostingowych, w których PHP nie obsługuje nowoczesnego sterownika bazy danych mysqlnd.
- Naprawiono błędy: Naprawiono błąd powodujący awarię ustawień witryny w PHP 8, a także poprawiono wykrywanie regresji kodu JavaScript z heksadecymacją.
Nowe funkcje
Automatyczne tworzenie kopii zapasowej i odzyskiwanie ustawień wtyczki
To główna funkcja tego wydania. WP Cerber przechowuje teraz ostatnią znaną i prawidłową kopię konfiguracji w pamięci podręcznej wtyczki. Kopia zapasowa jest odświeżana po każdej pomyślnej aktualizacji ustawień, imporcie ustawień, aktualizacji wtyczki oraz podczas codziennej konserwacji. Tylko prawidłowe konfiguracje mogą zastąpić istniejącą kopię zapasową, więc błędny stan konfiguracji nigdy nie nadpisze poprawnej.
Dlaczego to ma znaczenie? Jeśli zapisana w bazie danych konfiguracja wtyczki stanie się nieczytelna, WP Cerber wykryje uszkodzenie i automatycznie przywróci konfigurację z kopii zapasowej. Dzięki temu zachowasz reguły zapory sieciowej, listy dostępu i ustawienia powiadomień zamiast po cichu przywracać ustawienia fabryczne.
Proces odzyskiwania jest w pełni transparentny. Każdy wynik jest raportowany za pośrednictwem monitora problemów wtyczki:
- Po pomyślnym automatycznym przywróceniu zobaczysz ostrzeżenie, które można odrzucić, wyjaśniające, co się stało, jakie działania zostały podjęte i co należy sprawdzić. Powiadomienie zniknie samoistnie po sprawdzeniu i zapisaniu ustawień.
- Jeśli kopia zapasowa brakuje, jest nieprawidłowa lub odzyskiwanie się nie powiedzie, zostaje zarejestrowany problem krytyczny wraz z instrukcjami umożliwiającymi podjęcie działań i odpowiednimi metadanymi diagnostycznymi, bez ujawniania ustawień seryjnych lub wewnętrznych danych pamięci masowej.
- Zapobiegamy pojawianiu się sprzecznych lub duplikujących się zgłoszeń, dzięki czemu nigdy nie zobaczysz sprzecznych powiadomień.
Jeśli odzyskanie nie jest możliwe, istniejący, ostateczny, awaryjny powrót do ustawień domyślnych zostaje zachowany, a te ustawienia domyślne są teraz zapisywane w bazie danych, dzięki czemu wtyczka uruchamia się od stanu deterministycznego. Zabezpieczyliśmy również ścieżkę przywracania przed nieaktualnymi pamięciami podręcznymi opcji: uszkodzona wartość jest jawnie usuwana przed zapisaniem przywróconej wartości, a kopia zapasowa jest przechowywana i ładowana z pominięciem pamięci podręcznej obiektów, więc zaufany jest tylko trwały rekord bazy danych.
Informacja dla hostów bez sterownika mysqlnd
Nowy detektor doradczy w widżecie „Gotowość systemu” identyfikuje serwery, na których rozszerzenie PHP MySQL zostało zbudowane na bazie starszej biblioteki libmysqlclient zamiast nowoczesnego MySQL. Komunikat ma charakter informacyjny. Potwierdza on, że WP Cerber nadal działa z kompatybilną wersją zapasową i zaleca włączenie MySQL w celu zapewnienia pełnej kompatybilności i lepszej wydajności. Zapewnia to konkretną, praktyczną diagnostykę, którą możesz przedstawić swojemu dostawcy hostingu.
Zmiany w zakresie bezpieczeństwa i kontroli dostępu
Wzmocnione wykrywanie zaciemnionego JavaScript w Traffic Inspector
Traffic Inspector sprawdza publiczne pola żądań pod kątem zaciemnionego kodu JavaScript. Ta wersja likwiduje kilka luk w pokryciu i omija wektory w tym detektorze, zachowując jednocześnie jego model niskiego wskaźnika fałszywie dodatnich wyników.
Szersze pokrycie sekwencji ucieczki. Detektor wcześniej rozpoznawał tylko sekwencje ucieczki \xNN heksadecymalne w ciągach z pełnymi sekwencjami ucieczki. Teraz wykrywa również sekwencje ucieczki \uNNNN i \u{...} Unicode, w tym ciągi, które łączą obsługiwane formaty. Dekodowanie jest ograniczone do punktów kodowych ASCII, a częściowe sekwencje ucieczki i dowolne wyrażenia celowo pozostają poza zakresem, aby uniknąć wyników fałszywie dodatnich.
Wykrywanie prymitywów ukrytych w wywołaniach fromCharCode(). Dane zdekodowane z jawnych konstrukcji String.fromCharCode() są teraz sprawdzane pod kątem wykonania, DOM, sieci i prymitywów systemowych, a nie tylko zewnętrznych adresów URL i adresów IP. Dekodowanie jest ograniczone do zweryfikowanych literałów dziesiętnych i szesnastkowych, obsługuje wiele wywołań, prefiksy 0X (wielkie litery) i opcjonalne przecinki końcowe, a także stosuje semantykę JavaScript ToUint16, dzięki czemu zdekodowane wartości odpowiadają temu, co faktycznie wygenerowałaby przeglądarka. Dopasowanie prymitywów uwzględniające tokeny z granicami identyfikatorów oznacza, że zwykłe słowa, takie jak „opis” i „ewaluacja”, nie są już dopasowywane do podciągów eval lub script .
Ograniczenie obejścia opakowanych liczb całkowitych. String.fromCharCode() stosuje metodę ToUint16 do każdego argumentu, więc kod ASCII plus wielokrotność 65536 zwraca ten sam znak. Detektor wcześniej akceptował tylko literały do sześciu cyfr, co oznaczało, że opakowane wartości siedmiocyfrowe lub dłuższe całkowicie omijały detekcję. Detektor akceptuje teraz literały dziesiętne bez znaku i szesnastkowe do Number.MAX_SAFE_INTEGER w JavaScript i redukuje każdy token deterministycznie do jego jednostki kodu ToUint16, niezależnie od rozmiaru liczby całkowitej platformy. Długość tokena jest ograniczona podczas konwersji, więc zbyt duży literał nie może generować nieograniczonej pracy na cyfrę w publicznym żądaniu, co zamyka potencjalny wektor ataku DoS.
Brak tłumienia poprzez pojedynczy błędny token. Wcześniej jeden token spoza zakresu lub niejednoznaczny powodował utratę całego zdekodowanego wywołania, więc atakujący mógł dodać pojedynczą nieobsługiwaną wartość do w innym przypadku wykrywalnego ładunku i zablokować detekcję. Strukturalnie poprawny, ale nieobsługiwany token jest teraz mapowany na znak wartownika, a reszta wywołania jest nadal dekodowana. Całe wywołanie jest pomijane tylko wtedy, gdy lista argumentów jest nieprawidłowa lub nienumeryczna.
Ładunki rozdzielone komentarzami nie są już martwym punktem. Kompaktowanie danych wejściowych przez detektor usunęło jedynie ogólne spacje, co pozwoliło zachować komentarze JavaScript i ominąć wykrywanie za pomocą argumentów liczbowych rozdzielonych komentarzami, takich jak String.fromCharCode(101,/*x*/118,97,108,40,49,41,59) . Detektor teraz usuwa komentarze blokowe JS, komentarze liniowe i spacje leksykalne poza ciągami znaków w cudzysłowie przed uruchomieniem heurystyki, a także obsługuje listy argumentów rozciągające się na wiele wierszy.
Dla właściciela witryny WordPress praktyczny wynik jest prosty: kilka realistycznych technik, które atakujący mógłby wykorzystać do przemycenia zaciemnionego kodu JavaScript przez Traffic Inspector, przestaje działać, a detektor pozostaje na tyle konserwatywny, że nie oznacza legalnego ruchu.
Poprawa niezawodności
Zgodność ze starszymi sterownikami baz danych
WP Cerber działa teraz poprawnie w środowiskach hostingowych, w których PHP nie udostępnia nowoczesnego sterownika bazy danych mysqlnd. Warstwa bazy danych sprawdza dostępność funkcji mysqli_fetch_all() przed skorzystaniem z szybkiej ścieżki mysqlnd. W przypadku jej braku, zestawy wyników są pobierane wiersz po wierszu za pomocą zgodnej metody, zachowując kolejność wierszy, kształty wyników i istniejący kontrakt obsługi błędów. Zamiast błędu krytycznego pojawia się wolniejszy, ale w pełni funkcjonalny mechanizm awaryjny oraz ostrzeżenie opisane powyżej.
Poprawki błędów
Błąd krytyczny na stronach z uszkodzonymi ustawieniami (PHP 8)
Uszkodzona, niemożliwa do odserializacji wartość konfiguracji w bazie danych powodowała krytyczny TypeError w array_merge() podczas ładowania wtyczki w PHP 8, co powodowało awarię całej witryny. Ładowanie ustawień teraz weryfikuje zapisaną wartość i przywraca ustawienia domyślne, gdy nie można jej przeanalizować. Błąd jest rejestrowany jako stały problem krytyczny i jest automatycznie rozwiązywany po ponownym zapisaniu ustawień przez administratora. Problem uszkodzenia występuje tylko wtedy, gdy niepusta zapisana wartość rzeczywiście nie zostanie odserializowana, więc pusta wartość, oznaczająca po prostu, że ustawienia jeszcze nie istnieją, nigdy nie wywołuje fałszywego alarmu. W połączeniu z nową funkcją tworzenia kopii zapasowych i odzyskiwania, zmienia to scenariusz awarii witryny w scenariusz samonaprawiający się.
Błąd krytyczny na hostach bez mysqlnd
Warstwa bazy danych o nazwie mysqli_result::fetch_all() , która wymaga sterownika mysqlnd i nie istnieje na hostach, na których uruchamiany jest MySQL za pomocą libmysqlclient, powoduje błąd krytyczny. Szybka ścieżka jest teraz chroniona i powraca do pobierania wiersz po wierszu, jak opisano w sekcji dotyczącej niezawodności powyżej.
Regresja w wykrywaniu kodu JavaScript z zaszyfrowanymi znakami heksadecymalnymi
Regresja w detektorze zaciemnionego kodu JavaScript uniemożliwiła dekodowanie ciągów znaków składających się wyłącznie z sekwencji \xNN . W kroku normalizacji użyto funkcji trim() z maską znaków, która usuwała początkowy ukośnik odwrotny z pierwszego znaku ucieczki wraz z otwierającym cudzysłowem, generując ciąg o nietypowej długości, który następnie został pominięty przez ochronę dekodowania. W rezultacie prymitywy z zaciemnionymi ciągami szesnastkowymi, takie jak eval , script i XMLHttpRequest , nie zostały wykryte na domyślnie włączonej ścieżce pola żądania Traffic Inspector. Dekodowanie działa teraz poprawnie, przywracając wykrywanie tych zaciemnionych prymitywów.
Ominięcie za pomocą argumentów fromCharCode oddzielonych komentarzem
Prawidłowe argumenty numeryczne oddzielone komentarzami w wywołaniach fromCharCode() omijały wykrywanie, ponieważ komentarze JavaScript pozostały nienaruszone podczas kompresji danych wejściowych. Problem ten rozwiązano zgodnie z opisem w sekcji dotyczącej bezpieczeństwa powyżej.
Streszczenie
Wersja 9.9 to wydanie, którego miejmy nadzieję nigdy nie zauważysz, i o to właśnie chodzi. Twoje ustawienia teraz nie znikają po uszkodzeniu bazy danych. Dziwaczny błąd w środowisku hostingowym, który wcześniej powodował awarię wtyczki, teraz łagodnie się degraduje i dokładnie podpowiada, o co poprosić usługodawcę hostingowego. Dla administratora codzienny interfejs to ten sam, znany panel, działający na platformie, która samodzielnie odzyskuje dane po awarii i monitoruje wrogi ruch, ograniczając liczbę martwych punktów.