일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- flowbits
- 암호화
- rule
- dsize
- DDOS
- 오탐
- 크롬 탐지
- IPS
- TLS
- snort
- 수리카타
- 시그니처
- isdataat
- Suricata
- chromium 탐지
- Reassembly
- 탐지
- signatrue
- slowloris
- sinature
- HTTP2
- stream_size
- header dos
- 재조합
- idps
- stream buffer
- 미탐
- chrome 탐지
- IDS
- SSL
- Today
- Total
linefilt
threshold 본문
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; )
그림 7. xbits 탐지
그림 8. xbits에 의한 blacklist 차단
'Keyword(Option)' 카테고리의 다른 글
새로운 키워드(옵션)의 필요 (streambtis) (0) | 2019.05.25 |
---|---|
isdataat (0) | 2018.10.06 |