1. Snort
- Snort는 유연하고 매우 강력한 단순하고 가벼운 설명 언어 사용
- Snort 규칙을 개발할 떄 기억해야 할 간단한 지침이 상당히 많음
- Snort는 규첵 헤더와 규칙 옵션 섹션이라는 두 개의 논리적 섹션으로 나뉨
섹션 | 설명 |
규칙 헤더 | 규칙의 작업, 프로토콜, 소스 및 대상 IP 주소와 넷마스크, 소스 및 대상 포트 정보 포함 |
규칙 옵션 | 규칙 작업을 수행해야 하는지 결정하기 위해 패킷의 어느 부분을 검사해야 하는지에 대한 정보와 경고 메시지가 포함되어 있음 |
(예시) 규칙 헤더 | 규칙 옵션 |
alert tcp any any -> 192.168.1.0/24 111 | (content: "|00 01 86 a5|"; msg: "mountd access";) |
2. 규칙 헤더
- 가장 첫 번째 항목은 동작에 대한 규칙을 설정함
종류 | 설명 |
alert | 선택한 경고 방법을 사용하여 경고를 생성 한 다음 패킷을 기록 |
log | 패킷 기록 |
pass | 패킷 무시 |
drop | 패킷 차단 및 기록 |
reject | 패킷을 차단하고 기록한 다음 연결할 수 없음 메시지를 보냄 |
sdrop | 패킷을 차단하지만 기록하지 않음 |
- 프로토콜 : TCP, UDP, ICMP, IP 4가지 항목 중에서 사용
- 방향 연산자 : 연산자 기호는 -> 이나 <>를 사용하며, <- 기호는 존재하지 않음
- ip 주소 (IP 주소 대신 변수에 저장된 데이터 사용 가능 ex] $HOM_NET)
* any : 모든 주소를 정의
* CIDR : 블록 마스크를 적용(예 : 192.168.1.0/24)
* !를 사용해 반적을 표현하거나 대괄호를 사용해 리스트를 지정하는 것도 가능함
(예시) alert ctp !192.168.1.0/24 any -> 192.168.1.0/24 111 (content: "|00 01 86 a5|"; msg: "mountd access";)
(예시) alert ctp ![192.168.1.0/24,10.1.1.0/24] any -> [192.168.1.0/24,10.0.0.1/24] 111 (content: "|00 01 86 a5|"; msg: "mountd access";)
- 포트번호
* any : 모든 포트
* 8080 : 8080 포트
* http : 80 정적 포트
* 1:8080 : 1~8080 포트
* :500 : 1~500포트
3. 규칙 옵션
- Snort의 침입 탐지 엔진의 핵심
- 사용 편의성과 성능 및 유연성 제공
- 모든 Snort 규칙 옵션은 세미콜론(;) 문자를 사용하여 서로 구분(띄어쓰기 민감)
- 규칙 옵션 키워드는 콜론(:) 문자로 인수와 구분
- 규칙 옵션의 네 가지 주요 버무
* general : 규칙에 대한 정보를 제공하짐나 탐지 중에는 영향을 주지 않음
* payload : 모두 패킷 페이로드 내부의 데이터를 확인하고 상호 관련된 규칙
* non-payload : 페이로드 관련 없는 데이터(해시, 길이, 위치 등)를 확인
* post-detection : 규칙이 탐지되면 실행되는 기능
- 일반 규칙 옵션
* 규칙에 대한 정보를 제공하지만 탐지 중에는 영향을 주지 않음
* 일반 규칙 옵션의 키워드 구성요소와 설명
키워드 | 설명 |
msg | 로깅 및 경고 엔진에 패킷 덤프 또는 경고와 함께 출력할 메시지 |
reference | 규칙에 외부 공격 식별 시스템에 대한 유용한 참조를 입력 |
sid | Snort 규칙을 고유하게 식별 |
rev | Snort 규칙의 개정을 고유하게 식별 |
classtype | 규칙을 분류하여 보다 일반적인 유형의 공격 클래스에 속하는 공격을 탐지 |
priority | 규칙에 심각도 수준 표시 |
metadata | 추가 정보를 키-값 형식으로 저장 |
- 페이로드 규칙 옵션
* 모두 패킷 페이로드 내부의 데이터를 확인하고 상호 관련된 규칙
* 페이로드 규칙 옵션의 키워드 구성요소와 설명
키워드 | 설명 |
content | 패킷 페이로드에서 특정 콘텐츠를 검색하고 이벤트를 트리거하는 기능을 수행 |
rawbytes | 전처리기가 수행한 디코딩을 무시하고 원시 패킷 데이터를 검사 |
depth | Snort가 지정된 패턴을 검색해야 하는 거리를 지정 |
offset | 패킷 내에서 패턴 검색을 시작할 위치를 선정 |
distance | 이전 패턴 일치의 끝을 기준으로 지정된 패턴 검색을 시작하기 전에 Snort가 무시해야 하는 패킷의 거리를 지정 |
within | content 키워드를 사용하여 일치한 패턴과 최대 N 바이트 사이에 검사 수행 |
uricontent | 정규화 된 요청 URI 필드를 검색 |
isdataat | 페이로드에 지정된 위치에 데이터가 있는지 확인 |
pcre | perl 호환 정규식을 사용하여 규칙을 작성 |
byte_test | 특정 값(연산자 포함)에 대해 바이트 필드를 테스트 |
byte_jump | 규칙이 데이터 일부의 길이를 익은 다음 패킷에서 해당 길이를 건너뜀 |
ftpbounce | FTP 바운스 공격을 탐지 |
asn1 | 패킷 또는 패킷의 일부를 디코딩하고 다양한 악성 인코딩을 찾음 |
cvs | 유효하지 않은 항목 문자열을 감지 |
순번 | 옵션 | 매칭 문자열 |
1 | content:"01234";offset:0; | 0123456789abcdef |
2 | content:"01234";offset:1; depth:5; | 0123456789abcdef |
3 | content:"123"; content:"abc"; distance:5; | 0123456789abcdef |
4 | content:"123"; content: "678"; within:5; | 0123456789abcdef |
- 논 페이로드 검색 옵션
- 포스트-디텍션 규칙 옵션
'기반 지식 > 인프라' 카테고리의 다른 글
VLAN이란? (0) | 2024.11.15 |
---|---|
Web Application Firewall란? (modsecurity) (1) | 2024.11.14 |
Sguil이란? (0) | 2024.11.12 |
securityonion이란? (0) | 2024.11.11 |
Suricata란? (0) | 2024.11.10 |