본문 바로가기

Learning/└◆리눅스 서버 보안

08.5_Snort Architecture & Snort Rules

 

SNORT

대표적으로 사용되는 룰 기반의 IDS

http://www.snort.org

 

snort는 내가 정한 룰대로 탐지 활동을 하는 것이다.

iptables와 비슷하다고 생각해도 된다.

 

이 룰(Rule)은 'Rule Header' 와 'Rule Option'으로 구성되어 있다.

 

 

 

Snort(SNiffer and mORE)

1998년 마틴 로쉬가 오픈 소스로 개발

스그니쳐 기반 네트워크 침입 탐지 시스템

작동 방식: Sniffer Mode, Packet Logging Mode, NIDS Mode, IPS Mode

 

 

 

 

 

 

 

 

스니퍼(Sniffer) : 네트워크 패킷 수집

패킷 디코더(Packet Decoder) : 전처리기와 탐지 엔진이 파싱 할 수 있도록 정규화

전처리기(Preprocessor) : 특정 행위가 발견된 패킷을 탐지 엔진으로 전송

탐지 엔진(Detection Engine) : 전달 받은 패킷을 스노트 규칙에 매칭되는지 확인

경고/로깅(Alert/Log) : 스노트 규칙에 매칭된 경우 경고 출력 및 기록

 

 

 

 

 

 

 

 

 

 

 

 

# vi /etc/snort/rules/backdoor.rules

alert tcp $EXTERNAL_NET 27374 -> $HOME_NET any (msg:"BACKDOOR subseven 22";

flow:to_server,established; content:"|0D 0A|[RPL]002|0D 0A|"; reference:arachnids,485;

reference:url,www.hackfix.org/subseven/; classtype:misc-activity; sid:103; rev:7;)

 

 

alert tcp $EXTERNAL_NET 27374 -> $HOME_NET any rule header

 

(msg:"BACKDOOR subseven 22"; flow:to_server,established; content:"|0D 0A|[RPL]002|0D 0A|";

 reference:arachnids,485; reference:url,www.hackfix.org/subseven/; classtype:misc-activity;

 sid:103; rev:7;) 'rule options' 자세히 보기 위해

 

30000번 이하의 sid 번호들은 미리 지정이 되어 있다.

rule header의 순서와 규칙

Actions 프로토콜 소스IP 포트번호 목적지 목적지IP 목적지PORT

 

 

 

 

옵션에 sidrev가 꼭 포함되어 있어야 한다.

 

 

 

 

 

 

alert = Log, Pass(NULL), Activate -> Dynamic

protocol : also udp, icmp, ip (L3,L4 계층에서 사용하는 것만 정의){HTTP =X}

SEXTERNAL_NET

range 1:1024 (1~ 1024번 까지)

 

flags: A+ (tcp플러그에 SA, SA+ 등을 나타낸다.)

reference; 참조하는 것(형식)

sid 룰을 정의하는 번호

classtype : /etc/snort/classification.config를 참조한다.

rev : 릴리즈 번호(수정시 rev번호를 올려주어야 동작한다.)

 

 

 

 

 

 

 

 

Action(추가적인 내용)

------------------------------------------------------------------------------------

종류 내용

------------------------------------------------------------------------------------

Drop      인라인(In-Line)방식으로 구성되어 있을 경우 IPS 역할이 가능,

규칙에 매칭되는 패킷을 차단하는 기록

Reject   Drop과 같은 액션을 취함

- TCPRESET 패킷을 출발지로 전송

- ICMP 패킷은 Unreachable로 반송

Sdrop   Drop과 동일하게 패킷을 차단하지만 로그 기록하지 않음

------------------------------------------------------------------------------------

 

 

 

 

 

 

 

송신/수신 아이피(Src/Dst IP)

------------------------------------------------------------------------------------

종류 내용

------------------------------------------------------------------------------------

!                                            부전연산자로 특정 네트워크 대역 제외(EX: ! 192.168.10.50)

