시스템 보안 · 취약점 › B. 계정 · 인증 보안 강화 · 43/50편 (전체 093/450)
학습 단계: 4단계 · 자동 점검·로그 분석
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.
개별 이벤트를 아무리 잘 봐도, 시간순으로 엮지 않으면 공격의 전체 흐름이 보이지 않습니다. 인증 타임라인은 흩어진 인증 이벤트를 하나의 이야기로 재구성합니다.
타임라인 재구성 축: 시각 | 출처 | 계정 | 출발지 | 이벤트 | 단계
흐름: 열거(071) → 돌파(074) → 로그인(019) → 상승(037) → 계정조작(029·030) → 지속성(017·031)
입력 로그원: secure/auth.log(041 정규화) + audit(042) + faillock(015) + wtmp(025)
인증 타임라인은 A영역 049편(설정 변경 중심 타임라인)의 계정·인증 버전이며, 둘을 합치면 사건 전체가 완성됩니다.
| 단계 | 이벤트 | 로그원 |
|---|---|---|
| 정찰 | invalid user 다수 | secure(071편) |
| 돌파 | Failed 다수 + Accepted | secure(074편) |
| 로그인 | Accepted, USER_LOGIN(ses) | secure+audit(019·042편) |
| 상승 | sudo/su root | secure+audit(037·039편) |
| 조작 | useradd/usermod/그룹 | secure+audit(029·030·031편) |
| 지속성 | authorized_keys, cron, sudoers.d | FIM+audit(017편, A영역) |
# 인증 타임라인 수집 (한 출발지/계정 기준)
IP=192.168.56.77; U=devops; LOG=/var/log/secure
{
sudo grep "$IP" $LOG | grep -E 'Invalid user|Failed password|Accepted'
sudo grep " $U : " $LOG | grep -E 'COMMAND='
sudo grep -E "add '$U'|new user|usermod" $LOG
} | sort -k1,3 | sed -E 's/^([A-Za-z]+ +[0-9]+ [0-9:]+) .*sshd.*: (.*)/\1 | SSH | \2/;
s/^([A-Za-z]+ +[0-9]+ [0-9:]+) .*sudo.*: (.*)/\1 | SUDO | \2/' | tail -40
# audit으로 세션 기준 보강
sudo ausearch --session 12 -i 2>/dev/null | grep -E 'USER_LOGIN|USER_CMD|ADD_USER' | tail
정상 운영의 인증 타임라인은 단조롭습니다.
09:12:01 | SSH | Accepted publickey for devops from 192.168.56.5
09:13:40 | SUDO | devops : COMMAND=/usr/bin/systemctl status httpd
14:02:10 | SSH | Accepted publickey for admin1 from 192.168.56.5
관리망·키 인증·업무 시간·서비스 명령만 시간순으로 이어지는 상태가 정상입니다.
02:09:50 | SSH | Invalid user oracle from 192.168.56.77 (정찰)
02:10:05 | SSH | Failed password for devops from 192.168.56.77 (표적 확정)
02:10:44 | SSH | Accepted password for devops from 192.168.56.77 (돌파·로그인)
02:11:30 | SUDO | devops : USER=root ; COMMAND=/bin/bash (상승)
02:14:09 | SSH? | new user: name=sysbak, UID=0 (계정 조작)
02:16:10 | -- | add 'apache' to group 'wheel' (권한 확대)
02:20:05 | SSH | Accepted publickey for apache from 192.168.56.77 (심은 키 지속성)
인증 타임라인과 설정 타임라인을 합친 통합 뷰입니다(가상의 예시).
02:10:44 [인증] devops 돌파 로그인 (ses=12)
02:11:30 [인증] devops sudo -i
02:13:00 [설정] sshd_config.d/00-tmp.conf (A영역 049)
02:14:09 [인증] useradd sysbak UID=0
02:16:00 [설정] sudoers.d/99-sysupdate (A영역 049)
02:16:10 [인증] apache → wheel
03:30:01 [설정] setenforce 0 (A영역 하드닝 해제)
| 관점 | 기여 |
|---|---|
| 인증(B영역) | 누가 어떻게 들어와 권한을 얻었나 |
| 설정(A영역) | 무엇을 바꿔 방어를 무력화했나 |
| 합치면 | 사건의 완전한 서사 |
타임라인은 룰보다 SIEM의 시간순 뷰·저장 검색으로 구현합니다.
# Kibana: 한 출발지의 모든 인증·권한 이벤트를 시간순
data.srcip : "192.168.56.77" and rule.groups : ("authentication" or "privilege" or "account")
→ 시간 오름차순 정렬, 컬럼: timestamp, rule.description, data.srcuser, data.srcip
# 세션 기준
data.audit.session : "12" → 시간순
저장 검색(Saved Search)으로 "출발지/계정/세션 기준 타임라인"을 미리 만들어 두면, 사고 시 즉시 서사를 재구성할 수 있습니다.
| 구분 | 핵심 내용 |
|---|---|
| 정렬 축 | 시각 · 계정 · 출발지 · 단계 |
| 흐름 | 열거→돌파→로그인→상승→조작→지속성 |
| 목표 | 최초 침입 시점 확정, 영향 범위 산정 |
| 통합 | A영역 설정 타임라인과 결합 |
| 면접 포인트 | "산출물은 Alert 목록이 아니라 사건의 타임라인" |
다음 편 094. 계정 · 인증 보안 — Wazuh 인증 기본 룰 해석 에서는 탐지를 자동화하는 Wazuh 인증 기본 룰 해석을 다룹니다.
이전 편: 092. 계정 · 인증 보안 — auditd 인증 이벤트(USER_AUTH·USER_LOGIN) 분석
📚 시리즈 전체 보기: 시스템 보안 · 취약점