Suricata를 이용한 IDS/IPS 구축하기

Suricata란?

Suricata is a high performance Network IDS, IPS and Network Security Monitoring engine. Open Source and owned by a community run non-profit foundation, the Open Information Security Foundation (OISF). Suricata is developed by the OISF and its supporting vendors.

대충 요약하자면 OISF에서 개발되어진 고성능의 네트워크IDS,IPS,NSM 엔진이라는 이야기다.
정말 고성능인지는 각자 테스트 해보기를 바란다.
10Gbps트래픽에서 9000개의 룰로 운영되는 suricata IDS 시스템에서 약 4%의 packet drop 만 생기도록 구성한 사례들도 있다.

 

용어정리
*IDS – Intrusion detection system(침입탐지 시스템)
*IPS – Intrusion prevention systems(침입방지 시스템)

사전준비

suricata는 다양한 OS를 지원한다. 필자의 경우 CentOS6 Linux 시스템에 설치하였다.
리눅스를 이용해서 쓸만한 IDS/IPS시스템을 구축해 보도록 하자.
  • OS: CentOS6.6
  • Network Card:2EA 이상(단독 서버에서만 구동한다면 1개여도 상관은 없다)
  •  적절한 사양의 PC 또는 서버(실제 운영해 보면 알겠지만 트래픽에 따라 메모리나 CPU사용이 제법 많이 필요한 경우가 많다)

설치

  1. EPEL repository추가
    rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
    
  2. 소스빌드를 위한 기본 패키지 설치
    yum -y install libpcap libpcap-devel libnet libnet-devel pcre \ pcre-devel gcc gcc-c++ automake autoconf libtool make libyaml \ libyaml-devel zlib zlib-devel file-devel
    

     

     

  3. IPS mode(NFQUEUE) 지원을 위한 패키지 설치
    나중에 다시 설명하겠지만 suricata 를 IPS모드로 동작하는 방법은 리눅스에서는 2가지 방법이 있다.
    Netfilter queue를 이용하는 방식(iptables)과 AF_PACKET를 이용하는 방식이 있다.

    yum -y install libnetfilter_queue libnetfilter_queue-devel \
    libnfnetlink libnfnetlink-devel
  4. Suricata build & install

    wget http://www.openinfosecfoundation.org/download/suricata-2.0.8.tar.gz
    tar -xvzf suricata-2.0.8.tar.gz
    cd suricata-2.0.8
    ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var 
    make 
    make install-full
  5. 기본환경설정 확인 및 수정
    suricata 환경설정 파일은 기본적으로 /etc/suricata/suricata.yaml에 위치하고 있다.
    몇 가지 중요한 부분들을 수정하여 사용하도록 하자

    • host-mode:auto(suricata가 설치된 호스트를 IDS 모드 또는 IPS 모드로 사용할 것인지 지정한다)

      침입탐지용으로만 사용한다면 sniffer-only, 침입방지용으로 사용한다면 router로 지정해주면 된다.보통은 그냥 auto모드로 두고 데몬을 구동할 때 옵션으로 설정하는 경우가 많다.

    • pid-file: /var/run/suricata.pid(suricata 데몬의 pid 위치를 지정한다)
    • default-log-dir: /var/log/suricata/ (로그 디렉토리 설정)
    • ouputs: (로그 저장에 관련된 설정들이 들어있다.특히 나중에 mysql같은 데이터베이스에 로그를 남기고자 한다면 barnyard2 를 이용하여 남길 수 있다.이런 경우 unified2 형태로 로그를 남겨야 한다.)
    • drop: (IPS모드로 구동할때 룰에 의해서 drop된 로그를 저장하게 한다.)
    • af-packet: (IPS모드 중 하나인 af-packet 모드로 사용하고자 하는 경우 옵션들이다.)
    • cuda: (nvidia GPU을 이용해서 패킷 처리를 가속하기 위한 옵션이다.)
    • default-rule-path: (룰 파일의 위치를 지정한다.)
    • vars: (suricata 엔진에서 사용할 환경변수들이다. 이 변수들을 이용해서 룰파일에서도 사용한다.)
  6. 테스트 룰 삽입
    vi /etc/suricata/rules/drop.rules
    alert icmp 핑을 날릴호스트의 IP주소 any -> any any (msg:"ALERT test ICMP ping";
     icode:0; itype:8; classtype:trojan-activity; sid:99999998; rev:1;)
    192.168.2.126호스트에서 suricata로 ping 을 날리면 로그에 남는다
    alert icmp 192.168.2.126 any -> any any (msg:"ALERT test ICMP ping";
     icode:0; itype:8; classtype:trojan-activity; sid:99999998; rev:1;)

     

  7. suricata 실행 및 확인
    일단 기본적으로 IDS 모드로 구동해 본다.
    -i 다음에는 패킷들을 처리할 인터페이스를 넣어주도록 한다.

    suricata -c /etc/suricata/suricata.yaml -i eth0

    아래의 init파일을 /etc/init.d/suricata로 복사해두고 데몬 제어를 하는것이 편할 것 이다.
    suricata_init

Pages:

stone has written 25 articles

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>