정보보안(구버전)/Snort 2019. 3. 7. 19:08

Snort - 03. Snort Rule 구조

 

 

1. Snort Rule Signiture

 

 - 스노트는 다음과 같은 룰 헤더와 옵션으로 구성된다.

 

Snort 룰 시그니처 구조

 

 

Action 유형

 명령어

내용 

 alert

  경고 발생 및 로그 기록

 log

  로그 기록

 pass

  패켓 무시

 drop

  패켓 차단 및 로그 기록 (IPS 기능으로 사용됨, 단 인라인 구조가 되어야 한다.)

 reject

  패켓 차단 및 로그 기록(TCP - TCP RST 응답, UDP - ICMP Unreachable 응답)

 sdrop

  패켓 차단 및 로그 기록 없음

 

 

Protocol 유형

 유형

내용 

 tcp

  TCP 탐지

 udp

  UDP 탐지

 ip

  IP 전체 탐지

 icmp

  ICMP 메세지 탐지

 any

  전체

 

 

SrcIP/DstIP 형식

형식

내용

 192.168.20.50/32

 192.168.20.50 Host

 192.168.20.0/24

 192.168.20.0/24 서브넷

 [192.168.20.0/24, 172.20.0.0/16]

 192.168.20.0/24, 172.20.0.0/16 서브넷

 !192.168.20.0/24

 192.168.20.0/24를 제외한 나머지 서브넷

 $HOME_NET

 내부 IP 주소 변수

 $EXTERNAL_NET

 외부 IP 주소 변수

 $XXX_SERVERS

 특정 서버 IP 주소 변수

 

 

SrcPort/DstPort

 형식

내용 

 80

  80번 포트

 1:500

  1~500번 포트

 !80

  80번 포트를 제외한 나머지 포트

 !1:500

  1~500번 포트를 제외한 나머지 포트

 any

  모든 포트

 

 

방향 지정

 형식

내용 

 ->

  요청 패켓 탐지 (응답패켓 탐지는 SrcIP/DstIP 반대로 설정)

 <>

  요청/응답 패켓 둘다 탐지

 

 

일반 옵션

 명령어

내용 

형식 

 msg

 경고 이벤트 메세지

 msg:"ICMP Ping test";

 sid

 룰 식별자 (3000000번 이상 권장)

 sid:3000001;

 rev

 룰 버전, 수정될 경우 1씩 증가

 rev:1;

 priority

 우선 순위 (값이 작을수록 먼저 매칭) 범위 : 1~10)

 priority:1;

 classtype

 스노트 룰 분류

 classtype:분류이름;

 reference

 취약점 참고 배포 URL 정보

 reference: 이름 http://~;


 

root@Snort:~# cd /etc/snort
root@Snort:/etc/snort# ls
classification.config  reference.config  snort.debian.conf
community-sid-msg.map  rules             threshold.conf
gen-msg.map            snort.conf        unicode.map

 

root@Snort:/etc/snortcat classification.config
root@Snort:/etc/snortcat reference.config

 

 

흐름 옵션

 명령어

 내용

 flow

 흐름 옵션 명령어

 to_server 또는 from_client

 클라이언트 -> 서버 패켓 룰 매칭

 to_client 또는 from_server

 서버 -> 클라이언트 패켓 룰 매칭

 established 

 세션이 연결된 상태의 패켓 룰 매칭

 statless

 세션 연결 유무와 상관 없이 룰 매칭

 flow:to_server,established

 클라이언트 -> 서버 세션 연결 패켓 룰 매칭

 

 

페이로드 탐색 옵션

 명령어

내용 

예제 

 content

  문자/숫자 탐지

 content: "xxx";

 content: "|16진수 16진수|";

 nocase

  대소문자 구분 없이 탐지

 content: "xxx"; nocase;

 offset

  지정한 바이트번째 부터 탐지(0번째 부터 시작)

 offset:3;

 depth

  지정한 바이트까지 탐지(0번째 부터 시작)

 depth:3;

 distance

  content 매칭 후 지정 위치 이후 다른 content 탐색

 content:"xxx"; content:"yyy"; distance:5;

 within

  content 매칭 후 지정 위치 안에 다른 content 탐색

 content:"xxx"; content:"yyy"; within:5;

 pcre

  정규화 표기, '/'는 시작과 끝에 표기, 16진수는 앞에 \x

 pcre:"/(http|ftp) Traffic/" 

 

 

HTTP 탐색 옵션

 명령어

내용 

 http_method 

 페이로드 앞부분 HTTP 메소드 패턴 매칭 

 http_uri 

 페이로드의 HTTP URI 패턴 매칭

 http_cookie

 페이로드의 HTTP 쿠키 패턴 매칭 

 http_header

 HTTP 요청/응답 Header 내용 패턴 매칭

 http_client_body

 HTTP 요청/응답 Body 내용 패턴 매칭

 http_stat_code

 HTTP 응답 상태 코드 패턴 매칭

 http_stat_message

 HTTP 응답 상태 메세지 패턴 매칭

 

 

 

 

