스노트
IT위키
더 많은 작업
- Snort
- 1998년 SourceFire사의 CTO Martin Roesch에 의해 발표된 오픈 소스 침입탐지시스템(IDS)
- 침입탐지시스템 중 가장 널리 사용된다.
- Packet Sniffer: 네트워크 상의 패킷을 sniffing하여 보여주는 기능
- Packet Logger: 모니터링한 패킷을 저장하고 로그에 남기는 기능
- IDS/IPS: 네트워크 트래픽을 분석해 공격을 탐지/차단하는 기능
[액션] [송신 IP] [송신 port] [방향] [수신 IP] [수신 port] ([룰 옵션])
- 룰 헤더와 룰 옵션으로 구성된다.
- 룰 옵션은 선택사항이지만 일반적으로 룰 옵션이 훨씬 더 많이 사용된다.
- (HTML에서 태그의 attribute보다 style이 훨씬 사용량이 더 많은 것과 흡사)
- 액션
- alert: 경고를 발생시킨다.
- log: 로그를 기록한다.
- pass: 패킷을 무시한다.
- active: alert를 발생시키고 대응하는 dynamic을 유효화 한다.
- dynamic: active에 의해 유효화된 경우 한쪽의 패킷을 기록한다.
- 송수신 IP, port
- 211.11.22.33 80
- 211.11.22.0/24 443
- any 80 또는 211.11.22.33 any 또는 any any 와 같이 사용 가능하다.
- '$HOME_NET' 와 같이 snort.conf에서 지정한 변수를 참조할 수도 있다.
- 방향
- -> 또는 <>
세미콜론(;)을 이용하여 옵션과 옵션을 구분한다.
- msg: 지정한 메시지가 이벤트 명으로 사용된다.
- dsize: dzise:<바이트, dsize:바이트<>바이트 와 같이 상한선, 하한선, 범위를 지정할 수 있다.
- content: 문자, 바이너리로 패턴을 탐지한다.
- content:"문자"
- content:| 00 01 0A AA |
- content: "| 90 90 90 | /bin/sh"
- offset: 검색을 시작할 byte수를 지정한다.
- depth: offset부터 시작하여 검색할 byte수를 지정한다.
- nocase: 대소문자를 구별하지 않는다.
- flags: TCP 제어 플래그를 지정한다. F, S, FA, FSA 등으로 지정 가능하다.
- pcre: 정규식을 사용한다.
- threshold: 패킷의 발생량을 기반으로 탐지한다.
- 아직까지 흔히 사용 되고 있지만 공식적으론 사용을 권장하지 않는다.
- 비슷한 기능을 하진 detection_filter 사용이 권장된다.
- 형식 :
threshold:type 종류, track by_src|by_dst, count 횟수, seconds 초; - type threshold : seconds 동안 count 번째 이벤트마다 한 번씩 동작한다
- type limit : seconds 동안 처음 count 번까지만 동작한다
- type both : seconds 동안 count 번째 이벤트에서 한 번만 동작한다
- track by_src 는 출발지 IP 별로, by_dst 는 목적지 IP 별로 센다
- 예 :
threshold:type threshold, track by_src, count 10, seconds 1;→ 출발지마다 1초 동안 10번째 이벤트마다 동작
- nocase 가 없으면 content 는 대소문자를 구분한다. nocase 를 붙이면 구분하지 않는다
- depth:13 은 offset(없으면 처음)부터 13바이트 안, 곧 첫 번째 바이트부터 13번째 바이트까지에서 content 를 찾는다는 뜻이다
Snort 룰 옵션은 무엇을 검사하느냐에 따라 넷으로 나뉜다. 시험에서는 패킷의 페이로드(데이터 부분)를 검사하는 옵션이 무엇인지 자주 묻는다.
| 분류 | 하는 일 | 대표 옵션 |
|---|---|---|
| 일반(general) | 룰의 정보를 적는다. 탐지에는 영향이 없다 | msg, sid, rev, classtype, priority, reference |
| 페이로드 탐지(payload detection) | 페이로드 안의 내용을 검사한다 | content, offset, depth, distance, within, nocase, pcre, byte_test, byte_jump |
| 논페이로드 탐지(non-payload detection) | 페이로드가 아닌 헤더 필드와 흐름을 검사한다 | ttl, tos, id, ipopts, fragbits, flags, seq, ack, flow, itype, icode, dsize |
| 탐지 후(post-detection) | 룰에 걸린 뒤 할 일을 정한다 | logto, session, tag, detection_filter |
- ttl 은 IP 헤더의 TTL 값을 비교하는 옵션이라 논페이로드 옵션이다. 페이로드를 검사할 때 쓰는 옵션이 아니다
- offset·depth 는 content 앞에서 검색 시작 위치와 범위를 정하고, distance·within 은 앞의 content 가 걸린 위치를 기준으로 다음 content 의 위치를 정한다
- 예:
alert tcp any any -> $HOME_NET 80 (msg:"cmd.exe 접근"; content:"cmd.exe"; offset:0; depth:200; nocase; sid:1000001;)
- 바이너리(Binary) 비교 방법
- 텍스트(Text) 비교 방법
- 바이너리 비교 방법에 비해 속도가 느리지만 유연한 매칭이 가능하다.