[]                                           비연속적인 아이피 지정(EX: [192.168.10.0/24,10.0.0.0/24]

any                            모든 아이피 의미

192.168.10.0/32                특정 호스트 아이피 지정

192.168.100.0/24               특정 아이피 대역대 지정

$EXTERNAL_NET                 외부 아이피 주소 변수

$HOME_NET                                내부 아이피 주소 변수

$HTTP_SERVERS HTTP             서버의 아이피 주소 변수

$DNS_SERVERS DNS              서버의 아이피 주소 변수

$SMTP_SERVERS SMTP             서버의 아이피 주소 변수

$SSH_SERVERS SSH               서버의 아이피 주소 변수

------------------------------------------------------------------------------------

 

 

 

고정포트

전부

대역 100부터 3000ᄁᆞ지

제외 80을 제외

이하 1023이하

이상 1024이상

 

 

 

 

 

1,2,3 번 주력

 

규칙 옵션(Rule Option)

 

기본 특징

규칙 헤더에 해당하는 패킷 중 특정 패턴(문자열)과 매칭하는 영역

옵션 종류는 일반 옵션, 흐름 옵션, 페이로드, HTTP 관련 옵션 등이 존재

옵션을 적절히 활용하면 정확도 향상

옵션 구분은 ;(세미콜론) 사용

전체 스노트 규칙 옵션 링크***

- http://manual-snort-org.s3-website-us-east-1.amazonaws.com/

3.3 Rule Options                     3.4.4 sid

일반 옵션(General Options)

---------------------------------------------------------------------------------------------

옵션 내용

---------------------------------------------------------------------------------------------

()msg                             경고 이벤트를 보여줄 때 나타나는 메세지(EX: msg:"SQL Injection";)

()sid                             규칙을 구분하는 식별자(EX: sid:3000001;)

   모든 규칙은 식별 번호를 가짐

   0 ~ 2999999 : 이미 예약된 식별자

   3000000 ~ : 사용 가능한 식별자

                                      /etc/snort/community-sid-msg.map

()rev                             해당 규칙에 대한 버전(EX: rev:1;)

   수정 할 때 마다 숫자를 1씩 증가

priority                           우선 순위를 숫자로 지정(EX: priority:1;)

  1(높은) ~ 10(낮음)

classtype                         스노트 규칙을 분류하는 옵션(EX: classtype:<분류명>;)

  정의파일: /etc/snort/classfication.config

 (분류이름:분류설명:우선순위)

reference                         취약점의 참고가 되는 정보(URL )를 연결

(EX: reference:url,www.example.com/test.html;)

(EX: reference:cve,2012-1823;)

정의 파일: /etc/nsm/<센서명>/reference.config

/etc/snort/reference.config

--------------------------------------------------------------------------------------------- 

 

흐름 옵션(Flow Options)

---------------------------------------------------------------------------------------------

옵션 방향옵션 내용

---------------------------------------------------------------------------------------------

flow                        to_server 클라이언트에서 서버로 향하는 트래픽

from_client 클라이언트에서 서버로 향하는 트래픽

to_client 서버에서 클라이언트로 향하는 트래픽

from_server 서버에서 클라이언트로 향하는 트래픽

---------------------------------------------------------------------------------------------

established: 세션이 연결된 상태의 트래픽만 매칭

stateless: 세션 연결 유뮤와 상관 없이 매칭

EX) flow:to_server,established

 

 

페이로드(Payload)

---------------------------------------------------------------------------------------------

옵션 내용

---------------------------------------------------------------------------------------------

Content 탐지할 패턴을 설정하느 옵션(EX: Content:"abc";) (EX:Content:"|61 62 63|";)

Nocase 패턴 매칭시 대소문자 구별하지 않고 매칭(EX: Content:"abc";nocase;)

Offset 해당 옵션에서 지정한 바이트만큼 떨어진 위치부터 탐색 시작(EX: offset:5;)

Depth 패킷 데이터에서 찾을 내용의 범위를 지정하는 옵션

예를 들어 5로 지정하면 처음부터 5바이트까지 문자열 탐색(EX: depth:5;)

distance 이전 content 설정 값 매칭 탐색할 위치를 지정

예를 들어 abc가 매칭된 위치에서 10바이트 떨어진 위치부터 test 문자열을 탐색

시작하고 싶다.(EX: Content:"abc";nocase;content:"test";distance:32;)

within 이전 content 설정 값 매칭 후 매칭을 끝낼 상대 위치를 지정

예를 들어 abc가 매칭된 위치에서 10바이트 이내에 test 문자열 존재하는지 탐색

(Content:"abc";nocase;content:"test";within:10;)

pcre 스노트 규칙에서 사용가능한 정규 표현식

특정 문자열의 집합을 표현할 때 효과적으로 사용 가능

(EX: pcre:"/select\b.*FROM/Ui";)

---------------------------------------------------------------------------------------------

 

 

HTTP 관련 옵션(content 부분에 영향을 주는 옵션이다.)

---------------------------------------------------------------------------------------------

옵션 내용

---------------------------------------------------------------------------------------------

http_method 페이로드 앞부분의 HTTP 메소드 부분의 패턴을 매칭

메소드: GET, POST, PUT, HEAD, DELETE, TRACE ...

http_uri 페이로드에서 HTTP URI 값을 패턴 매칭

http_cookie 페이로드에서 HTTP 쿠키 값을 패턴 매칭

http_header HTTP 요청/응답 헤더 값에서 패턴 매칭 시도

http_client_body HTTP 요청/응답 바디 값에서 패턴 매칭 시도

http_stat_code HTTP 응답 메세지의 상태코드에서 매칭 시도.

http_stat_message HTTP 응답 메시지의 상태 메세지 부분에서 매칭 시도

---------------------------------------------------------------------------------------------

 

 

 

 

 

참고 동영상

 

Snort - NIDS on CentOS 6.5 - part 1/4

http://www.youtube.com/watch?v=DYBfCyd6cC0

 

Snort - NIDS on CentOS 6.5 - part 2/4

http://www.youtube.com/watch?v=frmZWsjPBZ8

 

Snort - NIDS on CentOS 6.5 - part 3/4

http://www.youtube.com/watch?v=QBwwhIBav38

 

Snort - NIDS on CentOS 6.5 - part 4/4

http://www.youtube.com/watch?v=II80tzwEuFk

 

 

Snort 룰 생성기(Snort Rule Generator)

 

Snort Rule Generator 사용법에 대한 유투브 동영상

http://www.youtube.com/watch?v=4Eb8S-NK6f4

 

프로그램 다운로드

http://dl.dropbox.com/u/4864067/snort-rules.zip

Snort Rule Generator 사용법

 

 

다음과 같은 실습을 개인적으로 진행하고 분석 보고서를 작성한다.

 

[실습1] 스캐닝(scanning)에 대한 snort 점검 확인

- nmap 수행결과 snort 쪽에서 확인

 

[실습2] 플러딩 공격(flooding attack)에 대한 snort 점검 확인

- hping3 수행 결과 snort 쪽에서 확인

 

[실습3] 도스 공격(dos attack)에 대한 snort 점검 확인

- pyloris-3.2 버전 수행결과 snort 쪽에서 확인

- loic 툴로 공격에 대한 snort 쪽에서 확인