Snort
Snort(스노트)
Snort는 1998년 SourceFire사의 CTO Martin Roesch에 의해 발표된 오픈소스 침입탐지시스템(IDS)
Snort는 Snifferand 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를 해준다.