16. Snort

SJH·2024년 6월 23일
0

Snort란?

  • Snort는 오픈 소스 기반의 네트워크 침입 탐지 시스템(IDS)
  • 1998년 SourceFire사의 CTO Martin Roesch에 의해 개발
  • 현재 가장 널리 사용되고 있는 IDS 시스템

Snort의 기능

  • Packet Sniffer: 네트워크 상의 패킷을 스니핑하여 보여주는 기능
    (*스니핑 : 네트워크 상에서 자신이 아닌 다른 상대방들의 패킷 교환을 엿듣는 행위)

  • Packet Logger: 모니터링한 패킷을 저장하고 로그에 남기는 기능

  • IDS/IPS: 네트워크 트래픽을 분석해 공격을 탐지/차단하는 기능

Snort의 동작 구조

  1. Sniffer
    : Snort IDS를 통과한 패킷을 수집

  2. Preprocessor
    : 효율적인 공격 탐지를 위해 Plug-in 을 먼저 거쳐 매칭을 확인

  3. Detection Engine
    : Snort Rule과 매칭이 되는지 확인

  4. Alert / Log
    : Snort Rule 매칭 결과에 따라 경고나 로그 등 출력

Snort Rule

Snort Rule은 Rule Header와 Rule Option으로 나뉘어짐.

Rule Header

  • 모든 Snort Rule은 트래픽을 필터링하는 데 도움이 되는 Rule Header로 시작
  • Actions / Protocol / IP addresses / Ports / Direction Operator

Rule Option

  • Rule Option은 지정된 패킷을 대상으로 전달해야 하는지, 혹은 해당 패킷의 트랙에서 중지해야 하는지를 결정하는 역할
  • 옵션 종류 : general / payload / HTTP

Snort Rule Header

1.1 Action

  • alert : 현재 패킷에 경고 생성
  • block : 현재 패킷과 모든 후속 패킷 차단
  • drop : 현재 패킷 삭제 및 차단 (로그 기록 o)
  • sdrop : 현재 패킷 삭제 및 차단 (로그 기록 x)
  • log : 현재 패킷을 기록
  • pass : 현재 패킷을 통과된 것으로 표시, 패킷에 대한 후속 평가 중지

패킷탐지에 대한 응답으로 “active responses”가 존재

  • react : 클라이언트에게 응답 전송 후 세션 종료
  • reject:세션 종료 (TCP Protocol 의 경우 TCP Reset / UDP Protocol 의 경우 ICMP Port Unreachable)
  • rewrite : ”replaces" 옵션을 기반으로 패킷 내용 덮어쓰기 활성화

1.2 Protocol

  • TCP : TCP 프로토콜 탐지
  • UDP : UDP 프로토콜 탐지
  • ICMP : ICMP 프로토콜 탐지
  • IP : IP 프로토콜 탐지
  • Any : 모든 프로토콜 탐지

1.3 IP주소

  • any : 모든 IP 주소
  • 000.000.0.0 : 일반적인 IP 주소
  • !000.000.0.0 : 해당 IP를 제외한 모든 IP 주소
  • [000.000.0.0, 000.000.0.0] : IP 주소 리스트는 대괄호로 묶고 쉼표로 구분

1.4 포트번호

  • any : 모든 포트 번호
  • 00 : 특정 포트 번호
  • !00 : 해당 포트 번호를 제외한 모든 포트 번호
  • 범위 연산자 사용 : 1:1024(1~1024), 500:(500~), :500(~500)
  • [1:1024, 4444, 5555] : 포트 번호 리스트는 대괄호로 묶고 쉼표로 구분

1.5 방향 연산자

-> : 흔하게 사용되는 방향 연산자.
출발지 - 왼쪽의 IP 주소와 포트 번호
목적지 - 오른쪽의 IP 주소와 포트 번호

<> : 양방향 연산자.
두 개의 IP 주소 및 포트 쌍을 출발지 또는 목적지로 설정

Snort Rule Option

