본문 바로가기
카테고리 없음

스노트 구문

by 할 수 있다 ! 2024. 10. 5.

안녕하세요 ! 

 

이번 게시글은 스노트 구문에 대해서 글을 써보려고 합니다. 

 

바로 글을 써보도록 하겠습니다. 

 

 

액션의 종류

Action 설명
alert 선택한 alert 방식을 이용해서 alert를 발생시키고 패킷을 로그에 남긴다.
log 패킷을 로그에 남긴다.
pass 패킷을 무시한다.
activate alert를 발생시키고 대응하는 dynamic rule 을 활성화한다.
dynamic activate rule 에 의해 활성화 되며 log rule 과 동일하게 작동한다.
drop 패킷을 차단하고 로그를 남긴다.
rejction 패킷을 차단하고 로그를 남긴 후 TCP일 경우 TCP Reset 전송, UDP 일 경우 ICMP Port Unreachable 전송한다.
sdrop 패킷을 차단하지만 로그를 남기지 않는다.

 

Protocols : 탐지할 프로토코콜을 나타낸다. 총 4가지 프로토콜을 지원한다. ( TCP, UDP, ICMP, IP )

 

IP Address : 출발지 / 목적지 IP 

 

* Snort conf 에 정의되어있는 IP 변수 

 

- $ EXTERNAL_NET : 외부 IP 변수 

 

- $ HOME _ NET : 내부 IP 변수 

 

- $HTTP_SERVERS : 웹 서버 IP 변수 

 

- $ DNS _ SERVERS : DNS 서버 IP 변수 

 

- $SMTP_SERVERS : SMTP 메일 서버 IP 변수 

 

- $SSH _ SERVERS : SSH 프로토콜을 사용하는 장비 IP 변수 

 

 

Port Numbers : 출발지 / 목적지 Port 

 

EX 1) 1 : 1023 : 1부터 1023 사이의 포트 

 

EX 2) 1023 : 1023 이하의 포트 ( 1023 포함 ) 

 

EX 3) 1 : 1이상의 포트 ( 1포함 ) 

 

EX 4 ) [1, 2, 3, 4] : 1, 2, 3, 4 포트 

 

EX 5 ) any 

 

 

Direction Operator : 방향 지시자 

 

-> 단방향 

 

< > 양방향 

 

 

룰 바디 : 기본 옵션 

 

옵션 설명
msg msg 옵션에 기록된 내용이 alert 발생 시 이벤트 이름으로 사용된다.
reference rule과 관련된 외부 취약점 정보 참조 시 사용한다.
sid snort rule id로 사용되는 범위는 다음과 같음

99 이하 : 시스템 예약 sid

100 ~ 1000000 : snort에서 배포하는 룰셋에 사용되는 sid
classtype snort는 사용자가 어떤 유형의 공격인지 쉽게 이해하고 우선순위를 결정할 수 있도록 공격 유형이랑 기본 우선순위(위험도)를 정의해둠 · 우선순위 : 1(높음), 2(중간), 3(낮음)
priority ule의 우선순위(위험도)를 숫자로 표기 · priority를 지정 시 classtype의 기본 우선순위(위험도)를 덮어쓸 수 있음
rev rule 버전번호로 수정(revision) 횟수를 표기한다. · 수정 시 1씩 증가시켜주어야함

 

 

룰 바디 : 페이로드 / 범위 관련 옵션 

옵션 설명 
content  페이로드에서 검사할 문자열을 지정한다. 

content 는 text 형식일 수도 있다. 바이너리 형식일 수도 있고 2개가 복합된 형식일 수 있다. 

text 형식 : content "pattern", 해당 pattern 검사 

binary 형식 :content "|FF FF|", 파이프 기호 사이에 헥사값으로 표현한다. 

! 사용 : ! 문자는 부정연산자임 content !"pattern", 해당 pattern 문자열이 없는지 검사한다. 

\ " 3가지 특수문자는 escape 처리해서 사용한다. " 

uriconternt  content 문자열을 전체 패킷과 비교하는 대신 HTTP 클라이언트 요청 URI 정보를 검사할 문자열을 지정하였다. 

offset 페이로드에서 CONTENT 패턴을 검사할 시작 위치 

페이로드의 첫 번쨰 바이트 위치가 0부터 시작한다. 

