728x90
반응형
Snort 란?
Snort는 오픈 소스 침입 방지 시스템(IPS)입니다. Snort IPS는 악의적인 네트워크 활동을 정의하는 데 도움이 되는 일련의 규칙을 사용하고 이러한 규칙을 사용하여 일치하는 패킷을 찾고 사용자에게 경고를 생성한다.
네트워크에 대한 룰을 정의해서 침입에 대한 탐지 및 방지를 위한 오픈소스라고 보면 될꺼 같다.
Snort 특징
- 패킷 스니퍼 : 네트워크상의 패킷을 읽어서 보여주는 기능
- 패킷 로거 : 탐지한 패킷의 로그를 기록하여 트래픽 및 디버깅을 활용
- NIDS (Network IDS) : 침입탐지 시스템, 네트워크 트래픽 분석, 공격 탐지
- Snort Inline : 침입방지 시스템, 패킷 분석, 공격 차단
※ IDS (Intrusion Detection System) 는 네트워크를 모니터링하고 부적절하거나 부정확하거나 비정상적인 활동을 감지하는 시스템을 말하며 IPS (Intrusion Prevention System)는 탐지 된 침입을 방지하거나 차단하기위한 조치를 적극적으로 취하는 것을 말한다.
Snort 설치 방법
1. 의존성 패키지 설치
root@security:~# apt-get install -y make gcc libpcre3-dev zlib1g-dev libluajit-5.1-dev
root@security:~# apt-get install -y libpcap-dev openssl libssl-dev libnghttp2-dev libdumbnet-dev
root@security:~# apt-get install -y bison flex libdnet autoconf libtool
2. snort 설치
2-1. 임시 디렉토리 생성
root@security:~# mkdir ~/temp
root@security:~# cd ~/temp
root@security:~# /temp
2-2. DAQ 설치
root@security:~/temp# wget https://snort.org/downloads/snort/daq-2.0.7.tar.gz
root@security:~/temp# tar xvfz daq-2.0.7.tar.gz
root@security:~/temp# cd daq-2.0.7/
root@security:~/temp/daq-2.0.7# ./configure && make && sudo make install
2-3. snort 설치
root@security:~/temp# wget https://snort.org/downloads/snort/snort-2.9.19.tar.gz
root@security:~/temp# tar xvfz snort-2.9.19.tar.gz
root@security:~/temp# cd snort-2.9.19
root@security:~/temp/snort-2.9.19# ./configure --enable-sourcefire && make && sudo make install
3. NIDS 모드에서 실행하도록 snort 구성
root@security:~/temp/snort-2.9.19# ldconfig
root@security:~/temp/snort-2.9.19# ln -s /usr/local/bin/snort /usr/sbin/snort
4. 기동 유저 생성
root@security:~# groupadd snort
root@security:~# useradd snort -r -s /sbin/nologin -c SNORT_IDS -g snort
5. snort 디렉토리 구조 설정
5-1. snort 를 구성할 디렉토리를 생성
root@security:~# mkdir -p /etc/snort/rules
root@security:~# mkdir /var/log/snort
root@security:~# mkdir /usr/local/lib/snort_dynamicrules
5-2. 생성한 디렉토리에 권한을 설정
root@security:~# chmod -R 5775 /etc/snort
root@security:~# chmod -R 5775 /var/log/snort
root@security:~# chmod -R 5775 /usr/local/lib/snort_dynamicrules
root@security:~# chown -R snort:snort /etc/snort
root@security:~# chown -R snort:snort /var/log/snort
root@security:~# chown -R snort:snort /usr/local/lib/snort_dynamicrules
5-3. white, black, local 룰 규칙에 대한 새로운 파일을 생성
root@security:~# touch /etc/snort/rules/white_list.rules
root@security:~# touch /etc/snort/rules/black_list.rules
root@security:~# touch /etc/snort/rules/local.rules
5-4. 다운받은 디렉토리에서 snort 설정 파일을 복사
root@security:~# cp -av ~/temp/snort-2.9.19/etc/*.conf* /etc/snort
root@security:~# cp -av ~/temp/snort-2.9.19/etc/*.map /etc/snort
6. snort 환경 설정
6-1. 경로 설정 및 local.rules 주석 해제
root@security:~# vi /etc/snort/snort.conf
# 104번째줄 경로 수정
----------------------------------------------------------------------------
# such as: c:\snort\rules
var RULE_PATH /etc/snort/rules
var SO_RULE_PATH /etc/snort/so_rules
var PREPROC_RULE_PATH /etc/snort/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 /etc/snort/rules
var BLACK_LIST_PATH /etc/snort/rules
----------------------------------------------------------------------------
...
# 504번째줄 local.rules 주석 해제
----------------------------------------------------------------------------
# site specific rules
include $RULE_PATH/local.rules
----------------------------------------------------------------------------
6-2. 불필요한 부분을 주석처리 및 테스트 진행
root@security:~# sed -i 's/include \$RULE\_PATH/#include \$RULE\_PATH/' /etc/snort/snort.conf
root@security:~# snort -T -c /etc/snort/snort.conf
7. Rule 테스트
7-1. local.rules 설정
테스트를 위하여 모든 출발지, 도착지에 대하여 ICMP 프로토콜 경고 발생 설정한다.
처리방법 | 설명 |
alert | 알람을 발생시키고 로그를 남긴다. |
log | 로그를 남긴다. |
pass | 무시한다. |
activate | 알람을 발생시키고 대응하는 dynamic action을 활성화 한다. |
dynamic | activate에 의해 활성화되면 로그에 남긴다. |
drop | iptables를 통해 패킷을 차단하고 로그를 남긴다. |
sdrop | iptables를 통해 패킷을 차단하고 로그를 안남긴다. |
reject | drop과 동일하지만 메세지를 남긴다. TCP : RST 패킷 발생 UDP : ICMP Destination Unreachable 발생 |
root@security:~# vi /etc/snort/rules/local.rules
alert icmp any any -> any any (msg:"ICMP TEST"; sid:10000001;)
옵션 | 설명 |
msg | alert, log 출력시 이벤트명으로 사용 |
content | 패킷의 페이로드를 검색하는 문자열 |
offset | content에서 검색할 문자열 offset 지정 |
nocase | 대소문자를 구분하지 않는다. |
rev | 룰 횟수 수정 |
sid | 룰을 식별하기 위한 식별자 * 100 미만 : 예약 * 100 ~ 100만 사이 : www.snort.org 에서 배포하는 룰 * 100만 초과 : 사용자 정의 룰 |
7-2. 타 서버에서 snort가 설치된 서버로 ping 테스트
# 타 서버에서 ICMP 프로토콜 (ping) 호출
root@security:~$ ping 20.100.0.101
PING 20.100.0.101 (20.100.0.101) 56(84) bytes of data.
64 bytes from 20.100.0.101: icmp_seq=1 ttl=64 time=0.542 ms
64 bytes from 20.100.0.101: icmp_seq=2 ttl=64 time=0.712 ms
64 bytes from 20.100.0.101: icmp_seq=3 ttl=64 time=0.543 ms
64 bytes from 20.100.0.101: icmp_seq=4 ttl=64 time=0.667 ms
64 bytes from 20.100.0.101: icmp_seq=5 ttl=64 time=0.509 ms
64 bytes from 20.100.0.101: icmp_seq=6 ttl=64 time=0.554 ms
64 bytes from 20.100.0.101: icmp_seq=7 ttl=64 time=0.495 ms
64 bytes from 20.100.0.101: icmp_seq=8 ttl=64 time=0.487 ms
# snort가 설치되어 있는 서버에서 로그 보기
root@security:~# tail -f /var/log/snort/alert
[**] [1:10000001:0] ICMP TEST [**]
[Priority: 0]
02/18-17:30:49.958465 20.100.0.102 -> 20.100.0.101
ICMP TTL:64 TOS:0x0 ID:49545 IpLen:20 DgmLen:84 DF
Type:8 Code:0 ID:2 Seq:11 ECHO
[**] [1:10000001:0] ICMP TEST [**]
[Priority: 0]
02/18-17:30:49.958526 20.100.0.101 -> 20.100.0.102
ICMP TTL:64 TOS:0x0 ID:50949 IpLen:20 DgmLen:84
Type:0 Code:0 ID:2 Seq:11 ECHO REPLY
728x90
반응형