1988년 Martin Roesch가 개발, 발표한 대표적인 오픈소스 시그니처 기반 네트워크 침입을 탐지(IDS)&방지(IPS)하는 시스템으로 네트워크 상에서 실시간으로 흐르는 트래픽을 분석하며, 패킷 로깅(로그 생성)을 수행하는 도구 입니다.
Snort의 기능으로는 스니퍼모드, 패킷로거모드, 침입탐지모드 3가지가 있는데,
첫번째로 스니퍼모드란?
네트워크 패킷을 모니터링 관점에서 수집하는 것으로 네트워크 트래픽을 캡쳐하는기능을 말하며,
출력을 화면에 지속적으로 쏟아내, 데이터를 보존하기 어렵기 때문에 작은 규모의 네트워크에서의 사용을 권장합니다.
두번째로 패킷 로거모드란?
나중에 분석할 수 있도록 네트워크 트래픽을 파일에 기록하는 기능으로 패킷의 로그를 기록하는 기능을 말하는데
이는 패킷을 디스크에 저장하며, 디스크는 사전에 지정된 곳으로 설정되고 이때, 저장된 패킷은 차후에 탐지·분석에 용이하게 사용하게 됩니다.
세번째로 침입 탑지모드란?
네트워크 트래픽을 분석 후 침입 탐지 및 차단하는 기능으로 설정에 따라 공격에 대응하기도 하며,
세 모드 중 가장 복잡하고, 조작의 범위가 방대한 모드입니다.
이러한 스노트 동작방식으로는 위 그림과 같이
스노트 ids를 통과하는 모든 패킷을 수집하는 스니퍼를 거쳐
프리프로세스와 탐지 엔진이 파싱할수 있도록 해석하는 패킷 디코더 후
프리프로세스 단계에서 효율적인 공격 탐지를 위해 플러그인을 거쳐 매칭을 확인한 후
작동 중에 패킷의 유형이 공격이라고 판단되면 탐지 엔진에 전달합니다.
전달받은 패킷을 탐지엔진에서 스노트 룰과 매칭되는 지 확인하여
Snort Rule 매칭 결과에 따라 경고나 로그등 출력을 하게 되고 매칭이 안된다면 넘기게 됩니다.
Rule header | Option | ||||||
Action | Protocol | Source IP | Source Port | Direction | Destination IP | Destination Port | Option |
탐지 후 행동 |
프로토콜 | 출발 IP | 출발 PORT | 탐지 방향 | 목적지 IP | 목적지 PORT |
옵션 |
Snort Rule 은 크게 Rule header 와 Rule Option 으로 구분됩니다.
- 해당규칙에 의해서 패킷이 탐지되었을때 처리하는 방법을 결정하는 명령어
명령어 | 기능 | 명령어 | 기능 |
alert | 로그를 남기고 경고를 발생시킵니다. | Log | 해당 패킷을 기록합니다. |
pass | 해당 패킷을 무시합니다. | active | alert 를 발생 시킨 후 대응하는 Dynamic 을 유효화합니다. |
drop | 상대방에게 응답하지 않고 패킷을 차단하고 기록합니다 | sdrop | 기록을 남기지 않고 패킷을 차단합니다. |
reject | 패킷을 차단하고 기록 후 TCP Protocol 의 경우 TCP Reset UDP Protocol 의 경우 ICMP Port Unrechable 메세지를 전송합니다. |
-탐지 할 프로토콜의 종류를 정의합니다. ( 규칙을 작성할 때 소문자로 작성하여야 합니다. )
명령어 | 기능 |
TCP | TCP 프로토콜을 탐지합니다. |
UDP | UDP 프로토콜을 탐지합니다. |
ICMP | ICMP 프로토콜을 탐지합니다. |
IP | IP 프로토콜을 탐지합니다. |
Any | 모든 프로토콜을 탐지합니다. |
- Source IP는 송신자 Destination IP는 수신자 IP를 지정
- 임의의 IP 주소인 any를 지정
- 특정호스트만 지정하는 경우 서브넷 마스크를 32비트로 지정
- Snort conf에서 지정된 변수를 참조 가능
명령어 | 기능 |
! ( 부정연산자 ) | 부정연산자 ( ! ) 를 IP 또는 Port 앞에 기입 할 경우 해당 IP 또는 Port 번호를 제외한 주소만 매칭 |
Any | 모든 IP 또는 Port 를 의미 |
포트번호 | 지정된 포트번호를 의미 |
포트번호1:포트번호2 | 포트번호1 ~ 포트번호2 를 의미합니다 |
:포트번호 | 지정된 포트번호 이하 모든 포트를 의미합니다. |
포트번호: | 지정된 포트번호 이상 모든 포트를 의미합니다. |
-탐지할 방향을 정의
명령어 | 기능 |
-> | 출발지 -> 목적지로 가는 패킷을 탐지합니다. |
<> | 출발지 ~ 목적지 사이 모든 패킷을 탐지합니다. |
Rule Option은 탐지의 정확도를 향상시켜주는 옵션으로
Rule Option을 사용할 경우 모든 옵션은 세미콜론 ( ; ) 을 사용해 서로를 구분하고,
규칙 옵션 키워드는 콜론 ( : ) 을 사용해 인수와 구분
Rule Option은 크게 일반 옵션, Payload, HTTP 옵션, 흐름 옵션으로 구분하게 됩니다.
-일반 옵션은 규칙에 대한 정보를 제공하는 옵션으로 검색하는 동안은 어떠한 영향도 미치지 않는 옵션
명령어 | 기능 | 예시 |
msg | Snort 규칙이 탐지될 경우 출력되는 메시지 | msg:“메시지 내용”; |
sid | Snort 규칙을 구별하는 식별자 0~1,000,000 번 까지는 예약된 식별자 1,000,001이상부터 사용 |
sid:1000001; |
rev | Snort 규칙의 수정 버전을 정의 수정할 경우 1씩 증가 |
rev:1; |
classtype | Snort 규칙을 분류하는 옵션 | clsstype:분류이름; |
priority | 우선 순위를 지정하는 옵션 1 ~ 10까지 수를 사용 ( 값이 작을수록 우선순위가 높음 ) |
priority:10; |
reference | 해당 규칙에 참고가 되는 URL을 지정하는 옵션 | Reference:래퍼런스명 http://…; |
msg | Snort 규칙이 탐지될 경우 출력되는 메시지 | msg:“메시지 내용”; |
-페이로드는 스노트 규칙에서 실질적으로 악성 패킷을 탐지하는 옵션
명령어 | 기능 | 예시 |
content | 패킷 데이터에서 매칭할 문자열을 지정하는 옵션 | content:”abc”; => abc 문자열을 탐지 |
nocase | Content 옵션 뒤에 작성하여 content 문자열을 대소문자 구분없이 탐지하도록 함 | content:”abc”;nocase; => Abc,ABC,aBc,abC 모두 탐지 |
offset | 패킷의 페이로드에서 매칭을 시작할 문자열의 위치를 지정하는 옵션 ( 지정한 바이트 만큼 떨어진 위치부터 탐색시작, 시작은 0Byte ) |
offset:3; => 4Byte부터 탐색을 시작 |
distance | content 옵션 값 매칭 후를 기준으로 지정된 패턴 탐색을 시작하기 전 무시해야 하는 패킷의 거리를 지정하는 옵션 | content:”abc”;content:”test”;distance5; => abc 문자열 매칭 후 지점을 기준으로 5byte 이후 test 문자열 탐색 |
within | content 옵션 매칭 후 다음 지정된 탐색을 진행할 범위를 지정하는 옵션 | content:”abc”;content:”test”;within:5; => abc 문자열 매칭 후 지점을 기준으로 5Byte 이내에 test 문자열 탐색 |
-content 옵션 값이 탐색할 범위를 HTTP 영역으로 한정할 때 사용
명령어 | 기능 |
http_method | 패킷 페이로드 중 HTTP 메소드 영역에서 content 옵션 값을 매칭하는 옵션 |
http_uri / http_raw_uri | 패킷 페이로드 중 URI 영역을 탐색하는 옵션 raw가 포함된 옵션은 디코딩되지 않은 페이로드를 대상으로 탐색하는 옵션 |
http_cookie | http 쿠키 값을 탐색하는 옵션 |
http_header / http_raw_header |
HTTP 헤더 영역을 요청과 응답에 관계없이 탐색하는 옵션 |
http_client_body | HTTP 바디 영역을 탐색하는 옵션 |
http_stat_code | HTTP 응답 메시지에서 상태 코드 영역을 탐색하는 옵션 |
http_stat_msg | HTTP 응답 메시지에서 상태 메세지 영역을 탐색하는 옵션 |
-패킷의 방향을 정의하는 옵션. 패킷의 방향뿐 아니라 세션 연결 상태의 조건에 해당되는 패킷을 한번 더 걸러내는 역할
명령어 | 기능 |
flow | 흐름 옵션을 사용할 때 반드시 사용해야 하는 옵션 |
to_client / from_server | Server -> Client 방향으로 오는 패킷을 매칭하는 옵션 |
to_server / from_client | Client -> Server 방향으로 오는 패킷을 매칭하는 옵션 |
Established | 세션이 성립된 상태의 패킷을 매칭하는 옵션 |
statless | 세션 성립 여부와 상관 없이 매칭하는 옵션 |
[리팩토링_20-23주차] 악성코드 분석 및 스노트 탐지패턴보고서 (0) | 2024.01.17 |
---|---|
[리팩토링_19주차] Snort 환경 구성 (0) | 2024.01.17 |
[리팩토링_15~17주차] 악성코드 분석_dgrep.exe (0) | 2024.01.17 |
[리팩토링_13.14주차] 악성코드 샘플분석_bton02setup.exe (0) | 2024.01.17 |
[리팩토링_12주차] 환경설정 및 샘플수집 (0) | 2023.08.15 |