Linux 로그 경로 정리 · 49/50 · Part 6. SOC / SIEM / Wazuh
선행 학습 → 06. Linux 로그의 시간 정보 이해 · 18. Rocky Linux 인증 이벤트 추적 · 48. Linux 로그 기반 IOC 추출 · 기초 50. 보안관제 실습
이번 글 → Linux 로그 타임라인 분석
이어서 → 50. Linux 로그 경로 기반 SOC 종합 분석 실습
기초 50편에서는 인증 로그 중심으로 타임라인을 만들었습니다. 이번에는 형식이 서로 다른 세 소스(syslog 형식 secure·cron, epoch 기반 audit.log)를 하나의 시간축으로 정규화·병합하고, 인증 로그만으로는 보이지 않던 "root 셸 안에서 한 일"까지 이어 붙입니다.
핵심 요약
- 병합 3단계: 정규화(같은 시간 형식·시간대) → 병합(sort) → 필터(의미 있는 이벤트)
- syslog 형식은 연도·TZ 보완, audit은 epoch → KST 변환(
TZ=Asia/Seoul ausearch -i)- 타임라인의 각 행은 시각 · 소스 · 이벤트 · 근거를 가진다.
| 소스 | 원시 시간 형식 | 정규화 방법 |
|---|---|---|
secure, cron (Rocky) | Sep 20 02:14:52 (연도·TZ 없음) | date -d "Sep 20 2026 02:14:52" '+%F %T' (서버 TZ가 KST임을 확인 후) |
auth.log (Ubuntu 24.04) | ISO 8601 (+09:00) | 그대로 정렬 가능 |
audit.log | epoch (UTC) | TZ=Asia/Seoul ausearch -i → MM/DD/YY HH:MM:SS → YYYY-MM-DD |
| journal | epoch μs (UTC) | journalctl -o short-iso |
| 웹 로그 | [20/Sep/2026:02:10:11 +0900] | date -d 변환 |

SSH Failed → SSH Success → sudo → Process Execution → File Creation → Cron → Outbound Connection → Alert
(secure) (secure) (secure (audit EXECVE) (audit) (cron (audit SOCKADDR) (Wazuh)
+audit) +audit)
입력 (분석본): /lab/work/central/secure, /lab/work/central/cron, /lab/work/audit.log
출력: 타임라인 텍스트 → 보고서 Timeline 섹션 (50편)
#!/usr/bin/env bash
# timeline.sh - secure / cron / audit 를 하나의 시간축(KST)으로 병합 (분석본만 사용)
W=${1:-/lab/work}; YEAR=2026
{
for f in secure cron; do
while read -r mon day time host rest; do
echo "$(date -d "$mon $day $YEAR $time" '+%F %T') | $f | $rest"
done < "$W/central/$f"
done
TZ=Asia/Seoul ausearch -if "$W/audit.log" -m EXECVE,SOCKADDR -i 2>/dev/null \
| grep -E '^type=(EXECVE|SOCKADDR)' \
| sed -E 's#^type=([A-Z]+) msg=audit\(([0-9]+)/([0-9]+)/([0-9]+) ([0-9:]+)\.[0-9]+:[0-9]+\) : #20\4-\2-\3 \5 | audit | \1 #; s/argc=[0-9]+ //; s/ a[0-9]+=/ /g; s/ a0=/ /'
} | grep -E 'Accepted|COMMAND|new user|password changed|REPLACE|syscheck|\| audit \|' | sort
date -d 변환은 실행 환경의 TZ를 따릅니다. 원본 서버 TZ(6편)와 같게 맞춘 뒤 실행합니다.grep -E)는 핵심 이벤트만 남깁니다. 실패 로그인 42건은 IOC 요약(48편)으로 대체해 가독성을 확보했습니다.
위 이미지는 실습 시나리오 데이터(직접 작성한 가상 로그) 분석본을 입력으로 Rocky Linux 9.8 실습 환경에서 timeline.sh 를 실제로 실행한 결과입니다.
| 시각 (KST) | 단계 | 근거 (소스) | 해석 |
|---|---|---|---|
| 01:02 ~ 01:09 | 기준선 | secure | 운영자 opsadmin 공개키 로그인·정상 sudo — 비교 기준 |
| 02:13:05 ~ 02:15:07 | 초기 접근 시도 | secure(중앙) | 무차별 대입 42회 (48편) |
| 02:14:52 | 초기 접근 | secure | deploy 비밀번호 로그인 성공 |
| 02:15:30 | 권한 상승 | secure + audit | sudo /bin/bash — 두 소스 일치 |
| 02:16:10 ~ 17 | 실행 | audit | 다운로드 → 실행 → 숨김 경로 복사 |
| 02:16:40 ~ 48 | 지속성(계정) | secure + audit | sysbackup 생성·비밀번호 설정 |
| 02:17:05 | 지속성(cron) | cron + audit | root crontab 교체 |
| 02:20:01 ~ | 지속성 동작 | cron + audit | 5분 주기 실행 (auid=unset: cron 실행) |
| 02:20:02 | C2 의심 | audit SOCKADDR | 198.51.100.23:4444 연결 시도 |
| 02:23:40 ~ 55 | 방어 회피 | audit | 로그 삭제·히스토리 삭제 |
교차검증 포인트: 02:15:30, 02:16:40, 02:17:05는 두 개 소스가 같은 초에 일치합니다. 소스 간 시각이 어긋난다면 시간대·NTP 문제를 먼저 의심합니다.
secure 는 변조됐으므로(44편) 타임라인에는 중앙 사본을 사용하고 그 사실을 기록한다.| 타임라인 단계 | MITRE ATT&CK | Wazuh Alert (47편 실측) |
|---|---|---|
| 무차별 대입 → 성공 | T1110.001, T1078 | 5763(10), 40112(12) |
| sudo 셸 | T1548.003 | 5403(4) |
| 다운로드·실행 | T1105, T1059.004 | (exec_log 커스텀 룰 후보) |
| 계정 생성 | T1136.001 | 5902(8), 40501(15) |
| cron | T1053.003 | 2833(8), 100212(10) |
| 외부 연결 | T1071 | 100211(10) |
| 로그 삭제 | T1070.002 | 100210(12) |
[ ] 소스별 시간 형식과 정규화 방법 정리
[ ] 서버 TZ 확인 후 변환
[ ] timeline.sh 로 병합
[ ] 기준선과 사고 구간 구분
[ ] 두 소스 일치 지점으로 교차검증
[ ] 각 단계를 MITRE·Alert 와 매핑
| 구분 | 글 |
|---|---|
| ◀ 이전 글 | 48. Linux 로그 기반 IOC 추출 |
| ▶ 다음 글 | 50. Linux 로그 경로 기반 SOC 종합 분석 실습 |
| 시리즈 | Linux 로그 경로 정리 전체 보기 |
| 선행 시리즈 | 리눅스 시스템 기초 · 파일 · 권한 · 사용자 관리 · 서비스 · 프로세스 관리 · Linux 시스템 보안 기초 |