2. Snort Rule 설정

 

3-0. SQL injection Snort Rule 설정.txt

 

root@Snort:~# ls -l  /etc/snort/rules/local.rules
-rw-r--r-- 1 root root 199  6월 30  2015 /etc/snort/rules/local.rules

 

root@Snort:~# vi /etc/snort/rules/local.rules

# $Id: local.rules,v 1.11 2004/07/23 20:15:44 bmc Exp $
# ----------------
# LOCAL RULES
# ----------------
# This file intentionally does not come with signatures.  Put your local
# additions here.

 

alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg:"SQL Injection"; content:"1' and '1'='1'"; nocase; sid:3000001; rev:1;) 

 

:q!

 

 

 

 

3. PCRE(Perl Comaptible Regular Expression)

 

 - Snort 룰 매칭시 content 정보를 세밀하게 검색할 때 사용한다.

 - PCRE 구성 요소 : 메타 문자, 수량자, 클래스, 서브패턴, 옵션

 - 사용 방법 : pcre:"/레직스/옵션";

 

 

메타 문자

 문자

내용 

예제 

설명

 ?

  0 글자, 또는 1 글자

 850?

  85, 850

 +

  1 글자 이상

 850+

  850, 8500, 85000

 *

  0 글자 이상

 850*

  85, 850, 8500, 85000

 .

  1 글자 모든거

 85.

  85 , 850~859, 85a~z, 85A~85Z

 ^

  문자 시작

 ^850

  850으로 시작

 $

  문자 끝

 850$

  850으로 끝

 _

  공백

 100_200

  100 200

 ( )

  서브패턴(문자열를 하나로 묶음)

 (850)*

  없음, 850, 850850, 850850850

 |

  OR

 (100|200)

  100 or 200

 \

  이스케이프 문자(특정 기호 표기)

 \(65013_65005\)

  (65013 65505)

 \b

  문자의 시작과 끝 (\bxyz\b)

\b850\b

  123 850 456

 \t

  Tab

   

 \r

  커서를 현재 줄 처음으로 이동

 

 캐리지 리턴

 \n

  커서를 다음 줄로 이동

 

 라인피드

 

 

수량자

 수량자

내용 

예제

설명 

 {3} 

 3개 존재하는 문자 검색

 [A-Z]{3}

대문자 A~Z 중 3글자 

{4,}

 4개 이상 존재하는 문자 검색

 [A-Z]{4,}

대문자 A~Z 중 4글자 이상 

 {2,4}

 2개 이상 4이하 존재하는 문자 검색

 cis{2,4}co

 cissco, cisssco, cissssco

 

 

탐욕적 수량자

 

<a>.*</a>

 

<a>test</a>abc<a>test</a>

 


게으른 수량자

 

<a>.*?</a>

 

<a>test</a>abc<a>test</a>

 

 

 

클래스

 클래스

내용 

 [3579]

  3, 5, 7, 9

 [2-9]

  2, 3, 4, 5, 6, 7, 8, 9

 [^2-9]

  0, 1

 [0-9a-zA-Z]

  모든 숫자/문자

 [\f\r\t\n\v]

  모든 공백

 

 

옵션

옵션 

 내용

예제

 i

  대소문자 구분 없이 검색

  pcre:"/select/i"

 s

  줄이 넘어가도 문자열을 1줄로 인식하여 . 기능 동작

  pcre:"/select/s"

 x

  패턴에 존재하는 모든 공백 무시

  pcre:"/seletc/x"

 

 

HTTP 옵션

옵션 

 내용

 예제

  M (http_method)

 HTTP 메소드 패턴 매칭

  pcre:"/get/Mi"

  U (http_uri)

 정규화된 URL 디코딩 문자열 패턴 매칭

  pcre:"/cisco/Ui"

  H (http_header)

 정규화된 HTTP 요청 메세지 Header 내용 패턴 매칭

  pcre:"/select/Hi"

  P (http_client_body)

 HTTP 요청 메세지 Body 내용 패턴 매칭

  pcre:"/select/Pi"

  S (http_stat_code)

 HTTP 응답 코드 패턴 매칭

  pcre:"/200/S"

  Y (http_stat_message)

 HTTP 응답 상태 메세지 패턴 매칭

  pcre:"/OK/Y"

 

 

[유튜브] 동영상 강의 링크 (구독! 좋아요!!!)

 

Snort - 3. Snort Rule 구조   https://youtu.be/kVnHpmXGi_g

Posted by 김정우 강사(카카오톡 : kim10322)
,


Q