[네트워크 보안] 스노트(Snort)

박은미·2021년 10월 7일
0

정보보안기사

목록 보기
1/4

스노트 개요

  • 네트워크상의 실시간 트래픽 분석 및 패킷 로깅을 수행할 수 있는 오픈소스 네트워크 침입 탐지 시스템(IDS)
  • 1998년 SourceFire사의 CTO Martin Roesch에 의해 발표됨
  • 침입탐지시스템(IDS) 중 가장 널리 사용됨
  • 윈도우, 리눅스 버전이 있음

스노트 기능

  • 패킷 스니퍼(Packet Sniffer) : 네트워크 상의 패킷 스니핑
  • 패킷 로거(Packet Logger) : 모니터링한 패킷을 저장하고 로그에 남기는 기능
  • 네트워크 침입탐지(IDS/IPS) : 네트워크 트랙픽 분석 후 침입탐지

스노트 룰

룰 헤더부분과 룰 옵션으로 구성된다.

1. 룰 헤더

액션프로토콜송신 IP송신 PORT방향수신 IP수신 PORT(룰 옵션)
탐지 후 행동들탐지 프로토콜출발 IP출발 PORT탐지방향지정목적 IP목적 포트

1.1. Action: 탐지 후 행동들

  • alert : 경고를 발생시킨다.
  • log : 로그를 기록한다.
  • pass : 패킷을 무시한다.
  • active : alert를 발생시키고 대응하는 dynamic을 유효화 한다.
  • dynamic : active에 의해 유효화된 경우 한쪽의 패킷을 기록한다.
  • drop : 패킷을 차단하고 기록한다.

1.2. Protocol: 탐지 할 프로토콜 종류

  • TCP : TCP 탐지
  • UDP : UDP 탐지
  • ICMP : ICMP 탐지
  • IP : IP 탐지

1.3. 송신 IP & PORP

  • any : 모든 포트
  • 포트번호 : 특정 포트
  • 포트번호:포트번호 : 포트번호 ~ 포트번호
  • :포트번호 : 포트번호 이하 모든 포트
  • 포트번호: : 포트번호 이상 모든 포트
  • 예시
    211.11.22.33 80
    211.11.22.0/24 443
    any 80
    211.11.22.33 any
    any any
    '$HOME_NET' 와 같이 snort.conf에서 지정한 변수를 참조할 수도 있다.

1.3. Direction

  • -> : 출발지 -> 목적지 패킷 탐지
  • <> : 출발지 목적지 사이 모든 패킷 탐지

2. 룰 바디

  • 패킷 탐지 사용자 설정
  • 세미콜론(;)을 이용하여 옵션과 옵션을 구분

2.1. 일반옵션 설정

  • msg : alert 발생 시 이벤트 명
  • sid : 스노트 룰 ID
    99이하 : 시스템 예약 ID
    100 ~ 1000000 이하 : snort 자체지정 sid
    1000001 이상 : 사용자 정의 sid
  • rev : 룰 수정횟수 수정 시 숫자가 증가

2.2. 페이로드 범위 설정

  • dsize : dzise:<바이트, dsize:바이트<>바이트 와 같이 상한선, 하한선, 범위를 지정할 수 있다.
  • content : 문자, 바이너리로 패턴을 탐지한다.
    • content: "문자"
    • content: | 00 01 0A AA |
    • content: "| 90 90 90 | /bin/sh"
  • offset : 검색을 시작할 byte수를 지정한다.
  • depth : offset부터 시작하여 검색할 byte수를 지정한다.
  • nocase : 대소문 자를 구별하지 않는다.
  • flags : TCP 제어 플래그를 지정한다. F, S, FA, FSA 등으로 지정 가능하다.
  • pcre : 정규식을 사용한다.
  • threshold : 패킷의 발생량을 기반으로 탐지한다.
    아직까지 흔히 사용 되고 있지만 공식적으론 사용을 권장하지 않는다.
    비슷한 기능을 하진 detection_filter 사용이 권장된다.
    • type limit(로그발생기준: 임계값), threshold(로그발생기준: 패킷량), both(로그발생기준: IP)
    • track by_src , by_dst
    • count n : number events used by the thresholding
    • seconds m : time period over which count is accrued.

