042. SIEM·로그 수집 — 검색 쿼리 실전 — 필터·집계·시계열

changseop lee·5일 전

SIEM · 보안관제 › A. SIEM 구조와 로그 수집 · 42/50편
학습 단계: 검색·대시보드·운영
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Wazuh 4.x 올인원 / Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.

선행 학습

1. 개념

Alert가 수천 건이면 하나씩 읽을 수 없습니다. 집계(aggregation)로 "가장 많은 출발지", "시간대별 추이", "서로 다른 대상 수"를 먼저 보고, 이상한 부분만 Discover로 내려가 확인합니다.

조사 질의 흐름(넓게 → 좁게)
 ① 추이   : 시간대별 건수(date_histogram) → 급증 구간 찾기
 ② Top N  : 급증 구간의 출발지·호스트·룰 상위
 ③ 고유값 : 출발지별 서로 다른 대상 계정 수(cardinality)
            → 많으면 spraying, 적으면 brute-force
 ④ 원문   : 의심 출발지의 이벤트 원문(Discover)

예) 인증 실패 급증
 10:00~10:10 평소 30건 → 2,400건
 Top 출발지: 203.0.113.5 (2,310건)
 203.0.113.5의 대상 계정 수: 418개 → password spraying 패턴

핵심: 집계로 패턴을 보고, 원문으로 확인한다

집계는 keyword·ip·숫자 타입 필드에서만 동작합니다(032편). 집계가 안 되는 필드가 있으면 매핑부터 확인합니다.

2. 왜 중요한가

  • 대량 Alert에서 의미 있는 패턴을 빠르게 찾을 수 있습니다.
  • 공격 유형(brute-force·spraying·스캔)을 수치로 구분할 수 있습니다.
  • 보고서에 들어갈 근거 수치를 정확히 만들 수 있습니다.

3. 핵심 명령어 / 설정

집계질문예시 해석
date_histogram언제 급증했나공격 시작 시각
terms(Top N)누가·어디가 많은가주요 출발지
cardinality몇 종류인가대상 계정 수
sum/avg얼마나 큰가전송량

4. 실습 (실습 예시)

# 출발지별 대상 계정 수 집계 (실습 예시, API)
AUTH='admin:<비밀번호>'
curl -sk -u "$AUTH" -H 'Content-Type: application/json' "https://localhost:9200/wazuh-alerts-*/_search?size=0" -d '{
  "query": { "bool": { "filter": [
    { "term": { "rule.groups": "authentication_failed" } },
    { "range": { "timestamp": { "gte": "now-1h" } } } ] } },
  "aggs": { "by_src": { "terms": { "field": "data.srcip", "size": 5 },
            "aggs": { "users": { "cardinality": { "field": "data.dstuser" } } } } } }' \
  | grep -E '"key"|"doc_count"|"value"'

5. 정상 상태

key 192.168.56.5  doc_count 6   users 2   (관리자 오타)

출발지별 실패 건수와 대상 계정 수가 작고 내부 관리망으로 설명되면 정상입니다.

6. 이상 상태

key 203.0.113.5   doc_count 2310  users 418
key 198.51.100.9  doc_count 640   users 1 (root)
  • 한 출발지가 418개 계정에 실패 → password spraying
  • 다른 출발지는 root 하나에 640회 → brute-force
  • 같은 시간대 두 가지 공격 유형이 동시에 진행 중

7. 로그 분석 (분석 방법)

집계 기반 조사 흐름입니다(가상의 예시).

[추이] 1시간·10분 단위 건수 → 급증 구간
   ↓
[Top N] 급증 구간 출발지·호스트·룰
   ↓
[고유값] 출발지별 대상 계정·포트 수
   ↓
[유형 판단] spraying / brute-force / 스캔
   ↓
[원문 확인] 성공 이벤트 존재 여부(돌파 판단)
패턴해석
건수↑ 계정 다수spraying
건수↑ 계정 1brute-force
포트 다수스캔

마지막 단계에서 반드시 같은 출발지의 "성공" 이벤트를 찾아야 합니다. 실패 패턴이 아무리 커도 성공이 없으면 시도, 있으면 침투로 판단이 달라집니다.

8. SOC 관제 포인트

  • 조사 질의 흐름(추이→Top N→고유값→원문)을 표준 절차로 씁니다.
  • 보고서 수치는 집계 질의 결과로 근거를 남깁니다.
  • 집계 불가 필드는 매핑 개선 요청으로 연결합니다.

9. 탐지 규칙

<!-- 실습 예시 룰: 적용 전 wazuh-logtest 및 테스트 환경 검증 필요 -->
<group name="local,siem_a,">
  <rule id="110410" level="12" frequency="20" timeframe="600">
      <if_matched_group>authentication_failed</if_matched_group>
      <same_source_ip />
      <different_field>dstuser</different_field>
      <description>동일 출발지 10분 내 서로 다른 계정 20개 이상 인증 실패(password spraying)</description>
      <mitre><id>T1110.003</id></mitre>
    </rule>
</group>

대시보드의 cardinality 집계로 발견한 패턴을 실시간 룰로 옮긴 예시입니다. 검색으로 찾은 패턴을 룰로 바꾸는 것이 탐지 개선의 기본 흐름입니다.

10. 대응 방법

  1. 초기 확인 — 급증 구간과 상위 출발지를 확인합니다.
  2. 범위 확인 — 출발지별 대상 수와 성공 이벤트 여부를 확인합니다.
  3. 증거 확보 — 집계 질의와 결과를 보존합니다.
  4. 차단/조치 — 출발지 차단·계정 확인 등 조치를 요청합니다.
  5. 재발 방지 — 발견한 패턴을 룰로 반영합니다.

11. 핵심 정리

단계집계
언제date_histogram
누가terms
몇 종류cardinality
확인원문·성공 여부
면접 포인트"집계로 패턴을 보고 원문으로 확인한다 — 마지막엔 반드시 성공 이벤트를 찾는다"

12. 다음 편 예고

다음 편 043. SIEM·로그 수집 — 시각화 구성 — 지표·추이·Top N 에서는 지표(Metric)·선 그래프·막대·표·지도 시각화를 목적에 맞게 고르는 기준과, 관제에 쓸모 있는 시각화와 보기 좋기만 한 시각화를 구분하는 방법을 다룹니다.


이전 편: 041. SIEM·로그 수집 — 대시보드 기초 — Discover와 검색 쿼리(DQL·KQL)
📚 시리즈 전체 보기: SIEM · 보안관제

profile
코드에 숨겨진 위협을 읽고 AI로 보안의 미래를 설계합니다. 프론트엔드 개발 경험을 자산 삼아 더 견고하고 지능적인 보안 운영 시스템을 구축해 나가는 과정을 기록합니다

0개의 댓글