Snort IPS(Intrusion Prevention System)

Snort 는 오픈 소스 침입 방지 시스템IPS(Open Source Intrusion Prevention System)으로 Snort IPS는 악의적인 네트워크 활동을 정의된 일련의 규칙을 사용하여 이와 일치하는 패킷을 찾고 사용자에 대한 경고를 생성하는 탐지 시스템입니다.

Snort 모드는 크게 세 가지로 사용할 수 있다.

1. Sniffer Mode

tcpdump와 유사한 패킷 스나이퍼로 모드에서는 출력을 화면에 지속적으로 쏟아내며, 이 모드에서는 데이터를 보존하기가 힘듭니다. 따라서 이 모드는 작은 규모의 네트워크나 직접 실시간으로 패킷을 보는 경우만 사용하는 편이 좋습니다.

2.Packet Logger Mode

출력은 지정한 장치에 기록되며, 차후에 모니터링 가능합니다.

3. Network IDS/IPS Mode

IDS/IPD 모드에서는 징후를 탐지하며, 설정에 따라 공격과 같은 탐지시정해진 액션을 하도록 할 수도 있습니다.

Snort 설치하기

[ Amazon Linux 2, CentOS  기준 ]

사전에 필요한 패키지, 라이브러리 설치

sudo yum install -y gcc flex bison zlib libpcap pcre libdnet tcpdump  
sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm   sudo yum install -y libnghttp2

snort 패키지 설치

wget https://www.snort.org/downloads/snort/snort-2.9.17-1.centos8.x86_64.rpm  
sudo yum install -y snort-2.9.17-1.centos8.x86_64.rpm

설치 패키지 확인

snort -v
snort: error while loading shared libraries: libdnet.1: cannot open shared object file: No such file or directory  

cd /lib64/
sudo ln -s libdnet.so.1.0.1 libdnet.1

libdnet. 관련 error 발생시 위와 같이 link 처리후 snort -v 재실행

[ ubuntu 기준 ]

snort 패키지 설치

sudo apt update && sudo apt upgrade
sudo apt install snort

Snrot Configuration (이 부분부터 모든 OS 동일 합니다.)

community rules 설치

wget https://www.snort.org/downloads/community/community-rules.tar.gz -O community-rules.tar.gz
sudo tar -xvzf community-rules.tar.gz -C /etc/snort/rules

/etc/snort/snort.conf 파일을 열어 필요한 내용을 수정 합니다.

###################################################
# Step #1: Set the network variables.  For more information, see README.variables ###################################################  
# Setup the network addresses you are protecting
# ipvar HOME_NET any
ipvar HOME_NET 172.16.0.0/20  

위의 any 부분을 그대로 사용하거나 사용중인 network address 로 변경하여 모니터할 network address를 정의할 수 있다.

RULE_PATH 수정

# Path to your rules files (this can be a relative path)
# Note for Windows users:  You are advised to make this an absolute path,
# such as:  c:\snort\rules
var RULE_PATH /etc/snort/rules
var SO_RULE_PATH ../so_rules
var PREPROC_RULE_PATH ../preproc_rules  

# If you are using reputation preprocessor set these
# Currently there is a bug with relative paths, they are relative to where snort is # not relative to snort.conf like the above variables
# This is completely inconsistent with how other vars work, BUG 89986
# Set the absolute path appropriately
var WHITE_LIST_PATH ../rules
var BLACK_LIST_PATH ../rules  

###################################################
# Step #2: Configure the decoder.  For more information, see README.decode ###################################################

community.rules 경로 추가 및 현재 없는(사용하지 않는) RULE에 대해서 주석 처리

538 ###################################################    
539 # Step #7: Customize your rule set    
540 # For more information, see Snort Manual, Writing Snort Rules    
541 #    
542 # NOTE: All categories are enabled in this conf file    
543 ###################################################    
544    
545 # site specific rules    
546 include $RULE_PATH/local.rules    
547 include $RULE_PATH/community_rules/community.rules    
548    
549 # include $RULE_PATH/app-detect.rules    
550 # include $RULE_PATH/attack-responses.rules    
551 # include $RULE_PATH/backdoor.rules    
552 # include $RULE_PATH/bad-traffic.rules  

:548,651s/include /# include  

/etc/snort/snort.conf 파일을 열어 아래의 내용들을 수정한다.

###################################################
# Step #6: Configure output plugins # For more information, see Snort Manual, Configuring Snort – Output Modules ###################################################  
# unified2
# Recommended for most installs output unified2: filename merged.log, limit 128, nostamp, mpls_event_types, vlan_event_types  

