Snort란?
Snort는 오픈 소스 침입 방지 시스템(IPS)입니다.
Snort IPS는 악의적인 네트워크 활동을 정의하는 일련의 규칙을 사용하며, 이러한 규칙과 일치하는 패킷을 찾아 사용자에게 경고를 생성합니다.
또한 이러한 패킷을 막기 위해 Snort를 인라인으로 배포할 수도 있습니다.
- Snort는 주로 세 가지 용도로 사용됩니다
- tcpdump와 같은 패킷 스니핑
- 네트워크 트래픽 디버깅에 유용한 패킷 로거
- 완전한 네트워크 침입 방지 시스템으로 사용
Snort 기능
패킷 스니퍼(Packet Sniffer) | 네트워크의 패킷을 읽어 스니핑하여 보여주는 기능 |
---|
패킷 로커(Packet logger) | 모니터링 한 패킷을 저장하고 로그에 남기는 기능 |
침입 탐지 시스템(IDS) | 네트워크 트래픽을 분석하여 공격을 탐지하는 기능 |
Snort inline(IPS) | 침입 방지 시스템, 패킷 분석, 공격 차단 기능 |
Snort 구조
Snort의 구조는 Sniffer ->Preprocessort -> 탐색엔진 -> 출력 의 단계로 동작합니다.
패킷 스니퍼(Packet Sniffer) | 네트워크로부터 들어오는 패킷을 캡처하여 분석 대상으로 전달 |
---|
프리프로세서(Preprocessor) | 입력 패킷을 전처리하여 정규화하거나 특정 프로토콜의 디코딩을 수행 이를 통해 분석의 효율성과 정확성을 향상 |
탐지 엔진(Detection Engine) | 사전에 정의된 rule에 따라 탐지 엔진이 패킷을 분석하여 악성 활동을 탐지 |
출력(Output) | 탐지된 이벤트 및 결과를 적절한 형식으로 출력/출력은 로그 파일, 알림 메시지, 경고 등 다양한 형태 |
Snort Rule Signiture
스노트는 룰 헤더와 옵션으로 구성
- 사용자가 지정해서 탐지하고자 하는 패턴을 만들 수 있습니다.
- 액션(Action) : 규칙이 트래픽에서 일치하는 패턴을 발견했을 때 취해야 할 동작을 지정. alret
- 프로토콜(Protocol) : 규칙이 적용되는 네트워크 프로토콜을 지정. tcp
- IP 주소, 포트(IP Address, Port) : 규칙이 적용되는 트래픽의 송신지와 수신지의 IP주소와 포트 번호를 지정. any any
- 방향 연산자(Direction Operator) : 패킷의 방향을 지정. ->
룰 옵션(Rule Options)
- 룰 옵션은 세부적으로 탐지 조건을 설정할 수 있는 부분으로, 할수있는 설정이 많습니다.
- 모든 룰 옵션은 룰 헤더 뒤에 괄호로 묶여 있으며, 각 옵션은 세미콜론(;)으로 종료됩니다.
Action: 탐지 후 행동들
명령어 | 내용 |
---|
Alert | 현재 패킷에 대한 경고 생성 |
Log | 로그 기록 |
Pass | 현재 패킷을 통과된 것으로 표시, 패킷에 대한 후속 평가 중지 |
Drop | 패킷 차단 및 로그 기록 |
Reject | 패킷 차단 및 로그 기록(메시지 발송) drop과 동일하지만 TCP일 경우 TCP Reset, UDP일 경우 ICMP unreachable로 세션을 종료 |
Sdrop | 패킷 차단 및 로그 기록 없음 |
Protocol: 탐지 할 프로토콜 종류
IP 주소
- Source IP, Destination IP의 Rule 설정 가능
- IP 및 IP 대역(CIDR 표기), IP List 지정 가능
- IP List를 지정할 경우 대괄호[ ]로 묶어서 콤마(,)를 구분자로 사용
- any는 모든 IP를 의미하며, 일반적으로 Source 정보는 공격자의 IP를 알지 못하는 경우가 대부분이므로 any로 지정
- ! 를 통해 해당 IP를 제외한 모든 IP 주소 설정 가능
포트
- Source Port, Destination Port의 Rule 설정 가능
- Port 범위 지정 시 콜론 ":" 을 이용
- ex) 1:1023 -> 1~1023 Port
- :1023 -> 1023 이하 Port
- 1024: -> 1024 이상 Port
- [1:1024, 4444, 5555] : 포트 번호 리스트는 대괄호로 묶고 쉼표로 구분
방향 연산자(Direction Operator)
- -> : 단방향 탐지, 왼쪽 Source 정보, 오른쪽에 Destination 정보
- <> : 양방향 탐지, Source와 Destination 사이에 오가는 모든 패킷
룰 바디(body) 설정 : 일반 옵션 설정
Action | 내용 |
---|
msg | alert 발생 시 이벤트 이름으로 사용 |
reference | rule과 관련도니 취약점 정보 참조 시 사용 |
sid | 99이하 : 시스템 예약 / ID 100 ~ 1000000 이하 : snort 자체지정 sid / 1000001 이상 : 사용자 정의 sid |
classtype | 사용자가 어떤 유형의 공격인지 쉽게 이해하도록 우선순위를 결정할 수 있으며, 공격 유형과 기본 우선순위(위험도)를 정의 / 우선순위 : 1(높음), 2(중간), 3(낮음) |
priority | rule의 우선순위(위험도)에 대해 숫자로 표기 |
rev | rule 버전번호로 수정 횟수를 표기, 수정할 때 마다 1씩 증가 |
룰 바디(body) 설정 : 페이로드(Payload)/범위 관련 옵션
Action | 내용 |
---|
Content | 페이로드에서 검사할 문자열 |
uricontent | content 문자열을 전체 패킷과 비교하는 대신 HTTP 클라이언트 요청 URI 정보를 검사할 문자열 지정 |
offset | 페이로드에서 content 패턴을 검사할 시작위치 / 페이로드 첫 번째 Byte 바이트 위치는 0부터 시작 |
depth | offset부터 몇 Byte까지 검사할 것인지 지정 |
distance | 이전의 content패턴에 매치된 경우, 매치된 이후 몇 Byte 부터 몇 Byte 떨어진 위치에서 다음 content를 검사할 것인지 지정 |
nocase | 페이로드 검사 시 대/소문자를 구분하지 않음 (바이너리 형식도 동일하게 구분하지 않음) |
Within | 이전 content 패턴에 매치된 경우, distance 부터 몇 바이트 범위 내에서 다음 content를 검사 할 것인지를 지정 |
출처