limit 옵션의 로그 발생 기준은 임계 시간, both 옵션의 로그 발생 기준은 IP라고 했었는데, 최근 강의 준비를 하다가 이상한 점 발견. (이상하게 테스트해보고 싶더라)
alert icmp any any -> any any \
(msg:"icmp-threshold"; itype:8; \
threshold:type threshold, track by_dst, count 2, seconds 3; \
classtype:TEST; sid:5000017;)
위 룰을 실행한 후 10개의 ICMP request 패킷을 발생시켰다.
결과는 다음처럼 패킷 임계치인 2개 단위로 5개의 로그 발생. threshold 옵션은 이상 없다.
limit 옵션
alert icmp any any -> any any \
(msg:"icmp-limit"; itype:8; \
threshold:type limit, track by_dst, count 2, seconds 3; \
classtype:TEST; sid:5000018;)
임계 시간 단위로만 로그를 발생시킨다고 했는데 3개가 아닌, 7개의 로그가 발생했다.
몇 번을 테스트해봐도 같은 결과. 정신이 번쩍 들었다. 예전에도 분명 테스트했었는데 왜 이러지? 시간 단위로 1개씩만 발생해야 하는데?
로그 발생 시간대를 자세히 보니 2개 단위로 연이어 발생한 후, 2~3초 간의 딜레이가 발생한다. 룰 설정이 '3초 간 패킷 2개'이니 3초 단위로 로그를 2개만 발생시킨 것이다. 즉 임계 시간 동안 발생한 패킷 임계치 만큼의 로그를 발생시킨 것.
both 옵션
alert icmp any any -> any any \
(msg:"icmp-both"; itype:8; \
threshold:type both, track by_dst, count 2, seconds 3; \
classtype:TEST; sid:5000019;
IP 단위가 아닌, 임계 시간 단위로 1개씩, 총 3개의 로그를 발생시켰다. 도대체 전에 테스트를 어떻게 한 거냐? -_-
결과는 다음과 같으며, threshold 옵션이 패킷 발생량을 가장 정확히 반영한다는 사실은 변함 없다.
그런데 아무리 생각해도 이상하다. 이렇게 간단히 확인 가능한 결과를 왜 예전 테스트할 땐 몰랐을까? 여태 엉뚱한 얘기를 떠들고 다닌 걸 생각하니 얼굴이 화끈거린다. 강의 때도 패턴매칭 위주의 실습만 이루어지다 보니 이부분은 대충 설명하고 넘어갔었구나.
그런데 설명이 이상하다는 클레임은 아직 없음. Snort를 실무에 사용하는 경우가 없나봄(..) 참고로 'detection_filter'란 옵션도 있는데, 얘는 더 이상하다.
alert icmp any any -> any any \
(msg:"icmp-detection-filter"; itype:8; \
detection_filter:track by_dst, count 2, seconds 3; \
classtype:TEST; sid:5000020;)
테스트 결과 8개의 로그 발생. 테스트를 반복해본 결과 최초 임계치만큼의 패킷 개수를 제외한, 이후에 발생한 모든 패킷에 대해 로그를 남긴다. '3초 간 패킷 2개' 설정 상태에서 10개의 패킷이 발생하면 최초 2개의 패킷은 무시한 후, 나머지 8개의 패킷을 로그로 남기는 것. 결과적으로 로그 폭주.
Snort 매뉴얼 보면 threshold 옵션은 앞으로 지원 안 할테니, detection_filter를 사용하라는데 계속 threshold 지원하는 거 보면, 자기들이 봐도 이상한 모양. 제대로 테스트한 건지 모르겠다(..)
관련 글
댓글 없음:
댓글 쓰기