시스템 보안 · 취약점 › B. 계정 · 인증 보안 강화 · 19/50편 (전체 069/450)
학습 단계: 2단계 · 설정 및 점검
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.
인증 성공 로그는 실패 로그보다 더 중요합니다. 공격이 성공했는지를 알려주기 때문입니다. 성공 한 줄에는 판단에 필요한 정보가 모두 담겨 있습니다.
Accepted publickey for devops from 192.168.56.5 port 51010 ssh2: ED25519 SHA256:Qm9v...
│ │ │ │ │ │ │
방식 인증유형 계정 출발지 IP 포트 키타입 지문
password / publickey / keyboard-interactive(2FA 등)
성공 로그를 볼 때 확인할 축: 인증 방식 · 출발지 · 시간 · 직전 실패 · 이어지는 세션.
Accepted password가 나오면, 그 자체로 정책 위반이자 우회 신호입니다(A영역 009편).| 확인 | 명령 |
|---|---|
| 성공 로그 | sudo grep 'Accepted' /var/log/secure |
| 방식별 집계 | ... | grep -oE 'Accepted (password|publickey|keyboard-interactive)' | sort | uniq -c |
| 계정·출발지별 | ... | sed -E 's/.for ([^ ]+) from ([0-9.]+)./\1 \2/' | sort | uniq -c |
| 시간대 분포 | ... | awk '{print $3}' | cut -d: -f1 |
| 세션 연결 | ausearch -m USER_LOGIN -i의 ses → 이후 행위 |
LOG=/var/log/secure # Ubuntu: /var/log/auth.log
# 1) 성공 로그인의 방식·계정·출발지
sudo grep 'Accepted' $LOG | sed -E 's/.*Accepted ([a-z-]+) for ([^ ]+) from ([0-9.]+).*/\1 \2 \3/' | sort | uniq -c | sort -rn
# 2) 키 전용 정책 서버에서 password 성공 찾기 (정책 위반)
sudo grep 'Accepted password' $LOG | tail
# 3) 성공 직전 실패가 있었는지 (같은 계정·출발지)
sudo grep -E 'Failed password for devops|Accepted .* for devops' $LOG | tail -10
40 publickey devops 192.168.56.5
22 publickey admin1 192.168.56.5
$ sudo grep 'Accepted password' $LOG
$
모든 성공이 키 인증(publickey), 관리망 출발지, password 성공이 없는 상태가 정상입니다(키 전용 정책 서버 기준).
1 password devops 192.168.56.77
$ sudo grep -E 'Failed password for devops|Accepted .* for devops' $LOG | tail
02:10:41 Failed password for devops from 192.168.56.77 port 50110 ssh2
02:10:44 Accepted password for devops from 192.168.56.77 port 50110 ssh2
| 신호 | 의미 |
|---|---|
password 인증 성공 | 키 전용 정책 서버에서 정책 위반 |
| 비관리망 출발지(.77) | 평소 출발지와 다름 |
| 직전 Failed 1회 | 추측 끝에 성공했을 가능성 |
| 새벽 시각 | 업무 외 시간 |
네 신호가 겹치면 단건 성공이라도 계정 탈취로 다뤄야 합니다(A영역 049편 시작점).
성공 로그를 세션·이후 행위와 연결한 예시입니다(가상의 예시 로그).
Oct 2 02:10:44 rocky9-web01 sshd[11201]: Accepted password for devops from 192.168.56.77 port 50110 ssh2
type=USER_LOGIN ... auid=devops ses=12 addr=192.168.56.77 res=success
Oct 2 02:11:30 rocky9-web01 sudo[11701]: devops : TTY=pts/1 ; USER=root ; COMMAND=/bin/bash
| 단계 | 연결 |
|---|---|
| 성공 로그 | 방식·출발지·시각 |
| USER_LOGIN ses=12 | 이 성공에 세션 번호 부여 |
| 이후 sudo(ses 12) | 같은 세션의 행위 → 탈취 후 권한 상승 |
성공 로그 하나를 세션 번호로 이후 모든 행위와 묶는 것이 탈취 확정의 핵심입니다.
<group name="local,syssec_b,authentication,">
<rule id="101170" level="10">
<if_sid>5715</if_sid>
<match>Accepted password</match>
<description>키 인증 전용 환경에서 password 인증 성공</description>
</rule>
<rule id="101171" level="11">
<if_sid>5715</if_sid>
<srcip>!192.168.56.0/28</srcip>
<time>18:00-08:00</time>
<description>업무 외 시간 비관리망 SSH 로그인 성공</description>
</rule>
</group>
<time> 조건은 Wazuh에서 지원하는 업무 시간 외 탐지 방식입니다. 051편의 101000(비관리망 관리계정)과 조합하면 정확도가 올라갑니다.
| 축 | 확인 내용 |
|---|---|
| 방식 | publickey / password / 2FA — 정책과 일치하는가 |
| 출발지 | 관리망 vs 비관리망, 평소 출발지와 비교 |
| 시간 | 업무 시간 vs 새벽·주말 |
| 직전 실패 | 성공 직전 실패 = 추측 성공 가능성(072편) |
| 이후 세션 | ses로 이후 행위 연결 → 탈취 확정 |
| 면접 포인트 | "성공 로그는 형식이 정상 — 다섯 축의 맥락으로 판단" |
다음 편 070. 계정 · 인증 보안 — SSH 인증 실패 로그 분석 에서는 공격 시도의 대부분을 차지하는 SSH 인증 실패 로그 분석을 다룹니다.
이전 편: 068. 계정 · 인증 보안 — SSH 키 지문으로 접속 키 추적하기
📚 시리즈 전체 보기: 시스템 보안 · 취약점