442. 지속성·재침투 — 지속성·재침투 로그의 정규화와 수집

changseop lee·4일 전

시스템 보안 · 취약점

목록 보기
442/450

시스템 보안 · 취약점 › I. 지속성 · 재침투 징후 · 42/50편 (전체 442/450)
학습 단계: SOC 탐지 연계
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.

선행 학습

1. 개념

지속성 이벤트는 auditd, FIM, secure, cron, journal, 방화벽처럼 형식이 제각각인 로그에 흩어져 있습니다. 이를 같은 필드로 맞추는 정규화가 되어야 상관분석과 대시보드가 가능합니다.

지속성 이벤트 공통 스키마(예시)
 @timestamp  : UTC 시각
 host.name   : 호스트
 actor       : auid(원래 로그인 사용자) / euid
 session     : audit.ses
 action      : create / modify / enable / connect / listen
 target.path : 지속성 위치 (/etc/cron.d/x)
 persist.trigger : time / boot / login / event / exec / network
 persist.class   : account / auth / schedule / service / boot / shell / channel
 method      : 실행 파일(exe) · 명령(proctitle)
 source      : auditd / fim / secure / cron / fw

핵심: "trigger·class" 필드를 붙이면 I05 분류표가 그대로 검색 조건이 된다

감사 키를 persist_cron, persist_svc처럼 설계해 둔 이유가 여기서 드러납니다. 키 이름만으로 trigger·class를 매핑할 수 있기 때문입니다.

2. 왜 중요한가

  • 형식이 다른 로그를 같은 질의로 조회할 수 있게 됩니다.
  • actor(auid)를 통일하면 sudo 이후 행위도 원래 사용자로 추적됩니다.
  • 분류 필드가 있으면 커버리지·추이를 바로 집계할 수 있습니다.

3. 핵심 명령어 / 설정

원본매핑 근거정규화 필드
auditdkey·auid·exe·nameclass·actor·method·target
Wazuh FIMsyscheck.path·eventaction·target
securesshd·useradd 메시지action·actor
cronCMD·REPLACEtrigger=time
방화벽DST·DPTclass=channel

4. 실습 (실습 예시)

# 감사 키 → 분류 매핑 표 (Logstash/Ingest 파이프라인 입력용, 분석 방법)
cat > /etc/logstash/persist_map.yml <<'Y'
"persist_cron":    "schedule|time"
"persist_svc":     "service|boot"
"persist_boot":    "boot|boot"
"persist_shell":   "shell|login"
"persist_preload": "boot|exec"
"persist_ssh":     "auth|network"
"persist_pam":     "auth|login"
"account_persist": "account|login"
"reentry_net":     "channel|network"
"reentry_listen":  "channel|network"
Y
# Logstash translate 필터 예: field => "[data][audit][key]" dictionary_path => ".../persist_map.yml"
# destination => "[persist][map]" 후 dissect로 class|trigger 분리

5. 정상 상태

{"host.name":"web01","actor":"admin01","action":"create","target.path":"/etc/cron.d/backup",
 "persist.class":"schedule","persist.trigger":"time","method":"/usr/bin/ansible-playbook","source":"auditd"}

모든 지속성 이벤트가 공통 필드를 갖고, actor가 원래 로그인 사용자(auid)로 채워지며 분류 필드가 비어 있지 않은 상태가 정상입니다.

6. 이상 상태

{"host.name":"web01","actor":"unset","persist.class":null,"source":"auditd",
 "data.audit.key":"persist_udev"}
→ auid 미설정(4294967295), 매핑표에 없는 키
  • actor=unset → 데몬·부팅 중 이벤트 또는 auid 미설정 경로(추가 확인 필요)
  • 매핑표에 없는 키 → 분류 누락으로 대시보드·상관 룰에서 빠짐
  • 정규화 실패 이벤트는 탐지 사각이 되므로 별도 모니터링

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

정규화 품질 점검 흐름입니다(가상의 예시).

[수집] Wazuh agent → manager → Filebeat → Elasticsearch
   ↓
[정규화] 키 매핑 · auid→actor · 시각 UTC
   ↓
[품질 점검] class·trigger·actor 누락 비율
   ↓
[보정] 매핑표·디코더 보강 → 재처리
품질 지표목표
class 누락률0%
actor=unset 비율설명 가능한 수준
수집 지연수 분 이내

auid가 unset인 지속성 이벤트는 부팅·데몬 동작일 수도 있지만, 웹셸처럼 로그인 없이 실행된 공격일 수도 있습니다. 이 경우 ppid·uid로 보완해 actor를 채웁니다.

8. SOC 관제 포인트

  • 정규화 누락 이벤트 수를 일 단위 품질 지표로 관리합니다.
  • 감사 키 신설 시 매핑표 갱신을 체크리스트에 넣습니다.
  • 원본 로그는 별도 인덱스로 보존해 정규화 오류 시 재처리합니다.

9. 탐지 규칙

<!-- 실습 예시 룰: 적용 전 wazuh-logtest 및 테스트 환경 검증 필요 -->
<group name="local,syssec_i,persistence,">
  <rule id="108410" level="6">
    <if_sid>108000</if_sid>
    <field name="audit.key" type="pcre2">^(persist_|account_persist|reentry_)</field>
    <field name="audit.auid" type="pcre2">^(4294967295|unset)$</field>
    <description>로그인 사용자(auid) 미설정 상태의 지속성 이벤트(actor 보완 필요)</description>
    <mitre><id>TA0003</id></mitre>
  </rule>
</group>

정규화 품질을 위한 보조 룰입니다. auid가 없는 지속성 이벤트를 별도로 표시해 웹셸·데몬 경유 행위인지 추가 확인하도록 합니다.

10. 대응 방법

  1. 초기 확인 — 정규화 누락·actor 미설정 이벤트를 확인합니다.
  2. 범위 확인 — 누락이 특정 키·호스트에 집중되는지 확인합니다.
  3. 증거 확보 — 원본 로그를 보존해 재처리할 수 있게 합니다.
  4. 차단/조치 — 매핑표·디코더를 보강하고 누락 이벤트를 재처리합니다.
  5. 재발 방지 — 품질 지표를 정기 점검합니다.

11. 핵심 정리

필드역할
actor·session원래 사용자·세션
class·triggerI05 분류 검색
target·method위치·도구
품질누락률 관리
면접 포인트"흩어진 로그를 같은 필드로 — 감사 키 설계가 정규화를 쉽게 만든다"

12. 다음 편 예고

다음 편 443. 지속성·재침투 — 지속성·재침투 이벤트 상관분석 에서는 정규화된 지속성·재침투 이벤트를 세션·주체·실행 대상·호스트 기준으로 상관해 단일 이벤트로는 약한 신호를 공격 체인으로 확정하는 방법을 다룹니다.


이전 편: 441. 지속성·재침투 — 지속성·재침투 타임라인 작성
📚 시리즈 전체 보기: 시스템 보안 · 취약점

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

0개의 댓글