Ochrona klienta: materiał został zanonimizowany. Nie publikuję domeny, danych klientów, adresów infrastruktury, kluczy, nazw kont ani technicznych szczegółów, które mogłyby ułatwić ponowienie ataku.

To nie była typowa awaria modułu płatniczego. W legalnym module sklepu znajdowała się krytyczna podatność, przez którą atakujący zapisał na serwerze backdoor. Następnie rozmieścił złośliwy kod w kilku miejscach: module statystycznym, plikach motywu i wygenerowanym cache JavaScript.

Fałszywy formularz imitował bramkę płatniczą, przechwytywał dane wprowadzane przez kupującego, wyświetlał pozorny błąd, a następnie przekierowywał klienta do prawdziwej płatności. Dzięki temu zamówienie mogło wyglądać na normalnie opłacone, mimo wcześniejszego przejęcia danych.

W skrócieZidentyfikowano punkt wejścia, backdoory i skimmer płatniczy, odtworzono chronologię z logów, oczyszczono sklep oraz przygotowano bezpieczną paczkę do wdrożenia.

Sytuacja wyjściowa: płatności wyłączone, ale zagrożenie nadal działało

Operator płatności zablokował klucze dostępowe i zgłosił podejrzenie oszukanej metody płatności. Sklep został wyłączony, aby ograniczyć ryzyko dla kolejnych kupujących. Samo wyłączenie oficjalnej bramki nie rozwiązywało problemu, ponieważ podrobiony formularz był wstrzykiwany niezależnie od legalnej integracji.

Cel pilny

Zatrzymać dalsze narażenie klientów

Sklep pozostał w trybie konserwacji do czasu usunięcia wszystkich rozpoznanych mechanizmów infekcji.

Cel techniczny

Ustalić źródło, a nie tylko usunąć objawy

Usunięcie jednego pliku nie wystarcza, gdy napastnik ma możliwość zapisywania kolejnych plików i wykonywania poleceń.

Co wykryła analiza sklepu?

Infekcja była rozłożona warstwowo. Każdy element pełnił inną funkcję i mógł podtrzymać atak nawet po częściowym czyszczeniu.

01

Podatny moduł filtrowania

Nieaktualna wersja legalnego modułu umożliwiała niezalogowanej osobie zapisanie pliku wykonywalnego w katalogu sklepu.

02

Backdoor z wykonaniem poleceń

Złośliwy plik pozwalał odczytywać konfigurację, uruchamiać komendy systemowe i modyfikować kolejne elementy sklepu.

03

Skimmer płatności

Skrypt wyświetlał pełnoekranową imitację płatności kartą, zbierał dane i dopiero później uruchamiał prawdziwą bramkę.

04

Loadery i zainfekowany cache

Kod uruchamiający skimmer znajdował się w motywie oraz wielu wygenerowanych plikach cache, co utrudniało szybkie usunięcie.

Istotne ustalenie

Złośliwy kod nie był osobnym modułem zainstalowanym przez pracownika. Został dopisany do legalnych elementów sklepu po wykorzystaniu podatności.

Jak przebiegała analiza powłamaniowa?

Plików nie uruchamiano. Analiza miała charakter statyczny, a ustalenia były potwierdzane w kilku niezależnych źródłach.

Zabezpieczenie materiału

Zachowano kopie plików, bazy i logów, aby czyszczenie nie zniszczyło śladów potrzebnych do ustalenia przebiegu zdarzeń.

Skanowanie plików i modułów

Sprawdzono strukturę katalogów, nietypowe daty, obfuskację, funkcje systemowe, zewnętrzne połączenia oraz zmiany w motywie i cache.

Kontrola bazy danych

Zweryfikowano ustawienia modułów, własny JavaScript, konta pracowników, sesje, cache filtrów oraz ślady wywołań nieistniejących plików.

Korelacja logów serwera

Połączono żądania HTTP, moment utworzenia webshella, wykonywanie poleceń i późniejsze wywołania skimmera.

Przygotowanie naprawy

Odtworzono czyste wersje zmodyfikowanych plików, zabezpieczono podatne miejsca i przygotowano paczkę z docelowymi ścieżkami FTP.

Chronologia: od rozpoznania do aktywnej kradzieży danych

Daty plików można zmieniać, dlatego głównym źródłem chronologii były logi dostępu. Pozwoliły odróżnić samo skanowanie od skutecznego wykonania kodu.

Automatyczne rozpoznanie podatności

Adresy zewnętrzne sprawdzały wersję modułu, pliki środowiska i typowe nazwy webshelli.

