📄 2026.01.20 (Day 59) - Security Onion IDS/IPS 구축 및 Snort 룰 작성
1. 핵심 개념 정리
IDS/IPS 기초 개념
| # | 핵심 개념 | 설명 | 실무/보안 관점 |
|---|---|---|---|
| 1 | IDS | Intrusion Detection System, 침입 탐지 시스템 | 네트워크 또는 호스트 기반으로 비정상 활동을 탐지하여 알림 |
| 2 | IPS | Intrusion Prevention System, 침입 방지 시스템 | IDS 기능에 더해 실시간으로 공격 패킷을 차단 |
| 3 | Inline Mode | IPS가 네트워크 경로 중간에 위치하여 트래픽 통제 | 차단 기능 수행 가능하나 장애 시 전체 네트워크 영향 |
| 4 | Mirror Mode | 트래픽 복사본을 받아 분석하는 수동 모니터링 방식 | 탐지만 가능하며 실시간 차단 불가 |
| 5 | Snort | 오픈소스 기반 네트워크 침입 탐지/방지 시스템 | 시그니처 기반 룰셋으로 알려진 공격 패턴 탐지 |
Security Onion 플랫폼
| # | 핵심 개념 | 설명 | 실무/보안 관점 |
|---|---|---|---|
| 6 | Security Onion | Snort/Suricata 기반 통합 네트워크 보안 모니터링 플랫폼 | IDS, 전체 패킷 캡처, 로그 분석을 하나의 시스템에 통합 |
| 7 | Sguil | Security Onion의 이벤트 분석 GUI 도구 | 실시간 알림 확인 및 패킷 상세 분석 가능 |
| 8 | Suricata | Snort의 후속 IDS 엔진, 멀티스레드 지원 | 고성능 환경에서 Snort 대비 우수한 성능 |
| 9 | tcpreplay | PCAP 파일을 네트워크 인터페이스로 재생 | 과거 트래픽으로 IDS 룰 테스트 및 검증 |
| 10 | Rule Update | IDS 규칙 파일 변경 후 엔진 재시작 없이 적용 | rule-update 명령으로 신규 룰 즉시 반영 |
웹 취약점 스캐닝
| # | 핵심 개념 | 설명 | 실무/보안 관점 |
|---|---|---|---|
| 11 | OWASP ZAP | Zed Attack Proxy, 웹 애플리케이션 취약점 스캐너 | 자동/수동 스캔으로 OWASP Top 10 취약점 진단 |
| 12 | Spider | 웹 사이트 구조를 크롤링하여 사이트 맵 생성 | 모든 페이지와 파라미터 자동 수집 |
| 13 | Active Scan | 실제 공격 페이로드를 전송하여 취약점 탐지 | SQL Injection, XSS 등 능동적 진단 |
| 14 | Passive Scan | 트래픽 관찰만으로 취약점 힌트 탐지 | 서비스 영향 없이 안전하게 정보 수집 |
| 15 | DVWA | Damn Vulnerable Web Application, 의도적 취약점 실습 환경 | 웹 공격 실습 및 방어 기법 학습용 |
2. 실습 내용 정리
실습 1-1: Security Onion 설치 및 초기 설정
목표: VMware 기반 Security Onion 16 환경 구축
실습 환경:
- VMware Workstation
- Security Onion 16 ISO
- CPU 4코어, RAM 8GB, Disk 100GB
실습 단계:
- VMware 가상머신 생성: Custom (advanced) > Linux / Ubuntu 64-bit > SecurityOnion16, 4코어, 8192MB, NAT, 100GB SCSI
- ISO 마운트: VM Settings > CD/DVD > Use ISO image file
- 설치 완료 후 네트워크 인터페이스 확인: ip addr show
- Sguil 접속 테스트: Security Onion 데스크톱에서 Sguil 실행 또는 https://[SecurityOnion_IP]
- IDS 정상 작동 테스트: curl http://testmynids.org/uid/index.html 후 Sguil에서 “GPL ATTACK_RESPONSE id check returned root” 알림 확인
확인 항목:
- Security Onion 설치 완료 및 네트워크 정상 통신
- Snort/Suricata 프로세스 실행 상태
- Sguil GUI 정상 접속 및 이벤트 수신
- testmynids.org 테스트 트래픽 탐지 여부
보안 인사이트:
- IDS 구축 시 인라인 모드는 네트워크 장애 위험이 있어 미러 모드로 먼저 검증 필요
- Security Onion은 Snort/Suricata 외에도 Bro, OSSEC 등 다양한 도구 통합
- 초기 룰셋은 보수적으로 설정하여 오탐지 최소화 후 점진적 강화
실습 1-2: PCAP 파일을 이용한 IDS 룰 검증
목표: 과거 트래픽을 재생하여 IDS 탐지 능력 확인
실습 환경:
- Security Onion 16
- 2015-08-31-traffic-analysis-exercise.pcap
실습 단계:
- 네트워크 인터페이스 확인: ip addr show (예: ens33, ens160)
- PCAP 파일을 Security Onion으로 전송: scp 명령어 활용
- tcpreplay로 트래픽 재생: sudo tcpreplay –intf1=ens33 /tmp/2015-08-31-traffic-analysis-exercise.pcap (367초 소요)
- Sguil에서 탐지 이벤트 확인:
- ET CURRENT_EVENTS Possible Evil Redirector Leading to EK
- ET POLICY Possible External IP Lookup ipinfo.io
- ET TROJAN AlphaCrypt CnC Beacon
- ET POLICY Vulnerable Java Version 1.8.x Detected
- ET TROJAN AlphacryptTeslaCrypt Ransomware CnC Beacon Response
- 특정 이벤트 패킷 상세 분석: Sguil에서 Event 우클릭 > Transcript 또는 Wireshark
IDS 이벤트 분석 동작 방식:
- tcpreplay가 PCAP 파일의 패킷을 네트워크 인터페이스로 전송
- Snort/Suricata가 실시간으로 패킷을 캡처하고 룰셋과 비교
- 매칭되는 시그니처 발견 시 Sguil 데이터베이스에 이벤트 기록
- Sguil GUI에서 이벤트 목록 표시 및 분석가 검토
발견 가능한 공격 패턴:
- Evil Redirector: 악성 사이트로 리디렉션하는 중간 매개 공격
- IP Lookup: 감염 후 외부 IP 확인하는 멀웨어 행위
- AlphaCrypt/TeslaCrypt: 랜섬웨어 C2 통신 시그니처
- Vulnerable Java: 취약한 Java 버전 사용으로 익스플로잇 노출
- PE EXE Download: 실행 파일 다운로드로 악성코드 감염
방어 방법:
- 웹 프록시에서 알려진 악성 도메인 차단
- Java, Flash 등 취약한 플러그인 비활성화
- 실행 파일 다운로드 시 샌드박스 분석
- DNS 싱크홀로 C2 도메인 무력화
실습 2-1: OWASP ZAP을 이용한 DVWA 취약점 스캔
목표: 웹 애플리케이션 자동 취약점 진단 수행
실습 환경:
- Windows 10 (ZAP 설치)
- Metasploitable2 (DVWA 호스팅)
실습 단계:
- ZAP 실행 및 프록시 포트 8080 설정
- DVWA 로그인: http://[Metasploitable2_IP]/dvwa (admin / password)
- Spider를 이용한 사이트 맵 수집: Sites 탭 > 우클릭 > Attack > Spider
- Active Scan 실행: Sites 탭 > /dvwa/vulnerabilities 우클릭 > Attack > Active Scan
- 스캔 전 Metasploitable2 웹 로그 초기화: cd /var/log/apache2 > sudo rm -rf access.log > sudo /etc/init.d/apache2 restart
- 스캔 완료 후 Alerts 탭에서 High/Medium/Low 위험도별 취약점 확인
- FTP 또는 SCP로 access.log 파일 다운로드 후 Notepad++로 ZAP 공격 패턴 확인
ZAP Spider 크롤링 방식:
- 시작 URL에서 모든 링크, 폼, JavaScript 코드 파싱
- 발견된 URL을 큐에 추가하고 순차적으로 방문
- 각 페이지에서 다시 링크 추출하여 재귀적으로 탐색
- robots.txt, sitemap.xml 등 힌트 파일도 활용
발견 가능한 취약점:
- Path Traversal: ../../../../etc/passwd 같은 경로 조작
- SQL Injection: ’ OR 1=1– 같은 쿼리 변조
- XSS: script alert(1) /script 같은 스크립트 삽입
- Command Injection: ; cat /etc/passwd 같은 명령어 실행
- File Upload: 웹쉘 업로드 가능성
방어 방법:
- 입력값 화이트리스트 기반 검증
- Prepared Statement로 SQL Injection 방지
- HTML 엔티티 인코딩으로 XSS 차단
- 파일 업로드 시 확장자 및 내용 검증
- WAF 룰셋으로 알려진 공격 패턴 차단
실습 2-2: AI를 활용한 취약점 분석 보고서 작성
목표: ZAP 스캔 결과를 체계적인 보고서로 변환
실습 단계:
- ZAP 리포트 생성: Report > Generate HTML Report
- 리포트 파일을 AI에게 업로드
- AI 프롬프트: 발견된 취약점 요약(High/Medium/Low 분류), 기술적 상세 설명, 공격 시나리오 예시, 권장 조치사항, 위험도 평가
- 생성된 보고서 검토 및 수정
보안 인사이트:
- ZAP 리포트는 기술적 정보 중심이므로 경영진용 요약 필요
- 우선순위는 위험도뿐 아니라 비즈니스 영향도 고려
- False Positive 검증을 위해 수동 재확인 필수
실습 3-1: Snort 룰 작성 기초
목표: 사용자 정의 탐지 규칙 작성 및 적용
실습 환경:
- Security Onion 16
- /etc/nsm/rules/local.rules
Snort 규칙 파일 경로:
- /etc/nsm/rules/downloaded.rules (기본 제공 룰셋)
- /etc/nsm/rules/local.rules (사용자 정의 룰)
- /etc/nsm/templates/snort/snort.conf ($HOME_NET, $EXTERNAL_NET 등 변수 정의 위치)
기본 규칙 작성 예시:
- alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg:“Snort Test Rule”; content:"/etc/passwd"; nocase; sid:3202411200; rev:1;)
룰 적용:
- sudo rule-update (룰 문법 검증 및 적용)
- 오류 발생 시: sudo nsm –sensor –restart –only-snort-alert
Snort 룰 구조: Rule Header + Rule Options으로 구성
Rule Header:
- Action: alert, log, pass, drop, reject, sdrop
- Protocol: tcp, udp, icmp, ip
- Source IP/Port: any, $EXTERNAL_NET, 192.168.1.0/24
- Direction: -> (단방향), <> (양방향)
- Destination IP/Port
Rule Options (괄호 안):
- msg: 알림 메시지
- content: 탐지할 패턴
- sid: 규칙 ID (300만 이상 사용자 정의)
- rev: 규칙 버전
탐지 가능한 공격:
- content:"/etc/passwd" -> Path Traversal 시도
- content:“union select” -> SQL Injection
- content:“script” -> XSS 공격
- pcre:"/cmd.exe/i" -> 명령어 실행
방어 방법:
- 룰셋 주기적 업데이트 (ET Open, Snort VRT)
- 커스텀 룰은 테스트 환경에서 검증 후 프로덕션 적용
- sid 번호 체계적 관리 (예: 날짜+일련번호)
- 룰 성능 모니터링 (CPU/메모리 사용량)
실습 3-2: PCRE 정규표현식을 활용한 고급 룰 작성
목표: 정규표현식으로 복잡한 패턴 탐지
PCRE 메타문자: \ ^ $ . | ? * + [ ] ( ) { }
수량자:
- {n}: 정확히 n개
- {n,}: n개 이상
- {n,m}: n개 이상 m개 이하
클래스:
- [abc]: a, b, c 중 하나
실전 PCRE 룰 예시:
예제 1: SQL Injection 탐지
- alert tcp any any -> any 80 (msg:“SQL Injection Attempt - UNION SELECT”; pcre:"/union\s+select/Ui"; flow:to_server,established; sid:3202411201; rev:1;)
예제 2: 신용카드번호 유출 탐지 (숫자 4개 이상 연속)
- alert tcp any any -> any any (msg:“Possible Credit Card Number Leak”; pcre:"/0-9{4,}/"; sid:3202411202; rev:1;)
예제 3: HTTP 응답 코드 탐지 (200 또는 404)
- alert tcp any 80 -> any any (msg:“HTTP Response 200 or 404”; pcre:"/(200|404)/S"; flow:from_server,established; sid:3202411203; rev:1;)
예제 4: HTTP 헤더에서 select 문자열 탐지
- alert tcp any any -> any 80 (msg:“SELECT in HTTP Header”; pcre:"/select/Hi"; flow:to_server,established; sid:3202411204; rev:1;)
PCRE 패턴 매칭 과정:
- 정규표현식 엔진이 패킷 페이로드를 처음부터 스캔
- 정규표현식 패턴과 일치하는 문자열 탐색
- 수량자, 클래스 조건을 모두 만족하는지 검증
- 매칭 성공 시 알림 생성
PCRE 옵션:
- /i: 대소문자 구분 안 함
- /U: URI 정규화 적용
- /H: HTTP 헤더에서만 매칭
- /P: HTTP 본문에서만 매칭
- /S: HTTP 상태 코드에서 매칭
3. Snort 룰 문법 비교표
Action 타입 비교
| 항목 | 기능 | 로그 기록 | 패킷 차단 | 사용 시기/적용 방안 |
|---|---|---|---|---|
| alert | 알림 생성 | O | X | 탐지만 필요한 경우, 대부분의 IDS 운영 |
| log | 로그만 기록 | O | X | 통계 수집용, 오탐지 검증 단계 |
| pass | 무시 | X | X | 화이트리스트, 특정 트래픽 예외 처리 |
| drop | 차단 및 기록 | O | O (Inline) | IPS 모드, 명확한 악성 트래픽 |
| reject | 차단 + RST 전송 | O | O (Inline) | TCP 공격 즉시 차단, ICMP unreachable 응답 |
| sdrop | 조용히 차단 | X | O (Inline) | 스텔스 차단, 로그 부하 감소 |
IP 주소 지정 방법
| 문법 | 설명 | 예시 | 적용 방안 |
|---|---|---|---|
| any | 모든 IP | any | 프로토콜 전체 모니터링 |
| 특정 IP | 단일 호스트 | 192.168.1.100/32 | 중요 서버 타겟팅 |
| 네트워크 대역 | CIDR 표기 | 192.168.1.0/24 | 내부망 전체 |
| ! (부정) | 제외 | !192.168.1.0/24 | 특정 대역 제외 |
| [ ] (목록) | 비연속 IP | [192.168.1.1, 10.0.0.1] | 여러 서버 동시 지정 |
| $변수 | 사전 정의 변수 | $HOME_NET, $EXTERNAL_NET | 설정 파일에서 중앙 관리 |
4. 심화 분석
IDS 이벤트 분석 - 실제 케이스
| 구분 | Event 내용 | 시그니처 | 위협 분석 | 대응 방안 |
|---|---|---|---|---|
| Event 3.1394 | Possible Evil Redirector Leading to EK | 64.20.39.203 -> 192.168.137.239:80 | Exploit Kit으로 리디렉션하는 중간 매개 공격 | 출발지 IP 평판 조회 후 차단, 엔드포인트 검사 |
| Event 3.1398 | Possible External IP Lookup ipinfo.io | 192.168.137.239 -> 54.164.11.220:80 | 멀웨어 감염 후 외부 IP 확인 행위 | 내부 호스트 격리, 메모리 포렌식 |
| Event 3.1400 | AlphaCrypt CnC Beacon | 192.168.137.239 -> 72.55.148.19:80 | 랜섬웨어 C2 서버 통신 | 즉시 네트워크 차단, 파일 복구 불가 |
| Event 3.1404 | Vulnerable Java Version 1.8.x Detected | 192.168.137.239 -> 23.60.139.27:80 | 취약한 Java 플러그인 사용 | Java 업데이트 또는 브라우저 플러그인 차단 |
| Event 3.1408 | AlphacryptTeslaCrypt Ransomware CnC Response | 72.55.148.19:80 -> 192.168.137.239 | C2 서버로부터 암호화 키 수신 | 호스트 즉시 격리, 침해사고 대응팀 투입 |
랜섬웨어 감염 시나리오 재구성 (2015-08-31 기준)
1단계: 초기 침투 (05:23:49)
- 사용자가 악성 광고 클릭 또는 피싱 이메일 링크 접속 -> Evil Redirector (64.20.39.203)로 리디렉션
2단계: Exploit Kit 전달 (05:24:03)
- Java 취약점 익스플로잇 페이지 로드, 취약한 Java 1.8.0_60 버전 탐지
3단계: 외부 IP 확인 (05:24:03)
- 멀웨어가 ipinfo.io에 접속하여 피해자 IP 확인
- GET /ip HTTP/1.1 / Host: ipinfo.io
4단계: C2 통신 시작 (05:24:05)
- AlphaCrypt/TeslaCrypt 랜섬웨어가 C2 서버에 접속
- GET /wp-content/plugins/useful-banner-manager/misc.php?[긴 인코딩 문자열]
5단계: 암호화 키 수신 (05:34:06)
- HTTP/1.1 200 OK 응답 수신, 암호화 키 전달
6단계: 파일 암호화 실행
- 로컬 파일 시스템 스캔 및 암호화 시작, 랜섬 노트 생성 및 표시
탐지 가능 포인트:
- Java 플러그인 실행 차단
- ipinfo.io 접근 알림
- 알려진 C2 도메인 DNS 싱크홀
- 비정상적인 파일 I/O 활동 탐지
PCRE 정규표현식 연습 문제 풀이
- pcre:"/a.a/" -> 정답: aTa (. 은 임의의 한 문자)
- pcre:"/(one|two) apple/" -> 정답: one apple (| 는 OR 연산)
- pcre:"/boan?/" -> 정답: boan, boa (? 는 0회 또는 1회)
- pcre:"/project/" -> 정답: project, prject ( 는 0회 이상)
- pcre:"/hello+world/" -> 정답: helloworld (+ 는 1회 이상)
- pcre:"/A-Z{3}/" -> 정답: ABC (대문자 3개 연속)
- 숫자 9가 4개 이상: pcre:"/9{4,}/"
- pcre:"/bo{2,4}an/" -> 정답: booan (o가 2~4개)
- pcre:"/union/Ui" -> 대소문자 무시로 모두 매칭
- 200 또는 404 응답 코드: pcre:"/(200|404)/S"
- 요청 헤더에서 select: pcre:"/select/Hi"
5. 실무/보안 적용
SOC 분석가 관점 - IDS 이벤트 대응 포인트
| 단계/유형 | 탐지 포인트 | 로그 예시 | 대응 방안 |
|---|---|---|---|
| 초기 탐지 | IDS 알림 발생, 이벤트 심각도 확인, 출발지/목적지 IP 식별 | ET TROJAN AlphaCrypt CnC Beacon, Src: 192.168.137.239, Dst: 72.55.148.19:80 | 이벤트 상세 정보 확인, Wireshark로 패킷 분석, 위협 인텔리전스 조회 (VirusTotal, AbuseIPDB) |
| 영향 범위 파악 | 동일 출발지 IP의 다른 이벤트, 시간대별 활동 패턴, 내부 전파 여부 | 192.168.137.239 -> Multiple External IPs, Time: 05:23~05:35 | 해당 호스트 네트워크 격리, 동일 세그먼트 다른 호스트 점검, 공격 타임라인 재구성 |
| 침해 확인 | C2 응답 성공 여부, 악성 파일 다운로드, 추가 악성 행위 | HTTP/1.1 200 OK, Content: —!!!INSERTED!!!—, PE EXE Download Detected | 호스트 즉시 차단, 포렌식 이미징, KISA 침해사고 신고 준비 |
Snort 룰 작성 베스트 프랙티스
기본 구조 템플릿:
- alert tcp $EXTERNAL_NET any -> $HOME_NET $HTTP_PORTS (msg:"[카테고리] 공격명 및 설명"; flow:to_server,established; content:“악성패턴”; nocase; http_uri; pcre:"/정규표현식/Ui"; classtype:trojan-activity; sid:3YYYYMMDD##; rev:1; reference:url,참고자료;)
성능 최적화 팁:
- content를 먼저 매칭 후 pcre 실행 (빠른 필터링)
- offset, depth로 탐색 범위 제한
- flow 옵션으로 불필요한 패킷 사전 필터링
IDS/IPS 운영 체크리스트
룰셋 관리:
- 일일 룰셋 업데이트 (ET Open, Snort VRT)
- 커스텀 룰 테스트 환경 검증 후 프로덕션 적용
- 주간 오탐지 룰 검토 및 튜닝
- 월간 룰 히트율 분석 및 불필요 룰 제거
성능 모니터링:
- CPU/메모리 사용률 임계치 설정
- 패킷 드롭율 1% 이하 유지
- 평균 패킷 처리 지연 시간 측정
- 디스크 I/O 병목 현상 점검
6. 배운 점 및 인사이트
새로 알게 된 점
- Security Onion의 통합 플랫폼 강점: Snort, Suricata, Bro, OSSEC, Sguil 등을 하나의 시스템에서 운영하여 침해사고 분석 효율 극대화
- tcpreplay의 실전 활용성: 과거 공격 트래픽을 재생하여 IDS 룰 검증 및 신규 분석가 교육에 활용 가능
- OWASP ZAP의 체계적 접근: Spider로 사이트 맵 수집 후 Active Scan으로 점진적 진단하는 방법론이 효과적
- Snort 룰의 계층적 구조: content로 1차 필터링 후 pcre로 정밀 탐지하는 방식이 성능과 정확도 균형
- PCRE 정규표현식의 강력함: 복잡한 공격 패턴도 한 줄의 정규표현식으로 탐지 가능하지만 성능 부하 주의 필요
이전 학습과의 연결고리
- Wireshark 패킷 분석 확장: 수동 분석을 넘어 IDS로 자동화된 대규모 트래픽 모니터링 체계 구축
- 웹쉘 공격 탐지 연계: 이전에 학습한 웹쉘 업로드 패턴을 Snort 룰로 작성하여 실시간 탐지
- ISMS-P 기술적 보호조치 실현: IDS/IPS는 침입 탐지 및 대응 요구사항의 핵심 기술적 통제 수단
- OWASP Top 10 자동 검증: ZAP 스캔으로 학습한 취약점을 실제 환경에서 자동 진단
실무 적용 아이디어
보안 전문가 관점:
- 계층적 탐지 체계 구축: Snort(시그니처) + Suricata(프로토콜 이상) + SIEM(상관분석)으로 다층 방어
- 위협 헌팅 워크플로우: IDS 이벤트를 트리거로 Wireshark 상세 분석 -> 위협 인텔리전스 조회 -> 커스텀 룰 작성
- False Positive 관리 프로세스: 오탐지 룰은 별도 파일로 분리하고, suppression list로 관리하여 알림 피로도 감소
보안 컨설턴트 관점:
- 취약점 진단 자동화: ZAP을 CI/CD 파이프라인에 통합하여 코드 배포 전 자동 스캔
- 맞춤형 룰셋 개발: 고객 환경의 특수한 공격 벡터를 Snort 룰로 제작하여 제공
7. Quick Reference
Snort 룰 관리 명령어
- sudo nano /etc/nsm/rules/local.rules (룰 파일 편집)
- sudo rule-update (룰 적용, 문법 검증 포함)
- sudo nsm –sensor –restart –only-snort-alert (Snort 재시작)
- sudo nsm –sensor –restart (전체 재시작)
- ps aux | grep snort (Snort 프로세스 확인)
- snort -c /etc/nsm/templates/snort/snort.conf -T (룰 문법 수동 검증)
- snort -c /etc/nsm/templates/snort/snort.conf -r test.pcap -A console (PCAP 파일로 룰 테스트)
Snort 룰 옵션 요약표
| 구분 | 항목 | 핵심 키워드 | 주요 내용 | 적용 방법 |
|---|---|---|---|---|
| 일반 | msg | 메시지 | 알림 이벤트 제목 | msg:“공격 설명”; |
| sid | 시그니처 ID | 규칙 고유 번호 (300만 이상) | sid:3202501201; | |
| rev | 버전 | 규칙 수정 버전 | rev:1; | |
| classtype | 분류 | 공격 유형 분류 | classtype:trojan-activity; | |
| 흐름 | flow | 방향/상태 | 트래픽 방향 및 세션 상태 | flow:to_server,established; |
| 페이로드 | content | 문자열 | 탐지할 패턴 | content:“악성문자열”; |
| nocase | 대소문자 | 대소문자 무시 | nocase; | |
| offset | 시작 위치 | 탐색 시작 바이트 | offset:5; | |
| depth | 탐색 깊이 | 탐색 범위 제한 | depth:20; | |
| pcre | 정규표현식 | PCRE 패턴 매칭 | pcre:"/pattern/Ui"; | |
| HTTP | http_method | HTTP 메소드 | GET, POST 등 | http_method; |
| http_uri | URI | 요청 경로 | http_uri; | |
| http_header | 헤더 | 요청/응답 헤더 | http_header; | |
| http_client_body | 요청 본문 | POST 데이터 | http_client_body; |
PCRE 정규표현식 치트시트
메타문자:
- : 이스케이프, ^: 문자열 시작, $: 문자열 끝, .: 임의의 한 문자
- |: OR 연산, ?: 0회 또는 1회, *: 0회 이상, +: 1회 이상
수량자:
- {n}: 정확히 n개, {n,}: n개 이상, {n,m}: n개 이상 m개 이하
클래스:
PCRE 옵션:
- /i: 대소문자 무시, /U: URI 정규화, /H: HTTP 헤더에서 매칭, /P: HTTP 본문에서 매칭, /S: HTTP 상태 코드에서 매칭
8. 트러블슈팅
| 문제 | 원인 | 해결 방법 |
|---|---|---|
| rule-update 실패 “Syntax Error” | 룰 문법 오류, 괄호 누락, 세미콜론 빠짐 | 오류 메시지에서 라인 번호 확인, 괄호 쌍 점검, 각 옵션 끝에 세미콜론 확인, snort -T 로 상세 오류 확인 |
| Sguil에서 이벤트가 안 보임 | Snort 프로세스 중지, 네트워크 인터페이스 미설정, 룰 비활성화 | ps aux 로 프로세스 확인, ip addr show 인터페이스 점검, nsm –sensor –restart |
| tcpreplay 실행 안 됨 | 인터페이스명 오류, 권한 부족, PCAP 파일 손상 | ip addr 로 정확한 인터페이스명 확인, sudo 권한으로 실행, Wireshark로 PCAP 파일 정상 여부 검증 |
| ZAP 스캔 시 타겟 서버 무응답 | 과도한 요청으로 서버 과부하, WAF 차단, 세션 타임아웃 | Scan Policy에서 스레드 수 감소, 스캔 속도 조절(Slow 모드), 세션 쿠키 재설정 |
Today’s Insight:
IDS/IPS는 단순히 룰셋을 적용하는 것을 넘어, 지속적인 튜닝과 분석가의 전문성이 결합되어야 효과를 발휘한다는 것을 깨달았습니다. Security Onion처럼 여러 도구를 통합한 플랫폼은 침해사고 분석 시 Wireshark 수동 분석부터 Snort 자동 탐지까지 원스톱으로 처리할 수 있어 SOC 업무 효율이 극대화됩니다. PCRE 정규표현식은 강력하지만 복잡한 패턴은 CPU 부하를 유발하므로, content 옵션으로 1차 필터링 후 pcre로 정밀 탐지하는 계층적 접근이 실무에서 필수적입니다. 오늘 학습한 Snort 룰 작성 기법은 실제 SOC에서 Zero-Day 공격이나 조직 특화 위협을 탐지하는 맞춤형 시그니처 개발의 기초가 되었습니다.
-
숫자가 아닌 것 ↩︎