kjh00n의 기록저장소

Snort Rule 본문

네트워크 보안 운영

Snort Rule

kjh00n 2024. 12. 17. 11:53

※Rule 정책 만들 때 절대 Enter치면 안돼~(따로 인식이 된다)

정책이 너무 길어서 나누고 싶다면 \를 마지막에 붙이고 Enter 쳐라

요로코롬

Snort Rule 구성

Protocol, IP, Port

● Protocols는 내가 탐지하고 싶은 Protocol을 적는다.

● ICMP는 Port가 없으니까 any

● TCP나 UDP일 때 Port 입력한다~

● [80,443]처럼 [ ]를 사용해서 복수의 Port번호 설정이 가능하다

● 10:20처럼 범위로 Port번호 설정이 가능하다 (10부터 20까지)

● :20 은 1번부터 20번까지 설정하는 것

● 50000: 은 50000번부터 65535번까지 설정하는 것

 

Action

Action

● Action에 pass가 없으면 기본적으로 pass가 적용된다. 얘도 log 안 남긴다.

● drop은 차단만 해주는 거다. 하지만 사용할 수 없음 (snort에 차단기능이 없어서, 내가 따로 구현해 줘야 된다)

● reject는 차단하고 그 데이터를 보낸 상대방에게 오류메시지를 보낸다. (보안적으로는 drop이 더 좋음)

● 대부분의 Action들은 log를 남기지만 sdrop은 log를 남기지 않는다.

● activate는 우리 수업에서는 사용 안 할 거다. (activate와 dynamic은 세트로 사용된다)

  • dynamic은 정책에 적용이 안된다. 항상 잠들어있다가 activate의 정책이 맞으면 dynamic이 활성화된다.
  • 복잡한 rule을 사용할 때 사용된다.

 

방향 연산자

방향 연산자

 10.10.10.1 any → 10.10.10.254 any

↑ 적혀있으면 10.1에서 10.254로 가는 것만 탐지하고 기록한다. 10.254에서 10.1로 가는 것은 탐지, 기록 X

 

 10.10.10.1 any → 10.10.10.254 any

 10.10.10.254 any → 10.10.10.1 any

↑ 양방향으로 하고 싶으면 이렇게 해도 되지만

 10.10.10.1 any <> 10.10.10.254 any

↑ 이렇게 하는 게 더 좋다.

 

 10.10.10.0/24 any → any any

↑ 대역폭으로도 설정 가능하다.

 

 [10.10.10.1,20.20.20.1] any → any any

↑ 복수의 IP도 설정 가능하다.

 

 [10.10.10.1,20.20.20.1,30.30.30.0/24] any → any any

↑ 이렇게도 설정 가능하다.

 

 10.10.10.1 any → !10.10.10.1 any

↑ !를 붙이면 10.1을 제외하고 탐지하고 기록하겠다. 얘도 복수로 ![ ]를 사용해서 지정할 수 있다.

 

Snort Rule Option

General Rule Options (어떤 Rule에서도 사용이 가능)

 

1. msg (메시지)

 경고를 남기는 경우 어떤 메시지로 남길지 지정한다.

 msg:"메시지" ← 이런 방식으로 사용

 

2. sid (Rule 식별값)

 snort를 운영하다 보면 무수히 많은 snort 정책을 작성, 수정, 변경하게 된다.

 그 많은 정책들을 구분하기 어려워진다.

 구분하기 위해 정책에 숫자를 부여하여 어떤 정책이 적용되었는지, 어떤 정책인지를 구분한다.

주의점

 사용자나 관리자가 직접 정책을 작성하는 경우에는 sid를 100만 이상부터로 시작하도록 snort에서 권장

 100만 아래는 시스템에서 정책을 사용하는 경우 작성될 위험이 있기 때문에 중복 발생 방지를 위한 목적으로 100만 이상부터 사용

▶ alert icmp any any -> any any (msg:"ICMP DETECT"; sid:1000001;) ← 이런 방식으로 사용 

 

3. rev (Rule 정책의 버전을 명시하는 값)

 정책을 수정하면 관리자가 직접 rev값을 변경해 주면 된다. (관리 목적으로 사용된다.)

 정책이 변경되었음을 알려주는 식별값

 alert icmp any any -> any any (msg:"ICMP DETECT"; rev:1; sid:1000001;)

 alert icmp 10.10.10.1 any -> any any (msg:"ICMP DETECT"; rev:2; sid:1000001;)

 

4. priority (위험도)

 해당 정책이 얼마나 위험, 중요한 정책인지 여부 확인 값

 priority값이 낮을수록 중요한 것이다.

 priority:10; ← 이런 방식으로 사용

0 : 자동값 1 : 심각 (critical) 2 : 덜 심각 (high) 3 : 주의 (medium) 4 : 탐지 (low)

 

Payload Detction Rule Option

패킷 안의 데이터를 검색하는 경우 사용하는 옵션

 

1. content

● 특정 문자열을 검색

 content:"root" (7계층 데이터에 root라는 문자열을 검색하겠다)

 

2. nocase

 content와 같이 사용하는 옵션이다.

 대소문자 상관없이 검색 지정

▶ content:"root"; nocase; (root라는 문자열을 대소문자 구분 없이 검색하겠다)

 

