Rule Action 다음 칸에는 Protocool에 관한 정보가 들어간다. Suricata에서는 TCP, UDP, ICMP가 들어간다. 그 뒤에는 발신자의 IP Address와 Port가 들어가게 된다. IP Address는 xxx.xxx.xxx.xxx/CIDR block 형식으로 쓰인다. 또한 IP Address의 부정을 ‘!’으로 나타내어 표현할 수 있다. 다중 IP Address를 적용하고자 할 때는 ‘[‘ , ‘]’ 안에서 ‘,’로 구분할 수 있다. Port의 범위를 지정할 때에도 ‘:’를 이용하여 범위를 지정할 수 있다.
Rule option 부분은 탐지의 핵심 부분으로 ‘:’로 분리되어 표현할 수 있다. 주요 옵션으로는
l Msg - alert를 발생하거나 log를 출력
l Content – 페이로드 내부 검색 문자열 지정
l Dsize – 페킷의 페이로드 크기를 지정
l Offset – 지정한 문자열의 검색 개시위치를 지정
l Depth – 패턴 매칭을 실시할 페이로드의 깊이를 지정
l Nocase – 텍스트 데이터 패턴 매칭 시 대소문자 구별을 하지 않음
l Flags – 플래그의 첫 글자를 따서 지정
예를 들어,
alert tcp any any -> 192.168.1.0/24 80 <content: “admin” : msg:”Admin alert! ‘:> 라고 하였을 때 패킷에서 문자열 admin이 검출된다면 Admin alert! 라는 메시지가 alert 된다.
Rule Body Option에는 대표적으로 Threshold가 있다. Threshold는 동일한 특정 패킷이 관리자가 설정한 시간 안에 일정 수가 발견되면 경고 알림을 출력해주는 옵션이다.
threshold:type [limit,threshold,both], track [by_src, by_dst], count [몇 초],
seconds [횟수]
limit : count 동안횟수 번째 트래픽까지 탐지
threshold : 횟수마다 계속 탐지
both : count 동안 횟수만큼 트래픽이 탐지될 시 1번만 탐지
by_src : 출발지 패킷만 해당
by_dst : 도착지 패킷만 해당
ex) alert icmp 172.16.10.10 any -> any any (msg:"icmp ping test"; threshold:type both, track by_src, count 10, seconds 20; sid:1000001;)
=>172.16.10.10으로부터 ICMP 패킷이 20초 동안 10번발생되는 경우에 1번씩 경고메시지 출력
3.Suricata와 Snort
Suricata는 Open source 기반의 IDS/IPS이다. Open source 기반의 IDS/IPS라고 하면 Snort가 대표적이다. 1998년에 나온 Snort는 오랜 시간 동안 Open source였기 때문에 많은 피드백으로 기능이 추가되고 오류가 많이 수정되었다. 하지만 시간이 지나면서 인터넷의 발달과 스마트폰에 발달로 인해 트래픽 양이 급격히 증가하면서 대용량 트래픽을 실시간으로 처리할 수 있는 기능이 중요해졌다. Snort는 단일 스레드만 지원해서 대용량 트래픽을 실시간으로 처리하기에는 힘든 환경이 되었다. Suricata는 Snort의 단점을 개선하고 장점은 수용하였다.
l 멀티 코어(Multicore)/멀티 스레드(Multi-threading) 완벽 지원
l Snort 룰 완벽 호환 (기존 시스템에서 사용 중인 snort 시그니처 사용 가능)
l 하드웨어 밴더의 개발 지원으로 하드웨어 가속 지원 (GPU 가속)
l 스크립터 언어(lua)로 시그니처 작성 가능
l Snort의 대부분 기능 모두 지원