Snort란 스노트는 자유-오픈 소스 네트워크 침입 차단 시스템이자, 네트워크 침입 탐지 시스템(IDS)으로서, 마틴 로시가 1998년에 개발하였다.
Snort IPS는 악의적인 네트워크 활동을 정의하는 데 도움이 되는 일련의 규칙을 사용하고 이러한 규칙을 사용하여 일치하는 패킷을 찾고 사용자에 대한 경고를 생성한다. 이러한 패킷을 중지하기 위해 Snort를 인라인으로 배포할 수도 있고.
tcpdump와 같은 패킷 스니퍼, 패킷 로거, 네트워크 트래픽 디버깅에 유용하거나 완전한 네트워크 침입 방지 시스템으로 사용될 수 있다.
Snort의 기능 세 가지
- 패킷 스니퍼 모드 : 네트워크 상의 패킷을 스니핑하여 보여주는 기능
- 패킷 로거 모드 : 모니터링한 패킷을 저장하고 로그에 남기는 기능
- IDS/IPS 모드 : 네트워크 트래픽을 분석해 공격을 탐지/차단하는 기능
Snort의 작동원리
1) 패킷 캡처
2) 패킷 유형 분류 및 표준화
3) 패킷 엔진에 전달
4) 패킷 분석 및 대처
5) 로그 기록
Snort Rule 이란?
- 공격을 탐지하기 위한 등록된 규칙
- 수신되는 패킷을 룰에 기반해 탐지 여부
- Rule은 Rule Header와 Rule Option으로 구성되고 Rule Header는 Action Protocol , IP주소 , 포트 등으로 구성되고 Rule Option 은 탐지할 조건으로 구성됨.
- Action : 대응 방법
- Protocol : 특정 프로토콜 패킷 탐지
- SrcIP : 출발지 IP 주소
- SrcPort : 출발지 포트 번호
- DstIP : 목적지 IP 주소
- DstPort : 목적지 포트 번호
Rule Signature란 Rule Header와 Rule Option으로 구성돼있는 룰을 말한다.
룰 옵션의 예시로
alert icmp any any -> any any (msg:"ping-request"; itype:8; sid:1000000; rev:1;)
- alert : 알람을 발생시키고 패킷을 로그에 남김
- msg : alert가 발생하면 msg가 설정된 문장을 로그파일에 기록
- sid : 시그니처 아이디를 지정하는 것으로 0~99는 예약되어 있고 100~1,000,000은 snort.org에서 공식적으로 배포하는 룰 1,000,000 이상의 값으로 사용자가 지정해서 사용
- nocasse 패턴을 매칭할 때 대문자와 소문자를 구분하지않음
Rule Option 크게 네 가지로 분류 됨.
- General
- Payload
- Non-Payload
- Post-Detection
- Snort 실습
Snort 실습을 위해 Oracle Virtual Box에 CentOS를 불러와서 Putty로 접속해서 사용하였다.
1) Snort 설치
① yum install epel-release
② yum install wget gcc gcc-c++ libnetfilter_queue-devel git flex bison zlib zlib-devel pcre pcredevel libdnet* libpcap* nghttp2 xz-devel libtool libsfbpf* daq* -y
③ rpm -ivh https://snort.org/downloads/snort/snort-2.9.20-1.centos.x86_64.rpm
④ ln -s /usr/lib64/libdnet.so.1.0.1 /usr/lib64/libdnet.1
2) 설정파일과 룰파일 생성
다음과 같은 구성 환경을 구축하기 위해서
snort.conf 파일을 수정해주고, local.rules파일을 생성한뒤에 룰을 추가해준다.
정상적으로 작동하는지 snort -i eth 0 -c /etc/snort/snort.conf -A console 명령어를 입력하여 snort를 실행한 뒤에
Windows에서 cmd 창을 통해 ping을 보내어 확인한다.
3) mysql 설치
① rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el7-11.noarch.rpm
② yum install mysql-server mysql-devel -y
③ service mysqld start ④ 패스워드 및 외부 접속 설정
4) barnyard2 설치
여기서 barnyard2란 snort가 가지고있는 출력기능을 대신해주는 도구이다.
관계도는 다음과 같다.
5) db연결
SQLyog라는 프로그램을 통해 DB를 연동하고 barnyard2 또한 연동한다.
6) 실행
모든 환경을 구축해서 실행하면 절차는 트래픽,전처리기, 병렬 패턴 매칭, 룰 패턴매칭이 수행되면 룰에 의한 패킷이 barnyard에서 출력이 되고 Mysql을 통해 DB에 이벤트들이 저장된다.