시스템 보안 · 취약점 › I. 지속성 · 재침투 징후 · 14/50편 (전체 414/450)
학습 단계: 계정·인증 지속성 탐지
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.

선행 학습

1. 개념

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영역이 권한 우회를 다뤘다면 이번 편은 모듈 바이너리 자체를 이용한 지속성에 집중합니다.

2. 왜 중요한가

  • PAM 백도어는 모든 인증 경로(SSH·su·sudo·콘솔)에 동시에 영향을 줍니다.
  • 마스터 비밀번호 방식은 계정 비밀번호를 모두 바꿔도 유지됩니다.
  • 모듈 교체는 파일명이 그대로여서 설정 diff만으로는 보이지 않습니다.

3. 핵심 명령어 / 설정

확인명령포인트
패키지 검증rpm -V pam / dpkg --verify libpam-modules5(해시) 표시
소유 확인rpm -qf /lib64/security/*.so미소유 모듈
설정 참조grep -rh '^[a-z]' /etc/pam.d/낯선 모듈명
문자열strings <module> | grep -iE '/tmp|pass'기록 경로

4. 실습 (실습 예시)

# 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

5. 정상 상태

$ rpm -V pam
(출력 없음 — 모든 파일 해시 일치)
$ 미소유 모듈 없음

PAM 패키지 검증 결과가 깨끗하고, 모든 모듈이 패키지에 속하며, pam.d가 참조하는 모듈이 기준선과 같은 상태가 정상입니다.

6. 이상 상태

$ 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_unix.so 크기·해시·시간 변경 → 핵심 인증 모듈 교체
  • 패키지에 없는 pam_sys.so + sshd 인증 스택 최상단 삽입 → 백도어 모듈
  • 모듈 내부 문자열에 기록 파일 경로 → 자격증명 수집형 의심

7. 로그 분석 (분석 방법)

PAM 백도어 분석 흐름입니다(가상의 예시).

[변경 감지] /etc/pam.d · /lib64/security 감시(FIM·auditd)
   ↓
[무결성] rpm -V / dpkg --verify → 교체된 모듈
   ↓
[미소유 모듈] 패키지 밖 .so → 참조하는 pam.d 파일
   ↓
[영향] 해당 스택(sshd·su·sudo)으로 들어온 로그인 확인
신호해석
rpm -V 5 표시모듈 내용 변경
미소유 .so추가된 모듈
sufficient 최상단다른 검증 생략

교체된 모듈은 메모리에 이미 로드된 sshd 프로세스에도 영향을 주므로, 복구 후에는 인증 관련 서비스를 재시작해야 합니다.

8. SOC 관제 포인트

  • PAM 모듈 디렉터리 변경은 패키지 업데이트 외에는 없어야 하므로 업데이트 창과 대조합니다.
  • rpm -V 결과를 정기 점검·SCA에 포함합니다.
  • PAM 변경 이후 모든 계정의 로그인 성공을 재검토합니다.

9. 탐지 규칙

<!-- 실습 예시 룰: 적용 전 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를 모두 넣어야 합니다.

10. 대응 방법

  1. 초기 확인 — 교체·추가된 모듈과 변경된 pam.d 파일을 확인합니다.
  2. 범위 확인 — 해당 스택을 거친 로그인과 수집 파일(비밀번호 기록)을 확인합니다.
  3. 증거 확보 — 모듈 바이너리 사본·해시·설정 사본을 보존합니다.
  4. 차단/조치 — 패키지 재설치로 모듈을 복원하고 악성 모듈·설정 줄을 제거한 뒤 서비스를 재시작합니다.
  5. 재발 방지 — PAM 모듈 무결성 점검과 변경 경보를 상시 운영하고, 노출 가능 계정의 비밀번호를 교체합니다.

11. 핵심 정리

유형탐지
모듈 교체rpm -V / dpkg --verify
모듈 추가미소유 .so
설정 변조pam.d 기준선 diff
영향모든 인증 경로
면접 포인트"PAM은 모든 로그인의 엔진 — 모듈은 패키지 해시, 설정은 기준선으로 본다"

12. 다음 편 예고

다음 편 415. 지속성·재침투 — sudoers 지속성 규칙 탐지 에서는 sudoers·sudoers.d에 남긴 NOPASSWD·ALL 규칙을 재침투 후 즉시 root를 얻는 지속성으로 보고 탐지·추적하는 방법을 다룹니다.


이전 편: 413. 지속성·재침투 — sshd 설정 변조를 통한 재침투 경로 탐지
📚 시리즈 전체 보기: 시스템 보안 · 취약점

profile
코드에 숨겨진 위협을 읽고 AI로 보안의 미래를 설계합니다. 프론트엔드 개발 경험을 자산 삼아 더 견고하고 지능적인 보안 운영 시스템을 구축해 나가는 과정을 기록합니다

0개의 댓글