정보보안(구버전)/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/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 설정
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 $
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
'정보보안(구버전) > Snort' 카테고리의 다른 글
Snort - 06. Snort 실습 II (0) | 2019.03.07 |
---|---|
Snort - 05. Snort 실습 I (0) | 2019.03.07 |
Snort - 04. Snort 룰 구성 및 테스트 (1) | 2019.03.07 |
Snort - 02. Snort 설치 및 시작 (0) | 2019.03.07 |
Snort - 01. Snort 실습 환경 구성 (0) | 2019.03.07 |