728x90
반응형
개요
- snort Rule/Signature는 크게 Header와 Body로 구성
- Header는 처리방식, Protocol, IP, Port번호 등 처리할 Packet 판단 기준을 명시
- Body는 Packet을 탐지하기 위한 규칙을 명시
Header Rule
Actions
- 패킷 탐지 시 처리방식은 8가지
Protocols
- 탐지는 4가지 프로토콜을 지원
- TCP, UDP, ICMP, IP
IP Address
- Source IP, Destination IP의 Rule 설정 가능
- IP 및 IP 대역(CIDR 표기), IP List 지정 가능
- IP List를 지정할 경우 대괄호[ ]로 묶어서 콤마(,)를 구분자로 사용
ex) 192.168.0.10, 192.168.0.20
192.168.1.0/24, 192.168.1.20 - any는 모든 IP를 의미하며, 일반적으로 Source 정보는 공격자의 IP를 알지 못하는 경우가 대부분이므로 any로 지정
- ! 를 통해 부정 연산의 설정 가능
ex) !192.168.0.10 : 해당 IP를 제외한 모든 IP
Port Number
- Source Port, Destination Port의 Rule 설정 가능
- Port 범위 지정 시 콜론 ":" 을 이용
ex) 1:1023 -> 1~1023 Port
:49151 -> 49151 이하 Port
1024: -> 1024 이상 Port
20:80, 443
Direct Operator
- -> : 단방향 탐지, 왼쪽 Source 정보 -> 오른쪽에 Destination 정보
- <> : 양방향 탐지, Source와 Destination 사이에 오가는 모든 패킷
- "<-" 사용하지 않는 방향지시자로 주의
Action 유형
Action | 설 명 |
alert | alert를 발생시키고, 패킷을 로그에 남김 |
log | 패킷을 로그에 남김 |
drop | 패킷을 차단하고 로그에 남김 |
reject | drop rule과 동일하게 패킷을 차단하고, 로그를 남김 drop과 다르게 TCP 경우 TCP Reset을 전송하고, UDP 경우 ICMP port unreachable 메시지를 전송 |
pass | 패킷을 무시 |
sdrop | 패킷을 차단하고 로그는 남기지 않음 |
activate | alert를 발생시키고, 대응하는 dynamic rule을 활성화 |
dynamic | activate rule에 의해 활성화 되고, log rule과 동일하게 동작 |
설정 예시
단방향 예시
action | protocol | source | port | direction | destination | port |
alert | tcp | any | any | -> | 192.168.1.0/24 | 80 |
- alert를 발생시키고 패킷을 로그에 남김
- TCP Protocol / ALL Source IP / ALL Source Port 이고 단방향 통신을 탐지하며, Destination IP는 192.168.1.0 대역 / Destination Port가 80 패킷 탐지
양방향 예시
action | protocol | source | port | direction | destination | port |
alert | tcp | $EXTERNAL_NET | any | <> | $HOME_NET | 80 |
- alert를 발생시키고 패킷을 로그에 남김
- TCP Protocol / 외부 IP / ALL Port이고 양방향 통신을 탐지하며, 내부 IP / Port 80 의 송수신 패킷 탐지
- $EXTERNAL_NET : snort.conf에 정의되어 있는 환경변수로 외부 네트워크를 의미하며 보통 any로 설정
- $HOME_NET: snort.conf에 정의되어 있는 환경변수로 내부 네트워크를 의미하며, 내부 대역을 설정
룰 바디(body) 옵션
옵션 | 설명 |
msg | alert 발생 시 이벤트 이름으로 사용 |
reference | rule과 관련된 취약점 정보 참조 시 사용 |
sid | snort rule id로 사용 범위는 아래와 같다
|
classtype | 사용자가 어떤 유형의 공격인지 쉽게 이해하도록 우선순위를 결정할 수 있으며, 공격 유형과 기본 우선순위(위험도)를 정의 우선순위 : 1(높음), 2(중간), 3(낮음) |
priority | rule의 우선순위(위험도)에 대해 숫자로 표기 |
rev | rule 버전번호로 수정 횟수를 표기, 수정할 때 마다 1씩 증가 |
룰 바디(body) 설정 : 페이로드(Payload)/범위 관련 옵션
Action | 설명 |
Content | 페이로드에서 검사할 문자열 text or binary 형식이 있으며 두개가 복합된 형식도 가능
|
uricontent | content 문자열을 전체 패킷과 비교하는 대신 HTTP 클라이언트 요청 URI 정보를 검사할 문자열 지정 |
offset | 페이로드에서 content 패턴을 검사할 시작위치 페이로드 첫 번째 Byte 바이트 위치는 0부터 시작 |
depth | offset부터 몇 Byte까지 검사할 것인지 지정 |
distance | 이전의 content패턴에 매치된 경우, 매치된 이후 몇 Byte 부터 몇 Byte 떨어진 위치에서 다음 content를 검사할 것인지 지정 |
within | 이전 content 패턴에 매치된 경우, distance 부터 몇 바이트 범위 내에서 다음 content를 검사 할 것인지를 지정 |
nocase | 페이로드 검사 시 대/소문자를 구분하지 않음 (바이너리 형식도 동일하게 구분하지 않음) |
- 범위를 지정해주는 옵션(offset, depth, distance, within)을 사용하는 이유는 페이로드 전체에 대해 패턴 매치를 수행하는 것 보다 페이로드의 일부분에 대해서 패턴 매치를 수행하여 성능 향상과 오탐을 줄여줄 수 있음
- 잘못된 범위를 지정하는 경우 미탐(false negative)이 발생할 수 있어 주의가 필요
728x90
'*Security > [ Se ] 보안 이론' 카테고리의 다른 글
[Se - 05] SNMP (0) | 2022.01.03 |
---|---|
[ Se - 03 ] ARP Protocol (0) | 2021.12.20 |
[ Se - 02 ] OSI 7 Layer (0) | 2021.12.19 |
[ Se - 01 ] CVE / CWE (0) | 2019.04.18 |