메뉴 건너뛰기

SayClub.org

네트워크(Network)

Snort Rule

미르다테 2024.12.30 15:19 조회 수 : 82

Snort는 IDS처럼 규칙을 정의하고, 정의된 규칙에 따라 로그파일에 그 내용을 기록할 수 있다.

 

규칙옵션

Snort 규칙은 경고 규칙, 무시 규칙, 로그 규칙 순으로 동작한다.

규칙옵션 설명
msg 경고, 로그 파일에 메시지를 출력
flags TCP Flag, Flag가 없는 경우 0을 사용함
ttl 지정하고 싶은 TTL 값
content 버퍼 오버플로를 감시
itype ICMP 타입의 개수
icode ICMP 로그의 개수
minflag 최소한의 조각 크기
seq TCP Sequence 숫자
ACK TCP ACK 숫자
id IP Header 조각 ID 숫자
logto 경고를 저장할 파일
dsize 패킷이 일치한다고 가정할 크기
offset 입력 중에서 처음부터 검색할 바이트 수
depth 일치되는 패턴을 검사할 때 depth 바이트만으로 판단
session FTP 및 Telnet과 같이 깨끗한 텍스트 프로토콜로부터 트래픽 세션을 기록
ipopts 특정한 IP 옵션을 체크

 

flag 옵션

Snort flag 옵션 Flag 설명
S SYN TCP 연결 시 동기화 요구
F FIN 정상 접속 종료
A ACK 응답에 대한 확인
U URG 긴급 포터 flag
P PSH 데이터 버퍼링을 하지 않고 수신자에게 송신 요구
R RST 비정상 종료를 위한 Reset
1 1의 보수
2 2의 보수
0 NULL

 

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/snort# cat classification.config
root@Snort:/etc/snort# cat 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 설정

 

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"

번호 제목 글쓴이 날짜 조회 수
129 Fortigate Maintainer(recovery)를 이용한 계정 패스워드 찾기 미르다테 2025.04.01 15
128 Fortigate session-ttl 설정 방법 미르다테 2025.04.01 10
127 Fortigate session timeout 무한대로 설정하기 미르다테 2025.04.01 10
126 Fortigate 2GB RAM 이하의 FortiGate에 대한 변경 사항 미르다테 2025.03.26 13
125 Fortigate SSL VPN Split tunnel의 라우팅 동적으로 설정하는 방법 미르다테 2025.03.26 13
124 Fortigate GUI에서 Firmware upgrade 경고 메세지 없애는 방법 미르다테 2025.03.26 18
123 Fortigate 정보 사이트 yurisk.info 미르다테 2025.03.20 22
122 Fortigate VM Trial 버전 영구적으로 사용 가능 미르다테 2025.03.20 15
121 FortiGate 흐름(Flow) 기반 검사 vs 프록시(Proxy) 기반 검사 차이점 file 미르다테 2025.03.20 34
120 FortiGate – 일부 기능은 2GB RAM 모델에서 더 이상 사용할 수 없습니다. 어떤 영향이 있습니까? 미르다테 2025.03.20 31
119 Fortigate 모델별 CPU 및 메모리 사양 미르다테 2025.03.17 27
118 Fortigate Fortinet Service(license) Activation 정책 미르다테 2025.03.17 17
117 Fortigate v7.2.5 로 업그레이드 한 후 Web GUI(https) 접속이 안되는 경우 미르다테 2025.03.17 24
116 Fortigate SSLVPN 정상 로그인은 되었으나, 내부 서버로 접근이 안되는 경우 미르다테 2025.03.17 15
115 Fortigate의 외부 공인 IP 확인하는 방법 미르다테 2025.03.17 15
114 FortiGate Cloud 라이선스가 만료된 후 로그 보존 기간 미르다테 2025.03.17 15
113 Fortigate Wildcard FQDN의 IP를 획득하지 못하는 경우 미르다테 2025.03.17 11
112 Fortigate SSLVPN 속도가 느린 경우 : DTLS 사용 미르다테 2025.03.17 11
111 Fortigate TFTP/FTP를 이용한 시그니처 업데이트 미르다테 2025.03.17 24
110 Fortigate가 IPv6 트래픽에 응답하지 않도록 설정 미르다테 2025.03.17 15
위로