라떼는말이야

[Snort] 스노트 기본 동작 / Snort Rule 구조 본문

프로젝트/Snort

[Snort] 스노트 기본 동작 / Snort Rule 구조

MangBaam 2020. 8. 28. 02:05
반응형

 

2020/08/27 - [프로젝트/Snort] - [Snort] Snort 환경 구축 설계

 

[Snort] Snort 환경 구축 설계

Attacker (Kali) 2개의 네트워크 인터페이스를 가진다. NAT(VMNet8) : 192.168.2.50 Host-only(VMNet1) : 192.168.20.50 NAT는 VMWare NAT로 연결되어 인터넷과 연결된다. (192.168.2.254) Gateway (Kali) Snort..

latte-is-horse.tistory.com

2020/08/30 - [분류 전체보기] - [Snort] VMWare 가상머신 세팅 (공격자, 피해자, 스노트, 게이트웨이)

 

[Snort] VMWare 가상머신 세팅 (공격자, 피해자, 스노트, 게이트웨이)

2020/08/27 - [프로젝트/Snort] - [Snort] Snort 환경 구축 설계 [Snort] Snort 환경 구축 설계 Attacker (Kali) 2개의 네트워크 인터페이스를 가진다. NAT(VMNet8) : 192.168.2.50 Host-only(VMNet1) : 192.168.2..

latte-is-horse.tistory.com

본 게시글은 위 게시글의 구성이 갖춰진 것을 전제로 진행.


 

Snort 시작

root@Snort: ~# service snort start
root@Snort: ~# service snort status

active (running) 확인!

 

 

Snort Rule 구조

룰 헤더 옵션
Action Protocol SrcIP SrcPort -> DstIP DstPort Option

 

Action 유형

명령어 내용
alert 경고 발생 및 로그 기록
log 로그 기록
pass 패킷 무시
drop 패킷 차단 및 로그 기록 (IPS 기능으로 사용. 단, 인라인 구조가 되어야 한다)
reject 패킷 차단 및 로그 기록 (TCP - TCP RST 응답, UDP - ICMP Unreachable 응답)
sdrop 패킷 차단 및 로그 기록 없음

 

Protocol 유형

유형 내용
tcp TCP 탐지
udp UDP 탐지
ip IP 전체 탐지
icmp ICMP 메시지 탐지
any 전체

 

ScrIP / 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 주소 변수

 

ScrPort / DstPort

형식 내용
80 80번 포트
1:500 1~500번 포트
!80 80번 포트를 제외한 나머지 포트
!1:500 1~500번 포트를 제외한 나머지 포트
any 모든 포트

 

방향 지정

형식 내용
-> 요청 패킷 탐지 (요청패킷 탐지는 ScrIP/DstIP 반대로 설정)
<> 요청/응답 패킷 둘 다 탐지

 

일반 옵션

명령어 내용 형식
msg 경고 이벤트 메시지 msg:"ICMP Ping test";
sid 룰 식별자 (3000000번 이상 권장) sid:3000001;
rev 룰 버전, 수정될 경우 1씩 증가 rec:1;
priority 우선 순위(값이 작을수록 먼저 매칭, 범위: 1 ~ 10) priority:1;
classtype 스노트 룰 분류 classtype:분류이름;
reference 취약점 참고 배포 URL 정보 reference:이름 http://~;

 

흐름 옵션

명령어 내용
flow 흐름 옵션 명령어
to_server 또는 from_client 클라이언트 -> 서버 패킷 룰 매칭
to_client 또는 from_server 서버 -> 클라이언트 패킷 룰 매칭
established 세션이 연결된 상태의 패킷 룰 매칭
statless 세션 연결 유무와 상관 없이 룰 매칭
flow:to_server,established 클라이언트 -> 서버 세션 연결 패킷 룰 매칭

 

페이로드 탐색 옵션

명령어 내용 예제
content 문자/숫자 탐지 content:"xxx";
content:"
nocase 대소문자 구분 없이 탐지 content: "|16진수 16진수|";
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 응답 상태 메시지 패턴 매칭

 

 

 

Snort Rule 설정

* SQL Injection 공격을 탐지하는 간단한 룰셋 설정

root@Snort:~# ls -l /etc/snort/rules/local.rules

 

/etc/snort/rules/local.rules 파일에 사용자 룰을 입력할 수 있다.

예시는 외부에서 내부로 들어오는 tcp 패킷 중 (대소문자 구분 없이) 1' and '1' = '1' 라는 내용을 포함하는 패킷을 탐지하여 경고를 발생시키고 로그에 기록하는 룰이다.

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

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

 

반응형
Comments