Recent Posts
Recent Comments
라떼는말이야
[Snort] 스노트 기본 동작 / Snort Rule 구조 본문
반응형
2020/08/27 - [프로젝트/Snort] - [Snort] Snort 환경 구축 설계
2020/08/30 - [분류 전체보기] - [Snort] VMWare 가상머신 세팅 (공격자, 피해자, 스노트, 게이트웨이)
본 게시글은 위 게시글의 구성이 갖춰진 것을 전제로 진행.
Snort 시작
root@Snort: ~# service snort start
root@Snort: ~# service snort status
active (running) 확인!
Snort Rule 구조
룰 헤더 | 옵션 | ||||||
Action | Protocol | SrcIP | SrcPort | -> | DstIP | DstPort | Option |
Action 유형
명령어 | 내용 |
alert | 경고 발생 및 로그 기록 |
log | 로그 기록 |
pass | 패킷 무시 |
drop | 패킷 차단 및 로그 기록 (IPS 기능으로 사용. 단, 인라인 구조가 되어야 한다) |
reject | 패킷 차단 및 로그 기록 (TCP - TCP RST 응답, UDP - ICMP Unreachable 응답) |
sdrop | 패킷 차단 및 로그 기록 없음 |
Protocol 유형
유형 | 내용 |
tcp | TCP 탐지 |
udp | UDP 탐지 |
ip | IP 전체 탐지 |
icmp | ICMP 메시지 탐지 |
any | 전체 |
ScrIP / DstIP 형식
형식 | 내용 |
192.168.20.50/32 | 192.168.20.50 Host |
192.168.20.0/24 | 192.168.20.0/24 서브넷 |
[192.168.20.0/24, 172.20.0.0/16] | 192.168.20.0/24, 172.20.0.0/16 서브넷 |
!192.168.20.0/24 | 192.168.20.0/24를 제외한 나머지 서브넷 |
$HOME_NET | 내부 IP 주소 변수 |
$EXTERNAL_NET | 외부 IP 주소 변수 |
$XXX_SERVERS | 특정 서버 IP 주소 변수 |
ScrPort / DstPort
형식 | 내용 |
80 | 80번 포트 |
1:500 | 1~500번 포트 |
!80 | 80번 포트를 제외한 나머지 포트 |
!1:500 | 1~500번 포트를 제외한 나머지 포트 |
any | 모든 포트 |
방향 지정
형식 | 내용 |
-> | 요청 패킷 탐지 (요청패킷 탐지는 ScrIP/DstIP 반대로 설정) |
<> | 요청/응답 패킷 둘 다 탐지 |
일반 옵션
명령어 | 내용 | 형식 |
msg | 경고 이벤트 메시지 | msg:"ICMP Ping test"; |
sid | 룰 식별자 (3000000번 이상 권장) | sid:3000001; |
rev | 룰 버전, 수정될 경우 1씩 증가 | rec:1; |
priority | 우선 순위(값이 작을수록 먼저 매칭, 범위: 1 ~ 10) | priority:1; |
classtype | 스노트 룰 분류 | classtype:분류이름; |
reference | 취약점 참고 배포 URL 정보 | reference:이름 http://~; |
흐름 옵션
명령어 | 내용 |
flow | 흐름 옵션 명령어 |
to_server 또는 from_client | 클라이언트 -> 서버 패킷 룰 매칭 |
to_client 또는 from_server | 서버 -> 클라이언트 패킷 룰 매칭 |
established | 세션이 연결된 상태의 패킷 룰 매칭 |
statless | 세션 연결 유무와 상관 없이 룰 매칭 |
flow:to_server,established | 클라이언트 -> 서버 세션 연결 패킷 룰 매칭 |
페이로드 탐색 옵션
명령어 | 내용 | 예제 |
content | 문자/숫자 탐지 | content:"xxx"; content:" |
nocase | 대소문자 구분 없이 탐지 | content: "|16진수 16진수|"; |
offset | 지정한 바이트번째 부터 탐지 (0번째 부터 시작) | offset:3; |
depth | 지정한 바이트까지 탐지 (0번째 부터 시작) | depth:3; |
distance | content 매칭 후 지정 위치 이후 다른 content 탐색 | content:"xxx";content"yyy";distance:5; |
within | content 매칭 후 지정 위치 안에 다른 content 탐색 | content:"xxx";content"yyy";within:5; |
pcre | 정규화 표기. '/'는 시작과 끝에 표기, 16진수는 앞에 \x | pcre:"/(http|ftp) Traffic/" |
HTTP 탐색 옵션
명령어 | 내용 |
http_method | 페이로드 앞부분 HTTP 메소드 패턴 매칭 |
http_uri | 페이로드의 HTTP URI 패턴 매칭 |
http_cookie | 페이로드의 HTTP 쿠키 패턴 매칭 |
http_header | HTTP 요청/응답 Header 내용 패턴 매칭 |
http_client_body | HTTP 요청/응답 Body 내용 패턴 매칭 |
http_stat_code | HTTP 응답 상태 코드 패턴 매칭 |
http_stat_message | HTTP 응답 상태 메시지 패턴 매칭 |
Snort Rule 설정
* SQL Injection 공격을 탐지하는 간단한 룰셋 설정
root@Snort:~# ls -l /etc/snort/rules/local.rules
/etc/snort/rules/local.rules 파일에 사용자 룰을 입력할 수 있다.
예시는 외부에서 내부로 들어오는 tcp 패킷 중 (대소문자 구분 없이) 1' and '1' = '1' 라는 내용을 포함하는 패킷을 탐지하여 경고를 발생시키고 로그에 기록하는 룰이다.
root@Snort:~# vi /etc/snort/rules/local.rules
·
·
·
alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg:"SQL Injection"; content:"1' and '1' = '1'";nocase;sid:3000001;rev:1;)
·
·
·
반응형
'프로젝트 > Snort' 카테고리의 다른 글
[Snort] VMWare 가상머신 세팅 (공격자, 피해자, 스노트, 게이트웨이) (0) | 2020.08.30 |
---|---|
PCRE (Perl Compatible Regular Expressions) (0) | 2020.08.28 |
[Snort] Snort 환경 구축 설계 (0) | 2020.08.27 |
Comments