Linux 로그 경로 정리 · 48/50 · Part 6. SOC / SIEM / Wazuh
선행 학습 → 39. auditd로 execve 추적 · 40. auditd로 중요 파일 접근 추적 · 44. 로그 삭제·변조 흔적 분석
이번 글 → Linux 로그 기반 IOC 추출
이어서 → 49. Linux 로그 타임라인 분석
IOC(Indicator of Compromise)는 공격과 관련된 식별 가능한 흔적입니다. IOC를 추출하는 목적은 세 가지입니다. 같은 공격이 다른 서버에도 있는지 찾고(헌팅), 차단하고(대응), 탐지 룰을 만드는 것(개선) 입니다.
핵심 요약
- IOC 9종: Source IP · Destination IP · Username · Process · Command · File · Hash · Domain · Port
- 대부분은 인증 로그 + auditd 에서 나온다. Hash·Domain은 로그만으로 부족할 수 있다.
- IOC는 값만이 아니라 출처 로그·시각·신뢰도와 함께 기록한다.
| IOC | 추출 소스 | 명령 | 주의 |
|---|---|---|---|
| Source IP | secure/auth.log from X | grep -oE 'from [0-9.]+' | NAT·프록시 뒤 IP일 수 있음 |
| Username | for X, audit auid | awk 필드 | 탈취 계정 vs 생성 계정 구분 |
| Process | audit exe / comm | ausearch -i | comm 은 위조 가능, exe 우선 |
| Command | audit EXECVE | ausearch -m EXECVE -i | 인자에 URL·경로 포함 |
| File | audit PATH, 인자, FIM | 숨김·임시 경로 | |
| Destination IP / Port | audit SOCKADDR, 방화벽 로그 | ausearch -k net_out -i | connect 룰 필요 |
| Domain | DNS·프록시·웹 로그, 명령 인자 | 이 시나리오에는 IP 직접 통신 | |
| Hash | 로그에 없음 | 파일 수집 후 sha256sum, Wazuh FIM | 파일 삭제 전 확보 |

분석 입력 (수집본만 사용)
/evidence/case-0920/work/secure (또는 중앙 사본 central/web01/secure)
/evidence/case-0920/work/audit.log
/evidence/case-0920/work/cron
실습 스크립트 ioc.sh (분석본 사본만 읽음):
#!/usr/bin/env bash
# ioc.sh - 분석본(사본) 로그에서 IOC 후보 추출 (원본 수정 없음)
SEC=${1:-/lab/work/central/secure}
AUD=${2:-/lab/work/audit.log}
echo "== [1] 인증 실패 출발지 IP (Top) =="
grep 'Failed password' "$SEC" | grep -oE 'from ([0-9]{1,3}\.){3}[0-9]{1,3}' | awk '{print $2}' | sort | uniq -c | sort -rn | head -5
echo "== [2] 실패 IP 중 로그인 성공한 IP =="
grep 'Accepted' "$SEC" | awk '{for(i=1;i<=NF;i++) if($i=="for") u=$(i+1); for(i=1;i<=NF;i++) if($i=="from") ip=$(i+1); print ip, u, $1" "$2" "$3}' \
| while read ip u ts; do grep -q "Failed password.* from $ip " "$SEC" && echo "$ip user=$u first_success=$ts"; done
echo "== [3] 신규 계정 생성 =="
grep -oE 'new user: name=[^,]+' "$SEC" | sort -u
echo "== [4] 실행 명령 (auditd EXECVE, key별) =="
TZ=Asia/Seoul ausearch -if "$AUD" -m EXECVE -i 2>/dev/null | grep '^type=EXECVE' \
| sed -E 's/.*argc=[0-9]+ //; s/(^| )a[0-9]+=/\1/g' | sort -u
echo "== [5] 외부 연결 목적지 (auditd SOCKADDR) =="
TZ=Asia/Seoul ausearch -if "$AUD" -k net_out -i 2>/dev/null | grep -oE 'laddr=[0-9.]+ lport=[0-9]+' | sort -u
echo "== [6] URL / 파일 경로 =="
TZ=Asia/Seoul ausearch -if "$AUD" -m EXECVE -i 2>/dev/null | grep -oE 'https?://[^ ]+|/(tmp|usr/local/bin)/[^ ]+' | sort -u
Hash 확보 (라이브 서버 또는 디스크 이미지에서, 격리 후):
sha256sum /usr/local/bin/.syscheck /tmp/.x.sh 2>/dev/null # 파일이 남아 있을 때
cp -a /usr/local/bin/.syscheck /evidence/case-0920/artifacts/ # 실행하지 말고 보존

