Uwierzytelnianie dwuskładnikowe dla administratorów WordPressa
Jak wdrożyć uwierzytelnianie dwuskładnikowe w WordPressie: aplikacje TOTP, klucze dostępu, kody zapasowe, słabości SMS, kto potrzebuje 2FA, wdrożenie i NIS2.
Także po: English Deutsch Français Español Italiano Português Türkçe
Uwierzytelnianie dwuskładnikowe (2FA) w WordPressie sprawia, że samo hasło nie otwiera już kokpitu. Po podaniu hasła strona logowania prosi o drugi dowód tożsamości, zwykle sześciocyfrowy kod z aplikacji w telefonie. To jedno z najtańszych i najskuteczniejszych zabezpieczeń kont administratorów, a ponieważ rdzeń WordPressa nie ma wbudowanego uwierzytelniania dwuskładnikowego, dodaje się je za pomocą wtyczki.
Ten poradnik wyjaśnia, jak działają kody, który drugi składnik wybrać, kto w zespole go potrzebuje, jak wdrożyć 2FA, nie odcinając nikogo od konta, i jaki związek ma ono z RODO i NIS2.
Dlaczego samo hasło zawodzi
Hasła wyciekają. Gdy inny serwis traci bazę użytkowników, atakujący wpisują wykradzione pary adresów e-mail i haseł w formularze logowania w całej sieci. Ta metoda nazywa się credential stuffing i działa wszędzie tam, gdzie ktoś użył tego samego hasła ponownie. Drugą drogą jest phishing: przekonująca, fałszywa strona logowania przechwytuje hasło bezpośrednio.
Każda strona na WordPressie ma publiczny formularz logowania pod adresem /wp-login.php, a hasła przyjmuje także XML-RPC, który jest domyślnie włączony. Administrator może instalować wtyczki, czyli uruchamiać kod na serwerze. W zależności od używanych wtyczek Redaktor może mieć wgląd we wpisy z formularzy lub dane klientów. Jedno wykradzione hasło może więc skończyć się naruszeniem ochrony danych osobowych.
Drugi składnik przerywa ten łańcuch. Atakujący może znać hasło, ale nie ma Państwa telefonu ani klucza bezpieczeństwa.
Jak działa uwierzytelnianie dwuskładnikowe w WordPressie
Najpopularniejszą metodą jest TOTP (time-based one-time password), czyli hasło jednorazowe oparte na czasie, opisane w standardzie RFC 6238. W uproszczeniu:
- Po włączeniu 2FA wtyczka wyświetla kod QR. Zawiera on tajny klucz, który zapisuje aplikacja uwierzytelniająca; serwer przechowuje jego kopię.
- Aplikacja łączy ten sekret z bieżącym czasem i oblicza krótki kod, zwykle sześciocyfrowy. W standardowej konfiguracji nowy kod pojawia się co 30 sekund.
- Przy logowaniu, po podaniu poprawnego hasła, WordPress prosi o aktualny kod. Serwer wykonuje te same obliczenia i porównuje wyniki.
Ponieważ obie strony obliczają kod niezależnie, nic nie jest wysyłane na telefon, a aplikacja działa offline. Liczy się jednak zegar telefonu: jeśli kody są stale odrzucane, warto sprawdzić, czy telefon ustawia czas automatycznie.
Trzeba też jasno powiedzieć, czego 2FA nie robi. Nie naprawia podatnej wtyczki, bo atakujący, który wykorzystuje błąd we wtyczce, w ogóle nie przechodzi przez formularz logowania; dlatego aktualizacje pozostają na szczycie naszej listy kontrolnej bezpieczeństwa WordPressa. Fałszywa strona logowania wciąż może też w ciągu kilku sekund przekazać kod TOTP do prawdziwej strony. Przed takim phishingiem w czasie rzeczywistym chronią tylko metody odporne na phishing, czyli klucze dostępu (passkeys) i sprzętowe klucze bezpieczeństwa.
Wybór drugiego składnika: aplikacja, klucz dostępu, SMS czy e-mail
Nie każdy drugi składnik jest równie silny:
| Metoda | Poziom ochrony | Uwagi |
|---|---|---|
| Klucz dostępu lub klucz bezpieczeństwa | Najwyższy | Odporny na phishing; wymaga obsługi we wtyczce |
| Aplikacja uwierzytelniająca (TOTP) | Wysoki | Bezpłatna, działa offline, szeroko obsługiwana |
| Kod e-mailem | Średni | Tak bezpieczny jak skrzynka pocztowa |
| Kod SMS | Najniższy | SIM swapping, przechwycenie |
Klucze dostępu (passkeys) opierają się na standardzie WebAuthn i wykorzystują parę kluczy zapisaną w telefonie, w komputerze lub na kluczu sprzętowym. Przeglądarka używa klucza dostępu tylko w domenie, dla której został utworzony, więc łudząco podobna strona phishingowa nic nie uzyska. Jeśli wtyczka 2FA obsługuje klucze dostępu, warto w pierwszej kolejności udostępnić je administratorom.
Aplikacje uwierzytelniające to praktyczny wybór domyślny. Sprawdzi się każda aplikacja TOTP, np. Google Authenticator, Microsoft Authenticator, aplikacje open source takie jak Aegis czy 2FAS, a także wiele menedżerów haseł.
Kody SMS są słabsze: przestępcy mogą przejąć numer telefonu przez SIM swapping (wyłudzenie duplikatu karty SIM), a wiadomości da się przechwycić. Dlatego amerykańska wytyczna NIST SP 800-63B traktuje kody wysyłane przez sieć telefoniczną, np. SMS-em, jako uwierzytelniacze „ograniczone” (restricted). To lepsze niż nic, ale dla kont administratorów tej metody nie zalecamy.
Kody zapasowe to klucz awaryjny. Większość wtyczek generuje zestaw kodów jednorazowych. Należy je zapisać w menedżerze haseł albo wydrukować i przechowywać w bezpiecznym miejscu – byle nie obok telefonu.
Kto musi używać 2FA w WordPressie
Zalecamy, by uwierzytelnianie dwuskładnikowe było obowiązkowe dla:
- każdego Administratora i Redaktora, a w sklepach WooCommerce także każdego użytkownika z rolą Shop Manager;
- każdej osoby, która ma wgląd w dane osobowe, np. wpisy z formularzy, zamówienia czy konta klientów;
- kont agencji i freelancerów: każda osoba dostaje własne konto i własny drugi składnik, nigdy jeden wspólny login „agencji” powiązany z telefonem jednej osoby;
- kont wokół WordPressa: panelu hostingu, SFTP lub SSH, rejestratora domeny oraz skrzynki e-mail, na którą przychodzą linki do resetowania hasła.
W przypadku Subskrybentów i klientów sklepu zwykle wystarczy udostępnić 2FA jako opcję.
Wdrożenie 2FA w sześciu krokach
- Najpierw uporządkować konta. Usunąć konta byłych pracowników i agencji oraz obniżyć role wyższe, niż to konieczne. Nie ma sensu chronić kont, z których nikt nie korzysta.
- Wybrać wtyczkę. Warto szukać obsługi TOTP, kodów zapasowych, wymuszania według ról i najlepiej także kluczy dostępu. Bezpłatna wtyczka Two Factor z WordPress.org jest rozwijana przez współtwórców WordPressa i obsługuje TOTP oraz kody zapasowe, ale nie ma wbudowanego wymuszania według ról. Logowanie dwuskładnikowe TOTP oferują też wtyczki bezpieczeństwa, takie jak Security Audit & Compliance od secaudit.eu.
- Przetestować na własnym koncie. Skonfigurować 2FA, wylogować się i zalogować ponownie w prywatnym oknie przeglądarki. Na wszelki wypadek warto mieć drugie konto administratora z 2FA.
- Ogłosić termin. Rozesłać krótką instrukcję ze wskazaniem aplikacji do zainstalowania i datą graniczną.
- Wymusić 2FA dla wymienionych wyżej ról, tak aby nikt nie mógł pominąć konfiguracji.
- Zamknąć boczne wejścia. Wyłączyć XML-RPC, jeśli nic z niego nie korzysta, albo upewnić się, że wtyczka go obejmuje. Przejrzeć hasła aplikacji (dostępne od WordPressa 5.6): służą do dostępu przez API i omijają monit o drugi składnik, dlatego warto zostawić tylko te, które są potrzebne.
Zgubiony telefon: jak bezpiecznie odzyskać dostęp
Telefony giną i są wymieniane, to normalne – dlatego warto zaplanować tę sytuację, zanim się zdarzy.
- Kod zapasowy: użytkownik loguje się jednym kodem zapasowym, ponownie konfiguruje 2FA na nowym telefonie i generuje nowe kody zapasowe.
- Inny administrator zwykle może zresetować użytkownikowi drugi składnik. Prośbę należy potwierdzić kanałem, któremu już się ufa, np. oddzwaniając do współpracownika na znany numer. „Zgubiłem telefon, zresetuj mi 2FA” to klasyczny tekst socjotechniczny.
- Ostateczność, gdy jedyny administrator stracił dostęp: dezaktywować wtyczkę 2FA na serwerze, zalogować się i od razu aktywować ją ponownie.
W WP-CLI należy zastąpić two-factor nazwą katalogu używanej wtyczki:
wp plugin deactivate two-factor
Bez WP-CLI ten sam efekt daje zmiana nazwy katalogu wtyczki w wp-content/plugins/ przez SFTP; przed ponowną aktywacją wtyczki trzeba przywrócić pierwotną nazwę. Ten sposób działa dla każdego, kto ma dostęp do serwera – i właśnie dlatego konta hostingowe i SFTP również wymagają silnej ochrony.
Uwierzytelnianie dwuskładnikowe a NIS2 i RODO
NIS2 mówi o tym wprost: art. 21 ust. 2 lit. j dyrektywy NIS2 wymienia uwierzytelnianie wieloskładnikowe lub ciągłe wśród minimalnych środków dla podmiotów objętych jej zakresem. To, czy obejmuje ona Państwa firmę, zależy od wielkości, sektora i krajowych przepisów, co wyjaśniamy w artykule NIS2 a strona na WordPressie. Nawet jeśli dyrektywa NIS2 nie dotyczy Państwa bezpośrednio, klienci, którzy jej podlegają, muszą zarządzać bezpieczeństwem łańcucha dostaw (art. 21 ust. 2 lit. d) i coraz częściej pytają agencje, czy dostęp administratora jest chroniony.
RODO nie wymienia 2FA z nazwy, ale art. 32 wymaga środków bezpieczeństwa uwzględniających stan wiedzy technicznej. W przypadku kont administratorów z dostępem do danych osobowych 2FA jest tanie i powszechnie dostępne, więc trudno przekonująco twierdzić, że nie było odpowiednim środkiem; więcej na ten temat w artykule art. 32 RODO a WordPress. Warto zapisać, kiedy i dla których ról wymuszono 2FA, bo art. 5 ust. 2 wymaga, by umieć wykazać stosowane środki.
Najczęstsze pytania
Czy 2FA w pełni chroni stronę na WordPressie?
Nie. Chroni logowanie. Podatne wtyczki, słaby hosting i złośliwe oprogramowanie na komputerze użytkownika wymagają osobnych środków.
Czy kod wysyłany e-mailem wystarczy?
Jest lepszy niż brak drugiego składnika, ale kto przejmie skrzynkę pocztową, dostaje zarówno link do resetowania hasła, jak i kod. Administratorom warto zapewnić aplikację lub klucz dostępu.
Czy kilka osób może korzystać z jednego konta chronionego przez 2FA?
Nie powinny. Każda osoba powinna mieć własne konto – to także jedyny czysty sposób, by odebrać dostęp, gdy ktoś odchodzi.
Ten artykuł ma charakter ogólnoinformacyjny i nie stanowi porady prawnej.
Sprawdź swoją stronę
Security Audit & Compliance to wtyczka WordPress od secaudit.eu: wyszukuje złośliwe oprogramowanie, ukryty spam, zmienione pliki rdzenia i podatny kod oraz przypisuje wyniki do art. 32 RODO, art. 21 NIS2 i OWASP Top 10.
Zobacz, co sprawdza wtyczka