3. rawbytes

 content와 같이 사용하는 옵션이다.

 전처리기에서 가공하기 전의 데이터를 검색하고 싶은 경우에 사용한다.

 보통은 가공하기 전 데이터는 16진수로 표시되기 때문에 content에서도 16진수로 검색

▶ content:"root"; rawbytes;

 

4. depth

● content와 같이 사용하는 옵션이다.

● depth에 들어가는 숫자가 데이터를 검색할 때의 크기

● 검색하고자 하는 데이터가 특정 패킷의 특정 위치에만 존재하는 것을 알고 있다면 굳이 모든 데이터에서 검색을 할 필요 X

● 일정 크기 안에서만 검색을 하고 싶은 경우에 사용한다.

▶ content:"root"; depth:20; (앞에 20byte 안에서만 root를 검색하겠다)

 

5. offset

● content와 같이 사용하는 옵션이다.

● 검색의 시작위치를 지정하는 옵션

● offset값은 0부터 시작한다.

 

1234567890이라는 데이터가 있다

▶ content:"67"; 는 1부터 검색을 시작한다.

content:"67"; depth:8; 은 12345678을 검색한다.

content:"67"; depth:5; offset:2; 는 34567을 검색한다.

 

6. HTTP에서 사용되는 Detection Rule Option

● content와 같이 사용하는 옵션이다.

HTTP의 특정 데이터나 설정 값을 검색하고 싶은 경우 사용하는 옵션

http_cookie;

http cookie값 안에서 문자를 검색하고 싶은 경우

http_header;

http header값 안에서 문자를 검색하고 싶은 경우

http_method;

http method값 안에서 문자를 검색하고 싶은 경우

http_uri;

http uri값 안에서 문자를 검색하고 싶은 경우

http_stat_code;

http response의 종류를 검색하고 싶은 경우

●http_stat_ms;

http response의 응답 메시지로 검색하고 싶은 경우

주의점 

현 상황에서는 탐지가 잘 안된다.

 

Non-payload Detection Rule Options

7계층이 아닌 하위계층 네트워크 protocol의 header값 검색을 위한 옵션들

 

1. id

● ip의 identification 데이터를 검색

● 특정 공격 툴이 ID값을 특정 숫자로 고정하는 경우가 있다.

▶ id:10000; (id값이 10000번을 검색)

▶ id:>10000; (id값이 10000번 보다 큰 값을 검색)

 

2. ttl

● ip의 ttl 데이터를 검색

▶ ttl:100; (ttl이 100인 값을 검색)

▶ ttl:>100; (ttl이 100보다 큰 값을 검색)

 

3. flags

● TCP flag에서 원하는 flag값을 검색

▶ flags:S; (SYN을 검색)

▶ flags:A; (ACK를 검색)

▶ flags:F; (FIN을 검색)

▶ flags:P; (PUSH를 검색)

▶ flags:SA; (SYN, ACK를 검색)

▶ flags:SA, PA; (SYN, ACK or PUSH, ACK를 검색)

▶ flags:0; (아무것도 설정하지 않고 검색)

▶ flags:*S; (SYN을 포함한 모든 검색)

 

4. seq, ack, window

● TCP의 sequence, acknowledge, window size 값을 검색하는 옵션

▶ seq:0; / ack:0; / window:0;

 

5. itype, icode

● ICMP의 type, code값을 검색하는 옵션

▶ itype:8; / itype:0; / itype:5;

 

6. sameip

출발지 IP와 목적지 IP가 같은 데이터를 검색하는 옵션

● landattack에 사용

▶ sameip;

 

7. ip_proto

● ip header안에 protocol header 검색하는 옵션

 

8. fragbits

● IP header에서 ip flag 검색하는 옵션

▶ fragbits:D; (Don't fragment = 단편화되지 않은 데이터)

▶ fragbits:M; (More fragments = 단편화된 데이터가 더 있다)

 

9. fragoffset

● IP header 안에 fragment offset 검색하는 옵션

 

Rule Thresholds

● 시간당 발생하는 패킷의 양이나 이벤트 수에 맞춰 탐지 여부를 결정하는 옵션

▶ threshold: type both, track by_src, count 100, seconds 1;

 

1. type

● 탐지되는 패킷에 따라 어떤 동작으로 수행할지 결정하는 값

limit → 설정한 시간 동안 발생하는 패킷 중 제한 수 만큼만 탐지 

threshold → 설정한 시간동안 발생하는 모든 패킷 탐지

both → 설정한 시간동안 발생하는 패킷 중 1번만 탐지

 

2. track

● 패킷을 탐지할 기준을 지정하는 값

by_src → 출발지 주소 기준

by_sdt → 목적지 주소 기준

 

3. count

● 설정한 시간동안 발생하는 패킷의 수를 지정한다

 

4. seconds 

● 시간을 설정

 


간단 실습

cd /etc/snort/rules

예시 rule들이다

vim local.rules

비어있는데 내가 추가한거임(문법 오류 있으면 snort 실행도 안돼)
server에서 ping 쏘기
기록 파일을 실시간으로 출력
출력된 모습

'네트워크 보안 운영' 카테고리의 다른 글

IPS 설치 / 간단 실습  (0) 2024.12.18
snort 실습  (0) 2024.12.18
포트 미러링  (0) 2024.12.17
Snort 정의 및 설치  (0) 2024.12.16
DDoS  (0) 2024.12.16