침입탐지 시스템(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번째 이벤트 시 한번

출처 : 알기사