일반 옵션 (General Rule Options)

  • msg : 규칙을 설명하는 메시지를 추가하는 데 사용
    Ex) msg : "Malicious file download attempt";

  • reference : 취약점에 참고가 되는 정보를 연결
    Ex)
    reference : url,www.example.com;
    reference : cve,2020-1234; (취약점 진단 연도 - 식별번호)

  • sid : 규칙을 구분하는 식별자. 모든 규칙은 식별 번호를 가짐
    Ex)
    sid : 0 ~ 999999 : 이미 예약된 식별자
    sid : 1000000 ~ : 사용 가능한 식별자

  • rev : 해당 규칙에 대한 버전. 수정할 때마다 숫자를 1씩 증가
    Ex) sid : 1000001; rev:1;

  • classtype: Snort 규칙을 분류하는 옵션
    Ex) classtype : <분류명>;

  • priority : 우선 순위를 숫자로 지정 (높음 1 ~ 낮음 10)
    Ex) priority : 1;

페이로드 (Payload Detection Rule Options)

  • content : 탐지할 패턴을 설정하는 옵션
    Ex) content : ”abc” => abc 문자열을 탐지

  • nocase : content 옵션 뒤에 작성하며, content 문자열을 대소문자 구분없이 탐지
    Ex) content : "abc";nocase => Abc,ABC,aBc,abC 모두 탐지

  • offset : 매칭을 시작할 문자열의 위치를 지정하는 옵션
    Ex) offset : 3; => 4byte부터 탐색 시작

  • depth : 패킷 데이터에서 찾을 내용의 범위를 지정하는 옵션
    Ex) depth : 5; => 5로 지정하면 처음부터 5바이트까지 문자열 탐색

  • distance : 이전 content 설정 값 매칭 탐색할 위치를 지정
    Ex) content:"abc";nocase;content:"test";distance:32; => abc가 매칭된 위치에서 32바이트 이후에 test 문자열을 탐색 시작

  • within : 이전 content 설정 값 매칭 후 매칭을 끝낼 상대 위치를 지정
    Ex) content:"abc";nocase;content:"test";within:10; => abc가 매칭된 위치에서 10바이트 이내에 test 문자열이 존재하는지 탐색

HTTP (HTTP Specific Options)

  • http_method : 패킷 페이로드 중 HTTP 메소드 영역에서 content 옵션 값을 매칭하는 옵션
    (메소드 : GET, POST, PUT, HEAD, DELETE, TRACE 등)

  • http_uri : 패킷 페이로드 중 URI 영역을 탐색하는 옵션

  • http_cookie : http 쿠키 값을 탐색하는 옵션

  • http_header : HTTP 요청, 응답 헤더 값을 탐색하는 옵션

  • http_client_body : HTTP 바디 영역을 탐색하는 옵션

  • http_stat_code : HTTP 응답 메시지에서 상태 코드 영역을 탐색하는 옵션

  • http_stat_msg : HTTP 응답 메시지에서 상태 메세지 영역을 탐색하는 옵션

보완점

Snort의 정의보단 Snort Rule Signature를 통해서 Rule Header, Rule Option을 어떤 식으로 지정을 해서 탐지패턴을 만드는지가 더 중요

탐지방법에는 두가지가 존재

  • 비정상 행위 기반 : 그동안 분석한 내용을 기반으로 임계값을 지정해서 임계값보다 높으면 공격, 낮으면 정상으로 간주하는 방법
  • 지식 기반 : 실제로 탐지패턴을 만들어서 그 기반으로 탐지가 되도록 하는 방법

Rule Header만 사용해서 탐지패턴을 만들 수 있지만 Rule Option을 최대한 상세하게 지정해야 정탐율이 올라감

Rule Header의 Action에서 실제로 사용되는 키워드는 alert (실시간 탐지에 대한 기능)

양방향 연산자 <>을 사용하는 경우는 특정 IP에 대한 모니터링을 수행할 때 사용

msg : 탐지패턴에 이름을 지정하는 역할
sid : 각각의 탐지패턴마다 겹치지 않도록 번호를 지정

악성코드만의 특정한 동작에 대한 키워드에 해당하는 문자열을 가져와서 content 값에다가 지정
=> content에 대한 부분은 탐지패턴을 어떤식으로 만들어놨는지 사례들과 탐지패턴을 만들었을때 어떤식으로 해석을 하는지 구글링을 통해 더 찾아보기

profile
보안, 클라우드 공부정리 블로그

0개의 댓글