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 |
n 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 |