베지밀
Snort Rule 본문
1. Snort
- Snort의 기능
- Sniffer : Snort IDS를 통과하는 모든 패킷 수집
- Preprocessor : 효율적인 공격 탐지를 위해 각종 플러그인 등을 통해 매칭 여부를 확인
- 탐지 엔진 : 룰 기반 탐지 엔진을 통해 사전에 정의된 탐지 룰과 매칭 확인
- Logging : 매칭된 패킷은 사전에 정의된 정책에 따라 로그를 남김
2. Snort Rule 구조

- Snort rule은 헤더와 옵션 구조로 이루어져 있다.

- 룰 헤더 = RTN(Root Tree Node)
- 1차적인 정책 설정
- 룰 옵션 = OTN(Option Tree Node)
- 실제로 악의적인 내용의 패킷을 탐지 → 탐지 정확도를 향상
- 룰 헤더 = RTN(Root Tree Node)
3. Rule Header
- 전체적인 구조
- Action : 탐지 후 행동들
- alert : 로그를 남기고(log) 경고를 발생시킴
- log : 로그 기록
- pass : 패킷 무시. 특정 프로토콜이나 포트를 허용하고자 할 때 사용
- active : alert 발생시키고 대응하는 Dynamic 유효화
- reject : 패킷을 차단하고 기록한 후 TCP = TCP Reset/UDP = ICMP Port Unreachable 메시지 전송
- dynamic : 이벤트가 발생할 때마다 Snort 규칙을 동적으로 생성. 매우 유연한 규칙 생성 가능
- drop : 패킷 차단하고 기록
- sdrop : 기록 없이 패킷 차단
- Protocol : 탐지할 프로토콜 종류 (소문자로 작성)
- TCP
- UDP
- ICMP
- IP
- any : 모든 프로토콜 탐지
- 송신 IP / 송신 Port
- any : 모든 포트
- ! : 부정연산자로, 해당 IP나 포트 제외한 주소 매칭
- 포트번호 : 특정 포트
- 포트번호:포트번호 : 포트번호~포트번호
- :포트번호 : 포트번호 이하 모든 포트
- 포트번호: : 포트번호 이상 모든 포트
- Direction
- → : 출발지 → 목적지 패킷 탐지
- <> : 양방향 모든 패킷 탐지
4. Rule Body
- 특징
- 모든 옵션을 세미콜론( ; )으로 구분하고, 규칙 옵션은 콜론( : )으로 keyword와 value를 구분한다.
- 크게 일반 옵션, Payload, HTTP 옵션, 흐름 옵션으로 구분한다.
- 대표적인 옵션
- msg : Snort 규칙이 탐지될 경우 출력하는 메시지
- msg:"test";
- sid : Snort Rule 식별자. 각 이벤트를 구분하는데 사용하며 규칙의 관리와 유지 보수에 용이함
- sid: 1000001;
- content : 패킷 데이터에서 매칭할 문자열 지정
- content: "xxx"
- nocase : content 뒤에 작성하며, 대소문자를 구별하지 않음
- content: "abc";nocase;
- ABC, abc, AbC, aBC 등 모두 검사
- content: "abc";nocase;
- offset : content와 함께 사용하며, 매칭을 시작할 문자열의 위치 지정
- offset:3; = 4byte부터 탐색 시작
- depth : content에서 매칭을 시도할 문자열의 종료 바이트 위치 지정
- distance : 이전 content에서 매칭되고 다음 content 매칭을 시작할 바이트 위치 지정
- content: "abc"; content: "test"; distance: 5;
- abc 문자열 매칭 지점 기준으로 5byte 이후 test 문자열 탐색
- content: "abc"; content: "test"; distance: 5;
- within : 이전 content에서 매칭되고 다음 content 매칭을 종료할 바이트 위치 지정
- content: "abc"; content: "test"; within: 5;
- abc 문자열 매칭 지점 기준으로 5byte 이내 test 문자열 탐색
- content: "abc"; content: "test"; within: 5;
- msg : Snort 규칙이 탐지될 경우 출력하는 메시지
참고 자료
