RSS구독하기:SUBSCRIBE TO RSS FEED
즐겨찾기추가:ADD FAVORITE
글쓰기:POST
관리자:ADMINISTRATOR

출처 : 대전국제IT교육센터 정성재 강사

 

1. Snort에 대하여
Snort란 일종의 침입탐지시스템(IDS:Intrusion Detection System)으로 실시간 트래픽 분석, 프로토
콜 분석, 내용검색/매칭, 침입탐지 Rule에 의거하여 오버플로우, 포트스캔, CGI공격, OS확인 시도
등의 다양한 공격과 스캔을 탐지할 수 있다. 침입탐지 Rule은 보안 커뮤니티를 통해 지속적으로 업데
이트되고 또한 사용자가 직접 Rule을 작성하여 추가할 수 있도록 설계되어 최신공격에 대한 적응에
빨리 대처할 수 있다.


2. Snort 설치하기
(1) 설명: Snort는 공개용으로 http://www.snort.org에서 다운받을 수 있다.
(2) 방법
   1) /usr/local/src 에 snort-2.0.0.tar.gz 를 다운받는다.
   2) 압축을 푼다.
     [root@www src]# tar zxvf snort-2.0.0.tar.gz
   3) 압축을 풀면 snort-2.0.0 라는 디렉토리가 생성되는 데 이 디렉토리로 이동한다.
     [root@www src]# cd snort-2.0.0
   4) 환경설정을 한다.
     [root@www snort-2.0.0]# ./configure
   5) 컴파일한다.
     [root@www snort-2.0.0]# make
   6) 설치한다.
     [root@www snort-2.0.0]# make install

3. Snort 환경설정하기
(1) Rule 추가하기
   1) 설명: snort는 특정한 침입탐지 Rule과 비교하여 침입을 탐지하는 프로그램이므로 항상 최신의
           Rule을 설치하는 것이 좋다.
   2) 방법
    ㄱ. http://www.snort.org에 가서 snortrules-stable.tar.gz 을 다운 받는다.
    ㄴ. snort가 설치되어 있는 디렉토리에 압축을 푼다.
(2) snort.conf파일 설정하기
   1) 설명: 기본적인 몇가지만 설정하도록 한다.
   2) 설정
    ㄱ. var HOME_NET any
         => 현재 네트워크를 명시한다. 192.168.0.1/24 등의 서브넷 표기법으로 표기할 수 있다.
           정의하기가 어려우면 기본값인 any 라고 설정한다.
    ㄴ. var EXTERNAL_NET any
         => 외부 네트워크 대역을 지정한다. 기본값인 any 라고 설정한다.
(3) 탐지된 결과가 기록될 디렉토리 생성하기
   1) 설명: snort에 의해 탐지된 결과를 위한 디렉토리를 생성해야 하고 해당 디렉토리의 접근권한
           도 root만이 가능하도록 해야 한다.
   2) 방법
     ㄱ. 디렉토리 생성
        [root@www root]# mkdir /var/log/snort
     ㄴ. 권한 설정
        [root@www root]# chmod 700 /var/log/snort

4. Snort 사용하기
(1) 사용법
   snort [-options] <filter options >
(2) options
   -A : 얼럿 모드(Alert! Mode)를 지정한다. fast, full, none, unsock 중 하나로 지정한다. unsock
       은 UNIX 소켓을 사용할 때 지정한다.
   -b : tcpdump 파일 포맷으로 저장한다.
   -c 환경설정파일 : 지정된 파일을 Rule 파일로 사용한다.
   -C : 데이터부분의 문자만 출력한다.
   -D : snort를 데몬으로 동작시킨다. 백그라운드로 동작하면 터미널의 종료후에도 계속 동작하도록
       할 때 사용한다.
   -F bpf파일 : 필터링식을 'bpf파일'에서 읽어온다. 이 식은 tcpdump에서 원하는 패킷만을 덤프하
               기 위해 사용한다.
   -g 그룹명 : snort의 그룹 또는 GID를 변경한다.
   -h home-net : 홈 네트워크 변수인 HOME_NET의 값을 설정한다.
   -i interface : 지정된 네트워크 인터페이스를 모니터링 한다. 보통 eth0, eth1 등이 온다.
   -l 디렉토리명 : 지정한 디렉토리에 로그데이터를 저장한다.
   -n 패킷갯수 : 지정한 패킷갯수만 모니터링한다.
   -N : 패킷을 기록은 하지않고 alert!만 저장한다.
   -o : 룰셋 순서를 Alert!->Pass->Log 에서 Pass->Alert!->Log 로 바꾼다.
   -O :IP주소를 알 수 없도록 한다.
   -p : promiscuous 모드를 사용하지 않는다.
   -P 스냅길이 : 패킷의 스냅렌(snaplen)을 지정한다. 스냅렌이란 캡쳐할 수 있는 패킷의 최대크기
                를 말한다. 기본값은 1514으로 스냅렌보다 큰 패킷을 캡쳐할 경우 스냅렌만큼만
                기록된다.
   -q : 메지지를 보이지 않게 한다.
   -r tcpdump_file : tcpdump파일의 패킷들에 대해서 검색한다.
   -s : alert! 메시지를 syslog 로 보낸다. 즉 로그들이 /var/log/secure나 /var/log/messages에
       저장된다.
   -S 변수=변수값: Rule에 있는 변수와 값을 지정할 수 있다. 예를 들면 HOME_NET 같은 값은 재지정
                  한다.
   -t 디렉토리: 지정한 디렉토리를 chroot로 한다.
   -u 사용자 : snort의 UID또는 사용자명을 변경한다.
   -v : 메시지를 자세히 보여준다.
   -V : snort의 버전을 보여준다.
