Podatności w Drupalu wykorzystywane w atakach od strony Rosji

Od wczoraj wzmożone ataki na różne witryny. Nie ma co panikować, ale warto się zabezpieczyć. Stosowne ostrzeżenia wydało nawet, a właściwie podało dalej ministerstwo cyfryzacji (a właściwie jego pozostałości...). Blokady IP to jedno, ale jedno dobrze skonstruowane żądanie może położyć serwis lub pozwolić przejąć nad nim kontrolę.

Zabezpieczenie modułów

Wygląda na to, że na terenach Rosji powstało nowe narzędzie atakujące m.in. z RU-Kanzas (z Moskwy). Oprócz ew. blokady IP zalecałbym zabezpieczenie modułów Drupala. W szczególności zablokowanie plików testowych w modułach PHP. Wystarczy wrzucić .htaccess z poniższą zawartością do wybranych folderów, zwłaszcza tych z testami, przykładowymi plikami i z ckeditorem.

# Turn off all options we don't need.
Options None
Options +FollowSymLinks
 
# lock out executables
<Files *.php>
Deny From All
</Files>
<Files *.asp>
Deny From All
</Files>
<Files *.fla>
Deny From All
</Files>

Można takie zabezpieczenie zrobić na poziomie reguł mod_rewrite lub w konfiguracji proxy, ale htaccess jest najprostszym rozwiązaniem na szybko. Powyższe zakłada, że macie włączony mod_access_compat (lub Apache 2.2). Można oczywiście łatwo zmienić to na reguły w nowszej składni (np. Require local zamiast Deny...).

Weryfikacja zmian w plikach

Sprawdźcie również czy przypadkiem nie macie nadmiarowego folderu sites/default/files w folderach modułów (/sites/all/modules/.../sites/default/files). Można się zdziwić, ale bez paniki. Za pewne wystarczy usunąć i zabezpieczyć. Sprawdźcie jednak czy coś innego nie udało się wgrać na serwer. Najlepiej porównać pliki z poprzednim backupem. Można to zrobić na dwa sposoby:

  1. Narzędziem do synchronizacji folderów z Total Commander.
  2. Wykorzystać do tego Git. Osobiście lubię używać TortoiseGit, ale narzędzie uruchamiane z bash też się nada.
    1. Utworzyć repozytorium w folderze.
    2. Dodać wszystkie pliki ze starego backupu.
    3. Skasować pliki i wgrać pliki z nowego backupu.
    4. Przejrzeć różnice.

Przy porównywaniu pamiętajcie, że Drupal zawiera pliki cache. Cache należy zignorować przy porównaniu (to pliki css i js w files/css oraz files/js), część plików cache może być pre-pakowana (mają wtedy rozszerzenie gz np. css_k4j23r9f0dj.css.gz).

Na wszelki wypadek dobrze jest wyczyścić cache i sprawdzić również bazę danych. Jeśli na witrynie jest mało zmian, to można przywrócić backup sprzed 24 marca 2022 na wszelki wypadek.

Podsumowanie i errata

Możliwe, że to był tylko rekonesans. Początkowo ataki wydawały się dosyć groźne, ale w sumie okazało się, że atakujący raczej strzelali na ślepo. Głównie sprawdzali zainstalowane moduły i ew. podatności (bez konkretnego celu). Nadal jednak warto zabezpieczyć foldery, ponieważ wywołanie niektórych skryptów może powodować niepotrzebne obciążenie serwera. No i nawet jeśli macie dobre zabezpieczenia, to i tak pamiętajcie o aktualizacji swojej witryny w tym modułów (czy różnych pluginów jak w wypadku Wordpressa).

Aktualizacja: 2022-03-30. Moja witryna jest obecnie intensywnie atakowana. Nie zrozumcie mnie źle, moje witryny zawsze były atakowane poprzez skanowanie folderów administracyjnych itp. Jak większość witryn (jak wszystkie którymi się opiekowałem w ostatnich 20 latach). Ale to teraz, to zupełnie inna bajka. Chyba ktoś się zdenerwował 😋...

Odkąd zabezpieczyłem moduły, przerzucili się na próby logowania (nie tylko, ale głównie). W takiej sytuacji warto mieć mocne hasło do logowania 🔐. No i oczywiście hasło inne niż na innych witrynach. Pamiętajcie! Hasło nie musi być losowe, wcale nie musi zawierać znaków specjalnych. Ważne żeby było długie i trudne do zgadnięcia. Zawsze lepsze jest zdanie z dziwnymi słowami niż dowolne pojedyncze słowo. I nie zmieniajcie go co miesiąc. Czy wasze hasło na miesiąc marzec kończy się na „03!”, a w kwietniu „04!”?... 😉 No właśnie.

Można też mieć tzw. menedżer haseł np. LastPass (jest darmowy z pewnymi ograniczeniami), czy bardziej nerdowy KeePass (nerdowy nie musi być zły, ale z wygodą bywa różnie). Musicie jeszcze pamiętać wtedy hasło do tego menedżera haseł, ale zawsze to tylko jedno hasło. No i to jedno hasło musi być łatwe do zapamiętania i nigdzie nie może być zapisane. Czyli jak już pisałem — najlepiej gdy hasło to zdanie z dziwnymi słowami.

Jeśli macie taką możliwość, to warto też zablokować stronę logowania do konkretnego IP. To oczywiście wtedy gdy macie stałe IP, albo możecie się połączyć ze swoim serwerem przez dedykowany VPN itp. Alternatywną może być też włączenie 2FA, ale to jest zwykle trudniejsze w konfiguracji.

Keep calm and update your website.