시스템 보안 · 취약점 › B. 계정 · 인증 보안 강화 · 42/50편 (전체 092/450)
학습 단계: 4단계 · 자동 점검·로그 분석
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.
auditd는 인증을 단계별 이벤트로 기록합니다. secure/auth.log가 "결과 한 줄"이라면, audit은 PAM 각 단계의 성공·실패와 세션 생명주기를 보여줍니다(051편 흐름의 상세 버전).
로그인 1회의 audit 이벤트 순서
USER_AUTH : 인증(비밀번호·키) 성공/실패
USER_ACCT : 계정 유효성(만료·잠금)
CRED_ACQ : 자격증명 획득
USER_LOGIN : 로그인 완료 (auid·ses 부여, addr 기록)
USER_START : 세션 시작
... (세션 중 행위)
USER_END : 세션 종료
CRED_DISP : 자격증명 반납
실패 로그인은 USER_AUTH에서 res=failed로 끝나고 USER_LOGIN까지 가지 않습니다. 어느 단계에서 멈췄는지로 실패 원인을 알 수 있습니다.
auid·ses를 제공해 로그인과 이후 행위를 연결하는 유일한 로그원입니다(038편).| 명령 | 용도 |
|---|---|
ausearch -m USER_LOGIN -i | 로그인 완료 이벤트(addr·auid·ses) |
ausearch -m USER_AUTH -i | 인증 성공/실패 |
ausearch -m USER_ACCT -i | 계정 유효성 결과 |
ausearch --session N -i | 세션 전체 생명주기 |
aureport --auth / --login | 인증·로그인 요약 |
ausearch -m USER_LOGIN -sv no -i | 실패한 로그인만 |
# 1) 오늘 로그인 성공/실패 요약
sudo aureport --login -i --start today | head -20
# 2) 실패한 로그인만 (출발지·계정)
sudo ausearch -m USER_LOGIN -sv no -i --start today 2>/dev/null | grep -oE 'acct=[^ ]+|addr=[^ ]+' | paste - - | sort | uniq -c | sort -rn | head
# 3) 특정 로그인의 PAM 단계별 결과
sudo ausearch -m USER_AUTH,USER_ACCT,USER_LOGIN -ua devops -i --start recent 2>/dev/null | \
grep -oE 'type=[A-Z_]+|res=[a-z]+|acct=[^ ]+' | paste - - - | tail
$ sudo aureport --login -i --start today
Login Report
============================================
# date time auid host term exe success event
1. ... devops 192.168.56.5 /dev/pts/1 /usr/sbin/sshd yes ...
$ (실패 로그인) (없음)
성공 로그인만 있고(모두 yes), auid·출발지가 기준선과 일치하는 상태가 정상입니다.
$ sudo aureport --login -i --start today | grep ' no '
... devops 192.168.56.77 ... /usr/sbin/sshd no (다수)
... devops 192.168.56.77 ... /usr/sbin/sshd yes (1건)
$ (PAM 단계)
USER_AUTH res=failed acct=devops (반복)
USER_AUTH res=success acct=devops
USER_ACCT res=success acct=devops
USER_LOGIN res=success acct=devops addr=192.168.56.77 ses=12
PAM 단계별 결과로 실패 원인을 구분한 예시입니다(가상의 예시 로그).
[비밀번호 틀림] USER_AUTH res=failed ... → 여기서 멈춤 (USER_ACCT 없음)
[계정 잠김] USER_AUTH res=success ... / USER_ACCT res=failed ... → 인증은 됐으나 계정 거부
[접근 제어] USER_AUTH ... / USER_ACCT ... / USER_LOGIN res=failed ... → 로그인 단계 거부
[정상] USER_AUTH ok / USER_ACCT ok / USER_LOGIN ok ses=N
| 멈춘 단계 | 원인 |
|---|---|
| USER_AUTH fail | 비밀번호·키 틀림 |
| USER_ACCT fail | 만료·잠금(faillock) |
| USER_LOGIN fail | 접근 제어(AllowGroups 등) |
텍스트 로그로는 "Failed"만 보이지만, audit은 어느 관문에서 막혔는지까지 알려줍니다.
<group name="local,syssec_b,authentication,">
<rule id="101380" level="8">
<if_group>audit</if_group>
<match>type=USER_LOGIN</match>
<regex>res=failed</regex>
<description>audit USER_LOGIN 실패(로그인 단계 거부)</description>
</rule>
</group>
Wazuh는 audit USER_* 이벤트를 디코딩하므로, data.audit.acct·data.audit.res·data.audit.session 필드로 룰·검색을 작성합니다. 텍스트 로그 룰(5xxx)과 중복 Alert가 나지 않도록 역할을 나눕니다(audit은 세션 추적용).
| 이벤트 | 의미 |
|---|---|
| USER_AUTH | 인증(비밀번호·키) 결과 |
| USER_ACCT | 계정 유효성(만료·잠금) |
| USER_LOGIN | 로그인 완료(auid·ses·addr) |
| USER_START/END | 세션 시작/종료 |
| 면접 포인트 | "audit은 어느 PAM 단계에서 막혔는지 + 세션 추적(auid/ses)을 준다" |
다음 편 093. 계정 · 인증 보안 — 인증 이벤트 타임라인 작성 에서는 여러 인증 이벤트를 시간순으로 엮는 인증 이벤트 타임라인 작성을 다룹니다.
이전 편: 091. 계정 · 인증 보안 — 인증 로그 정규화 — secure·auth.log·journal
📚 시리즈 전체 보기: 시스템 보안 · 취약점