unified2의 주석을 제거해 준다.

모든 수정이 끝나면 configure를 점검합니다.

[root@snort rules]# sudo snort -T -c /etc/snort/snort.conf
Running in Test mode
 
        –== Initializing Snort ==–
Initializing Output Plugins!
Initializing Preprocessors!
Initializing Plug-ins!
Parsing Rules file “/etc/snort/snort.conf”
 
….중간 생략….
 
–== Initialization Complete ==–
 
   ,,_     -*> Snort! <*-
  o”  )~   Version 2.9.17 GRE (Build 199)
   ””    By Martin Roesch & The Snort Team: http://www.snort.org/contact#team
           Copyright (C) 2014-2020 Cisco and/or its affiliates. All rights reserved.
           Copyright (C) 1998-2013 Sourcefire, Inc., et al.
           Using libpcap version 1.5.3
           Using PCRE version: 8.32 2012-11-30
           Using ZLIB version: 1.2.7
 
           Rules Engine: SF_SNORT_DETECTION_ENGINE  Version 3.1  <Build 1>
           Preprocessor Object: SF_SMTP  Version 1.1  <Build 9>
           Preprocessor Object: SF_SIP  Version 1.1  <Build 1>
           Preprocessor Object: SF_SDF  Version 1.1  <Build 1>
           Preprocessor Object: SF_S7COMMPLUS  Version 1.0  <Build 1>
           Preprocessor Object: SF_REPUTATION  Version 1.1  <Build 1>
           Preprocessor Object: SF_POP  Version 1.0  <Build 1>
           Preprocessor Object: SF_SSLPP  Version 1.1  <Build 4>
           Preprocessor Object: SF_MODBUS  Version 1.1  <Build 1>
           Preprocessor Object: SF_IMAP  Version 1.0  <Build 1>
           Preprocessor Object: SF_GTP  Version 1.1  <Build 1>
           Preprocessor Object: SF_SSH  Version 1.1  <Build 3>
           Preprocessor Object: SF_FTPTELNET  Version 1.2  <Build 13>
           Preprocessor Object: SF_DNS  Version 1.1  <Build 4>
           Preprocessor Object: SF_DNP3  Version 1.1  <Build 1>
           Preprocessor Object: SF_DCERPC2  Version 1.0  <Build 3>
 
Snort successfully validated the configuration!
Snort exiting

이제 snort를 사용할 준비가 되었습니다.

Snort Rule 설정하기

Snort는 rule을 기준으로 검사하고 탐지를 하는 방식이다.

검사에 사용할 rule을 설정하는 형식은 다음과 같다.

예제로 위의 형식에 맞추어 ping 이 감지되면 messag를 출력하는 rule을 다음과 같다.

vi /etc/snort/rules/local.rules   alert icmp any any -> any any (msg:”ICMP ping test”; sid:1000001;)

네가 원하는 목적에 맞게 rule을 정의해서 사용을 할 수 있으므로 event 나 사용하는 network 환경에 맞추어 구성을 하는 것이 가능 하다.

미리 준비된 rule이 없다면 작성된 rule을 사용하는 방법이 있다.

snort는 현재 무료인 community rule과 유료 rule을 사용을 할 수 있다.

현재 community.rule 에서 제공되고 있는 rule은 3955 line 이다. (2021년 1월 27일 기준)

community.rule을 사용하는 방법은 rule 파일에서 사용할 rule의 주석 #만 제거해 주면 된다.

community..rule의 모든 주석을 제거 >> vi 에서 %s/# alert/alert 입력

Snort 사용하기

snort –help 명령어로 기본적인 파라미터는 한번 확인을 하고 snort를 실행하기를 바란다.
3가지 모드의 실행 방법은 아래와 같다.

  • Sniffer Mode
snort -v
snort -vd

-d Dump the Application Layer

  • Packet Logger mode
Snort -dev -l /var/log/snort
-l <ld>    Log to directory <ld>
-L <file>  Log to this tcpdump file
 
snort -dev -l /var/log/snort h 192.168.1.0/24  // Log relative to the home network  snort -l /var/log/snort -b  // Binary mode logs 
Network Intrusion Detection System (NIDS) mode
snort -dev -l /var/log/snort -h 172.31.0.0/20 -c /etc/snort/snort.conf 

Alert log 확인 하기

cat /var/log/snort/alert   tail -f /var/log/snort/alert
https://www.snort.org/

Leave a Reply

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