
Wazuh + Suricata SOC 랩: 실제 익스플로잇(CVE-2011-2523)과 무차별 대입 공격을 탐지하며, 기본 IDS 시그니처의 공백을 보완하는 사용자 정의 탐지 규칙 적용.
자체 호스팅 보안 운영 센터 연구실로, 의도적으로 취약한 대상을 상대로 실제 공격 기법을 탐지하기 위해 구축되었습니다. Wazuh를 SIEM으로, Suricata를 네트워크 기반 IDS 센서로 사용합니다. 단순한 도구 배포가 아닌 탐지 엔지니어링 역량을 입증하기 위해 설계되었습니다.
현대 SOC는 'SIEM 설치하고 대시보드 보는' 것만이 아닙니다. 탐지 공백이 왜 존재하는지 이해하고, 이를 어떻게 해결할지 아는 것이 중요합니다. 이 연구실은 작고 현실적인 환경(공격자 박스, 기본 로깅을 지원하지 않는 레거시/취약 대상, 호스트 에이전트 대신 네트워크 계층 가시성을 사용하여 해당 제약을 해결해야 하는 SIEM 스택)을 시뮬레이션합니다.
핵심 아키텍처 결정: 대상(Metasploitable 2)은 최신 Wazuh 에이전트 또는 인터넷 접속이 가능한 syslog 전달자조차 지원하기에는 너무 오래된 OS를 실행합니다. 이를 장애물로 간주하지 않고, 프로젝트는 Suricata를 통한 전체 네트워크 기반 탐지로 전환했습니다. 이는 직접 계측할 수 없는 레거시, IoT, OT 자산에 대한 현실적인 패턴입니다.
┌─────────────┐ attacks ┌──────────────────────┐
│ Kali VM │ ────────────────────────▶│ Metasploitable 2 │
│ (attacker + │ │ (unmonitored victim, │
│ Suricata │ │ no agent, no │
│ sensor + │ │ internet access) │
│ Wazuh agent│ └──────────────────────┘
└──────┬──────┘
│ eve.json (Suricata alerts/events)
│ forwarded via Wazuh agent
▼
┌─────────────────────┐
│ Wazuh Manager │
│ (Amazon Linux 2023)│
│ Indexer + Dashboard│
└─────────────────────┘
세 VM 모두 VirtualBox에서 실행되며, NAT 네트워크 192.168.0.0/24를 사용합니다.

| 구성 요소 | 역할 | OS |
|---|---|---|
| Wazuh Manager | SIEM: indexer, dashboard, rule engine | Amazon Linux 2023 |
| Kali Linux | 공격자 + Suricata 네트워크 센서 + Wazuh 에이전트 | Kali (Debian 기반) |
| Metasploitable 2 | 취약 대상, 모니터링되지 않음 | Ubuntu 8.04 (레거시) |
Suricata는 공격자와 대상 간의 트래픽을 볼 수 있어야 합니다. 두 가지 옵션이 있습니다: 무차별/미러링 인터페이스를 가진 전용 센서 VM, 또는 이미 트래픽 경로에 있는 두 호스트 중 하나에서 센서를 실행하는 것. Wazuh 관리자(Amazon Linux 2023)는 EPEL을 지원하지 않아 Suricata 설치가 실용적이지 않았고, 대상은 어떤 에이전트도 실행할 수 없었기 때문에, Suricata는 Kali 박스에서 직접 실행됩니다. 이는 무차별 모드나 SPAN 포트 없이 자체 인터페이스에서 공격 트래픽의 100%를 보며, Kali에 이미 등록된 Wazuh 에이전트를 통해 이벤트를 관리자에게 전송합니다.
공격:
nmap -sV -A 192.168.0.138

탐지: Suricata의 Emerging Threats 규칙 세트는 스캔이 각 열린 포트에 접촉할 때, Metasploitable의 노출된 UnrealIRCd 서비스(ET CHAT IRC USER command)로의 트래픽을 포함하여 여러 스캔 관련 및 프로토콜 이상 서명을 실시간으로 플래그 지정했습니다.
결과: 스캔 완료 후 몇 초 이내에 Wazuh의 위협 헌팅 뷰에서 ids, suricata 규칙 그룹 아래 132개 이상의 IDS 이벤트가 생성되고 올바르게 분류되었습니다.

공격:
msf6 > use exploit/unix/ftp/vsftpd_234_backdoor
msf6 > set RHOSTS 192.168.0.138
msf6 > set LHOST 192.168.0.200
msf6 > run

Metasploitable의 vsftpd 2.3.4에는 잘못된 FTP 로그인 문자열로 트리거되는 백도어가 포함되어 있으며, TCP 포트 6200에서 루트 셸을 생성합니다. 익스플로잇은 깔끔하게 성공하여 root 권한의 Meterpreter 세션을 반환했습니다.
탐지: Suricata의 GPL ATTACK_RESPONSE id check returned root 서명(SID 2100498)은 셸이 생성된 후 11초 만에, 포트 6200을 통해 유선으로 전송된 셸 명령 출력의 일반 텍스트 uid=0(root) 문자열과 일치하여 실행되었습니다.
"signature": "GPL ATTACK_RESPONSE id check returned root",
"signature_id": 2100498,
"src_ip": "192.168.0.138",
"src_port": 6200,
"dest_ip": "192.168.0.200",
"direction": "to_client"

이것이 중요한 이유: 이는 호스트 기반 로깅이 전혀 없는 자산에서 루트 권한 상승이 성공했음을 네트워크 계층에서 확인한 것입니다. 이는 아키텍처가 처리하도록 설계된 정확한 시나리오입니다.
공격:
hydra -l msfadmin -P /tmp/quicklist.txt -t 4 ftp://192.168.0.138

Hydra는 여러 번의 실패 후 올바른 자격 증명 쌍 msfadmin:msfadmin을 올바르게 식별하며 빠르게 여러 FTP 로그인을 시도했습니다.
탐지 상태: Suricata의 FTP 프로토콜 파서는 각 개별 USER/PASS 명령과 서버 응답 코드를 eve.json (event_type: ftp)에 캡처했으며, 관리자의 원시 이벤트 아카이브에 존재함이 확인되었습니다:
{"event_type":"ftp","src_ip":"192.168.0.200","dest_ip":"192.168.0.138",
"dest_port":21,"ftp":{"command":"PASS","command_data":"root",
"completion_code":["530"],"reply":["Login incorrect."]}}

Suricata의 기본 규칙 세트에는 FTP 무차별 대입 전용 서명이 없습니다. 이는 알려진 악성 문자열이 아닌 프로토콜 패턴이기 때문입니다. 이 격차를 해소하기 위해 사용자 정의 Wazuh 상관 관계 규칙이 설계되었습니다:
<group name="suricata,ftp,brute_force,">
<rule id="100100" level="5">
<if_sid>86600</if_sid>
<field name="event_type">^ftp$</field>
<field name="data.ftp.command">^PASS$</field>
<description>Suricata: FTP password attempt detected on $(data.dest_ip)</description>
</rule>
<rule id="100101" level="10" frequency="4" timeframe="60">
<if_matched_sid>100100</if_matched_sid>
<description>Suricata: Possible FTP brute force attack detected - multiple password attempts within 60 seconds</description>
<mitre>
<id>T1110</id>
</mitre>
</rule>
</group>
상태: 진행 중 — 기본 이벤트 데이터가 관리자에 도달하는 것이 확인되었고, 규칙 구문은 wazuh-logtest를 통해 검증되었지만, 상관 관계 규칙(100101)이 아직 종단간 안정적으로 실행되지 않고 있습니다. 다음 디버깅 단계는 라이브 샘플에 대해 wazuh-logtest를 사용하여 구문 분석 시 중첩된 Suricata FTP 필드에 할당된 디코더 필드 경로를 확인하는 것입니다. 아래 향후 작업으로 추적됩니다.
archives.log/archives.json은 기본적으로 활성화되어 있지 않습니다 (logall/logall_json이 기본적으로 no임). SIEM이 실제로 수신한 것과 경고하기로 선택한 것의 차이를 디버깅하는 데 필수적입니다.usermap_script RCE (CVE-2007-2447) 추가| 기법 | ID | 상태 |
|---|---|---|
| 능동 스캐닝 | T1595 | ✅ 탐지됨 |
| 공개 애플리케이션 악용 | T1190 | ✅ 탐지됨 |
| 무차별 대입 | T1110 | 🔶 진행 중 |