침입탐지 시스템(Snort)에 대해서
by John Choi
침입탐지 시스템(SNORT)
- 1998년 마틴 로시에 의해 처음 개발, Snort -> 네트워크 트래픽 감시용
- 패킷 스니퍼(sniffer)와 패킷 로거(logger) 기능을 함께 하고 있다.
Snort action 유형
Action | 설명 | 비고 |
---|---|---|
alert |
alert 발생 및 패킷을 로그에 남긴다. | |
log |
패킷을 로그에 남긴다. | |
pass |
패킷을 무시한다. | |
active |
alert 발생, 대응하는 dynamic rule을 활성화 한다. | |
dynamic |
activate rule에 의해 활성화, log rule과 동일하게 동작한다. | |
drop |
패킷을 차단하고 로그에 남긴다. | |
reject |
drop rule과 동일하게 패킷을 차단. TCP일 경우 TCP reset을 전송하고 UDP 일 경우 ICMP Port Unreachable 메시지를 전송한다. | |
sdrop |
패킷을 차단하지만 로그에 남기지 않는다. |
snort 설정 예시
<!-- 192. 168. 133.0 80 포트에 대해 들어오는 tcp 포트를 탐지하여 alert 한다.-->
alert tcp any any -> 192.168.133.0/24 80
<!--(양방향) snort.conf에 있는 변수를 활용하여 양방향 탐지 기술-->
log tcp $EXTERNAL_NET any <> $HOME_NET 80
룰 바디 설정
일반 옵션 설정
option | 설명 | 비고 |
---|---|---|
msg |
alert 발생 시 msg 옵션에 기록된 내용이 이벤트 이름으로 사용 | |
reference |
rule과 관련된 외부 취약점 정보 참조시 사용된다. | |
sid |
snort rule id | 99이하 : 시스템 예약 ID 100~1,000,000 이하 : snort에서 배포하는 룰셋에서 사용 그 이상: 사용자 정의 |
classtype |
사용자가 정의한 우선순위 정도. | 1:높음 2:중간 3:낮음 |
priority |
rule의 우선순위에 대해 숫자로 표기 | |
rev |
rule 버전 번호(수정 횟수) | 수정 할때마다 1씩 증가 |
룰 바디 관련 예시
<!--
1000310 : rule id 정보
3 : rule 수정 횟수(rev)
[CVE-2014-6271]Bash Vulnerability Requested Header : msg
-->
[1:1000310:3][CVE-2014-6271]Bash Vulnerability Requested Header [**]
<!--
classification ~ : class type
priority: rule 우선순위 위험도
-->
[Classification : accees to a potentially vulnerable web application][Priority:10]
<!--탐지한 패킷의 헤더 정보 -->
02/20-01:54:00 ~~
<!--reference-->
[Xref => http: ~~]
페이로드(PayLoad) 관련 범위 옵션
option | 설명 | 비고 |
---|---|---|
content |
페이로드에서 검사할 문자열을 지정한다. | content:”pattern”(바이너리 형식도 가능, hex값) |
uricontent |
http request uri 관련 방식 | |
offset |
content pattern을 검사할 시작 위치 | 0부터 시작 |
depth |
offset부터 몇바이트까지 검사할 것인지 지정 | |
distance |
이전 content 패턴에 매치된 경우, 매치된 이후 몇바이트부터 몇바이트 떨어진 위치에서 다음 content를 검사할 것인지 지정 | |
within |
distance 부터 몇바이트 범위 내에서 다음 content를 검사할 것인지 지정 | |
nocase |
페이로드 검사 시 대/소문자를 구분하지 않음 |
테스트
<!--offset , depth test 01234567890ABCDEF를 보낸다면.. -->
alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg:"offset test"; content:"234"; offset:2; depth:3; nocase; sid:1000023;)
<!--distance , within test-->
alert tcp $EXTERNAL_NET any -> $LOCAL_NET any (msg:"distance within test"; content:"234"; offset:2; depth:3; content:"BCD",distance:6; within:3; nocase; sid:1001023;)
threshold 관련 옵션
threshold type <limit|threshold|both>, track <by_src|by_dst>, count <c>, seconds <s>
- limit : 매 s초 동안 c번 째 이벤트까지
- threshold : 매 s초 동안 c 번째 이벤트가 일어날 때 마다
- both : 매 s초 동안 c번째 이벤트 시 한번
출처 : 알기사
Subscribe via RSS