IDS - Snort

인터넷 ----- 방화벽 ----- WAN(라우터) ----- LAN ----- IPS ------- 스위치 ------- 호스트

                     ASA                                                  pfsense    securityOnion    selinux / iptables

                                                                                                     N-IDS          firewalld / ufw

                                                                                                                         ------------------- IDS

                                                                                                                         tcpwrapper

                                                                                                                         apache(httpd) + security        

 

IDS --> 솔루션 : Snort : www.snort.org

 

Snort - Network Intrusion Detection & Prevention System

With over 5 million downloads and over 600,000 registered users, it is the most widely deployed intrusion prevention system in the world.

www.snort.org


<CentOS 7에서 snort 설치>

 

<snort 설치를 위한 기본 세팅>

epel-release가 설치되어 있어야 함 --> yum -y epel-release

yum -y install -y gcc flex bison zlib libpcap pcre libdnet tcpdump

yum -y install libnghttp2  --> 에러 발생 시 yum makecache를 실행 --> 캐시 재설정 후  libnghttp2 설치하면 정상적으로 됨

 

<DAQ 설치>

rpm 다운로드 사이트

wget https://rpmfind.net/linux/epel/7/x86_64/Packages/d/daq-2.0.6-1.el7.x86_64.rpm

설치방법 2

yum -y install https://rpmfind.net/linux/epel/7/x86_64/Packages/d/daq-2.0.6-1.el7.x86_64.rpm 

설치방법3

yum y- install daq

 

<snort 설치>

wget https://snort.org/downloads/snort/snort-2.9.20-1.centos.x86_64.rpm

snort 설치 과정에서 새로운 라이브러리 --> ldconfig

yum -y install snort-2.9.9.0-1.centos7.x86_64.rpm

 

snort 실행 명령어  snort

 

error while loading shared 어쩌구 오류 발생 시 

find / -name "lindnet*"

ln -s /usr/lib64/libdnet.so.1.0.1 /usr/lib64/libdnet.1        --> 링크파일 생성

 

<snort 실행 화면>

 

 

 

snort 실행파일 위치 확인 - which snort

 

 

snort는 snort:snort 계정을 생성한다.

cat /etc/passwd | grep snort

직접 생성 시(패키지로 설치시 할 필요 없음)

useradd snort -s /bin/false -c Snort -g snort -d /var/log/snort 

 

확인사항

/etc/snort 디렉터리 생성 여부 확인

/usr/local/lib/에 아무것도 없으면 mkdir /usr/local/lib/snort_dynamicrules 로 디렉터리 생성

sudo touch /etc/snort/rules/white_list.rules

sudo touch /etc/snort/rules/black_list.rules

sudo touch /etc/snort/rules/local.rules

 

snort 설정파일

/etc/snort/snort.conf

45번째 줄 ipvar HOME_NET any

               -------  ----------------  -----

              변수선언 변수이름 리터럴

 

선언된 변수를 호출하는 방법 : $HOME_NET

45번째 줄 본인 NI로 변경

 

105번째 줄 절대경로로 변경

 

113번째 줄 절대경로로 변경

 

550~653까지 include 주석처리

 

설정 확인

snort -T -c /etc/snort/snort.conf

-T = Test

-c = 설정파일 지정

 

<실제 snort 실행시키는 명령>

cat > snort_start.sh에 명령어 삽입

snort -A console -i ens33 -u snort -g snort -c /etc/snort/snort.conf

chmod +x snort_start.sh

./snort_start.sh 로 실행하면 꿀꿀이가 나옴

꿀꿀

 

/etc/snort/rules/local.rules 에 들어가 아래 설정값을 넣어준다.

icmp가 들어오면 icmp라는 텍스트 출력

sid - 회사 내규에서 지정한 번호

 

팀 내에서 코드번호(sid) 지정 후 역할부여

sid값과 매핑된 테이블 정보를 기반으로 탐지해야 한다.

 

다른 서버에서 핑 통신을 보내면 snort에 기록이 된다.

 

snort에 200에서 216으로 icmp 패킷을 날린게 보임

 

cd /var/log/snort 에서 ls로 확인해보면 로그가 저장되어있다.

 

<저장된 로그 확인하는 법>

snort -r snort.log

 

 


snort -A console -i ens33 -c /etc/snort/snort.conf -b

tcpdump -xX -i ens33 -w icmp.pcap

-x : 각 패킷 헤더 및 데이터를 16진수로 인쇄

-X : 각 패킷의 헤더 및 데이터를 16진수 및 ASCII코드로 인쇄

 

Snort Rules -> 룰셋 : 시그니처 구조(SIGN)

 

<Rule 헤더>

경로 : /etc/snort/rules/local.rules

 

 

ex)

alert icmp any any -> 192.168.0.8/32 any (msg : "ICMP Test"; sid : 10000001; rev : 001;)

------  Action

           ------ Protocol

                      ---- S.IP or S.NI

                                     ---- input 요청 신호가 들어왔을 때

                                        ------------------- D.IP or D.NI

                                                                      ---- S.Port / Dst.Port

 

Action - pass - 패킷무시

             drop - 패킷 차단 및 로그 기능(IPS) : 조건 : in-line

             sdrop - 패킷 차단 로그 기능 x

             reject - 패킷 차단 및 로그기록 (TCP - RST응답)

                                                             (UDP - ICMP Unreachable 응답)

            *alert - 경고 발생 - 화면 출력 및 로그 기능

             log - 로그기록

 

protocol - tcp / udp / ip / icmp / any 

 

input(방향 지정)

-> 요청 패킷에 대한 탐지

<- 응답 패킷에 대한 방지

 

Src.Port/Dst.Port - 80 단일 port

                            - 1:100  1~ 100 port

                            - !80 80을 제외한 나머지 포트

 

(msg : "ICMP Test"; sid : 10000001; rev : 001;)

------ 경고 이벤트 메시지

                                ---- 룰 식별자(3000000이상 권장)

                                                         ----- 룰 버전 : 수정 될 때 마다 1씩 증가

 

 

 

Flag (URG, ACK, PSH, RST, SYN, FIN)

TCP 플래그 NS, CWR, ECE, URG, ACK, PSH, RST, SYN, FIN 9가지

 

<사용자에게 정보를 주는 용도>
1. priority : 우선순위(위험도가 높다)
2. reference : 참고 정보들
3. classtype : 어떤 악성코드인지

 

<유입되는 패턴을 검사하는 용도> 
1. content : 탐지하고자 하는 문자열을 작성하면 문자열을 포함하는 트래픽을 히트 ("ABC" <- 문자열 "|41 42 43|" <- 16진수로 ABC)
2. nocase : 대소문자 구분을 하지 않는다 "|41 42 43|";nocase => ABC,abc Abc .. 모두 히트가 된다.
3. depth : depth:5; 시작부터 5바이트까지 검사
4. offset : offset:5; 시작부터 5 떨어진 부분부터 검사
5. distance :  정의한 패턴이 있는 곳부터(시작점) 몇 바이트 떨어진 지점까지 정의하기 패턴 시작 상대위치
"123";distance:10; 123으로부터 10바이트 떨어진곳까지 검사
6. pcre : 정규표현식을 기록할수있는 옵션 

 

'서버' 카테고리의 다른 글

유닉스 보안  (0) 2023.08.01
iptables -작성중  (0) 2023.07.13
DISKQUOTA  (0) 2023.06.22
RAID  (0) 2023.06.21
SAMBA(smb)  (0) 2023.06.20