Linux 로그 경로 정리 · 47/50 · Part 6. SOC / SIEM / Wazuh

선행 학습 → 46. Linux 로그를 SIEM으로 보내는 구조 · 37. auditd 구조 이해 · Linux 시스템 보안 기초 시리즈
이번 글 → Wazuh에서 Linux 로그 수집 구조
이어서 → 48. Linux 로그 기반 IOC 추출

1. 들어가며

Wazuh는 오픈소스 SIEM/XDR로, 국내 보안관제 실습·중소 조직 운영에서 널리 쓰입니다. 이번 글은 Rocky Linux 9.8 실습 환경에 Wazuh Agent와 Manager 4.14.8을 실제로 설치해, Linux 로그가 어떤 설정으로 수집되고 어떤 룰로 Alert가 되는지 확인합니다.

핵심 요약

  • Agent <localfile> 이 수집 경로를 결정한다. 설치 시점에 없던 로그 파일은 자동 등록되지 않을 수 있다 → 수동 추가·검증.
  • 형식: syslog(secure·cron·auth.log), audit(audit.log), journald(저널 직접)
  • auditd 이벤트는 기본 룰 80700(level 0, 그룹핑)에 걸린다 → audit key 기반 커스텀 룰이 있어야 Alert가 된다.

2. 핵심 개념

구성역할실습 확인
Agent로그 수집(logcollector), FIM(syscheck), 설정 점검(SCA)wazuh-agent 4.14.8
Manager디코딩·룰·Alert 생성wazuh-manager 4.14.8
localfile수집 대상 + 형식기본값에 journald, 명령 출력 수집 포함
decoder필드 추출sshd, auditd 등
rule판정·상관기본 룰 + local_rules.xml
SCA보안 설정 점검 정책cis_rocky_linux_9.yml 자동 포함

3. 로그 생성 구조

Wazuh Linux 로그 수집 구조

4. 실제 로그 경로

위치경로
Agent 설정/var/ossec/etc/ossec.conf (+ Manager의 그룹 설정 agent.conf)
Agent 로그/var/ossec/logs/ossec.log (수집 오류 확인)
Manager 룰/var/ossec/ruleset/rules/0095-sshd_rules.xml, 0365-auditd_rules.xml 등
커스텀 룰/var/ossec/etc/rules/local_rules.xml
Alert/var/ossec/logs/alerts/alerts.json

5. 명령어 실습

Agent 측: 수집 블록 추가 → 문법 검증 → 재시작

<ossec_config>
  <localfile>
    <log_format>syslog</log_format>
    <location>/var/log/secure</location>        <!-- Ubuntu: /var/log/auth.log -->
  </localfile>
  <localfile>
    <log_format>syslog</log_format>
    <location>/var/log/cron</location>          <!-- Ubuntu: /var/log/syslog -->
  </localfile>
  <localfile>
    <log_format>audit</log_format>
    <location>/var/log/audit/audit.log</location>
  </localfile>
</ossec_config>
/var/ossec/bin/wazuh-logcollector -t && systemctl restart wazuh-agent
grep -i 'logcollector' /var/ossec/logs/ossec.log | tail -5     # "Analyzing file: '/var/log/secure'" 확인

Manager 측: audit key 기반 커스텀 룰 (실습 환경에 실제 적용·검증한 내용)

<group name="local,audit,">
  <rule id="100210" level="12">
    <if_sid>80700</if_sid>
    <field name="audit.key">^log_tamper$</field>
    <description>auditd: 로그 파일 변조 명령 실행 (auid=$(audit.auid) exe=$(audit.exe))</description>
    <mitre><id>T1070.002</id></mitre>
  </rule>
  <rule id="100211" level="10">
    <if_sid>80700</if_sid>
    <field name="audit.key">^net_out$</field>
    <description>auditd: 감시 대상 외부 연결 시도 (exe=$(audit.exe))</description>
    <mitre><id>T1071</id></mitre>
  </rule>
  <rule id="100212" level="10">
    <if_sid>80700</if_sid>
    <field name="audit.key">^cron_mod$|^user_mod$</field>
    <description>auditd: 지속성 관련 변경 (key=$(audit.key) exe=$(audit.exe))</description>
    <mitre><id>T1053.003</id></mitre>
  </rule>
