본문 바로가기
카테고리 없음

🔍 IDS/IPS 에 대하여

by SuldenLion 2026. 3. 15.
반응형

IDS/IPS 완전 가이드: Snort와 Suricata로 침입을 탐지하고 차단하다

 

방화벽을 뚫고 들어온 공격자 — 이제 누가 막을 것인가?

방화벽은 허용되지 않은 포트와 IP를 차단합니다. 하지만 허용된 포트(80, 443)를 통해 들어오는 정교한 공격은 어떻게 막을까요?

시나리오:

공격자 → 포트 443 (HTTPS) → 방화벽: "정상 트래픽" → 통과
      → SQL Injection 페이로드
      → XSS 공격 코드
      → 멀웨어 다운로드 시도

방화벽만으로는 내용 기반 공격을 탐지할 수 없습니다. 이것이 바로 IDS(Intrusion Detection System, 침입 탐지 시스템)IPS(Intrusion Prevention System, 침입 방지 시스템) 가 필요한 이유입니다.

IDS/IPS는 네트워크 트래픽의 "내용"을 분석하여:

  • SQL Injection 패턴 탐지
  • 멀웨어 시그니처 매칭
  • 비정상적인 트래픽 행동 감지
  • 공격 시도를 실시간으로 차단 (IPS)

2024년 기준, 가장 인기 있는 오픈소스 IDS/IPS는 SnortSuricata입니다. Snort는 1998년부터 20년 이상 검증된 안정성을, Suricata는 멀티스레드로 최대 3배 빠른 성능을 제공합니다.

이 글에서는 IDS와 IPS의 차이, 탐지 방법론, Snort vs Suricata 심층 비교, 규칙 작성 방법, 실전 설정, 그리고 오탐 처리까지 완전히 정리하겠습니다.

 

IDS란? IPS란? — 탐지와 차단의 차이

IDS (Intrusion Detection System, 침입 탐지 시스템)

역할: 탐지 + 경보

IDS는 네트워크 트래픽을 수동적으로 모니터링하여 의심스러운 활동을 탐지하고 관리자에게 알림을 보냅니다.

[인터넷] → [방화벽] → [네트워크]
                ↓ (미러링/TAP)
              [IDS] → 로그 + 알림

특징:

  • 수동 모드 (Passive)
  • 트래픽을 복사(미러링)하여 분석
  • 공격을 차단하지 않음
  • 트래픽 흐름에 영향 없음

장점:

  • 네트워크 성능에 영향 없음
  • 오탐(False Positive)이 있어도 서비스 중단 없음

단점:

  • 실시간 차단 불가
  • 공격이 이미 실행된 후 알림

 

IPS (Intrusion Prevention System, 침입 방지 시스템)

역할: 탐지 + 차단

IPS는 트래픽 경로에 인라인(Inline) 으로 위치하여, 악성 트래픽을 즉시 차단합니다.

[인터넷] → [방화벽] → [IPS] → [네트워크]
                        ↓
                    (악성 트래픽 차단)

특징:

  • 능동 모드 (Active/Inline)
  • 모든 트래픽이 IPS를 통과
  • 공격을 실시간 차단
  • DROP/REJECT 액션 수행

장점:

  • 실시간 방어
  • 공격이 목표에 도달하기 전 차단

단점:

  • 오탐 시 정상 트래픽도 차단 (서비스 중단 위험)
  • 네트워크 지연 시간 증가 가능
  • Single Point of Failure (IPS 다운 시 전체 네트워크 중단)

 

IDS vs IPS 비교표

항목
IDS IPS
위치 네트워크 외부 (미러링) 인라인 (경로 상)
모드 수동 (Passive) 능동 (Active)
액션 탐지 + 알림 탐지 + 차단
트래픽 흐름 영향 없음 모든 패킷 통과
오탐 영향 알림만 (무해) 서비스 중단 위험
지연 시간 없음 증가 가능
사용 사례 보안 모니터링, 포렌식 실시간 방어

 

 

NIDS vs HIDS — 배치 위치에 따른 분류

NIDS (Network-based IDS/IPS)

위치: 네트워크 경계 또는 중요 세그먼트

모니터링 대상: 전체 네트워크 트래픽

[인터넷] → [라우터] → [NIDS] → [스위치] → [서버들]

장점:

  • 하나의 시스템으로 전체 네트워크 보호
  • 서버별 설치 불필요

단점:

  • 암호화된 트래픽(HTTPS) 분석 제한
  • 고속 네트워크에서 성능 부담

