linefilt

threshold 본문

Keyword(Option)

threshold

mong.goose 2018. 10. 19. 23:23

IDS 및 IPS의 로그는 일반적으로 방화벽보다는 더 많은 정보를 제공하기 때문에 유용하게 사용할 수 있다. 하지만 관리자 입장에서 기록은 되어야 하나 우선순위가 낮은 로그도 있을 수 있으며, 중복적으로 발생하는 로그들로 인해서 불필요한 쓰레기 값으로 취급될 수 있다.

threshold는 이처럼 불필요한 로그를 줄이는데 사용할 수 있다.

threshold: type <limit|threshold|both>, track <by_src|by_dst>, count <c>, seconds <s>;

threshold type은 limit, threshold, both 3가지가 있다.

limit: 

limit은 seconds <s> 동안 count <c>만큼 까지만 로그를 발생시킨다.
threshold: type threshold, track by_src, count 7, seconds 60


60초 동안 출발지를 기준으로 7번 까지만 탐지되며, 1분 동안 8번 초과하는 로그는 발생시키지 않는다.

 

 

그림 1. limit 동작에서의 예

 

threshold:
threshold는 seconds <s> 동안 count<c>가 달성될 때마다 로그를 발생시킨다.
threshold: type threshold, track by_src, count 7, seconds 60


60초동안 7번의 카운트 될때마다 로그를 발생시키기 때문에 2번의 로그가 발생한다.

 

그림 2. threshold 동작에서의 예

 

 

both:
both는 limit과 threshold의 결합이다.
threshold: type both, track by_dst, count 7, seconds 60


60초 동안 목적지를 기준으로 7번 카운트 되었을 때 단 한번의 로그만 발생한다. 초과 패킷은 alert 하지 않으며, 14번 카운트 되더라도 로그를 남기지 않는다.

 

그림 3. both 동작에서의 예

 

 

track by_*

출발지 또는 목적지를 구분하는 track_ 은 stream 엔진이 보유하고 있는 세션 정보에 기반한다.
구분 인자는 src, dst이기 때문에 세션별(각각의 포트) 카운팅이 아닌 동일 IP에 기반하여 카운팅된다.

alert tcp any any -> 192.168.11.20 any (msg:"track counting"; flow:to_server,established; content:"counting"; )
alert tcp any any -> 192.168.11.20 any (msg:"track counting threshold"; flow:to_server,established; content:"counting"; threshold: type threshold, track by_src, count 7, seconds 60; )

 

그림 4. track by_* 룰의 탐지

 

위와 같은 룰을 적용하고 테스트 해보았을때 엔진에서 탐지는 그림 4와 같이 발생한다.

동일 세션이 아닌 총 3개의 세션이 기록되었고 7번째 카운팅 되었던 7번째의 세션에서 threshold  룰이 로깅되는 것을 확인할 수 있다.

threshold에서의 Drop
첫 줄에서 말하였듯이 threshold는 불필요하게 발생하는 로그를 관리하는 목적에 있다. threshold를 drop action에서 사용이 불가능한 것은 아니다 일부 문제가 발생할 수 있다.

 

그림 5. threshold에서의 Drop

 

drop icmp any any -> 192.168.11.20 any (msg:"ICMP threshold"; itype:8; threshold: type threshold, track by_src, count 2, seconds 60; )

 

itype 8에 대하여 임계 값을 설정하였을때 그림 5에서와 같이 지정한 수치만큼 drop 되어 응답이 오지 않는 것을 확인할 수 있다.

하지만 일반적으로 관리자는 특정 임계값을 넘는 행위를 하고 있는 IP에 대하여 blacklist에 추가하여 일정시간 또는 지속적인 시간 동안 차단되기를 기대할 수 있다. 이러한 경우에는 단순히 threshold를 사용해서는 불가능하다. 

 

detection_filter

 detection_filter:  track <by_src|by_dst>, count <c>, seconds <s>;

detection_filter는 threshold: type threshold에서 발전된 형태로 특정 시간동안 임계값을 초과하는 stream에 대해서 지속적인 차단을 제공한다.

 

 

drop icmp any any -> 192.168.11.20 any (msg:"detection filter"; itype:8; detection_filter: track by_src, count 5, seconds 300; ) 

 

그림 6. detection filter에 의한 연속적인 차단

 

 

Suricata의 xbits

 

 xbits:noalert;
 xbits:<set|unset|isset|toggle>,<name>,track <ip_src|ip_dst|ip_pair> [,expire <seconds>];

xbits는 동일 stream에서만 탐지되던 flowbits에서 확장된 cross stream 탐지를 제공한다. 또한 blacklist 기반의 차단을 적용할 수 있다. flowbits나 flowint에서와 같이 기준되는 룰에서 xbits 프로파일을 set을 통해서 생성하여 주고 추가적인 룰을 통해서 drop을 적용할 수 있다.

alert tcp any any -> 192.168.11.20 any (msg:"COUNTING"; flow:to_server,established; content:"counting"; )
drop tcp any any -> 192.168.11.20 any (msg:"DROP COUNTING"; flow:to_server,established; content:"counting"; threshold: type threshold, track by_src, count 4, seconds 60; xbits:set, cc, track ip_src, expire 100; )
drop tcp any any -> any any (msg:"DROP BLACKLISTED"; flow:to_server; xbits:isset, cc, track ip_src; )
 
일반적인 탐지뿐만 아니라 threshold와 같이 사용하여 임계 값에 기반하였을때 blacklist에 추가하는 방법으로도 사용이 가능하다.

그림 7. xbits 탐지

 



그림 8. xbits에 의한 blacklist 차단

 

'Keyword(Option)' 카테고리의 다른 글

새로운 키워드(옵션)의 필요 (streambtis)  (0) 2019.05.25
isdataat  (0) 2018.10.06
Comments