depth offset 부터 몇 바이트까지 검사할 것인지를 지정한다. 
distance  이전 content 패턴에 매치된 경우 매치된 이후 바이트로부터 몇 바이트 떨어진 위치에서 다음 content 를 검사할 것인지를 지정한다. 
within  이전 content 패턴에 매치된 경우 distance 부터 몇 바이트 범위 내에서 다음 content 를 검사할 것인지를 지정한다.
nocase 대소문자를 구분하지 않는다. 
pcre  스노트는 펄 호환 정규표현식인 PCRE를 지원한다.

 

 

 

룰 바디 : 페이로드 HTTP 관련 옵션 

http_method HTTP 요청 메서드를 탐지하는 옵션입니다. GET, POST, PUT 등 특정 HTTP 메서드를 탐지할 수 있습니다.

 

http_uri HTTP 요청 URI를 필터링하는 옵션입니다. 클라이언트가 요청한 URL 경로를 탐지할 때 사용됩니다.
http_client_body HTTP 요청의 본문 데이터를 필터링하는 옵션입니다. 주로 POST 요청의 페이로드를 분석할 때 사용됩니다.
http_cookie HTTP 쿠키 값을 탐지하는 옵션입니다. 쿠키 값을 기반으로 HTTP 트래픽을 탐지할 수 있습니다.
http_raw_uri HTTP URI의 인코딩되지 않은(raw) 값을 기반으로 탐지하는 옵션입니다.
http_header HTTP 헤더 정보를 탐지하는 옵션입니다. 주로 User-Agent나 Host 등의 헤더 값을 분석할 때 사용됩니다.
http_stat_code HTTP 응답 상태 코드를 필터링하는 옵션입니다. 예: 200, 404 등 특정 응답 코드를 탐지할 수 있습니다.
http_stat_msg HTTP 응답 상태 메시지를 필터링하는 옵션입니다. 예: OK, Not Found 등의 메시지를 탐지할 수 있습니다.
http_raw_header 인코딩되지 않은(raw) HTTP 헤더 값을 분석할 때 사용하는 옵션입니다.
http_user_agent HTTP 요청의 User-Agent 헤더 값을 기반으로 특정 브라우저나 클라이언트 트래픽을 탐지할 수 있습니다.

 

 

 

예시

 

alert tcp any any -> 192.168.1.0/24 80 (msg:"Possible Web Exploit"; content:"GET"; http_method; sid:1000001; rev:1;)

 

 

구문 분석

  • alert: 룰의 동작을 정의합니다. 이 예시에서는 'alert'로 설정되어 있어 탐지된 이벤트가 경고로 표시됩니다.
  • tcp: 이 룰이 TCP 프로토콜에 적용된다는 의미입니다. 다른 프로토콜로는 UDP, ICMP 등이 있을 수 있습니다.
  • any any: 트래픽의 출발지 IP와 포트를 의미합니다. 여기서는 출발지 IP와 포트에 대해 'any'(모든 것)를 지정한 것입니다.
  • ->: 트래픽의 방향을 나타냅니다. 이 룰은 출발지에서 목적지로 가는 트래픽을 탐지합니다.
  • 192.168.1.0/24 80: 목적지 IP와 포트를 의미합니다. 이 경우, 목적지 IP는 192.168.1.0/24 서브넷 범위, 포트는 80번(HTTP)입니다.
  • (msg:"Possible Web Exploit": 탐지될 경우 경고 메시지로 표시될 텍스트입니다. 이 메시지는 로그에서 확인할 수 있습니다.
  • content:"GET": 탐지할 트래픽 내용입니다. 여기서는 HTTP 요청에서 "GET" 문자열을 찾습니다.
  • http_method: HTTP 메소드(GET, POST 등)를 탐지하는 옵션입니다.
  • sid:1000001: 룰의 고유 식별자입니다. 사용자가 직접 설정할 수 있으며, 충돌을 방지하기 위해 유일해야 합니다.
  • rev:1: 룰의 버전을 의미합니다. 이 룰이 업데이트될 경우 이 값을 증가시켜 관리할 수 있습니다.

주요 옵션 설명

  • msg: 룰이 탐지되었을 때 표시되는 메시지입니다.
  • content: 특정 패턴이 포함된 트래픽을 탐지하는 옵션으로, 문자열이나 바이트 패턴을 사용할 수 있습니다.
  • sid: Snort 룰의 고유한 식별자입니다. 커스텀 룰을 만들 때는 1000000 이상의 값을 사용합니다.
  • rev: 룰의 버전 관리용 필드입니다. 같은 룰에 대해 업데이트가 있을 때마다 증가시킵니다.
  • http_method: HTTP 요청에서 메소드를 필터링할 때 사용합니다.