대표 솔루션:

  • Snort
  • Suricata
  • Zeek (구 Bro)

 

HIDS (Host-based IDS/IPS)

위치: 개별 서버/호스트

모니터링 대상: 시스템 로그, 파일 변경, 프로세스 활동

[서버]
  ├─ HIDS 에이전트
  ├─ 파일 무결성 모니터링
  ├─ 로그 분석
  └─ 프로세스 모니터링

장점:

  • 암호화된 트래픽도 분석 가능 (복호화 후)
  • 로컬 로그 및 파일 시스템 모니터링

단점:

  • 각 호스트마다 설치 필요
  • 호스트 자원 소모

대표 솔루션:

  • OSSEC
  • Wazuh
  • Tripwire

 

탐지 방법론

① 시그니처 기반 탐지 (Signature-Based Detection)

원리: 알려진 공격 패턴(시그니처)과 매칭

예시:

규칙: 패킷에 "UNION SELECT" 포함 시 → SQL Injection 경고

패킷 내용: GET /search?q=1' UNION SELECT * FROM users--
→ 매칭! → 알림/차단

장점:

  • 낮은 오탐율 (알려진 패턴만 탐지)
  • 빠른 탐지

단점:

  • 제로데이 공격 탐지 불가 (알려지지 않은 공격)
  • 시그니처 데이터베이스 지속 업데이트 필요
  • 난독화로 우회 가능

 

② 이상 행위 기반 탐지 (Anomaly-Based Detection)

원리: 정상 행동 패턴을 학습하고, 벗어나는 행동 탐지

예시:

정상: 서버 A는 평소 1시간당 1,000 요청
이상: 갑자기 1시간당 100,000 요청 → 이상 탐지!

장점:

  • 제로데이 공격 탐지 가능
  • 알려지지 않은 공격도 탐지

단점:

  • 높은 오탐율 (정상 트래픽도 이상으로 판단)
  • 학습 기간 필요
  • 복잡한 설정

 

③ 하이브리드 (Hybrid)

현대 IDS/IPS는 시그니처 + 이상 행위를 결합하여 사용합니다.

 

Snort vs Suricata — 두 거인의 대결

Snort (1998년~)

개발: Martin Roesch, Sourcefire (Cisco 인수)

특징:

  • 세계에서 가장 많이 사용되는 IDS/IPS
  • 20년 이상 검증된 안정성
  • 방대한 규칙 세트 (Emerging Threats, Talos)
  • 단일 스레드 (Snort 2.x)
  • 멀티 스레드 (Snort 3.x, 2014~)

장점:

  • 성숙하고 안정적
  • 광범위한 문서 및 커뮤니티
  • OpenAppID (Layer 7 DPI)

단점:

  • Snort 2.x는 단일 스레드 → 고속 네트워크에서 성능 제한
  • Snort 3.x는 아직 완전히 성숙하지 않음

 

Suricata (2010년~)

개발: Open Information Security Foundation (OISF)

특징:

  • 멀티스레드 아키텍처 (처음부터 설계)
  • 고성능 (Snort 대비 최대 3배 빠름)
  • Snort 규칙 호환 (대부분)
  • NSM (Network Security Monitoring) 기능

장점:

  • 멀티코어 CPU 활용 → 높은 처리량
  • 풍부한 로깅 (EVE JSON)
  • 프로토콜 파싱 (HTTP, TLS, DNS 등)
  • 조건부 PCAP 저장

단점:

  • Snort보다 복잡한 설정
  • 리소스 소비가 더 많음

 

성능 비교 (실제 벤치마크)

환경: 1 Gbps 네트워크, 멀티코어 CPU

항목
Snort 2.x Snort 3.x Suricata
스레드 단일 멀티 멀티
최대 처리량 ~300 Mbps ~600 Mbps ~900 Mbps
CPU 사용률 100% (1코어) 60% (4코어) 40% (4코어)
패킷 드롭 높음 중간 낮음

결론: Suricata가 고성능 환경에서 우수

 

규칙 작성 — Snort/Suricata Rule Syntax

기본 구조

action protocol src_ip src_port direction dst_ip dst_port (options)

 

예시:

alert tcp any any -> 192.168.1.0/24 80 (msg:"SQL Injection Attempt"; content:"UNION SELECT"; sid:1000001; rev:1;)

 

 

주요 요소 설명

1. Action (액션)

액션 설명
alert 경고 생성 (IDS)
log 패킷 로깅
pass 무시
drop 차단 (IPS)
reject 차단 + RST/ICMP 전송 (IPS)

 

 

2. Protocol (프로토콜)

