Packet Sniffer: 네트워크 상의 패킷을 스니핑하여 보여주는 기능
(*스니핑 : 네트워크 상에서 자신이 아닌 다른 상대방들의 패킷 교환을 엿듣는 행위)
Packet Logger: 모니터링한 패킷을 저장하고 로그에 남기는 기능
IDS/IPS: 네트워크 트래픽을 분석해 공격을 탐지/차단하는 기능
Sniffer
: Snort IDS를 통과한 패킷을 수집
Preprocessor
: 효율적인 공격 탐지를 위해 Plug-in 을 먼저 거쳐 매칭을 확인
Detection Engine
: Snort Rule과 매칭이 되는지 확인
Alert / Log
: Snort Rule 매칭 결과에 따라 경고나 로그 등 출력
Snort Rule은 Rule Header와 Rule Option으로 나뉘어짐.
Rule Header
Rule Option
패킷탐지에 대한 응답으로 “active responses”가 존재
-> : 흔하게 사용되는 방향 연산자.
출발지 - 왼쪽의 IP 주소와 포트 번호
목적지 - 오른쪽의 IP 주소와 포트 번호
<> : 양방향 연산자.
두 개의 IP 주소 및 포트 쌍을 출발지 또는 목적지로 설정
msg : 규칙을 설명하는 메시지를 추가하는 데 사용
Ex) msg : "Malicious file download attempt";
reference : 취약점에 참고가 되는 정보를 연결
Ex)
reference : url,www.example.com;
reference : cve,2020-1234; (취약점 진단 연도 - 식별번호)
sid : 규칙을 구분하는 식별자. 모든 규칙은 식별 번호를 가짐
Ex)
sid : 0 ~ 999999 : 이미 예약된 식별자
sid : 1000000 ~ : 사용 가능한 식별자
rev : 해당 규칙에 대한 버전. 수정할 때마다 숫자를 1씩 증가
Ex) sid : 1000001; rev:1;
classtype: Snort 규칙을 분류하는 옵션
Ex) classtype : <분류명>;
priority : 우선 순위를 숫자로 지정 (높음 1 ~ 낮음 10)
Ex) priority : 1;
content : 탐지할 패턴을 설정하는 옵션
Ex) content : ”abc” => abc 문자열을 탐지
nocase : content 옵션 뒤에 작성하며, content 문자열을 대소문자 구분없이 탐지
Ex) content : "abc";nocase => Abc,ABC,aBc,abC 모두 탐지
offset : 매칭을 시작할 문자열의 위치를 지정하는 옵션
Ex) offset : 3; => 4byte부터 탐색 시작
depth : 패킷 데이터에서 찾을 내용의 범위를 지정하는 옵션
Ex) depth : 5; => 5로 지정하면 처음부터 5바이트까지 문자열 탐색
distance : 이전 content 설정 값 매칭 탐색할 위치를 지정
Ex) content:"abc";nocase;content:"test";distance:32; => abc가 매칭된 위치에서 32바이트 이후에 test 문자열을 탐색 시작
within : 이전 content 설정 값 매칭 후 매칭을 끝낼 상대 위치를 지정
Ex) content:"abc";nocase;content:"test";within:10; => abc가 매칭된 위치에서 10바이트 이내에 test 문자열이 존재하는지 탐색
http_method : 패킷 페이로드 중 HTTP 메소드 영역에서 content 옵션 값을 매칭하는 옵션
(메소드 : GET, POST, PUT, HEAD, DELETE, TRACE 등)
http_uri : 패킷 페이로드 중 URI 영역을 탐색하는 옵션
http_cookie : http 쿠키 값을 탐색하는 옵션
http_header : HTTP 요청, 응답 헤더 값을 탐색하는 옵션
http_client_body : HTTP 바디 영역을 탐색하는 옵션
http_stat_code : HTTP 응답 메시지에서 상태 코드 영역을 탐색하는 옵션
http_stat_msg : HTTP 응답 메시지에서 상태 메세지 영역을 탐색하는 옵션
Snort의 정의보단 Snort Rule Signature를 통해서 Rule Header, Rule Option을 어떤 식으로 지정을 해서 탐지패턴을 만드는지가 더 중요
탐지방법에는 두가지가 존재
Rule Header만 사용해서 탐지패턴을 만들 수 있지만 Rule Option을 최대한 상세하게 지정해야 정탐율이 올라감
Rule Header의 Action에서 실제로 사용되는 키워드는 alert (실시간 탐지에 대한 기능)
양방향 연산자 <>을 사용하는 경우는 특정 IP에 대한 모니터링을 수행할 때 사용
msg : 탐지패턴에 이름을 지정하는 역할
sid : 각각의 탐지패턴마다 겹치지 않도록 번호를 지정
악성코드만의 특정한 동작에 대한 키워드에 해당하는 문자열을 가져와서 content 값에다가 지정
=> content에 대한 부분은 탐지패턴을 어떤식으로 만들어놨는지 사례들과 탐지패턴을 만들었을때 어떤식으로 해석을 하는지 구글링을 통해 더 찾아보기