2013년 11월 26일 화요일

Snort 설치 및 세팅

작성자 : 굼벵이( linuxis@linux.co.kr )
사이트 : http://chtla.com (초심으로..) linux community


Snort는 네트워크 칩입 탐지 시스템으로 실시간 트래픽 분석과, IP 네트워크에서의 패킷 처리작업을 처리하는 데몬이다.
그리고 프로토콜 분석, 컨텐츠 검색/조합 작업을 할 수 있으며, buffer overflows, stealth port scans, CGI attacks, SMB probes, OS fingerprinting attempts과 같은 다양한 공격을 감지할 수도 있다.
또한 Snort는 유연한 language의 사용으로 traffic을 분석하며 모듈화된 탐지 엔진을 지원하고 실시간 경고 기능도 지원하는등
다양하고 복잡한 침입 탐지가 가능하다..
(그런 만큼 설정등 사용이 복잡해 진다..)

단점 :
TCP 스트림 재조합(reassembly)을 지원하지 않습니다. 따라서 모든 시그너쳐 분석은 패킷 단위로 행해 집니다. whisker 등의 툴들은 이러한 분석법을 우회할 수 있는 메카니즘을 갖고 있습니다.
TCP 스트림을 재조합하면 패킷 분석 효율이 떨어지게 됩니다. 효율 저하를 최소화 하면서 TCP 스트림을 재조합하고 분석하는 것은 힘든 작업입니다.

IP 조각 패킷(fragmented packet)에 대해서 재조합을 할 수 없습니다. 대신 minfrag라는 룰 옵션을 사용하여 패킷 조각의 최소 크기를 지정할 수 있습니다. 사용 네트워크 장비 중에 256byte 이하 크기의 패킷을 조각화(fragmentation)하는 경우는 없으므로 minfrag를 이 값, 256으로 지정하면 충분히 공격을 잡아 낼 수 있다고 합니다. 하지만 여전히 단점에 속합니다.

로그 기능이 약합니다. 제대로 세세한 내용의 로그를 생성해 내기는 하지만 누구나 그러한 로그를 보고 상황을 파악하기에는 로그 시스템이 너무 약하다는 느낌이 있습니다


다운 : http://www.snort.org 초신 버전 다운 (현재 최신 버전 snort-1.8.7)
참조 사이트 : http://www.certcc.or.kr/tools/Snort.html

[ root@kan up]# rpm -qa|grep libpcap
libpcap-0.6.2-12
[ root@kan up]# cd /home/kan/
[ root@kan up]# tar xvfz snort-1.8.7.tar.gz
[ root@kan snort-1.8.7]# ./configure
[ root@kan snort-1.8.7]# make
[ root@kan snort-1.8.7]# make install


============================================

snort 1.9.1

[ root@dream snort-1.9.1]# rpm -qa|grep libcap
libcap-1.10-12
libcapplet0-1.4.0.1-9
libcap-devel-1.10-12

[ root@dream snort-1.9.1]# ./configure
..
checking for pcap_datalink in -lpcap... no

ERROR! Libpcap library/headers not found, go get it from
http://www.tcpdump.org/
or use the --with-libpcap-* options, if you have it installed
in unusual place

이런 메세지와 함께 configure에 에러 발생함..

http://www.tcpdump.org/
libpcap-0.7.2.tar.gz 을 다운받음..
tar 해제후
# ./configure
# make
# make install
로 먼저 설치를 한다..

이번엔 libpcap을 rpmfind.net에서 libpcap-0.6.2-16.i386.rpm 을 다운받아 rpm으로 설치한다.

[ root@dream rpm]# rpm -Uvh libpcap-0.6.2-16.i386.rpm
########################################### [100%]
1:libpcap ########################################### [100%]

[ root@dream snort-1.9.1]# ./configure
[ root@dream snort-1.9.1]# make
[ root@dream snort-1.9.1]# make install

/usr/local/bin/snort
/usr/local/man/man8/snort.8
이 생성됨..

[ root@dream kan]# mv snort-1.9.1 /usr/local
[ root@dream kan]# cd /usr/local/snort-1.9.1
[ root@dream snort-1.9.1]# mkdir /var/log/snort <== log를 기록할 디렉토리
[ root@dream snort-1.9.1]# vi etc/snort.conf

var HOME_NET 211.xx.xx.xxx/32 <=======================

===================================
your_ip: snort 로 공격당하는 것을 감시할 IP 주소
subnet: 서브넷 마스크를 설정하여 네트워크를 감시
your_ip/subnet으로 주소를 지정하는 방법은 다음과 같습니다.

호스트 이름을 사용할 수 없고, 호스트나 네트워크를 지정하기 위해서 IP 주소와 서브넷마스크로 표현합니다.
서브넷마스크는 CIDR 블럭을 사용해서 지정합니다. CIDR 블럭은 서브넷마스크를 숫자로 표현한것으로 주소부분의 비트수를 사용합니다. 예를 들어 C class 네트워크는 /24로 B 클래스(class) 네트워크는 /16으로 ,A 클래스 네트워크는 /8로 호스트를 지정하기 위해서는 /32를 사용합니다.
주소 지정에서 주소 지정한 부분 앞에 !를 사용하면 그 주소를 제외한 네트워크나 호스트를 의미하게 됩니다.