</group>
/var/ossec/bin/wazuh-analysisd -t && systemctl restart wazuh-manager    # 룰 문법 검증 후 재시작
grep 'key="log_tamper"' audit.log | /var/ossec/bin/wazuh-logtest        # 커스텀 룰 동작 확인

6. 로그 예시

실제 실행 결과 — Rocky Linux 9.8 · wazuh-agent 4.14.8 — 수집 설정 확인·추가·검증

위 이미지는 Rocky Linux 9.8 컨테이너에 설치한 Wazuh Agent 4.14.8의 실제 설정 확인·추가·검증 결과입니다. Manager 주소는 문서용 IP(192.0.2.20)로 등록했습니다.

실습 시나리오 데이터(가상)를 Manager의 wazuh-logtest 에 입력한 실제 판정 결과:

[실제 실행 결과 · wazuh-manager 4.14.8 · 입력: 실습용 가상 로그]
secure/cron → 5710(5) 비존재 계정 시도 · 5760(5) 인증 실패 · 5712/5763(10) 무차별 대입
              40112(12) 실패 다수 후 성공 · 5403(4) 첫 sudo · 5902(8) 사용자 추가
              40501(15) 공격 후 사용자 추가 · 2833(8) root crontab 변경
audit.log   → 커스텀 룰 적용 전: 80700(0) "Audit: Messages grouped." (Alert 아님)
              커스텀 룰 적용 후: 100212(10) cron_mod · 100211(10) net_out · 100210(12) log_tamper

7. 로그 필드 분석

관찰해석
기본 localfile에 /var/log/secure 없음실습 컨테이너에는 설치 시점에 파일이 없었음 → 설치 후 생긴 로그는 수동 등록
journald 수집 기본 포함파일이 없어도 저널로 수집 가능 (중복 수집 여부 설계 필요)
full_command명령 출력(예: netstat, last) 주기 수집 — 30편 스크립트 연계 가능
audit 기본 룰 level 0규칙은 있어도 Alert는 없다 → 커스텀 룰이 탐지의 핵심

8. 보안관점

정상의심
Agent active, 이벤트 연속 수신Agent disconnected / 이벤트 급감
ossec.conf 변경이 관리 절차로수집 블록 삭제 (FIM으로 감시)
커스텀 룰 버전 관리(Git)룰 파일 수동 수정 이력 없음

9. SOC 관점

  • 탐지 설계 원칙: "로그 소스(auditd key) ↔ Wazuh 룰 ID ↔ MITRE 기법 ↔ 대응 절차"를 표로 관리.
  • Triage: Alert의 location 필드로 원본 경로, full_log 로 원문 확인.
  • 튜닝: 오탐이 많은 룰은 <rule ... level="0"> 로 끄기보다 조건(<field>, <srcip> 예외)으로 좁힌다.

10. 실습 체크리스트

[ ] Agent localfile 기본값 확인
[ ] secure / cron / audit.log 수집 블록 추가
[ ] wazuh-logcollector -t 검증
[ ] wazuh-logtest 로 sshd 룰 확인
[ ] audit key 커스텀 룰 작성 및 analysisd -t 검증
[ ] 로그 소스 ↔ 룰 ↔ MITRE 매핑표 작성

11. 핵심 정리

  • Wazuh Agent의 localfile 이 수집 범위이며, 설치 후 생긴 로그는 직접 등록한다.
  • syslog·audit·journald 형식을 로그 종류에 맞게 지정한다.
  • 인증 계열은 기본 룰로 상관분석까지 되지만, auditd는 커스텀 룰이 있어야 Alert가 된다.
  • 설정과 룰은 문법 검증 도구로 확인한 뒤 적용한다.
  • 로그 소스·룰·MITRE·대응을 하나의 매핑으로 관리한다.

12. 다음 편 연결

구분글
◀ 이전 글46. Linux 로그를 SIEM으로 보내는 구조
▶ 다음 글48. Linux 로그 기반 IOC 추출
시리즈Linux 로그 경로 정리 전체 보기
선행 시리즈리눅스 시스템 기초 · 파일 · 권한 · 사용자 관리 · 서비스 · 프로세스 관리 · Linux 시스템 보안 기초
profile
코드에 숨겨진 위협을 읽고 AI로 보안의 미래를 설계합니다. 프론트엔드 개발 경험을 자산 삼아 더 견고하고 지능적인 보안 운영 시스템을 구축해 나가는 과정을 기록합니다

0개의 댓글