IT 침해는 점점 일상이 되어가고 있습니다. 비즈니스의 관점에서 보았을 때, 해커의 입장에서 해킹에 소요되는 비용은 아직 한참 낮은 반면 그로 인해 얻을 수 있는 이익은 그보다 훨씬 높습니다. 이는 앞으로도 얼마간은 바뀔 것 같지 않습니다. 이런 해킹의 홍수 속에서 IT 담당자들은 공격을 막는 것 뿐만이 아니라 공격이 현재 공격이 진행중인지 또한 반드시 알아야 합니다.

이를 위해 등장한 것이 IDS, 침입탐지시스템입니다. IDS는 네트워크에서 이상징후가 있는지 감시하는 역할을 합니다. 기본적으로 IDS는 네트워크상의 모든 트래픽을 감시하는것도, 샘플링해 감시하는 것도 가능합니다. 동시에 이러한 트래픽을 데이터베이스의 지문과 비교하거나 알려진 공격의 시그니처와 비교하는 등의 작업도 이루어집니다. 만약 IDS에서 공격을 감지하면, 설정에 따라 일련의 조치를 취하게 됩니다. 이러한 조치는 관리자 권한을 변경하는 것부터 공격자의 칩입경로를 블록하는 것 까지 설정에 따라 무엇이든 가능합니다. 더 정교한  IDS는 사용자의 패턴을 근거로 이상징후를 판단하기도 합니다. 예를들어, Bob은 언제나 자신의 데스크탑에서 9시~17시 사이에 로그인하곤 했는데, 어느날 갑자기 다른 데스크탑에서 토요일새벽 1시~3시 사이에 로그인한다면, IDS는 이를 주목하게 될 것입니다.

Snort는 대표적인 오픈소스 IDS로, 네트워크를 통한 침투를 탐지하고 방어하는데 사용됩니다. 프로토콜 검색과 컨텐츠 분석, 다양한 전처리 프로그램을 통해 스노트는 수많은 웜과 취약점 익스플로잇 시도를 탐지해내며, 수많은 종류의 공격과 버퍼오퍼플로우, 비노출 포트 스캔, CGI 공격 등을 탐지하는데 뛰어난 효과를 발휘합니다.

 

운용 모드는 크게 세 가지로 나뉩니다.

  1. Sniffer Mode
    이 모드에서는 출력을 화면에 지속적으로 쏟아내며, 이 모드에서는 데이터를 보존하기가 힘듭니다. 따라서 이 모드는 작은 규모의 네트워크에서만 사용하는 편이 좋습니다.
  2. Packet Logger Mode
    출력은 지정한 장치에 기록되며, 차후에 모니터링 가능합니다.
  3. Network IDS/IPS Mode
    IDS/IPD 모드에서는 징후를 탐지하며, 설정에 따라 공격에 적극적으로 반응하기도 합니다.

 

1. Snort 패키지 설치

Snort에서는 Redhat계열(RHEL, CentOS, Fedora)과 FreeBSD, Windows를 바이너리로 제공하며 기타 OS에서는 직접 컴파일하셔야 합니다.
여기서는 CentOS 기준으로 설명하겠습니다.

1) 먼저 DAQ( Data Acquisition Package)를 설치합니다.

~ # yum install https://snort.org/downloads/snort/daq-2.0.6-1.centos7.x86_64.rpm

2) 다음, Snort 패키지를 설치합니다. 현 시점(16/10/26) 기준 최신 버전은 2.9.8.3 입니다. DAQ보다 Snort 패키지부터 설치할 경우, yum 과 관련해 의존성 문제가 발생할 수 있으니 반드시 DAQ 설치 후 Snort를 설치해주세요.

~ # yum install https://snort.org/downloads/snort/snort-2.9.8.3-1.centos7.x86_64.rpm

 

2. Snort Ruleset 적용

Snort의 제작사 Talos에서는 Snort가 최신의 공격패턴을 탐지할 수 있도록 판단의 근거가 되는 룰셋을 만들어서 배포합니다. 룰셋은 커뮤니티 버전(무료)/ 일반가입자 버전(무료)/ 구독자 버전(유료) 으로 구분되어 있으며 유료가입자는 기술 지원과 함께 즉각적인 룰셋 업데이트를 적용 받습니다.(일반 사용자는 30일이 지난 후 동일한 룰셋이 제공됩니다.)