(3) 사용예
    snort -d -l /var/log/snort -c etc/snort.conf -A full -D

5. Snort 결과 분석

(1) 설명: snort를 실행하면 지정한 로그디렉토리(/var/log/snort)에 탐지결과가 남는다. 이 디렉토
          리에 경고메시지가 저장되는 alert! 파일, 각 IP주소별 디렉토리가 생성된다.
(2) 기본 로그 형태
   1) alert! 파일의 예
    ㄱ. Web 공격 시도에 의한 탐지 예
       [**] [1:1002:5] WEB-IIS cmd.exe access [**]
       [Classification: Web Application Attack] [Priority: 1]
       04/27-17:46:24.479073 203.247.xxx.xx:1941 -> 203.247.xx.xxx:80
       TCP TTL:114 TOS:0x0 ID:29029 IpLen:20 DgmLen:1500 DF
       ***A**** Seq: 0x49CC3667  Ack: 0x3B68E670  Win: 0x4470  TcpLen: 20
    ㄴ. 포트스캔(Prot Scan)에 의한 탐지 예
       [**] [1:628:1] SCAN nmap TCP [**]
       [Classification: Attempted Information Leak] [Priority: 2]
       04/27-18:47:44.042908 203.247.xx.xxx:57970 -> 203.247.xx.xxx:21
       TCP TTL:52 TOS:0x0 ID:43643 IpLen:20 DgmLen:60
       ***A**** Seq: 0x965ADFEC  Ack: 0x0  Win: 0x400  TcpLen: 40
       TCP Options (4) => WS: 10 NOP MSS: 265 TS: 1061109567 0
       [Xref => http://www.whitehats.com/info/IDS28]
   2) 각 주소별 디렉토리
    ㄱ. 설명: snort가 공격 메시지나 비정상적인 시도를 탐지하게 되면 로그디렉토리에 해당 공격을
             시도한 IP주소로 디렉토리를 만들고 관련 정보를 파일로 생성한다.
    ㄴ. 예
       [root@www 203.247.xx.xxx]# cat TCP:1941-80
       [**] WEB-IIS ISAPI .ida attempt [**]
       04/27-17:46:24.476608 203.247.xx.xxx:1941 -> 203.247.xxx.xxx:80
       TCP TTL:114 TOS:0x0 ID:29028 IpLen:20 DgmLen:1500 DF
       ***A**** Seq: 0x49CC30B3  Ack: 0x3B68E670  Win: 0x4470  TcpLen: 20
       47 45 54 20 2F 64 65 66 61 75 6C 74 2E 69 64 61  GET /default.ida
       3F 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58  ?XXXXXXXXXXXXXXX
       58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58  XXXXXXXXXXXXXXXX
                ------------ 이 하 생 략 ------------------
         => 만약 공격을 시도한 IP주소가 203.247.xx.xxx이면 /var/log/snort/203.247.xx.xxx형태로
           디렉토리가 생성되고 그 안에 로그파일이 생성된다.
(3) 참고 : 잘못된 탐지에 대하여
   snort가 탐지하는 로그를 보면 몇몇 Rule들이 잘못된 탐지를 하는 경우가 있다. 이 경우에는 관리
  자가 판단하여 snort.conf파일의 해당 Rule에 주석처리하거나 수정할 필요가 있다.

6. Snort관련 응용프로그램 - SnortSnarf
(1) 설명: SnortSnarf는 Snort관련 보조 응용프로그램으로 로그를 관리해주고, 결과를 웹페이지형태
          로 바꾸어 빠르고 편리하게 찾아볼 수 있도록 도와준다.
          관련사이트는 http://www.silicondefense.com 이다.
