kjh00n의 기록저장소
Snort Rule 본문
※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에 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
vim local.rules
'네트워크 보안 운영' 카테고리의 다른 글
IPS 설치 / 간단 실습 (0) | 2024.12.18 |
---|---|
snort 실습 (0) | 2024.12.18 |
포트 미러링 (0) | 2024.12.17 |
Snort 정의 및 설치 (0) | 2024.12.16 |
DDoS (0) | 2024.12.16 |