Dior2ky 2020. 1. 28. 21:26
반응형

Snort(스노트)

Snort는 1998SourceFire사의 CTO Martin Roesch에 의해 발표된 오픈소스 침입탐지시스템(IDS)

SnortSnifferand More라는 말에서 유래되었다.

Windows 뿐만 아니라 Ubuntu, Mac OS, Debian, CentOS 등 다양한 OS를 지원하고 있다.

룰을 기반으로한 패턴 매칭을 통해 침입 탐지를 수행한다.

 

기능

Packet sniffer: 네트워크 상의 패킷을 sniffing 하여 보여주는 기능

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

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

 

룰은 다음과 같은 구조를 가지고 있다. 

[액션] [프로토콜] [송신 IP] [송신 Port] [방향] [수신 IP] [수신 Port] ([룰 옵션])

룰 헤더와 룰 옵션으로 구성되어 있고 룰 옵션은 선택사항이지만 룰 옵션을 어떻게 정하느냐에 따라 다양한 패턴 매칭이 가능하기 때문에 룰 옵션을 얼마나 적절하게 사용하느냐가 중요하다고 할 수 있다. 

 

룰 헤더

 - 액션

  alert: 경고를 발생시킨다.

  log: 로그를 기록한다.

  pass: 패킷을 무시한다.

  drop: iptables를 통해 패킷을 차단하고 로그를 기록한다

  sdrop: iptables를 통해 패킷을 차단하고 로그는 남기지 않는다.

  reject: drop과 동일하지만 메세지를 남긴다.

- 송수신 IP, Port

  211.11.22.33 80

  211.11.22.0/24 443

  any 80 , 211.11.22.33 any, any any 처럼 모든경우는 any로 사용 가능하다.

  $HOME_NET 과 같이 snort.conf에서 지정한 변수를 참조할 수 있다.

- 방향

   ->, <>

룰 옵션

 msg: 지정한 메시지가 이벤트 명으로 사용된다

 dsize: size의 상한선, 하한선, 범위를 지정할 수 있다.

 content: 문자, 바이너리로 패턴을 탐지한다

 offset: 검색을 시작할 byte수를 지정한다.

 depth: offset부터 시작하여 검색할 byte수를 지정한다.

 distance: 이전 content 패턴에 매치된 경우, 매치된 이후 바이트부터 몇 바이트 떨어진 위치에서 다음 content를 검사할 것인지 지정한다.

 nocase: 대소문자를 구별하지 않는다.

 flags: TCP 제어 플래그를 지정한다. F, S, FA, FSA 등으로 지정 가능하다.

 pcre: 정규식을 사용한다.

 threshold: 패킷의 발생량을 기반으로 탐지한다.

 

snort 설정파일은 /etc/nsm/templates/snort에 snort.conf 파일로 위치한다.

룰을 정하는 파일은 downloaded.rules, local.rules로

downloaded.rules는 기본으로 제공되는 룰이고 local.rules는 사용자가 정의한 룰이다.

local.rules에 위에 나온 룰 구조에 맞게 작성하면 룰 작성이 끝난다.

룰 작성후 룰이 적용되게 하기 위해서는 sudo rule-updata 명령어를 입력해 적용시켜준다. 

잘못 작성한 경우에는 Fail이 뜨며 오류가 발생한다. 다시 작성하고 update를 해준다. 

반응형