tcp, udp, icmp, ip

 

 

3. IP 주소

any          # 모든 IP
192.168.1.5  # 특정 IP
192.168.1.0/24  # CIDR 블록
!192.168.1.5    # 제외
[192.168.1.5, 192.168.1.10]  # 리스트

 

 

4. 포트

any          # 모든 포트
80           # 특정 포트
80:443       # 범위
:1024        # 1024 이하
1024:        # 1024 이상

 

 

5. Direction (방향)

->   # 단방향 (src → dst)
<>   # 양방향 (src ↔ dst)

 

 

6. Options (옵션)

msg:"Alert Message"       # 경고 메시지
sid:1000001              # 고유 ID
rev:1                    # 버전
content:"malicious"      # 내용 매칭
nocase                   # 대소문자 무시
pcre:"/regex/"          # 정규식
flow:to_server          # 흐름 방향
threshold:type limit, track by_src, count 5, seconds 60  # 임계값

 

 

실전 규칙 예시

SQL Injection 탐지

alert tcp any any -> $HOME_NET 80 (
    msg:"SQL Injection Attempt - UNION SELECT";
    flow:to_server,established;
    content:"UNION"; nocase;
    content:"SELECT"; nocase; distance:0;
    sid:1000001; rev:1;
)

 

 

XSS 탐지

alert tcp any any -> $HOME_NET 80 (
    msg:"XSS Attempt - <script> tag";
    flow:to_server,established;
    content:"<script>"; nocase;
    sid:1000002; rev:1;
)

 

 

SSH 무차별 대입 공격 탐지

alert tcp any any -> $HOME_NET 22 (
    msg:"SSH Brute Force Attempt";
    flow:to_server,established;
    threshold:type threshold, track by_src, count 5, seconds 60;
    sid:1000003; rev:1;
)

 

Snort 실전 설치 및 설정

설치 (Ubuntu 22.04)

bash
# 의존성 설치
sudo apt update
sudo apt install -y build-essential libpcap-dev libpcre3-dev \
    libdumbnet-dev bison flex zlib1g-dev liblzma-dev openssl libssl-dev

# Snort 3 다운로드 및 설치
cd /opt
sudo wget https://www.snort.org/downloads/snort/snort3-3.x.x.tar.gz
sudo tar -xzvf snort3-3.x.x.tar.gz
cd snort3-3.x.x
./configure --prefix=/usr/local --enable-tcmalloc
make -j$(nproc)
sudo make install

# 버전 확인
snort -V

 

 

규칙 다운로드

bash
# Emerging Threats 규칙 다운로드
cd /etc/snort/rules
sudo wget https://rules.emergingthreats.net/open/suricata-6.0/emerging.rules.tar.gz
sudo tar -xzvf emerging.rules.tar.gz

 

 

설정 파일

bash
# /etc/snort/snort.lua
HOME_NET = '192.168.1.0/24'

ips = {
    enable_builtin_rules = true,
    include = '/etc/snort/rules/emerging-*.rules',
}

-- IPS 모드
daq = {
    module_dirs = { '/usr/local/lib/daq' },
    modules = {
        { name = 'afpacket', mode = 'inline' }
    },
}

 

 

실행 (IDS 모드)

bash
# 인터페이스 확인
ip addr

# IDS 모드 실행 (수동)
sudo snort -c /etc/snort/snort.lua -i eth0 -A alert_fast -q

# 백그라운드 실행
sudo snort -c /etc/snort/snort.lua -i eth0 -D

 

 

Suricata 실전 설치 및 설정

설치

bash
# Ubuntu/Debian
sudo add-apt-repository ppa:oisf/suricata-stable
sudo apt update
sudo apt install suricata

# 버전 확인
suricata --version

 

 

규칙 업데이트

bash
# suricata-update 사용
sudo suricata-update

# Emerging Threats 규칙 자동 다운로드
sudo suricata-update list-sources
sudo suricata-update enable-source et/open
sudo suricata-update

 

 

설정 파일

yaml
# /etc/suricata/suricata.yaml

HOME_NET: "[192.168.1.0/24]"
EXTERNAL_NET: "!$HOME_NET"

# 인터페이스 설정
af-packet:
  - interface: eth0
    threads: 4
    cluster-id: 99
    cluster-type: cluster_flow
    defrag: yes

# 규칙 파일
rule-files:
  - suricata.rules

# 로깅
outputs:
  - eve-log:
      enabled: yes
      filetype: regular
      filename: eve.json
      types:
        - alert
        - http
        - dns
        - tls

 

 

실행

