Snort란? '마틴 로시' 가 1998년에 개발하였다. (Sniffing and More) . 스노트는 현재 마틴 로시가 창립자이자 개발자인 Sourcefire에 의해 개발되고 있으며, 2013년 이후로 시스코 시스템즈가 소유중이다.
패킷 스니핑 기능 + 패킷 로깅 기능 + IDS/IPS 기능
1. Snort 구조
(1) 헤더 : 처리할 패킷을 판단하는 기준 [ RuleAtion Protocol IP Port -> or <> IP Port]
① Rule Action
Action | 설명 |
alert | 탐지시 alert 하고 패킷을 로깅함 |
log | 탐지시 패킷을 로깅함 |
pass | 무시 (룰 임시 disable 용도로 쓰임) |
activate | alert 발생하고 대응하는 dynamic 룰 활성화시킴 |
dynamic | activate rule에 의해 활성화 되고, 패킷을 로깅함(cf alert 와 무엇이 다른가? |
drop | 패킷 차단, 로깅 |
reject | 패킷 차단, 로깅, TCP -> TCP reset 전송, UDP -> ICMP Port unrecheable 전송 |
sdrop | (silent+drop) 패킷 차단, 로깅 남기지 않음 |
② Protocol : 탐지할 프로토콜 종류로 4가지 프로토콜 지원함 (TCP, UDP, ICMP, IP)
③ IP Address : 출발지/목적지 IP
- IP 리스트 지정 : [IP1,IP2,IP3,...]
- IP 대역 표기(CIDR), !(부정연산자) 사용 가능
- snort.conf 파일에 정의되어있는 환경변수 사용
</etc/snort.conf 예시> var HOME_NET 192.168.200.0/24 var EXTERNAL_NET any |
④ Port : 출발지/목적지 Port
- 포트 범위 지정 : 1:1023 - 1~1023 까지의 포트, :1023 - 1023 이하의 포트, 1023: - 1023 이상의 포트
- port 리스트 지정 : [port1, port2,port3,....)
⑤ 방향 지시자 :
- -> (단방향) : 방향지시자 기준 왼쪽이 출발지, 오른쪽이 목적지이다. (<- 지시자는 없다)
- <> (양방향) : 출발지와 목적지 사이에 오가는 모든 패킷
(2) 바디(옵션) : 패킷을 탐지하기 위한 규칙
① 기본 옵션
옵션 | 설명 |
msg | 이벤트 이름. 탐지시 alert 되는 문자열 |
reference | rule과 관련된 취약점 정보 참조(CVE ID) |
sid | snort rule id - ~99 : 시스템에 예약된 sid - 100 ~ 1,000,000 : snort에서 배포하는 룰셋에서 사용되는 sid - 1,000,001 ~ : 사용자 정의 룰 sid |
classtye | snort 에서 공격 유형과 기본 우선순위(위험도) 정의 우선순위 : 1(높음), 2(중간), 3(낮음) |
priority | 룰의 우선순위(위험도) 숫자로 표기. priority classtype 둘 다 옵션에 존재할 시 priority 기준을 우선시 함 |
rev | revision. 룰 버전 번호로 수정할 떄마다 1씩 증가함. |
② 페이로드 옵션
옵션 | 설명 | 예시 |
content | - 페이로드에서 검사할 문자열 지정 - ; \ " 3가지 특수문자는 escape 처리하여 사용 |
content: "text", content: "|FF FF|" content: "|FF|text|FF|" , content : !"text" content: "\"text" |
uricontent | HTTP 클라이언트 요청 URI 정보를 검사할 문자열을 지정 | |
offset | 페이로드에서 content를 검사할 시작 위치 (첫 바이트가 0) | 문자열 : abcdefghijkl (msg: "test offset1"; content: "bc"; offset:"1"; depth:"2"; nocase; sid:1000001) |
depth | offset으로 부터 몇 바이트 검사할 것인지 지정 | |
dsize | 버퍼오버플로우 탐지 가능 <> 한계치(숫자) |
|
distance | 이전 content 가 매치된 경우, 매치된 이후 바이트로부터 몇바이트 떨어진 위치 다음 content를 검사할 것인지 | 문자열 : abcdefghijkl (msg: "test offset2"; content: "bc"; offset:"1"; depth:"2"; content:"gh"; distance:"3"; within:"2" nocase; sid:1000002) |
within | 이전 content가 매치된 경우 distance다음 몇 바이트 검사할 것인지 지정 | |
nocase | 대소문자 구별하지 않음(text,binary) | |
pcre | perl 기반 정규표현식 문법 pcre옵션은 슬래시(/) 기호안에 정규표현식을 입력한다. pcre 사용법 : https://en.wikipedia.org/wiki/Perl_Compatible_Regular_Expressions |
pcre: "/ /" |
③ HTTP 관련 옵션
옵션 | 설명 (content 옵션과 함께 사용) | |
http_method | HTTP method 부분 검사 | GET, POST |
http_uri | HTTP uri 부분 검사 | GET /index.html HTTP/1.1 |
http_header | HTTP Header 부분 검사 요청/응답 헤더에 모두 사용 |
|
http_cookie | HTTP Cookie 부분 검사 | |
http_client_body | HTTP 클라이언트 요청의 Body 부분 검사(Post 요청에 대한 검사) | |
http_stat_code | HTTP 응답의 status_code 부분 검사 | HTTP/1.1 404 Not found |
http_stat_msg | HTTP 응답의 status_msg 부분 검사 | HTTP/1.1 404 Not found |
④ 임계치 관련 옵션 : [ threshold type <limit|threshold|both>, track <by_src|by_dst>, count <n> , seconds <m> ]
예시 | ||
type | limit : 매 m초동안 n번째 이벤트 까지 action | 이벤트 : 10초에 100건 발생 threshold type limit, track by_src, count 10 , seconds 10 -> 10초동안 처음 발생한 패킷부터 10개(1~10) |
threshold : 매 m초동안 n번째 이벤트 마다 action | 이벤트 : 10초에 100건 발생 threshold type threshole, track by_src, count 10 , seconds 10 -> 10초동안 10의 배수마다 10개(10,20,30~100) |
|
both : 매 m초동안 n번째 이벤트 시 1번 action | 이벤트 : 10초에 100건 발생 threshold type both, track by_src, count 10 , seconds 10 -> 10초동안 10번째 이벤트 1개 (10) |
|
track | by_src | 출발지 IP 기준으로 탐지 |
by_dst | 목적지 IP 기준으로 탐 |
⑤ byte 관련 옵션
byte_test : 특정 위치의 값을 비교/확인 하는데 사용
[byte_test:<bytes to convert>,[!]<operator>,<value>,<offset>[,relative][,<endian>][,<number type>,string];]
⑥ flow 옵션
flow: to_server established;
- to_server , from_client : 클라이언트 -> 서버
- to_client , from_server : 서버 -> 클라이언트
- to_server. established; : 클라이언트 -> 서버 세션 연결 패킷 매칭
'보안 > study' 카테고리의 다른 글
취약점 업데이트! Redhat 업스트림(최신 패키지)을 사용해도 되는가? (feat. Upstream, Backporting) (0) | 2021.08.18 |
---|---|
포트 스캔 공격 정리 및 공격툴(nmap,ncat,hping3) (0) | 2021.05.15 |
r 계열 명령어 (rhost, rlogin, rsh, rmd) (0) | 2021.01.22 |
SSL/TLS 통신과정 정리 (0) | 2019.12.11 |
FTP/FTPS/SFTP/TFTP/anonymous FTP (0) | 2019.12.11 |