본문 바로가기

네트워크

윈도우에 snort 설치 및 룰 추가

반응형

ி 개요


snort는 네트워크 트래픽을 감시하고 분석하기 위한 도구로써
Rule 기반으로 패턴을 검색하며 , 포트스캔, BOF , CGI 공격 , SMB 탐색, OS 확인 시도 등
다양한 공격을 탐지할 수 있다.



ி 설치




snort 설치


윈도우 버전과 리눅스 버전으로 나뉜다.
필자는 win10에서 윈버전으로 설치한다.

설치하기전에 패킷을 수집하기 위한 도구인 winpcap을 설치해야한다.

http://www.winpcap.org/install/default.htm

그리고 snort 공식홈페이지에 들어가서 Get Started를 누르고 인스톨러를 내려받아서
Next로 쭉 진행한다. snort는 보통 루트경로에 설치한다.
https://snort.org/


snort 룰 파일 다운


추가적으로 snort에 적용할 룰 파일을 다운받아야하는데
snort 회원가입이 필요하다. (메일계정 인증 필요)


Snort v2.9에 최신룰을 내려받는다.



압축해제하면 rules 폴더에 있는 파일들을 snort\rules에,
preproc_rules 폴더안 파일들을 snort\preproc_rules 폴더에 붙여넣는다.



완료되면 cmd를 열고 snort가 설치된 경로로 이동하여
snort -V (snort 버전 확인)명령을 입력해보자.
 



ி 설정



bin 폴더에는 실행파일이 있고,
rules는 탐지 룰을 설정할 수 있으며,
etc는 snort 관련 설정 파일이 들어있다.
log는 탐지된 로그가 저장되는 곳이다.


네트워크 설정


snort가 설치된 폴더에 있는 etc 폴더 밑에 snort.conf 라는 메인 설정 파일이 있다.
해당 파일의 옵션을 설정해보자.


내용 중에 ipvar portvar는 모두 var로 바꾼다.

HOME_NET은 snort가 감시할 목적지 IP를 적는 곳이다.


EXTERNAL_NET은 외부 IP 주소를 적는다. 주로 ANY를 적지만
!$HOME_NET를 하면 출발지와 목적지가 동일한 ip로 들어오는 공격을 막을 수 있다.


룰 설정



RULE_PATH는 패턴검사에 적용될 룰 파일이 있는 디렉토리를 지정한다.

snort는 룰 기반으로 공격을 찾아 경고해준다.

PREPROC_RULE_PATH는 preprocessor가 있는 디렉토리를 지정한다.
preprocessor는 패킷 전처리기로써 패킷이 탐지 엔진에 도달하기 전에 패킷에 대한 경고를 하거나
수정 또는 버리기 위하여 사용한다.

dynamicpreprocessor directory는 본인이 설치한
snort\lib에 snort_dynamicpreprocessor 폴더를 지정하고
dynamicengine snort\lib\snort_dynamicengine\sf_engine.dll 파일을 지정한다.



/로 되어있는 것은 리눅스 경로라서 윈도우에 맞게 모두 \(역슬래시)로 바꿔준다.


로그 설정


config logdir은 snort 로그를 저장할 위치를 지정한다.



ி 룰 추가



msg 이전에 정보들을 RTN(Rule Tree Node)라고 하며 ,
시그니처 내용을 담고 있는 msg 부분부터 OTN(Option Tree Node)이라고 한다.

rules 폴더에local.rules 파일을 열어서 탐지할 규칙을 추가한다.



룰 헤더


Alert - 알람 발생 시키고 로그 남김
Log - 로그남김
Pass - 무시
Activate - 알람 발생, 대응하는 Dynamic Action활성화
Drop - Iptables를 통해 패킷 차단 및 로그 남김
sdrop - Iptables를 통해 패킷 차단 및 로그 남김
rejet - Drop과 동일 하고 메시지를 남김

룰 옵션


