
보안관제의 핵심 무기, Snort Rule 완전 정복 가이드
보안관제(SOC) 업무를 수행하다 보면 하루에도 수십만 건의 보안 경보(Alert)를 마주하게 됩니다. 이때 단순히 경보를 바라보는 것을 넘어, 직접 공격 패킷을 분석하고 이를 탐지할 수 있는 Snort(스노트) 룰을 작성할 줄 안다면 여러분의 몸값은 수직 상승할 것입니다.
이 가이드는 Snort 룰의 기초 문법부터 전문가를 위한 고급 탐지 옵션(Deep Dive), 그리고 실제 기업 현장에서 이루어지는 룰 튜닝 및 운영 노하우(Real World)까지 총망라했습니다. 스크랩해 두고 업무 중 막힐 때마다 꺼내 보세요.
1. Snort Rule의 해부학: 기본 구조와 문법
Snort 룰은 크게 룰 헤더(Rule Header)와 룰 바디(Rule Body)라는 두 개의 심장으로 이루어져 있습니다. 헤더가 '누가, 어디로, 무엇을' 보내는지 식별한다면, 바디는 '어떤 흔적(Payload)'을 찾을지 결정합니다.
action proto src_ip src_port -> dst_ip dst_port (options;)
(1) 룰 헤더 (Rule Header): 트래픽의 뼈대
| 요소 | 상세 설명 |
|---|---|
| Action | - alert: 탐지 로그를 남기고 경고 발생 (가장 일반적) - drop: (IPS 모드) 패킷을 차단하고 로그 남김 - pass: 패킷을 무시하고 통과시킴 (예외 처리에 사용) - reject: 차단 후 상대방에게 '접속 불가(RST/ICMP Unreachable)' 응답을 보냄 |
| Protocol | tcp, udp, icmp, ip(모든 프로토콜) 중 하나를 선택합니다. HTTP는 별도 프로토콜이 아니라 tcp 80/443 포트로 정의합니다. |
| IP & Port | - any: 모든 주소/포트 - $HOME_NET: 설정 파일(snort.conf)에 정의된 내부망 대역 - !192.168.1.0/24: 특정 대역을 제외(!)할 때 사용 - [80,443,8080]: 대괄호로 묶어 여러 포트를 동시 지정 |
| Direction | - ->: 단방향 (출발지에서 목적지로 가는 패킷만 검사) - <>: 양방향 (Request/Response 모두 검사, 주로 텔넷 등에서 사용) |
(2) 룰 바디 (Rule Body): 탐지의 디테일
괄호 ( ) 안에 정의되며, 세미콜론;으로 구분합니다. 크게 4가지 카테고리로 나뉩니다.
- 일반(General):
msg(로그 메시지),sid(룰 ID),rev(버전),classtype(공격 유형) - 페이로드(Payload):
content(문자열),pcre(정규식),depth,offset(검사 위치) - 비-페이로드(Non-payload):
ttl,flags(SYN, FIN 등),flow(세션 상태) - 후처리(Post-detection):
threshold(임계치),tag(추가 로깅)
2. Deep Dive: 진짜 실력을 가르는 고급 옵션 심층 분석
단순히 content:"bad_string"만 쓴다면 하수입니다. 공격자는 패킷을 쪼개거나(Fragmentation), 인코딩을 바꿔 탐지를 우회합니다. 이를 잡아내기 위한 고급 기술을 소개합니다.
① flowbits: 공격의 '문맥(Context)'을 이해하라
단일 패킷이 아니라 연속된 트랜잭션을 추적해야 할 때 사용합니다. 가장 강력하면서도 시스템 부하가 큰 옵션입니다.
- 시나리오: 외부에서 웹쉘(Webshell)을 업로드하고, 그 웹쉘에 접속하여 명령어를 내리는 행위를 탐지하고 싶다.
- Step 1 (마킹): 파일 업로드 성공 시
flowbits:set, webshell_uploaded;로 사용자에게 '표식'을 남깁니다. - Step 2 (추적): 표식이 있는 사용자(
flowbits:isset, webshell_uploaded;)가cmd.exe명령어를 호출하면 즉시 차단합니다.
alert tcp ... (content:"POST"; content:"upload.php"; flowbits:set,webshell_upped; flowbits:noalert; sid:1001;)
# 2. 업로드한 놈이 명령 실행 시 차단
alert tcp ... (content:"cmd.exe"; flowbits:isset,webshell_upped; msg:"Webshell Command Exec"; sid:1002;)
② byte_test & byte_jump: 헤더/길이 조작 공격 탐지
문자열이 없는 바이너리 공격이나 버퍼 오버플로우 공격 탐지에 필수적입니다. [web:51][web:53]
- byte_test: 특정 오프셋의 값을 숫자로 변환해 크기를 비교합니다.
예: "TCP 헤더의 Window Size 값이 비정상적으로 0인가?"byte_test: 2, =, 0, 14, big;(14번째 위치에서 2바이트를 읽어 값이 0인지 확인) - byte_jump: 가변 길이 헤더를 건너뛸 때 사용합니다.
예: "IP 헤더 길이를 읽어서 그만큼 건너뛰고 TCP 페이로드를 검사해라."
이 옵션이 없으면 헤더 길이가 변할 때마다 룰을 따로 만들어야 합니다.
③ PCRE와 Fast_Pattern의 조화
정규표현식(PCRE)은 강력하지만 CPU를 녹여버립니다. 따라서 fast_pattern을 현명하게 써야 합니다. [web:59]
Snort 엔진은 룰을 검사할 때 content 중 가장 긴 문자열 하나를 fast_pattern으로 선정해 먼저 찾습니다. 이 문자열이 없으면 아예 룰 검사를 포기합니다(Skip).
따라서, 룰에 여러 content가 있다면 가장 유니크한 문자열에 수동으로 fast_pattern; 옵션을 붙여 성능을 최적화해야 합니다.
3. Real World: 기업 현장에선 이렇게 씁니다 (GUI vs CLI & 튜닝)
"이론은 알겠는데, 실제 출근하면 어떻게 일하나요?" 신입 사원이 가장 궁금해하는 실무 환경을 적나라하게 공개합니다.
(1) 룰 입력: 까만 화면(CLI) vs 예쁜 화면(GUI)?
기업의 규모와 보안 장비 종류에 따라 완전히 다릅니다.
- 사용처: 오픈소스 Snort/Suricata를 직접 구축한 중소기업, 또는 연구소/분석팀
- 방법:
vi /etc/snort/rules/local.rules파일을 열어 직접 타이핑 - 장점: 즉시 수정 가능, 룰 동작 원리 파악에 최적
- 단점: 오타 하나로 데몬이 죽을 수 있음, 버전 관리 어려움
- 사용처: 금융권, 대기업, 보안관제 전문업체 (90% 이상)
- 방법: 웹 콘솔(FMC, Splunk ES, SIEM 등) 로그인 -> '정책 관리' 메뉴 -> 룰셋 입력 -> '배포' 클릭
- 장점: 수백 대의 센서에 동시 적용, 버전 관리(History) 가능, 오타 검증 기능
- 현실: GUI를 쓰더라도 내부적으로는 Snort 문법을 그대로 입력창에 넣는 경우가 많습니다. 즉, 문법은 무조건 알아야 합니다.
(2) 전쟁 같은 룰 튜닝: 오탐(False Positive)과의 싸움
룰을 적용하자마자 경보가 1초에 1,000개씩 뜬다면? 그건 공격이 아니라 여러분이 룰을 잘못 짠 겁니다. 이를 잡는 과정을 튜닝(Tuning)이라고 합니다.
[상황] "네이버 접속했는데 공격이라고 떠요!"
content:"GET"; 처럼 너무 일반적인 문자열을 쓰면 정상 트래픽도 다 잡힙니다. 이때는 예외 처리(Pass Rule)를 하거나 임계치(Threshold)를 설정합니다.
"같은 IP에서 60초 동안 100번 이상 발생하면 그때부터 경보를 띄워라!"
threshold: type both, track by_src, count 100, seconds 60;이렇게 하면 단순 접속은 무시하고, 무차별 대입 공격(Brute Force) 같은 비정상 행위만 골라낼 수 있습니다.
마무리하며: 룰 작성은 '예술'이다
훌륭한 보안관제 요원은 시스템 리소스를 최소한으로 쓰면서도, 공격자는 정확히 낚아채는 룰을 만듭니다. 이는 마치 제한된 글자 수로 최고의 시를 쓰는 것과 같은 '예술'의 영역입니다.
오늘 배운 flowbits, byte_jump 같은 고급 옵션들을 두려워하지 마세요. 처음엔 어렵지만, 직접 패킷 덤프(pcap) 파일을 떠서 snort -r 명령어로 테스트해 보며 내공을 쌓으시길 바랍니다. 이 글이 여러분의 무기가 되기를 응원합니다.
'정보보안' 카테고리의 다른 글
| 기업 무선 보안의 최후의 보루, WIPS(무선침입방지시스템) 심층 분석 가이드 (1) | 2025.12.03 |
|---|---|
| [심층 분석] Snort를 이용한 이미지 파일(GIF) 버퍼 오버플로우 탐지 전략 (0) | 2025.11.29 |
| 2025년 10월, 윈도우 10 지원 종료에 따른 대응 전략 윈도우11설치 (0) | 2025.11.27 |
| 2025 CSAP 클라우드 보안인증 완벽 가이드 | 개요, 등급, 인증방법, 업체 현황 총정리 (0) | 2025.10.16 |
| 2025 롯데카드 해킹 사고 완벽 분석|공격 방법·취약점·피해 규모·대응 현황 총정리 (0) | 2025.09.23 |