소소한 IT이야기/정보보안기사 실기

[정보보안기사] 침해사고 분석 및 대응 - Snort (feat. 실기 기출)

Klaus 2023. 7. 12. 16:20

1. 침입탐지시스템

 

[+] 정의

- 오픈소스 기반 N/W 트래픽 감시 및 분석 SW

- Snort 설치(linux) : /etc/snort/ 설정파일 

- Snort Rule : 크게 헤더(Header)와 바디(Body)로 구성

위키백과

2. Header

- 패킷이 탐지되었을 때, 처리 방식

- 구조 : [action] + [Protocol] + [IP] + [Port] 

> 예) alert udp 0.0.0.0/0 any -> 192.168.10.0/24 any

 

[+] action 유형

- alert: 알람 발생, 패킷 log 기록

- log: 패킷 log만 기록

- pass: 패킷 무시

- activate: alert 발생 후 dynamic 룰 동작 (dynamic와 한쌍)

- dynamic: activate에 의해 실행되고(트리거) 패킷 log 기록

- 환경변수(snort.conf)

 > $EXTERNAT_NET (외부)

 > $HOME_NET (내부)

 

※ 아래는 IPS 역할 ( 패킷 차단 기능)

- drop: 패킷 차단하고 log 기록

- reject: 패킷 차단하고 log 기록 (TCP : Reset  / UDP : ICMP port unreachable 메시지 전송)

- sdrop: 패킷 차단만 하고 로그 기록하지 않음 (실무에서는 잘 사용되지 않음)

 

3. Body

- 패킷 검출을 위한 다양한 옵션 설정 가능

 

[+] 일반옵션 설정

- msg : alert 발생 시 이벤트 명
- sid : 스노트 룰 ID
> 99 이하 : 시스템 예약 ID
> 100 ~ 1,000,000 이하 : snort 자체지정 sid
> 1,000,000 이상 : 사용자 정의 sid
- rev : 룰 수정 횟수 수정 시 +1씩 증가

 

[+] 페이로드 범위 설정

- content : 검사할 문자열 지정
> content:"문자열" : text형식의 해당 문자열 검사
> content:"|00 11|" : 바이너리형식의 해당 값 검사
- offset : 검사할 시작 위치 (0부터 시작)
- depth : 검사 시작 위치 기준으로 몇 바이트 검사 할 것인지 지정
- distance : 이전 검사 패턴 후 몇 바이트 떨어진 곳에서 다음 패턴 검사할지 지정
- within : distance 위치 기준으로 몇 바이트 검사 할 것인지 지정
- nocase : 페이로드 검사 시 대소문자 구분 X

4. Suricata

- 기존 스노트의 장점을 가지고 있으며, 대용량 트래픽을 실시간으로 처리하는데 특화된 소프트웨어

- 2010년 미국 OISF에서 개발

위키백과

[+] Snort와 차이점( 스노트+ 기능)

- Protocol Identification : 포트번호를 지정 안 하고 Protocol의 Name으로 Rule 지정가능

- HTTP Normalizer & Parser : 7계층 (응용프로그램 계층)의 프로토콜 인식 가능

- File Identification : 네트워크 패킷에서 전송되는 파일을 탐지

 

5. Snort 기출 복원

[+] 3회

5. “/administrator” 라는 문자열이 포함되어 있는 경우 “Web Scan Detected”란 메시지 로깅을 위한 Snort rule은 각각 무엇인가?

Alert tcp any any -> 192.168.0.1 ( A ) ( ( B ) : “/administrator; ( C ): “Web Scan Detected”;)

 

- 정답 : 

더보기

A: any : 모든 포트
B: content : 텍스트 검출
C: msg : 메세지 출력

 

[+] 7회(단답형)

4. Snort 정책에서 10바이트에서 12바이트 중 00FF 바이트에 해당하는 내용을 찾으려고 한다. 보기의 rule에 빈칸을 채워 rule을 완성하시오.

alert tcp any any (( A ):"|00FF|";( B ):9,( C ):2)

- 정답 :

더보기

A: content : 텍스트 검출
B: offset : 시작할 위치
C: depth : offset기준 몇바이트를 검사할 것인지

 

[+] 11회

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

- 정답 : 

더보기

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

  • alert:  패킷이 룰에 탐지되었을 때 알림을 보내는 액션 지정
  • tcp: 규칙이 TCP 프로토콜에 대해 동작함
  • any any: 모든 소스 IP 주소와 포트를 허용
  • ->: 트래픽의 방향을 나타내며, 이 경우에는 어떤 대상 IP 주소의 23번 포트로 트래픽이 전송되는 것을 의미
  • msg: "Dangerous": 이 규칙이 위협을 나타낼 때 출력되는 알림 메시지
  • content: "anonymous": 패킷 내용에 "anonymous"라는 문자열이 포함되어 있는지 확인합니다.
  • depth: 14: 패킷 내용에서 문자열을 검색할 때의 최대 길이를 제한합니다. 여기서는 14바이트까지만 확인합니다.
  • sid: 1000001: 규칙을 식별하기 위한 고유한 규칙 ID입니다. 

TCP를 넣는 이유??? 텔넷의 포트 번호가 23/TCP이기 때문에 사용

sid: 1000001의 경우 사용자 지정이기 때문에 사용

 

[+] 11회

16. 다음은 공개 IDS 소프트웨어인 snort의 관제 규칙(rule)이다. 각각의 질문에 답하시오.

alert any any - > any 80 ( msg "XSS"; content "GET"; offset:1; depth:3: content:"/login.php.. XSS"; distance 1;)

위와 같은 snort 룰을 등록하였는데 아래 접근이 탐지되지 않았다.

Content :"/Login.php?id=...";

1) content:"GET"; offset:1 depth:3 의미 

2) content:"/login.php XSS"; distance 1; 의미 

3) 탐지되지 않은 접근이 탐지되도록 하려면 어떻게 수정해야 하는가?

 

- 정답 :

더보기

1) 2번째 부터(offset:1) 3바이트(deoth:3) 범위에서 GET문자열 패턴 찾기

2) Content 패턴에 매치된(GET찾기) 이후 바이트부터, 1바이트 떨어진 위치에(distance:1) /login.php XSS 문자열 패턴이 있는지(content:"/login.php XSS") 찾기

3) 패턴 등록시 대소문자 구별 없이(nocase;)을 추가하거나, 아래 주어진 탐색에서 대문자를 소문자로 적어 사용(nocase; 권고)

[+] 17회

15. 각각의 Snort Rule 설정의 의미를 작성하시오.

(1) msg:"GET Flooding"
(2) content:"GET / HTTP1."
(3) content:"USER"; content:!"anonymous"
(4) content:"|00|";depth:1

- 정답 : 

더보기

1) 알람 발생시 GET Flooding으로 이벤트명으로 기록

2) GET/HTTP 1. 을 검사

3) 문자열이 USER포함하고, anonymous 포함되지 않는지 검사

4) 1바이트의 바이너리 값 |00|을 찾아라