스노트 예제

1. 비정상적인 SSH 로그인 시도 탐지 시나리오 (Brute Force Attack : 30초안에 5번 로그인 시도 공격 탐지)
alert tcp any any -> any 22 (msg:"SSH Brute Force Attack"; content:"SSH-2.0"; nocase; threshold:type both, track by_src, count 5, seconds 30; sid:1000001;)

2. 모든 네트워크 대역에서 Telnet으로 접속하는 패킷 중 14번째 자리까지 'anonymous'가 포함된 트래픽에 대해서 'Dangerous' 메시지로 경고하는 snort rule을 만드시오.

alert tcp any any -> any 23 (msg:"Dangerous"; content:"anonymous"; depth:14; sid:1;)

3. 다음 보기를 보고 문제점과 해결방안을 제시하시오.
tcp any any -> any any PCRE(/^POST.*Contentx2dLengthx2ax20evilstring)
3.1. 해당 Rule은 어떤 문제점을 가지고 있는가?
Rule에는 HTTP프로토콜에 대한 정규식(POST, Content-Length가 포함)이지만 모든 포트 any로 설정되어 있어 HTTP서비스가 아닌 불필요한 트랙픽에 대해서도 감시를 수행함. 시스템에 오버헤드 유발.
3.2. 해결방안은 무엇인가? 목적지 주소와 포트를 웹서버주소, 80 포트로 설정하여 부하를 감소
tcp any any -> 웹서버IP 80

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

4.1. content: "GET"; offset:1; depth:3; 무슨 뜻인가?
패킷 중 2번째 문자열 부터 3바이트 내에 GET 문자열 있는지 검사(=2번째 문자열부터 4번째 문자열까지 GET 문자열 패턴 검사)
4.2. content: "/login.php?iD"; distance:1; 무슨 뜻인가?
첫번째 content 패턴 검색 후 1바이트 떨어진 위치에서 "/login.php?iD" 문자열 있는지 검사
4.3. 문자열 " GET /login.Php?iD :<script? " 검색이 안된다면 어떻게 변형해야하는가?
nocase 옵션을 사용, sid 추가
alter tcp any any -> 80 *msg "XSS"; content:"GET"; offset:1; depth:3; content:"/login.php?iD:<script?"; distance:1; **nocase; sid:100001;**)

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

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

7. 다음은 HTTP GET Flooding 공격에 대한 스노트 탐지이다.
alert tcp any any -> any 80 (msg:'HTTP Get Flooding Detect'; content:"GET/HTTP1";( ); nocase; threshold: type threshold, track by src, count 10, seconds 1; sid:1000001)
7.1) 스노트 룰의 action 은 패킷이 탐지 되었을때의 처리 방식을 의미한다. 탐지된 패킷을 차단하고 로그를 남기는 action 2가지는? drop, reject
7.2) content를 첫번째 바이트로부터 13번째 바이트 범위안애서 검사하고자 할때 () 안에 들어갈 옵션은? depth 13
7.3) threshold 옵션은 특정 시간동안 발생하는 이벤트 수를 제한하여 과도하게 많은 이벤트가 발생하는 것을 방지하기 위한 옵션이다. 위에서 alert 이벤트 발생 수를 제한하는 기준과 방식은? 출발지를 기준으로 매 1초동안 10번째 이벤트마다 action을 수행


https://itwiki.kr/w/%EC%8A%A4%EB%85%B8%ED%8A%B8
https://goc1221.tistory.com/60
https://q.fran.kr/%EB%AC%B8%EC%A0%9C/9815

0개의 댓글