시스템 보안 · 취약점 › I. 지속성 · 재침투 징후 · 14/50편 (전체 414/450)
학습 단계: 계정·인증 지속성 탐지
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.
PAM은 Linux 로그인의 인증 엔진입니다. 공격자가 PAM 모듈을 바꾸면 "특정 비밀번호를 입력하면 어느 계정이든 통과"하거나 "입력된 비밀번호를 몰래 저장"하는 백도어를 만들 수 있습니다(T1556.003).
PAM 백도어 유형
① 정상 모듈 교체 : pam_unix.so 를 변조본으로 덮어쓰기
② 악성 모듈 추가 : /lib64/security/pam_sys.so + pam.d에 auth sufficient
③ 설정만 변조 : auth sufficient pam_permit.so (D영역 34편)
효과
· 마스터 비밀번호로 모든 계정 로그인
· 입력 비밀번호를 파일로 기록(자격증명 수집)
핵심: 모듈 파일은 "패키지 해시"가, 설정은 "기준선 diff"가 기준
B영역 13편이 PAM 설정 변조를, D영역이 권한 우회를 다뤘다면 이번 편은 모듈 바이너리 자체를 이용한 지속성에 집중합니다.
| 확인 | 명령 | 포인트 |
|---|---|---|
| 패키지 검증 | rpm -V pam / dpkg --verify libpam-modules | 5(해시) 표시 |
| 소유 확인 | rpm -qf /lib64/security/*.so | 미소유 모듈 |
| 설정 참조 | grep -rh '^[a-z]' /etc/pam.d/ | 낯선 모듈명 |
| 문자열 | strings <module> | grep -iE '/tmp|pass' | 기록 경로 |
# PAM 모듈 무결성 점검 (분석 방법)
rpm -V pam 2>/dev/null || dpkg --verify libpam-modules 2>/dev/null
# 패키지에 속하지 않은 PAM 모듈
for m in /lib64/security/*.so /lib/x86_64-linux-gnu/security/*.so; do
[ -f "$m" ] || continue
rpm -qf "$m" >/dev/null 2>&1 || dpkg -S "$m" >/dev/null 2>&1 || echo "미소유: $m"
done
# pam.d에서 참조되는 모듈 목록과 기준선 비교
grep -rhoE 'pam_[a-z0-9_]+\.so' /etc/pam.d/ | sort | uniq -c
$ rpm -V pam
(출력 없음 — 모든 파일 해시 일치)
$ 미소유 모듈 없음
PAM 패키지 검증 결과가 깨끗하고, 모든 모듈이 패키지에 속하며, pam.d가 참조하는 모듈이 기준선과 같은 상태가 정상입니다.
$ rpm -V pam
S.5....T. /usr/lib64/security/pam_unix.so
미소유: /usr/lib64/security/pam_sys.so
/etc/pam.d/sshd: auth sufficient pam_sys.so (신규 줄)
PAM 백도어 분석 흐름입니다(가상의 예시).
[변경 감지] /etc/pam.d · /lib64/security 감시(FIM·auditd)
↓
[무결성] rpm -V / dpkg --verify → 교체된 모듈
↓
[미소유 모듈] 패키지 밖 .so → 참조하는 pam.d 파일
↓
[영향] 해당 스택(sshd·su·sudo)으로 들어온 로그인 확인
| 신호 | 해석 |
|---|---|
| rpm -V 5 표시 | 모듈 내용 변경 |
| 미소유 .so | 추가된 모듈 |
| sufficient 최상단 | 다른 검증 생략 |
교체된 모듈은 메모리에 이미 로드된 sshd 프로세스에도 영향을 주므로, 복구 후에는 인증 관련 서비스를 재시작해야 합니다.
<!-- 실습 예시 룰: 적용 전 wazuh-logtest 및 테스트 환경 검증 필요 -->
<group name="local,syssec_i,persistence,">
<rule id="108130" level="14">
<if_sid>108000</if_sid>
<field name="audit.key">persist_pam</field>
<field name="audit.file.name" type="pcre2">/security/pam_[^/]+\.so$|^/etc/pam\.d/</field>
<field name="audit.exe" negate="yes" type="pcre2">/(rpm|dnf|yum|dpkg|apt|unattended-upgrade)</field>
<description>패키지 관리자 외 PAM 모듈·설정 변경(PAM 백도어 의심)</description>
<mitre><id>T1556.003</id></mitre>
</rule>
</group>
패키지 관리자가 아닌 프로그램이 PAM 모듈이나 설정을 쓰면 최고 수준으로 경보합니다. 감사 대상에 /lib64/security와 /etc/pam.d를 모두 넣어야 합니다.
| 유형 | 탐지 |
|---|---|
| 모듈 교체 | rpm -V / dpkg --verify |
| 모듈 추가 | 미소유 .so |
| 설정 변조 | pam.d 기준선 diff |
| 영향 | 모든 인증 경로 |
| 면접 포인트 | "PAM은 모든 로그인의 엔진 — 모듈은 패키지 해시, 설정은 기준선으로 본다" |
다음 편 415. 지속성·재침투 — sudoers 지속성 규칙 탐지 에서는 sudoers·sudoers.d에 남긴 NOPASSWD·ALL 규칙을 재침투 후 즉시 root를 얻는 지속성으로 보고 탐지·추적하는 방법을 다룹니다.
이전 편: 413. 지속성·재침투 — sshd 설정 변조를 통한 재침투 경로 탐지
📚 시리즈 전체 보기: 시스템 보안 · 취약점