msg - Alert, log 출력시 이벤트명으로 사용
content - 패킷의 페이로드 내부를 검색하는 문자열
offset - Content에서 검색할 문자열 offset(검색 시작위치 지정)
depth - Content를 어디까지 검색할지 지정
nocase - 대소문자 구별 X
rev - 룰 수정 횟수

sid - 룰 식별자
- 100 미만 : 예약
- 100~100만사이 : www.snort.org에서 배포하는 룰
100만초과 : 사용자 정의 룰

resp - 지정된 응답 패킷을 보낸다
rst_snd, rst_rcv - [snd(송신측), rcv(수신측)] 연결을 끊는다.
rst_all - 측의 연결을 끊는다 
icmp_net, icmp_host, icmp_port : ICMP [network, host, port] unreachable 메시지를 전송한다
icmp_all : 양측의 연결을 끊는다

react - 패킷을 차단하거나 경고 메시지를 출력한다.
react:block; - 패킷을 차단한다
react:warn, msg; - 사용자 브라우저에 msg 문구를 전송한다.

threshold - 동일한 특정 패킷이 설정한 시간안에 일정 수가 발견되면 경고 알림 출력, 
BruteForce 공격 검출시 유용
threshold:type [limit . threshold, both], track [by_src, by_dst], count [number], seconds [time]
limit - count 하는 동안 x 번째 트래픽 까지 탐지
threshold - 횟수마다 계속 탐지
both - count 하는 동안 횟수만큼 트래픽이 탐지되면 1번만 알림
by_src - 출발지 패킷
by_dst - 도착지 패킷


실습


내부 = HOME_NET = 192.168.0.0/24

내부에서 외부로 나가는 ICMP 트래픽 탐지
alert icmp HOME_NET any -> !HOME_NET any (msg:"in-out udp"; sid: 1000001;)

외부에서 내부 telnet 서버로 접근하려는 트래픽 탐지 및 차단
alert tcp !HOME_NET any -> telnet_srv 23 (msg:"Telnet illegal approach Detection"; resp:rst_snd; sid:1000002;)
➽ 만약 출발지에 any를 쓴다면 내부망에 있는 사용자들도 차단되므로 주의

모든 네트워크 대역에서 Telnet으로 접속하는 패킷 중 14번째 자리까지 'anonymous'가 포함된 트래픽에 대해서 'Dangerous' 메시지로 경고하기
alert tcp any any -> any 23 (msg: "Dangerous"; content: "anonymous"; depth: 14; sid: 1000003;)

특정 페이지의 소스 코드 중 악성코드가 삽입된 아이콘(hacker.png)을 요청하는 
코드가 포함되어 있음. 해당 아이콘(hacker.png) 파일명이 포함된 HTTP 요청 트래픽 탐지
alert tcp HOME_NET any -> !HOME_NET 80 (msg:"risk icon Request"; content:"hacker.png"; sid:100004;)

외부에서 내부 웹 서버 관리자 페이지 접근시도를 탐지 및 차단
alert tcp !HOME_NET any -> adserv_ip 80 (msg:"Web-AdminPage illegal approach Detection"; content:"admin.html"; http_uri; react:block; sid:1000005;)

 FTP 서버에 로그인이 실패하면 "Login incorrent" 메시지가 출력된다. 
      20초 동안 15번의 로그인 시도 실패 탐지
alert tcp any 21 -> any any (msg:"FTP Broute Force";threshold: type both, track by_src, count 15, seconds 20; content:"Login incorrect"; sid:1000006;)   

Snort 정책에서 10바이트에서 12바이트 중 00FF 바이트에 해당하는 내용을 찾으려고 한다.
보기의 rule에 빈칸을 채워보기
alert tcp any any (( A ):"|00FF|";( B ):9,( C ):2)

A: content
B: offset
C: depth





자료 출처



반응형

'네트워크' 카테고리의 다른 글

네트워크 방화벽(Firewall)  (0) 2019.09.25
패킷 트레이서 ACL(Access Control List)  (0) 2019.09.21
와이어샤크 주요 기능  (0) 2019.09.02
VMware 네트워크 구조  (0) 2019.06.09
망분리 유형  (0) 2019.04.24