Linux 시스템 보안 기초 · 10/50편

이 글은 리눅스 시스템 기초 · 파일 · 권한 · 사용자 관리 · 서비스 · 프로세스 관리 시리즈를 선행 학습으로 두고, 동일한 개념을 보안관제(SOC) 관점에서 한 단계 확장합니다.

선행 학습

1. 들어가며

지금까지 다룬 비밀번호 정책·계정 잠금은 모두 하나의 프레임워크 위에서 동작합니다. 바로 PAM(Pluggable Authentication Modules) 입니다. PAM을 이해하면 '로그인이 실제로 어떻게 결정되는가'가 한눈에 들어옵니다.

2. 핵심 개념

PAM은 인증 로직을 애플리케이션에서 분리해 모듈로 끼워 넣는 구조입니다. 덕분에 login, sshd, sudo가 각자 인증 코드를 갖지 않고 PAM에 위임합니다.

PAM은 네 가지 관리 그룹(type) 으로 나뉩니다.

type역할
auth신원 증명(비밀번호/키 검증)
account계정 유효성(만료·시간대 제한)
password비밀번호 변경 규칙(복잡도)
session세션 설정(로그·자원 제한)
Application (sshd, login, sudo)
        │
        ▼
      PAM
        │
        ├── auth      (pam_unix, pam_faillock)
        ├── account   (pam_unix, pam_time)
        ├── password  (pam_pwquality, pam_unix)
        └── session   (pam_limits, pam_systemd)
        │
        ▼
  허용 / 거부

3. 동작 원리

각 type은 여러 모듈을 위→아래 순서(stack) 로 실행합니다. 각 줄에는 control flag가 붙습니다.

  • required: 실패해도 스택은 계속 돌지만 최종 실패(결과 은닉)
  • requisite: 실패 시 즉시 중단·거부
  • sufficient: 성공 시 즉시 통과
  • optional: 결과에 큰 영향 없음

설정 파일은 /etc/pam.d/에 서비스별로 있습니다(/etc/pam.d/sshd 등). 즉 '어떤 모듈이 어떤 순서·플래그로 쌓였는가'가 곧 그 서비스의 인증 정책입니다.

4. 명령어 실습

# sshd의 PAM 스택 확인
cat /etc/pam.d/sshd

# 공통 인증 스택 (Ubuntu: common-auth / RHEL: system-auth)
grep -Ev '^#|^$' /etc/pam.d/common-auth   # Ubuntu
# grep -Ev '^#|^$' /etc/pam.d/system-auth # RHEL

# 특정 모듈이 어디에 쓰이는지
grep -rl pam_faillock /etc/pam.d/

5. 실행 결과

실습 환경(Ubuntu)의 common-auth 핵심 라인입니다. (실제 캡처 — 발췌)

$ grep -Ev '^#|^$' /etc/pam.d/common-auth
auth    [success=1 default=ignore]  pam_unix.so nullok
auth    requisite                   pam_deny.so
auth    required                    pam_permit.so

pam_unix.so가 비밀번호를 검증하고, 실패하면 pam_deny.so로 넘어가 거부됩니다. [success=1 default=ignore]는 '성공하면 다음 1줄을 건너뛴다'는 점프 문법으로, control flag의 확장형입니다.

6. 보안 관점 — 정상 사용 vs 악용

  • 정상: 표준 모듈 구성, 배포판 기본 스택 유지.
  • 악용 징후 — PAM 백도어:
    • pam_permit.so가 auth에 부적절하게 추가됨(누구나 통과)
    • 알 수 없는 경로의 커스텀 .so 모듈 삽입
    • pam_unix.so에 nullok 오남용(빈 비밀번호 허용)

PAM 백도어는 매우 은밀합니다. 정상 로그인처럼 보이므로, PAM 설정 파일·모듈 무결성 감시가 필수입니다.

7. 탐지 방법

  • /etc/pam.d/ 변경 감사: auditd -w /etc/pam.d/ -p wa -k pam_config
  • PAM 모듈 무결성: dpkg -V libpam-modules(Debian) / rpm -V pam(RHEL)
  • 비표준 경로의 .so 참조 탐지

8. SOC 관점 — SIEM · Wazuh · IOC

PAM 설정 변경은 인증 우회로 직결되므로 최고 우선순위 FIM 대상입니다. Wazuh FIM으로 /etc/pam.d/와 /lib*/security/(모듈 디렉터리)를 감시하고, 변경 발생 시 즉시 알람을 올립니다. 특히 인증 성공률이 갑자기 100%가 되거나 실패 로그가 사라지면 PAM 백도어를 의심해야 합니다.

9. 실습 체크리스트

[ ] /etc/pam.d/sshd 스택을 읽어 본다
[ ] 네 가지 type의 역할을 구분한다
[ ] control flag의 의미를 이해한다
[ ] PAM 설정/모듈 변경 감사를 설정한다

10. 핵심 정리

  • PAM은 인증 로직을 모듈로 분리한 프레임워크다.
  • auth·account·password·session 네 type으로 구성된다.
  • control flag(required/requisite/sufficient)가 판정 방식을 정한다.
  • 설정은 /etc/pam.d/에 서비스별로 존재한다.
  • PAM 백도어는 은밀하므로 설정·모듈 무결성 감시가 필수다.

11. 다음 편

다음 편에서는 11. PAM 인증 흐름 분석 를 다룹니다. 이 구조가 실제 SSH 로그인에서 어떻게 흘러가는지 단계별로 추적합니다.


본 실습은 격리된 테스트 VM(Rocky Linux / Ubuntu, VMware) 및 테스트 계정 환경을 기준으로 하며, 운영 서버를 대상으로 하지 않습니다. 실행 결과는 실제 캡처와 예시 출력을 명확히 구분해 표기합니다.

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

0개의 댓글