[보안] Snort 로 침입탐지 시스템 구축하기 -아랑
Snort 로 침입탐지 시스템 구축하기
작성자 : 서진우 (alang at
sysmng.com)
Snort 는 network에서 실시간 traffic 분석과 packet logging 을 뛰어나게
수행하는 네트워크 침입탐지 시스템 (NIDS) 프로그램이다.
sonrt 는 프로토콜 분석과 packet 내용 조사, 패턴 매칭이 가능하며, 버퍼
오버플로우나 스텔스 포토스캔,CGI 공격,SMB 탐지 등 다양한 공격과 침입
을 탐지하는데 사용할수 있다. 또한 변화되는 공격,침입 을 탐지하기 위해
modular plugin 구조를 가지고 있어 칩입 rule 만 추가해주면 바로 탐지가
가능하며 syslog 혹은 사용자가 지정하는 특정파일로 로그를 만들수 있고
Unix socket 이나 sambaclient 를 이용하여 window popup 메세지와 같이
real time 경보가 가능하다.
snort 는 크게 3가지 중요 기능을 가지고 있다.
첫째로 tcpdump 와 같은 packet sniffer 로 바로 사용이 가능하다. 그리고
traffic debugging 에 유용한 packet logger 기능이 있고 마지막으로 네트
워크 칩입 탐지 시스템(NIDS) 기능을 갖고 있다. 이문서에서는 Snort 설치
와 운영방법에 대해 간단히 정리하도록 하겠다.
1. Snort 설치
Snort 를 설치하기 전에 시스템에 먼저 libpcap 가 미리 설치 되어져 있어
야 한다. rpm -q libpcap 로 확인하고 없다고 하면 다운 받은뒤 설치 하도
록 하자.
[ libpcap install ]
ftp://ftp.ee.lbl.gov/libpcap.tar.Z
http://www.tcpdump.org/release/libpcap-0.6.2.tar.gz
# tar xzvf libpcap-0.6.2.tar.gz
# cd libpcap-X.X.X
# ./configure
# make
# make install
# make install-incl
# make install-man
[ Snort install ]
http://www.snort.org
# tar xzvf snort-x.x.tar.gz
# mv snort-x.x snort
# cd snort
# ./configure
# make
# make install
이제 snort 설치가 무사히 완료 되었으면 snort source 를 풀어 놓은곳에
snort.conf 라는 설정 파일이 있다. Snort 는 이 snort.conf 설정 파일
하나로 모든 설정이 끝난다. 또한 source 디렉토리에는 여러가지 rule 파
일들이 있다. 이제 설정파일을 살펴 보도록 하자.
설정파일은 다음과 같은 순서로 되어져 있다.
1) Set the network variables for your network
2) Configure preprocessors
3) Configure output plugins
4) Customize your rule set
먼저 칩입탐지를 감시할 네트워크 환경을 지정해 준다. 그런뒤 프로프로
세서 설정을 하고 출력 플러그인 설정후 마지막으로 침입패턴을 정의하는
rule set 설정을 하면 된다. 하나 하나 살펴 보자.
1. Set the network variables for your network config
설정 형식은 다음과 같다.
————————–
var <name> <values>
————————–
이 설정은 침입 탐지를 감시할 네트워크 범위를 지정해 준다. 물런 같은
네트워크 대역에 있어야 한다.
var HOME_NET xxx.xxx.xxx.0/24
이와 같이 설정하면 침입탐지 감시대역을 xxx.xxx.xxx.1 ~xxx.xxx.xxx.254
을 정의 하는 것이다. 네트워크대역을 xxx.xxx.xxx.xxx/CIDR block 형식
으로 표기 한다. 다시 말해서 CIDR 이 8 이면 A class, 16 이면 B class,
24 이면 C class, 32 이면 하나의 host 를 의미하는 것이다.
2. Configure preprocessors
프로프로세서 설정은 사용자가 snort 에 지원되는 여러가지 plugin 를
쉽게 사용할수 있도록 한다.
설정 형식은 다음과 같다.
———————————————————-
preprocessor <name_of_processor>: <configuration_options>
———————————————————-
preprocessor 로는 다음과 같다.
Minfrag
——-
minfrag 는 아주 작게 조각난 패킷을 탐지하는 역활을 한다.
공격자는 침입탐지 툴을 피하기 위해서 패킷을 잘게 잘게 쪼게서 보내기
도 하는데 이렇게 되면 조각난 패킷에 대해 패턴검사를 하기 때문에 정확
한 검사를 할수 없다. 그러므로 몇 바이트 미만의 패킷이 들어오면 경고
를 해주게 된다.
사용방법 : preprocessor minfrag:128 //128byte 이하의 패킷은 경고.
Defrag
——
defrag preprocessor 는 조각된 패킷을 경고하는 minfrag 와는 달리 이
를 감지 하고 IP 패킷을 재조합 한다. minfrag 보다는 강력한 탐지를 할수
있다. 하지만 이를 사용할 경우 시스템에 많은 부하가 걸려 전송량이 많
은 네트웍에서는 주의를 해야 할것이다.
사용방법 : preprocessor defrag // 옵션 없음
Stream
——
stream 은 TCP stream 을 재조합하여 탐지율을 높인다. 하지만 이것역시
많은 시스템 부하를 일으키게 된다. 텔넷이나 ftp, web 정도의 서비스를
하는 port 정도를 조합하면 좋을거 같다.
그리고 stream 을 사용할때 주의할점이 하나 있다. 설정 위치 인데…
stream preprocessor 는 반드시 defrag 뒤에 , http_decode 보다는 앞에
설정이 되어 있어야 한다.
사용방법 : preprocessor stream2: timeout 10, ports 21 23, maxbytes 16384
timeout : 초단위로 패킷이 없을때 stream 을 얼마간 계속할것인지 결정
port : 조합할 패킷이 들어 오는 port
maxbytes 는 패킷을 재조합할 최대 크기를 말한다.
HTTP Decode
————
http_decode 는 HTTP URL 문자열이 알아보지 못하게 되있는 경우 그것을
snort 엔진에서 알아볼수 있는 문자열로 변환.
사용방법 : preprocessor http_decode: 80 -unicode -cginull
Portscan
———
Portscan 공격을 탐지하고 로그를 남기게 된다.
사용방법: preprocessor portscan: $HOME_NET 4 3 portscan.log
Portscan Ignorehosts
———————
portscan detector 가 작동하지 않아야 할 IP 리스트를 지정할수 있다.
사용방법: portscan-ignorehosts: <host list>
3. Config output plugins
패킷 감시 결과를 출력할때 사용되는 plugins 을 지정하는 것이다.
각 plugin 마다..출력하는 각각의 출력형태를 가지고 있기에 어떤식으로
출력을 할것인지를 이곳에서 결정하면 된다.
사용되는 plugin module 종류는 다음과 같다.
Alert_syslog : alert 를 syslog 로 보내 버린다.
Alert_fast : alert 로그를 남길때 output file 이 한라인으로 남기기
때문에 무척 빠르다.
Alert_full : alert 로그를 남길때 output file 에 모든 로그를 남기기
때문에 상당히 느리다.
Alert_smb : alert 를 줄때 WinPopup 형식으로 netbios 를 사용하는 원격
머신에 경고를 날려 준다.
Alert_unixsock : Unix domain socket을 설치해서 이곳으로 alert를 준다.
log_tcpdump : log packets 를 tcpdump 형태로 바꾸어 outfile 을 남긴다.
database : snort 의 data 를 mysql,postgresql 등으로 저장한다.
Alert_smb : alert 를 줄때 WinPopup 형식으로 netbios 를 사용하는 원격
머신에 경고를 날려 준다.
Alert_unixsock : Unix domain socket을 설치해서 이곳으로 alert를 준다.
log_tcpdump : log packets 를 tcpdump 형태로 바꾸어 outfile 을 남긴다.
database : snort 의 data 를 mysql,postgresql 등으로 저장한다.
4. Rule set config
Snort Rule set 설정파일을 snort.conf 파일에서 include 를 이용해서
가져 온다.
include xxxxxxx.rules
주의 할점은 c 언어와 같이 include 문 마지막에 ; 를 사용하지 않는다.
마지막으로 실행을 해보도록 하자.
./snort -c /etc/snort/snort.conf -l /var/log/snort -i eth0 -D
정도로 해주면 된다.
./snort -v : sniffer mode
-v 옵션을 사용하면 입출력하는 모든 패킷을 볼수 있다.
2 Responses
… [Trackback]
[…] Find More to that Topic: nblog.syszone.co.kr/archives/431 […]
… [Trackback]
[…] Here you can find 4768 more Information on that Topic: nblog.syszone.co.kr/archives/431 […]