Skuteczne zapisanie pierwszego backdoora

Seria specjalnie przygotowanych żądań do strony kategorii zakończyła się pojawieniem nowego pliku PHP odpowiadającego kodem 200.

Odczyt konfiguracji i przygotowanie skimmera

Napastnik uzyskał dane bazy, sprawdził zamówienia i zaczął umieszczać elementy fałszywej płatności w module oraz motywie.

Testy i przesyłanie danych

Logi potwierdziły testowanie formularza, komunikację z przekaźnikiem oraz realne wywołania pochodzące z procesu zakupowego.

Rozbudowa mechanizmu ukrywania

Kolejna wersja kodu zaczęła pomijać administratorów i wybrane adresy IP, aby utrudnić wykrycie podczas testów sklepu.

Pełny zakres wykonanych prac naprawczych

  • usunięcie wykrytych backdoorów i przekaźnika danych,
  • usunięcie skimmera oraz loaderów z motywu sklepu,
  • odtworzenie czystych wersji plików JavaScript i szablonów,
  • wyczyszczenie zainfekowanych plików cache motywu i cache filtrów w bazie,
  • zabezpieczenie katalogu modułu przed bezpośrednim wykonywaniem plików PHP,
  • zablokowanie publicznego dostępu do dumpów SQL, logów i pomocniczych skryptów administracyjnych,
  • sprawdzenie kont administratorów, sesji, integracji i zewnętrznych skryptów,
  • przygotowanie paczki wdrożeniowej z zachowaniem struktury katalogów FTP,
  • kontrola składni zmodyfikowanych plików i ponowny skan wskaźników infekcji,
  • przygotowanie raportu technicznego, chronologii i listy dalszych działań.

Czyszczenie plików to nie koniec procedury

Po takim incydencie trzeba wymienić hasła i klucze do hostingu, SFTP/SSH, bazy, Redis, panelu sklepu, poczty, operatora płatności, integratora zamówień, przewoźników i pozostałych API. Klucze płatności powinny zostać wygenerowane ponownie dopiero po zakończeniu czyszczenia.

Rezultat: sklep przygotowany do bezpiecznego przywrócenia

01

Usunięte wykryte zagrożenia

Backdoory, skimmer, loadery i zainfekowane kopie cache zostały usunięte lub bezpiecznie zastąpione.

02

Ustalony wektor ataku

Logi potwierdziły wykorzystanie podatnego modułu, a nie ręczną instalację podejrzanej wtyczki przez pracownika.

03

Zakończenie tego samego dnia

Analiza, naprawa, wdrożenie zabezpieczeń i raport zostały przygotowane w trybie pilnym.

Klient otrzymał także listę kont i dostępów do zmiany, zalecenie wygenerowania nowych kluczy operatora płatności oraz aktualizacji pozostałych modułów do najnowszych wersji zgodnych z używaną wersją PrestaShop.

Uczciwe ograniczenie

Nie deklaruję, że jakikolwiek sklep jest „bezpieczny w 100%”. Po incydencie kluczowe są również rotacja dostępów, aktualizacje, monitoring zmian plików i dalsza obserwacja logów.

Powiązane case studies

Najczęstsze pytania po infekcji sklepu PrestaShop

Czy wystarczy usunąć wykryty złośliwy plik?

Nie. Backdoor może służyć do tworzenia kolejnych kopii, a kod wykonujący skimmer może znajdować się jednocześnie w module, motywie, bazie i cache.

Czy atak wymagał hasła administratora?

W analizowanym przypadku nie. Podatność umożliwiała zapisanie pliku bez logowania do panelu. Po wejściu atakujący odczytał jednak konfigurację i mógł uzyskać kolejne dane dostępowe.

Czy komputery w biurze trzeba sprawdzić?

Tak, profilaktycznie należy przeskanować urządzenia używane do panelu, hostingu, FTP i poczty. Dostępne dowody wskazywały na podatność sklepu jako pierwotny wektor, ale hasła trzeba zmieniać dopiero z uznanego za bezpieczny komputera.

Kiedy można ponownie uruchomić płatności?

Po oczyszczeniu sklepu, aktualizacji podatnych elementów, wymianie dostępów i wygenerowaniu nowych kluczy operatora płatności. Wcześniejsze klucze należy traktować jako unieważnione.

Jak ograniczyć ryzyko podobnego incydentu?

Regularnie aktualizować moduły, usuwać nieużywane wtyczki z serwera, monitorować integralność plików, ograniczyć dostęp SFTP, przechowywać backupy poza katalogiem publicznym i analizować alerty operatorów płatności.