(2) 설치
   1) 최신버전인 SnortSnarf-021111.1.tar.gz 를 /usr/local/src 디렉토리에 다운받는다.
   2) 압축을 푼다.
     [root@www src]# tar zxvf SnortSnarf-021111.1.tar.gz
   3) 압축을 풀면 디렉토리가 생성되는데 그 디렉토리로 이동한다.
     [root@www src]# cd SnortSnarf-021111.1
   4) include 디렉토리에 안에 있는 내용을 /usr/lib/perl5/site_perl/5.8.0에 모두 복사한다.
     [root@www SnortSnarf-021111.1]# cp -r ./include/* /usr/lib/perl5/site_perl/5.8.0/
   5) cgi 디렉토리안에 있는 내용을 /usr/local/apache/cgi-bin 디렉토리로 이동한다.
     [root@www SnortSnarf-021111.1]# cp ./cgi/* /usr/local/apache/cgi-bin/
   6) 웹페이지가 저장될 디렉토리를 만든다.
     [root@www SnortSnarf-021111.1]# mkdir /usr/local/apache/htdocs/snort
(3) 실행
   1) 설명: 실행파일은 snortsnarf.pl이고 기존의 snort랑 연결해서 실행해야 하므로 관련 디렉토리
           와 관련파일의 위치를 잘 알고 있어야 한다. 아울러 실행파일이 너무 길게 되므로 스크립
           트로 만들어서 사용하면 재실행시에 쉽게 snortsnarf라고 입력하면 실행되도록 할 수
           있다.
   2) snortsnarf.pl 사용하기
    ㄱ. 사용법
       snortsnarf.pl options file1 file2
    ㄴ. options
       -rulesdir : snort rule파일들의 위치를 지정한다.
       -rulesfile : snort 환경설정파일 즉 snort.conf파일의 위치를 지정한다.
       -d : 웹페이지가 생성될 디렉토리를 지정한다.
    ㄷ. 사용예
       [root@www SnortSnarf-021111.1]# ./snortsnarf.pl -rulesdir /usr/local/snort \
       -rulesfile /etc/snort.conf -d /usr/local/apache/htdocs/snort /var/log/snort/alert!
   3) 스크립트로 만들기
     [root@www SnortSnarf-021111.1]# vi snortsnarf
     /usr/local/src/SnortSnarf-021111.1/snortsnarf.pl -rulesdir /usr/local/src/snort-2.0.0 \
     -rulesfile /usr/local/src/snort-2.0.0/etc/snort.conf -d /usr/local/apache/htdocs/snort \
     /var/log/snort/alert!
   4) 실행하기
     [root@www SnortSnarf-021111.1]# ./snortsnarf
(4) 확인
    웹브라우저에서 http://localhost/snort 라고 입력해서 확인한다.
(5) 참고 : snortsnarf의  error 발생
   1) 설명: 실행시에 다음과 같은 error가 발생할 수 있다.
     [root@www SnortSnarf-021111.1]# ./snortsnarf
     Can't locate Time/Timezone.pm in @INC (@INC contains: ./include /usr/lib/perl5/5.8.0/i386
     BEGIN failed--compilation aborted at /usr/lib/perl5/5.8.0/Time/ParseDate.pm line 8.
     Compilation failed in require at include/SnortSnarf/TimeFilters.pm line 18.
     BEGIN failed--compilation aborted at include/SnortSnarf/TimeFilters.pm line 18.
     Compilation failed in require at include/SnortSnarf/Filter.pm line 19.
     BEGIN failed--compilation aborted at include/SnortSnarf/Filter.pm line 19.
     Compilation failed in require at /usr/local/src/SnortSnarf-021111.1/snortsnarf.pl line 87.
     BEGIN failed--compilation aborted at /usr/local/src/SnortSnarf-021111.1/snortsnarf.pl line 87
   2) 원인: Perl 실행시 Time 관련 모듈에 없기 때문이다. 관련 모듈을 다운받아 설치한다.
   3) 해결책
    ㄱ. http://search.cpan.org/author/MUIR/Time-modules-2003.0211 로 이동한다.
    ㄴ. /usr/local/src에 Time-modules-2003.0211.tar.gz 파일을 다운받는다.
    ㄷ. 압축을 푼다.
       [root@www src]# tar zxvf Time-modules-2003.0211.tar.gz
    ㄹ. Perl관련 디렉토리에 복사한다.
       [root@www src]# cp -r ./Time-modules-2003.0211/lib/* /usr/lib/perl5/site_perl/5.8.0/
(6) 주기적으로 실행하기
   1) 설명: snortsnarf를 실행하면 웹페이지에 단 한번의 실행결과만 남게된다. 주기적으로 하려면
           cron데몬과 연계해서 실행하면 된다.
   2) 방법
    ㄱ. 설명: 30분마다 실행하도록 하려면 /etc/crontab 파일에 아래와 같이 추가한다.
    ㄴ. 예
       */30 * * * * root /usr/local/src/SnortSnarf-021111.1/snortsnarf

Trackback
Reply
우주곰:지구곰이 아닙니다.
지구곰이 아닙니다.
Categories (190)
Information (5)
About uzoogom (5)
My Advanced Linux (73)
Learning Linux (96)
OperatingSystem (5)
Databases (4)
OpenSource (1)
Tips! (1)
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30