본문 바로가기
[자격증] 정보보안기사/↘ 정보보안 실무

[ 정보보안기사 / 정보보안산업기사 ] 스노트 (Snort)

by 승큐리티 2020. 6. 2.

[ 정보보안기사 / 정보보안산업기사 ]

스노트 (Snort)


1. 스노트 (Snort)
네트워크 침입 탐지 시스템


2. 스노트 (Snort) 기능
- 스니퍼 : 네트워크 패킷 스니핑
- 패킷 로거 : 패킷을 로깅
- 네트워크 침입탐지 : 트랙픽 분석 후 침입탐지


3. 스노트 룰 (Snort Rule)
스노트 사용자 설정 헤더부분과 바디부분으로 나뉜다.

3-1. 룰 헤더 부분
탐지 후 행동들, 프로토콜, IP, 포트번호 명시, 방향

룰 헤더(head)
Action protocal src_ip address src_port direction dst_ip address dst_port
탐지 후 행동들 탐지 프로토콜 출발 IP 출발 포트 탐지방향지정 목적지 IP 목적지 포트


3-1-1. Action : 탐지 후 행동들

Action 설명
alert 경고 알림 후 로그 기록
log 로그 기록
pass 패킷 무시
activate alert 실행 후 dynamic 실행
dynamic 더 많은 로그 기록
drop 패킷 차단 후 로그 기록
reject 패킷 차단 후 로그 기록 후
TCP - TCP RST
UDP - ICMP port unreachable
메시지 전송
sdrop 패킷 차단 후 로그 기록 없음

3-1-2. protocal : 탐지 할 프로토콜 종류

protocal 설명
TCP TCP 탐지
UDP UDP 탐지
ICMP ICMP 탐지
IP IP 탐지

3-1-3. ip address : 출발지 , 목적지 ip 지정

ip address 설명
any 모든 IP
IP 특정 IP
IP/20 특정 IP대역
[IP,IP] []를 사용하여 다수 IP 지정
!(I) IP를 제외한 모든 IP
$HOME_NET 스노트 설정 파일의 내부 IP 주소
$EXTERNAL_NET 스노트 설정 파일의 외부 IP 주소

3-1-4. port : 출발지 , 목적지 포트 지정

port 설명
any 모든 포트
포트번호 특정 포트
포트번호:포트번호 포트번호 ~ 포트번호
:포트번호 포트번호 이하 모든 포트
포트번호: 포트번호 이상 모든 포트

3-1-5. direction : 방향지정

direction 설명
-> 출발지 -> 목적지 패킷 탐지
<> 출발지 목적지 사이 모든 패킷 탐지

 

3-2. 룰 바디 부분
패킷 탐지 사용자 설정

3-2-1. 일반옵션 설정
msg : alert 발생 시 이벤트 명

sid : 스노트 룰 ID
      99이하 : 시스템 예약 ID
      100 ~ 1000000 이하 : snort 자체지정 sid
      1000001 이상 : 사용자 정의 sid

rev : 룰 수정횟수 수정 시 숫자가 증가

3-2-2. 페이로드 범위 설정
content : 검사할 문자열 지정
- content:"문자열" : text형식의 해당 문자열 검사
- content:"|00 11|" : 바이너리형식의 해당 값 검사

offset : 검사 시작 위치 ( offset은 0부터 시작 )

depth : 검사 시작 위치 기준으로 몇 바이트 검사 할 것인지 결정

distance : 이전 검사 패턴 후 몇 바이트 떨어진 곳에서 다음 패턴 검사할지 결정

within : distance 위치 기준으로 몇 바이트 검사 할 것인지 결정

nocase : 페이로드 검사 시 대소문자 구분 X



문제1 ) 다음의 snort 룰에 대한 물음에 답하시오.
alter tcp any any -> 80 *msg "XSS"; ①content:"GET"; offset:1; depth:3; ②content:"/login.php?iD:<script?"; distance:1;)

1) content: "GET"; offset:1; depth:3; 무슨 뜻인가?
2) content: "/login.php?iD:<script?"; distance:1; 무슨 뜻인가?
3) 문자열 " GET /login.Php?iD :<script> " 검색이 안된다면 어떻게 변형해야하는가?

 

답1 )
1. 패킷 중 2번째 문자열 부터 3바이트 내에 GET 문자열 있는지 검사
   즉, 2번째 문자열부터 4번째 문자열까지 GET 문자열 패턴 검사

  (2번째 문자열)
G
(3번째 문자열)
E
(4번째 문자열)
T
   
  offset 1
depth 1
depth 2 depth3    


2. 첫번째 content 패턴 검색 후 1바이트 떨어진 위치에서  "/login.php?iD:<script?"문자열 있는지 검사

  (2번째 문자열)
G
(3번째 문자열)
E
(4번째 문자열)
T
  /login.php?iD:<script?
  offset 1
depth 1
depth 2 depth3   distance:1


3. nocase 옵션을 사용하여 대소문자 구분을 하지않고 sid를 추가한다.
alter tcp any any -> 80 *msg "XSS"; content:"GET"; offset:1; depth:3; content:"/login.php?iD:<script?"; distance:1;)

alter tcp any any -> 80 *msg "XSS"; content:"GET"; offset:1; depth:3; content:"/login.php?iD:<script?"; distance:1; nocase; sid:100001;)


문제2 ) 다음의 snort 룰에 대한 물음에 답하시오.
alert tcp any any < > any ①[443,465,523] (②content:"|18 03 00|"; depth: 3;content:"|01|"; distance: 2; within: 1;content:!"|00|"; within: 1;msg: "SSLv3 Malicious Heartbleed Request V2"; sid:1;)

 

답2 )
1. 목적지 포트는 443번, 465번, 523번 포트로 지정한다.
2. 3byte 내에 18 03 00 바이너리 값이 있는지 검사한다.
3. 첫번째 컨텐츠 2byte 떨어진 곳에서 1byte 범위 내에 01 바이너리 값이 있는지 검사한다.
4. 두번째 컨첸츠 끝난 위치에서 1byte 내에 00 바이너리 값이 없는지 검사한다.
5. alert 알림명으로 SSL~V2를 쓴다.
6. sid번호 (스노트 룰 번호)는 1로 지정한다.


 

댓글