061. 계정 · 인증 보안 — 비밀번호 이력·재사용 제한(pam_pwhistory)

changseop lee·3일 전

시스템 보안 · 취약점 › B. 계정 · 인증 보안 강화 · 11/50편 (전체 061/450)
학습 단계: 2단계 · 설정 및 점검
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.

선행 학습

1. 개념

만료 정책(060편)으로 비밀번호를 주기적으로 바꾸게 해도, 사용자가 같은 비밀번호로 되돌리면 효과가 없습니다. pam_pwhistory는 이전에 쓴 비밀번호 N개를 기억해 재사용을 막습니다.

passwd 변경 → PAM password 스택
   ├─ pam_pwhistory.so remember=5   → 최근 5개와 비교, 같으면 거부
   └─ 이전 해시 저장 위치: /etc/security/opasswd  (root 전용)

opasswd 한 줄: devops:1002:5:<해시1>,<해시2>,...   (쉼표로 이력 해시 나열)

remember 값이 이력 개수이며, 이력은 opasswd에 해시로만 저장됩니다(원문 없음).

2. 왜 중요한가

  • 재사용 제한이 없으면 사용자는 password1 → password2 → 다시 password1처럼 돌려쓸 수 있어, 유출된 비밀번호가 계속 유효할 수 있습니다.
  • 공격자가 opasswd를 지우거나 remember를 0으로 바꾸면, 탈취한 옛 비밀번호를 다시 설정해 접근을 유지할 수 있습니다.
  • opasswd에는 과거 해시가 모여 있어, 파일 자체가 유출되면 크래킹 대상이 늘어납니다. 접근 권한(600 root) 점검도 함께 필요합니다.

3. 핵심 명령어 / 설정

항목확인
pam_pwhistory 연결·remembergrep pwhistory /etc/pam.d/system-auth /etc/pam.d/common-password
opasswd 존재·권한sudo stat -c '%a %U:%G %n' /etc/security/opasswd
이력 보유 계정 수sudo awk -F: '{print $1, NF}' /etc/security/opasswd (원문 출력 금지)
정책 동작테스트 VM에서 직전 비밀번호로 변경 시도 → 거부 확인

4. 실습 (실습 예시)

# 1) 설정 확인
grep -n 'pam_pwhistory' /etc/pam.d/system-auth /etc/pam.d/common-password 2>/dev/null
sudo stat -c '%a %U:%G %n' /etc/security/opasswd 2>/dev/null

# 2) 이력 계정 수만 확인 (해시 원문은 보지 않음)
sudo awk -F: '{print $1": 이력 "gsub(/,/,",",$NF)+1"개"}' /etc/security/opasswd 2>/dev/null | head

# 3) 기준선: 설정 줄과 opasswd 권한만 기록
grep -h pam_pwhistory /etc/pam.d/system-auth 2>/dev/null
sudo stat -c '%a' /etc/security/opasswd

opasswd는 해시 모음이므로 내용을 출력·복사하지 않고, 존재·권한·계정 수만 확인합니다.

5. 정상 상태

password requisite pam_pwhistory.so use_authtok remember=5 retry=3
$ sudo stat -c '%a %U:%G %n' /etc/security/opasswd
600 root:root /etc/security/opasswd

remember가 설정되어 있고 opasswd 권한이 600 root인 상태가 정상입니다.

6. 이상 상태

$ grep pam_pwhistory /etc/pam.d/system-auth
(출력 없음)
$ sudo stat -c '%a %U:%G %n' /etc/security/opasswd
644 root:root /etc/security/opasswd
  • pam_pwhistory 줄이 사라짐 → 재사용 제한 해제
  • opasswd 권한이 644 → 일반 사용자가 과거 해시를 읽을 수 있음(정보 노출)
  • 둘이 함께 나타나면, 옛 비밀번호 재설정 + 이력 열람 준비로 볼 수 있습니다.

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

이력 기능 우회 흔적입니다(가상의 예시 로그).

type=PATH msg=audit(1759341200.010:4001): item=0 name="/etc/pam.d/system-auth" nametype=NORMAL key="auth_conf"
type=SYSCALL msg=audit(1759341200.010:4001): syscall=257 success=yes auid=1002 uid=0 comm="vi" exe="/usr/bin/vi" key="auth_conf"
type=SYSCALL msg=audit(1759341260.200:4005): syscall=87 success=yes auid=1002 uid=0 comm="rm" exe="/usr/bin/rm" key="auth_conf"
type=PATH msg=audit(1759341260.200:4005): item=1 name="/etc/security/opasswd" nametype=DELETE
Oct  2 02:54:40 rocky9-web01 passwd[12201]: pam_unix(passwd:chauthtok): password changed for devops
관찰해석
system-auth 수정(auth_conf)pam_pwhistory 제거
opasswd 삭제(syscall=87 unlink)이력 초기화 → 옛 비밀번호 재사용 가능
이후 password changed제한 해제 후 비밀번호 변경(옛 값 복원 가능성)

8. SOC 관제 포인트

  • opasswd 삭제·권한 변경, PAM password 스택에서 pam_pwhistory 제거를 감시합니다.
  • 재사용 제한 해제와 비밀번호 변경이 이어지면 옛 비밀번호 복원으로 의심합니다.
  • opasswd는 해시 모음이므로 FIM 대상이되 <nodiff>로 내용은 Alert에 넣지 않습니다.

9. 탐지 규칙

<group name="local,syssec_b,account,">
  <rule id="101100" level="11">
    <if_group>audit</if_group>
    <field name="audit.key">auth_conf</field>
    <match>name="/etc/security/opasswd"</match>
    <regex type="pcre2">nametype=DELETE|nametype=CREATE</regex>
    <description>비밀번호 이력 파일(opasswd) 삭제/재생성</description>
  </rule>
</group>

PAM 스택 파일(system-auth, common-password)의 변경은 101110(다음 편)의 PAM 변조 룰과 함께 운영합니다.

10. 대응 방법

  1. 초기 확인 — pam_pwhistory 설정·opasswd 상태의 변경 시각·행위자를 확인합니다.
  2. 범위 확인 — 해제 이후 비밀번호를 변경한 계정과 다른 서버의 동일 변경을 확인합니다.
  3. 증거 확보 — PAM 설정 사본, opasswd 권한 기록(내용 제외), audit 로그를 보존합니다.
  4. 차단/조치 — 설정·권한을 복원하고, 영향 계정의 비밀번호를 강제 재설정합니다.
  5. 재발 방지 — pam_pwhistory·opasswd 상태를 기준선·FIM에 포함합니다.

11. 핵심 정리

구분핵심 내용
기능최근 N개 비밀번호 재사용 차단
저장/etc/security/opasswd (해시, 600 root)
우회pam_pwhistory 제거, opasswd 삭제, remember=0
탐지PAM password 스택 변경 + opasswd 삭제/권한 변화
면접 포인트"만료만 걸고 재사용 제한이 없으면 옛 비밀번호로 되돌릴 수 있다"

12. 다음 편 예고

다음 편 062. 계정 · 인증 보안 — PAM 스택 구조와 control flag 해석 에서는 인증 동작 전체를 좌우하는 PAM 스택 구조와 control flag 해석을 다룹니다.


이전 편: 060. 계정 · 인증 보안 — 비밀번호 만료·변경 주기 — chage 점검
📚 시리즈 전체 보기: 시스템 보안 · 취약점

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

0개의 댓글