베지밀

Snort Rule 본문

Network/IPS

Snort Rule

vegimil 2025. 8. 21. 17:33

1. Snort

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

 

2. Snort Rule 구조

  1. Snort rule은 헤더와 옵션 구조로 이루어져 있다.
    1. 룰 헤더 = RTN(Root Tree Node)
      1. 1차적인 정책 설정
    2. 룰 옵션 = OTN(Option Tree Node)
      1. 실제로 악의적인 내용의 패킷을 탐지 → 탐지 정확도를 향상

 

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 등 모두 검사
    • offset : content와 함께 사용하며, 매칭을 시작할 문자열의 위치 지정
      • offset:3; = 4byte부터 탐색 시작
    • depth : content에서 매칭을 시도할 문자열의 종료 바이트 위치 지정
    • distance : 이전 content에서 매칭되고 다음 content 매칭을 시작할 바이트 위치 지정
      • content: "abc"; content: "test"; distance: 5;
        • abc 문자열 매칭 지점 기준으로 5byte 이후 test 문자열 탐색
    • within : 이전 content에서 매칭되고 다음 content 매칭을 종료할 바이트 위치 지정
      • content: "abc"; content: "test"; within: 5;
        • abc 문자열 매칭 지점 기준으로 5byte 이내 test 문자열 탐색

 

 

 

참고 자료

https://maker5587.tistory.com/24

https://net123.tistory.com/579