예를 들어 !192.1.1.0/24 는 192.1.1.0 C 클래스 네트워크를 제외한 네트워크를 의미하게 됩니다.
특별히 any 는 모든 IP 공간을 지정할 때 사용됩니다.
예) 10.1.1.1 호스트에 대한 공격을 모두 감지합니다.
var HOME_NET 10.1.1.1/32
====================================

var EXTERNAL_NET !$HOME_NET <== home_net을 제외한 모든 네트워크의 호스트

preprocessor portscan: $HOME_NET 4 3 /var/log/snort/portscan.log
<== 주석제거후 저장될 경로를 적어줌..
4 3 는 4개이상의 커넥션이 3초도안 발생하면 포트 스캐닝으로 취급하게되는 의미임..

var DNS_SERVERS [211.xx.xx.xxx,16.81.63.1,168.126.63.1] <== dns서버

preprocessor portscan-ignorehosts: $DNS_SERVERS <== 포트스캔시 제외될 아이피들

[ root@dream log]# snort -D -d -l /var/log/snort -c /usr/local/snort-1.9.1/etc/snort.conf
<== snort 실행..

-D : snort 를 데몬모드로 실행시킴
-d : 애플리케이션 레이어를 덤프시킴
-l : 지정된 디렉토리에 로그 데이타를 저장한다.
-c : 지정된 파일을 룰 파일로 사용한다.

실행후 /var/log/snort를 보면 alert와 portscan.log 파일이 생성된 것을 볼수 있다.

[ root@dream etc]# vi /etc/rc.d/rc.local <== 부팅시 실행을 위해서..
# snort 1.9.1
snort -D -d -l /var/log/snort -c /usr/local/snort-1.9.1/etc/snort.conf


옵션들 =========================================

USAGE: snort [-options] <filter options>

Options:
-A 얼럿 모드를 fast,full,none 중의 하나로 지정합니다.
unsock 을 지정하면 UNIX 소켓을 사용하여 로깅을 한다(아직 시험적이라고 한다).

-a ARP 패킷을 프린트합니다.
-b 패킷을 tcpdump 파일로 저장합니다. 바이너리 포맷이므로 저장 속도가 빨라집니다.
-c <rules> :<rules>로 지정된 파일을 룰 파일로 사용합니다.
-C : 패킷의 사용자 데이타 부분(payload)를 문자만 프린트합니다. 헥스 형태로는 프린트하지 않습니다.

-D : snort를 데몬 모드로 돌립니다. 바로 백그라운드로 들어가고 터미널을 종료해도 계속 돌게 됩니다.

-F <bpf> BPF 필터링식을 <bpf>로 지정된 화일에서 읽어 옵니다.
BPF 필터링식은 tcpdump에서 원하는 패킷 만을 덤프하기 위해서 사용되는 식입니다.

-g <gname> snort의 gid를 <gname>으로 그룹으로 설정합니다.
-h <hn> 홈네트워크 변수 HOME_NET를 <hn>의 값으로 세팅합니다.
-i <if> : <if>로 지정된 네트워크 인터페이스를 모니터링합니다. <if> 값으로 eth0,eth1 등이 올 수 있습니다.

-I : 얼럿 결과물에 네트워크 인터페이스 이름을 붙인다.
-l <ld> : <ld>로 지정된 디렉토리에 로그 데이타를 저장합니다.
-n <cnt> : <cnt> 개의 패킷만을 모니터링하고 프로그램을 종료합니다.
-N : 로깅 기능을 사용하지 않습니다. 얼럿만이 저장됩니다.
-o : 룰셋 테스트 순서를 Pass, Alert, Log순서로 바꾼다.
-O : IP주소를 알 수 없도록 표시한다.
-p : 무작위 모드(promiscuous mode)를 사용하지 않고 스니핑을 합니다.
스니핑하는 호스트의 MAC 주소로 오는 패킷이나 브로드캐스팅 패킷만을 모니터링합니다.
-P <snap> : 패킷의 스냅렌(snaplen)을 지정합니다. 디폴트는 1514입니다.
스냅렌은 캡쳐할 수 있는 패킷의 최대 크기입니다. 만약 스냅렌보다 큰 패킷을 캡쳐할 경우 스냅렌만큼만 캡쳐 됩니다.
-q : 아무런 메시지도 뿌리지 않습니다.
-r <tf> <tf>로 지정된 tcpdump 파일의 패킷들에 대해서 IDS 엔진을 돌립니다.
-s 얼럿 로그 메시지를 syslog 시스템을 통해 시스템에 보냅니다.
-S <n=v> 룰 파일의 var 로 지정된 변수를 재정의 할 수 있습니다. 룰파일의 변수 n의 값을 v로 지정합니다.
-t <dir> 초기화 후 <dir> 디렉토리로 chroot합니다.
-u <uname> 초기화 후 snort의 uid를 <uname>의 사용자로 바꿉니다.
-v 많은 메시지를 뿌립니다.
-V 버전 정보를 표시합니다.
-X 링크 레이어의 로우 패킷 데이타를 덤프합니다.
-e 두번째 레이어의 헤더 정보를 프린트합니다.
-d 어플리케이션 레이어를 덤프합니다.
-? 도움말을 보여줍니다.

<filter options> 위치에 지정되는 필터링 옵션은 tcpdump 같이 BPF를 사용합니다.

댓글 없음:

댓글 쓰기