Luki w systemie PAM (Pluggable Authentication Modules): Jak ominąć uwierzytelnianie w Linuxie
🔐 Luki w systemie PAM (Pluggable Authentication Modules): Jak ominąć uwierzytelnianie w Linuxie
🧭 Wprowadzenie
Współczesne systemy operacyjne muszą zapewniać zarówno elastyczność, jak i bezpieczeństwo w zakresie mechanizmów uwierzytelniania. W przypadku systemów opartych na Linuxie, kluczowym elementem tej infrastruktury jest PAM (Pluggable Authentication Modules) – modularny system pozwalający na łatwe zarządzanie procesami uwierzytelniania, autoryzacji oraz sesji użytkowników.
Pomimo swojej potężnej funkcjonalności, PAM nie jest wolny od podatności, które — przy odpowiednich warunkach — mogą zostać wykorzystane przez atakujących do obejścia procedur logowania, eskalacji uprawnień lub uzyskania trwałego dostępu do systemu. W tym artykule dokonamy głębokiej analizy architektury PAM, wskażemy znane i potencjalne luki bezpieczeństwa oraz omówimy metody ich wykorzystania w rzeczywistych scenariuszach.

🧩 Czym jest PAM?
PAM (Pluggable Authentication Modules) to warstwa abstrakcji między aplikacjami użytkownika a mechanizmami uwierzytelniania systemu. Umożliwia systemom Linux/Unix integrację różnych metod uwierzytelniania (np. hasła, odciski palców, tokeny sprzętowe, LDAP, Kerberos) bez konieczności ich bezpośredniego implementowania przez każdą aplikację.
Architektura PAM opiera się na czterech głównych filarach funkcjonalnych:
- auth – uwierzytelnianie użytkownika (np. hasła)
- account – sprawdzanie stanu konta (np. wygaśnięcie)
- session – zarządzanie sesją logowania
- password – zarządzanie zmianą hasła
Moduły PAM znajdują się zazwyczaj w katalogu /lib/security/
lub /lib64/security/
, a konfiguracje — w /etc/pam.d/
.
🚨 Znane luki w systemie PAM
🛠️ 1. CVE-2010-3316 – Błędna obsługa ustawień pam_namespace.so
Moduł pam_namespace.so
, służący do izolowania przestrzeni nazw dla użytkowników, zawierał lukę umożliwiającą wykonanie dowolnego kodu z uprawnieniami roota w przypadku błędnej konfiguracji katalogów domowych. Choć nie jest to luka bezpośrednio w PAM, pokazuje, jak błędna konfiguracja jednego z jego modułów może prowadzić do eskalacji uprawnień.
🧨 2. CVE-2018-1050 – Atak przez symlinki na pam_motd.so
Moduł pam_motd.so
wykorzystywany do wyświetlania komunikatu dnia (Message of the Day) ładował pliki z katalogów dostępnych dla użytkownika. Atakujący mógł utworzyć symlinki prowadzące do wrażliwych plików systemowych, co prowadziło do wycieku informacji lub wykonania kodu.
🧫 3. Nieuświadomione ryzyko w pam_exec.so
Moduł pam_exec.so
pozwala na wykonywanie zewnętrznych skryptów jako część procesu uwierzytelniania. Jest to szczególnie niebezpieczne, jeśli skrypty nie są odpowiednio kontrolowane – możliwe jest podsunięcie złośliwego skryptu, który zostanie uruchomiony z uprawnieniami systemowymi.
🎯 Metody obchodzenia uwierzytelniania z wykorzystaniem PAM
🔓 1. Zamiana pliku konfiguracyjnego PAM
Zmieniając konfigurację plików w /etc/pam.d/
, atakujący z odpowiednimi uprawnieniami może pominąć lub osłabić procesy uwierzytelniania. Przykład:
auth required pam_permit.so
Zamiast standardowej metody uwierzytelniania (np. pam_unix.so
), użycie pam_permit.so
spowoduje, że każde logowanie zostanie zaakceptowane, niezależnie od poprawności danych logowania.
🧬 2. Tworzenie własnych modułów PAM
Doświadczony atakujący może stworzyć i zainstalować własny moduł PAM, który np. loguje dane uwierzytelniające do ukrytego pliku lub zapewnia dostęp „tylnymi drzwiami” (backdoor).
// Przykład fragmentu kodu modułu PAM logującego hasła
pam_get_authtok(pamh, PAM_AUTHTOK, &password, NULL);
fprintf(logfile, "Password: %s\n", password);
🕳️ 3. Manipulacja zmiennymi środowiskowymi
Ataki typu LD_PRELOAD pozwalają na podstawienie złośliwej biblioteki dynamicznej, która modyfikuje zachowanie procesu logowania.
🛡️ Jak chronić system PAM?
✅ 1. Ograniczenie dostępu do plików konfiguracyjnych
Ustaw odpowiednie prawa dostępu do katalogów /etc/pam.d/
oraz /lib/security/
, aby tylko root mógł je modyfikować.
chmod 600 /etc/pam.d/*
chmod 700 /lib/security/
✅ 2. Monitorowanie nieautoryzowanych zmian
Zastosuj narzędzia typu AIDE, Tripwire lub Auditd, aby wykrywać zmiany w plikach PAM. Możesz również skonfigurować auditctl
, by śledził próby edycji krytycznych plików:
auditctl -w /etc/pam.d/ -p wa -k pam_watch
✅ 3. Regularne aktualizacje i kontrola modułów
Utrzymuj aktualne wersje pakietów PAM i weryfikuj, które moduły są aktywne. Wyłącz nieużywane lub eksperymentalne moduły.
✅ 4. Bezpieczna konfiguracja pam_exec.so
Unikaj uruchamiania zewnętrznych skryptów w ramach procesu logowania. Jeśli to konieczne, ogranicz ich uprawnienia i przetestuj pod kątem podatności.
🧠 Znaczenie PAM dla bezpieczeństwa w erze nowoczesnych ataków
System PAM jest jednym z najważniejszych punktów kontaktu między użytkownikiem a jądrem systemu. Jego błędna konfiguracja, zaniedbanie lub zaufanie nieznanym modułom może prowadzić do katastrofalnych w skutkach naruszeń bezpieczeństwa. Dlatego w dobie rosnących zagrożeń w internecie, wiedza o tym, jak działa PAM i jak go zabezpieczać, jest obowiązkowa dla administratorów systemów Linux.
🧾 Podsumowanie
System PAM, pomimo swojego zaawansowania, nie jest pozbawiony wad i potencjalnych punktów ataku. Od luk w poszczególnych modułach, przez błędne konfiguracje, aż po celowe nadużycia w kodzie — każde z nich może stanowić zagrożenie dla integralności i bezpieczeństwa systemu. Świadome zarządzanie PAM, audyt bezpieczeństwa oraz edukacja to klucze do zbudowania odpornego środowiska pracy w systemach linuksowych.
📎 Dalsza lektura
Aby lepiej zrozumieć ogólny kontekst ryzyk związanych z bezpieczeństwem w sieci, odwiedź poradnik dotyczący zagrożeń w internecie.