가입자 버전을 사용하기 위해서는 snort 공식 사이트에서 가입을 하고, 숫자+영문자 조합으로 된 Oinkcode를 받아야 합니다.(https://www.snort.org/users/sign_up)

그리고 다음과 같이 적용하며, <oinkcode> 안에 가입 시 발부받은 코드를 입력합니다. (다음 명령어는 현재 최신버전은 2.9.8.3 기준이며,  버전이 업데이트되면 그에 맞게 버전 번호만 수정해주시면 됩니다.)

~ # wget https://www.snort.org/rules/snortrules-snapshot-2983.tar.gz?oinkcode=<oinkcode>
~ # tar -xvfz snortrules-snapshot-2983.tar.gz -C /etc/snort/rules

Pulledpork라는 Perl로 작성된 매니지먼트 툴을 이용하면 자동으로 최신화할 수 있습니다.
(https://github.com/shirkdog/pulledpork)

 

3. 기본 활용 

  1. Sniffer Mode단순히 TCP/IP 패킷 해더를 출력하려면 다음 명령어를 사용합니다.

    ~ # ./snort -v

    다음 명령어는 IP 주소와 TCP/UDP/ICMP 헤더를 출력합니다.

    ~ # ./snort -vd

    패킷 데이터를 추가해서 표현하기 위한 명령어는 다음과 같습니다.

    ~ # ./snort -vde

  2. Packet Logger Mode패킷 데이터를 저장하려면 로그 데이터가 저장될 디렉터리를 지정하면 됩니다. 로그 데이터가 저장될 디렉터리를 지정하면 Snort는 패킷로거 모드로 전환합니다.   명령어는 다음과 같습니다.

    ~ # ./snort -vde -l <Log_Directory>

    어떠한 특정 네트워크 하에서의 로깅을 원할 경우 -h 옵션과 함께 ip주소/서브넷을 입력해주면 됩니다. 다음의 명령어는 192.168.1.0 의 C클래스 네트워크를 로깅대상으로 하는 명령어입니다.

    ~ # ./snort -vde -l <Log_Directory>

    고속 네트워크 환경 하에서 운영중이거나 차후 분석을 용이하게 하기 위해 패킷 로그를 더욱 간단하게 남기려 할 경우에는 바이너리 포멧으로 저장할 수 있습니다.

    ~ # ./snort -l <Log_Directory> -b

  3. Network IDS/IPS Mode스노트 IDS/IPS의 출력/알림은 사용자가 원하는 형태로 변경 가능하도록 많은 옵션을 준비해두고 있습니다. 기본 출력/알림 형태는 “full”인데 디코드된 ASCII 포멧으로 출력합니다. 이는 경고 메시지와 함께 패킷 헤더 전체를 보여줍니다.  몇 가지의 변경가능한 옵션을 소개하면 다음과 같습니다.
    -A fast  빠른 경고 모드. 타임스탬프, 경고메시지, 출발지 및 목적지 IP와 포트를 포함한 간단한 경고를 작성합니다.
    -A full 디폴트 설정입니다. 옵션을 설정하지 않으면 이것으로 선택됩니다.
    -A unsoc 다른 프로그램이 들을 수 있도록 유닉스 소켓으로 경고를 보냅니다.
    -A none 경고를 끕니다.경고를 syslog로 보내려면 -s 옵션을 더합니다.

 

4. 마치며 

IDS는 장점과 함께, 부족한 점도 많이 있습니다.

시그니처 기반의 탐지를 하는 백신 프로그램등의 솔루션과 유사하게 IDS 또한 패턴이 알려져 있는 공격들에만 효과가 있습니다. 따라서 똑똑한 공격자는 자신의 공격을 살짝 수정함으로써 IDS의 감시를 피할 수 있습니다. End-to-End 암호화가 많이 적용되는 현재의 추세 또한 네트워크 스니핑을 기반으로 한 탐지에 어려움을 더하고 있습니다.

또한, IDS는 일반적으로 시스템 자원을 비교적 많이 사용하는 것으로 알려져 있습니다. 이에따라 사용중인 기존 서버에 같이 설치하여 사용하기보다 따로 IDS역할을 전담할 머신을 두고 관리하는 것이 일반적입니다.

마지막으로, IDS는 대부분 온사이트에서 설치, 운영되는 만큼 공격에 대한 분석이나 대응을 비전문가가 맡게 되는 경우도 많아 큰 효과를 보지 못하기도 합니다.

 

다음 포스팅에서는 Config 설명과 GUI를 통한 운용.모니터링에 대해 설명하겠습니다.

 

 

References:
(1) Rajneesh Upadhyay. 2016. How To Install Snort NIDS On CentOS 7. www.unixmen.com Tech blog. https://www.unixmen.com/install-snort-nids-centos-7 (Accessed 2016-10-26).
(2) The Snort Project. SNORT Users Manual. March 18, 2016. https://snort.org/documents/snort-users-manual (Accessed 2016-10-26).
(3) Symantec, inc. Snort Installation and Basic Usage Part One. 2010. https://www.symantec.com/connect/articles/snort-installation-and-basic-usage-part-one (Accessed 2016-10-26).
(4) Martin Roesch. How to use Snort. http://usuaris.tinet.cat/sag/lsnort.htm (Accessed 2016-10-26).
(5) Infosec Institute. Basic Snort Rules Syntax and Usage. https://www.symantec.com/connect/articles/snort-installation-and-basic-usage-part-one (Accessed 2016-10-26).
(6) 라그래. 2015.

[리눅스]snort 설치. ragreen.egloos.com Science blog. 12 December. http://ragreen.egloos.com/7073901 (Accessed 2016-10-26).

PLURA