위 이미지는 실습 시나리오 데이터(직접 작성한 가상 로그)의 분석본을 입력으로 Rocky Linux 9.8 실습 환경에서 ioc.sh 를 실제로 실행한 결과입니다. SOCKADDR 레코드의 laddr 는 ausearch가 connect 대상 주소를 표시하는 방식으로, 원격 목적지 IP를 의미합니다.
추출 결과를 IOC 목록으로 정리(시나리오 기준):
| 유형 | 값 | 출처 | 시각(KST) | 신뢰도 |
|---|---|---|---|---|
| Source IP | 203.0.113.45 | secure(중앙 사본) | 02:13:05~02:15:07 | 높음 (실패 42 → 성공) |
| Username | deploy | secure, audit auid | 02:14:52 | 높음 (탈취 계정) |
| Username | sysbackup | secure useradd | 02:16:40 | 높음 (백도어 계정) |
| URL | http://198.51.100.23/x.sh | audit EXECVE | 02:16:10 | 높음 |
| File | /tmp/.x.sh, /tmp/.x/syscheck | audit EXECVE | 02:16:10~17 | 높음 |
| File/Process | /usr/local/bin/.syscheck | audit EXECVE, cron | 02:16:17, 02:20:01~ | 높음 (지속성) |
| Destination | 198.51.100.23:4444 | audit SOCKADDR | 02:20:02 | 높음 (C2 의심) |
| Command | sed -i /203.0.113.45/d /var/log/secure | audit EXECVE | 02:23:40 | 높음 (로그 변조) |
| Hash | (파일 확보 후 기재) | — | — | — |
| 좋은 IOC | 약한 IOC |
|---|---|
| 공격자 전용 인프라 IP·URL | 클라우드·CDN 공용 IP |
| 파일 해시(정확 일치) | 흔한 파일명(update.sh) |
| 행위 패턴(숨김 경로 + cron + 외부 4444) | 단일 문자열 |
IP·도메인은 공격자가 쉽게 바꿉니다. 오래 유효한 탐지는 행위(TTP) — "로그인 직후 /tmp 에 다운로드 → 숨김 경로 복사 → root cron 등록" — 를 룰로 만드는 것입니다.
data.srcip:203.0.113.45, audit.execve.a2 에 URL).[ ] IOC 9종과 추출 소스 매핑
[ ] ioc.sh 로 분석본에서 IOC 추출
[ ] 실패 → 성공 IP 판별
[ ] EXECVE 인자에서 URL·경로 추출
[ ] SOCKADDR 로 목적지 IP·포트 추출
[ ] Hash 확보 절차 및 IOC 기록 표 작성
| 구분 | 글 |
|---|---|
| ◀ 이전 글 | 47. Wazuh에서 Linux 로그 수집 구조 |
| ▶ 다음 글 | 49. Linux 로그 타임라인 분석 |
| 시리즈 | Linux 로그 경로 정리 전체 보기 |
| 선행 시리즈 | 리눅스 시스템 기초 · 파일 · 권한 · 사용자 관리 · 서비스 · 프로세스 관리 · Linux 시스템 보안 기초 |