bash
# IDS 모드 (수동)
sudo suricata -c /etc/suricata/suricata.yaml -i eth0

# IPS 모드 (인라인)
sudo suricata -c /etc/suricata/suricata.yaml --af-packet=eth0

# 서비스 시작
sudo systemctl start suricata
sudo systemctl enable suricata

# 상태 확인
sudo systemctl status suricata

# 로그 확인
sudo tail -f /var/log/suricata/eve.json

 

 

오탐 (False Positive) 처리

IDS/IPS의 가장 큰 과제는 정상 트래픽을 공격으로 오인하는 것입니다.

오탐 예시

규칙: content:"admin"; 포함 시 알림

정상 요청: GET /admin/login
→ 오탐! (정상 관리자 페이지 접근)

 

 

해결 방법

1. 규칙 튜닝

# 너무 광범위한 규칙 수정
# Before:
alert tcp any any -> any 80 (msg:"Admin access"; content:"admin"; sid:1000;)

# After (더 구체적으로):
alert tcp !192.168.1.0/24 any -> $HOME_NET 80 (
    msg:"External Admin Access";
    content:"POST"; http_method;
    content:"/admin/"; http_uri;
    content:"admin"; nocase;
    sid:1000; rev:2;
)

 

2. Threshold (임계값) 설정

# 5분간 10회 이상일 때만 알림
alert tcp any any -> $HOME_NET 80 (
    msg:"Possible Port Scan";
    threshold:type threshold, track by_src, count 10, seconds 300;
    sid:1001;
)

 

 

3. Suppression (억제)

특정 IP나 규칙을 억제:

# /etc/snort/threshold.conf
suppress gen_id 1, sig_id 1000, track by_src, ip 192.168.1.100

 

 

4. 규칙 비활성화

bash
# Suricata에서 특정 규칙 비활성화
sudo nano /etc/suricata/disable.conf

1000001  # SID 번호

 

 

로그 분석 및 시각화

ELK Stack 통합 (Elasticsearch + Logstash + Kibana)

bash
# Filebeat로 Suricata 로그 전송
sudo apt install filebeat

# /etc/filebeat/filebeat.yml
filebeat.inputs:
  - type: log
    enabled: true
    paths:
      - /var/log/suricata/eve.json
    json.keys_under_root: true

output.elasticsearch:
  hosts: ["localhost:9200"]

# Filebeat 시작
sudo systemctl start filebeat

Kibana 대시보드:

  • 알림 수 추이
  • Top 공격 출발지 IP
  • Top 공격 유형
  • 지리적 분포

 

개발자를 위한 IDS/IPS 체크리스트

배포 전

  • IDS vs IPS 모드 선택 (수동 vs 인라인)
  • NIDS vs HIDS 선택
  • Snort vs Suricata 선택
  • 네트워크 대역폭 확인 (처리 가능한지)

초기 운영 (IDS 모드 권장)

  • 1~2주간 IDS 모드로 모니터링
  • 오탐 로그 분석 및 규칙 튜닝
  • Threshold 및 Suppression 설정

IPS 모드 전환

  • 점진적 활성화 (중요 규칙부터)
  • 24시간 모니터링 체계
  • 긴급 우회 절차 수립 (IPS 문제 시)

지속적 관리

  • 주간 로그 리뷰
  • 월간 규칙 업데이트
  • 분기별 성능 점검 (패킷 드롭률)
  • 연간 규칙 클린업 (미사용 규칙 제거)

 

마지막으로

방화벽이 네트워크 경계의 문지기라면, IDS/IPS는 내부를 순찰하는 경비원입니다. 허용된 포트를 통해 들어오는 SQL Injection, XSS, 멀웨어 — 이 모든 것을 탐지하고 차단합니다.

핵심 원칙:

① 방화벽만으로는 불충분하다 — IDS/IPS 필수
② 초기에는 IDS 모드로 시작 (오탐 튜닝)
③ Suricata가 고성능 환경에 유리 (멀티스레드)
④ 규칙 지속 업데이트 (ET, Talos)
⑤ 로그 분석 자동화 (ELK Stack)

빠른 시작 (Suricata):

bash
# 1. 설치
sudo apt install suricata

# 2. 규칙 업데이트
sudo suricata-update

# 3. 실행
sudo suricata -c /etc/suricata/suricata.yaml -i eth0

# 4. 로그 확인
sudo tail -f /var/log/suricata/eve.json

IDS/IPS는 방화벽의 맹점을 메우는 필수 보안 계층입니다. 지금 배포하세요.

반응형

댓글