메뉴 건너뛰기

Hello :0

Snort Signature 구조

2013.09.29 17:27

Leekyu 조회 수:15395

출처 : http://blog.naver.com/misman95/80041665451


시그네처의
 구조

Snort 시그네처는 rules라는 확장자를 가진 파일에 기술되어 있다 시그네처는 1 같은 구조로 되어 있어 1행에 1개의 시그네처를 기술한다.

시그네처는  헤더와  옵션의 2가지 섹션으로 분류된다 헤더에는 처리 방법프로토콜, IP주소포트 번호 등의 처리 대상으로서의 판단 기준를 기술한다 옵션에는 alert 메시지나 패킷 내부의 조사 내용을 기술한다시그네처는 1 같이 전부 8개로 분류된다또한 옵션 부분은 기술하지 않아도 정당한 시그네처로 인식된다 부분에 기술해야  내용을 1 번호에 따라 해설한다.



 action
action
에는 패킷 처리 방법을 alert, log, pass, activate, dynamic 중에서 1개를 지정한다각각의 action 의미는 2 같다.
dynamic 
시그네처는 단독으로 동작하지 않고, activate시그네처가 있어야만 한다(서로 상반관계). Activate dynamic 확장된 tag라는  옵션에 의해 치환되므로사용하지 않는 것이 좋다.


 

 protocol
protocol
에는 패킷의 프로토콜을 tcp, udp, icmp, ip 중에서 선택한다.

③⑥ IP address
IP address
에는 ③에 송신자⑥에 수신자의 IP주소를 지정한다임의의 IP주소인 any 지정할 수도 있다. IP주소는 192.168.0.24 같은 형식으로 넷마스크도 함께 지정한다특정 호스트만 지정하는 경우에는 10.1.1.20/32 같이 넷마스크를 32 비트로 한다.
동시에 여러 IP주소를 지정하는 경우, 192.168.0.0/24, 10.0.0.0/8 같은 형식을 사용하면 된다. !192.168.0.0/24 같이 기술하면 not 192.168.0.0/24 의미하게 된다.
또한, snort.conf에서 지정한 변수를 참조할 수도 있다예를 들어, HOME_NET 참조하려면, $HOME_NET라고 기술한다.

④⑦ port
port에는 송수신자의 포트 번호를 지정한다. 하나만 지정하는 경우에는 25나 80과 같이 수치를 기입한다. 콜론(:)을 사용하면 포트 범위를 지정할 수 있다. 예를 들어, 1:1024라고 기술한 경우, 1~1024까지의 포트 번호를 지정하게 된다. :500(500번 이하의 모든 포트), 6000:(6000번 이상의 모든 포트)와 같이 지정할 수도 있다.
IP주소와 동일하게 여기에서도 any(임의의 포트)나 !(지정한 이외의 포트)를 사용할 수 있다.

⑤ direction
direction에는 패킷의 방향을 나타내는 기호를 지정한다. ->를 지정하면 좌측이 송신자 IP주소, 우측이 수신자 IP주소임을 의미한다.
<>는 송수신자 구별 없이 지정한 IP주소 사이의 모든 패킷이 대상이 된다.

⑧ option
option에 지정할 수 있는 룰 옵션은 매우 많으므로, 자주 사용되는 것만 해설한다(표3). 모든 옵션에 관한 설명은 Snort웹사이트를 참조하라.


 

·msg
지정한 메시지가 alert발생시나 로그 보존시에 이벤트명으로서 사용된다.

·dsize
패킷의 페이로드 크기를 확인하고, 사이즈의 범위나 상하한을 지정할 수 있다. 예를 들어, dsize: 400<>500; 이라고 하면, 400바이트에서 500바이트의 페이로드 크기를 갖는 패킷을 지정하게 된다.
dsize옵션을 지정하면 간단히 버퍼 오버플로우를 감시할 수 있다.

·content
content는 가장 중요한 룰 옵션으로, 패킷의 페이로드 내부를 검색하는 문자열을 지정한다.
검색 문자열에는 텍스트 데이터와 바이너리 데이터를 지정할 수 있다. 텍스트 데이터의 경우에는 단순히 검색할 문자열을 지정하면 된다. 바이너리 데이터의 경우에는 16진수로 표시한 데이터를 “|” 로 둘러 쌀 필요가 있다. 또한, 텍스트 데이터는 매칭할 때에 대소문자 구별하는 것에 주의한다.

텍스트인 경우     content: “/bin/sh”;
바이너리인 경우  content: “ | 00 01 02 AA AB FF |”;
혼합시킨 경우     content: “ | 90 90 90 | /bin/sh”;

·offset
content옵션에서 지정한 문자열의 검색 개시 위치의 옵셋을 지정한다.

·depth
패턴 매칭을 실시할 페이로드의 깊이를 지정한다. 상한을 설정하는 것이므로, 매칭 처리의 부하는 경감되지만, 제한을 엄격하게 하면 false negative가 발생하기 쉽다.

·nocase
텍스트 데이터의 패턴 매칭을 할 때에 대문자와 소문자의 구별을 하지 않는다. 보통 텍스트 데이터의 패턴 매칭은 대문자와 소문자를 구별하기 때문에 이것을 노린 공격을 검지할 수 없는 가능성이 있다. nocase옵션을 지정하면 이와 같은 미검출을 막을 수 있다.

·flags
패킷에 설정되어 있는 TCP플래그를 지정한다(표4). 복수의 값을 설정하는 경우에는 flags: FS; 와 같이 나열한다. 또한 +(or), *(and), !(not) 등의 파라미터를 사용할 수 있다.

SNORT 시그니처 옵션
 

 option  description
 content  content:"/etc/passwd" 및 "|fffe 011 f|" 같이 페이로드 지정
 문자열에 ‘;’, ‘|’, '"' 포함 시 문자 앞에 ‘₩’(escape) 추가
 uricontent  패킷의 리퀘스트 URI 부분만 대상, 바이너리 지정은 안됨
 depth  패킷의 depth bite 안에서 지정된 문자열을 검색
 offset  패킷에서 문자열 검색 시작위치를 지정(bite)
 nocase  content의 대소문자 구분을 없애줌. nocase; 로 쓰임. 
 session  telnet,tfp 등 TCP Session 중의 사용자 입력 데이터를 뽑아낸다.
 Printable/all 중 선택, all은 문자열 표현이 안되면 16진수로 나타내 줌
 regex  정규표현식을 위한 option으로, 아직 표준이 없는 듯 하다.
 flow  TCP계층의 reassembly 시 함께 동작한다.
 to_server, to_client, from_server, from_client
 only_stream  rebuild된 패킷 만
 no_stream   rebuild되지 않은 패킷 만  
 established  통신이 established 된 패킷만  
 stateless  상태 상관없이 활성화 되며, 비정상 무작위공격에 대비
 fragbits(IP)  IP헤더에서 지정된 fragment 및 예약 bit 체크 
 M 분할이 덜 됐음, D 분할하지 않음, R 예약비트 (*,+,-,! 사용가능)
 ex) fragbits:MD+ 
    =>남은 fragment나 fragment 하지않은 bit가 지정 되어 있나 체크
 sameip(IP)  sameip;  라고 지정하며 src ip와 dst ip가 동일한지 체크
 ipopt(IP)  IP option이 존재하는지 체크(IP option은 따로..)
 tos, ID, ttl(IP)  ttl:3-5; tos:4; 로 지정하며 각각의 filed 에 대한 value값을 체크
 tos 는 !사용가능하며, ttl은 ><= - 사용가능
 seq(TCP)  seq:시퀀스넘버; 로 지정하며 지정된 시퀀스번호 체크
 ack(TCP)  ack:에크넘버; 로 지정하며 지정된 에크번호 체크
 flags(TCP)  flags:[!|*|+]<FSRPAU120>[,<FSRPAU120>]; TCP 플래그를 체크
 icmp_id(ICMP)  icmp_seq:ICMP IP값; 이며 ICMP ECHO의 ICMP ID 필드값을 체크한다.
 icmp_seq(ICMP)  위와 비슷하며 ICMP의 identification sequence field값을 체크함.
 static ICMP filed를 사용하는 은닉채널 탐지에 유용(stacheldraht DDoS agen)
 icode(ICMP)  icode:[<|>]<number>[<><number>];  지정된 ICMP code 값 체크
 itype(ICMP)  itype:[<|>]<number>[<><number>];  지정된 ICMP type 값 체크
 sid  시그니쳐의 ID를 지정함.
 0 ~ 99 : 예약이 끝난 상태 
 100 ~ 1,000,000 : Snort.org 공식 배포룰 용 
 1,000,000 ~  : 커스텀룰 용 (작성한 룰)
 rev  sid:1000983;rev:1; 
 정보 업뎃을 위한 revirsion 번호를 지정하며, sid와 함께 쓰인다.
 priority   priority :숫자; 위험도를 지정한다.
 classtype  classification.config의 사용이 snort.conf에 정의 되 있어야 함.
 configclassification:<classname>,<classdescription>,<defaultpriority>
 classtype:<classname>;
 reference  reference:cve,CAN-2000-1574; 외부참조를 나타냄.
 bugtraq http://www.securityfocus.com/bid/
 cve http://cve.mitre.org/cgi-bin/cvename.cgi?name=
 nessus http://cgi.nessus.org/plugins/dump.php3?id=
 arachnids (currentlydown)http://www.whitehats.com/info/IDS 
 mcafee http://vil.nai.com/vil/dispVirus.asp?virus k=
 logto   logto:"filename"; 시그니쳐에 매치되면 파일로 출력한다. 
 스케닝같은 복합적인 데이터를 다룰 때 용이하며, 
 snort가 바이너리 로깅 모드일땐 작동하지 않는다.

출처 : http://blog.naver.com/white00one/40088337728

  • Snort의 발전
    • 1998년 12월 Packet Strom 등록- 패킷 스니핑
    • 1999년 1월 Rule 기반 분석 기능 추가(침입탐지기능)
    • 1999년 12월 각종 Plug-in 추가(버전1.5)
    • Snort 2.0 이후
      • 향상된 네트워크 플로우 기능
      • 데이터베이스 Plug-in 추가
      • 전처리 Plug-in 추가
    • 최신 Rule은 최신 Snort 버전에서만 적용 가능
  • 현재 Snort는 크게 패킷 스니퍼, 패킷 로거,NIDS등의 기능으로 나누어짐
  • Snort의 기본 구조
    • 스니퍼(Sniper)
    • 전처리기(Preprocessor)
    • 탐색엔진
    • 로깅 / 경고
  • 패킷 스니퍼(Sniper)
    • 이더넷 인터페이스를 Promiscuous 모드로 동작
      • NIDS는 자신의 네트워크를 모든 패킷을 모니터링
    • 다양한 네트워크 트래픽(TCP,UDP,ICMP)을 사람이 보기 쉬운 형태로 변환
    • Snort 는 기본적인 스니핑 기능에 더하여 패킷을 로그 등으로 저장하여 확일할수 있다.
    • 용도
      • 네트워크 분석 및 문제 해결
      • 네트워크 성능 분석
      • 네트워크 상의 다양한 데이터 확인(도청)
  • Preprocessor(전처리기)
    • 스니퍼로 캡쳐한 모든 패킷들은 각종(Plug-in)으로 검사하여 패킷에서 특정한 행위가 검색 될 경우 탐지 엔진으로 전송
    • 전처리기에서 필요한 Plug-in 을 활성화 하거나 비활성화 시켜서 각 트래픽 종류에 따라 검사의 유무를 결정
    • 프로토콜 규칙을 따르지 않는 패킷을 탐지하기 위한 기능(비정상검사)

  • 탐지엔진

    • 규칙(Rule)기반의 패턴 검색을 하며, 규칙은 Signature로부터 발전함
    • 규칙 기반은 특정한 부분의 일치/불일치를 검사 -> 빠른속도
    • 전처리기(Plug-in)에서 오는 데이터와 규칙을 비교
    • 패킷과 규칙이 일치할 경우 경고/알람 부분으로 전달
    • 규칙은 정기적으로 업데이트 되며 최신 Snort 에서 적용 가능
    • 규칙은 트로이 목마, 버퍼 오버플로우 등 종류별로 묶임
    • 규칙 구성
      • Rule Header(규칙 헤더) : 규칙과 일치할 경우 로그를 남길것인지 경고를 보낼것인지를 설정하며, 패킷의 종류, IP 주소, Port 등으로 이루어져 있다.
      • Rule Option(규칙 옵션) : 규칙 헤더와 함께 복잡한 패킷을 분석할 경우 여러 옵션 및 옵션 값들로 강력한 기능을 제공한다.
    • Snort 의 규칙 문법이 있으며, 이것은 프로토콜의 종류, 콘텐트, 길이, 헤더 등을 포함
    • 규칙의 작성이 가증하다면 Snort를 자신의 네트워크 환경에 맞게 커스터마이징할수 있음 
      (커스터마이즈 : 이용자가 사용 방법과 기호에 맞추어서 하드웨어나 소프트웨어를 설정하거나 기능을 변경하는 것)

    • Rule의 개요
      • Snort는 Rule 기반의 패턴 검색 비교 방법 사용
        • 지속적인 업데이트를 통한 Rule 의 최신화
      • Plug-in 방식의 비교적 가벼운 IDS
        • 사용자의 네트워크 환경에 최적화 가능
      • Preprocessor 에서 전송되는 패킷을 받아서 검사
      • 전송받은 패킷을 Rule과 비교해여 로그나 경고를 발생시킨다
      • Plug-in 형태의 Rule들을 적용하기 위한 방법으로 Snort 실행시 옵션을 주어 설정값을 변경하는 방법과 Snort.conf파일을 직접 수정하여 적용하는 방법이 가능함
      • Rule은 크게 Rule Heaer와 Rule Option으로 구성 됨
      • Rule Header는 Rule Action, Protocol,출발지 정보, 목적지 정보로 이루어짐
      • Rule Option 은 필수적인 항목은 아니나 패킷을 좀더 세밀하게 검사하기 위해서는 필수적인 부분
      • Rule 은 구성이 일반적인 프로그래밍 언어보다 쉬운 편이므로 사용자가 자신만의 Rule을 만들어사용할할수 있음

 

  • 로깅/경고
    • 기본구성은 전처리기는 탐지 엔진과 마찬가지로Plug-in 형태이며 이것을 이용하여 DB, 네트워크 프로토콜, Winpopup 메시지등으로 전달
    • 로그는 텍스트 파일의 형태 또는 Database에 저장

      (로그 기본 경로 : /var/log/snort)

    • 경고는 로그파일, 네트워크, UINX 소켓, 윈도우팝업(SMB),SNMP트랩등으로 전달

 

  • Snort 용 추가 프로그램
    • SnortSnarf : Silicon Defense 에서 제작된 HTML 형식의 Snort분석기
    • Swatch : 실시간 syslog 모니터로서 e-mail을 통해 실시간으로 경고를 전송
    • ACID : PHP, APCHE, Snort DB Plug-in 이 필요하며, 보안을 위해 암호화를 권장
    • Loghog : 로그분석기이며 정해진 e-mail로 경고를 전송한다, lptable 규칙을 설정하여 트래픽을 차단한다.
    • SneakyMan : GNOME 기반의 Snort 규칙 생성기
    • Razorback : GNOME/X11 기반의 실시간 로그 분석 프로그램
    • Oinkmaster : Snort의 Rule 을 최신 버전으로 유지시켜 준다.
 
출처 : http://blog.naver.com/white00one/40088337728
 
  • Rule Header
    • Rule Header는 Snort Signatrue 의 핵심 부분
    • 규칙 검사 후 행동, 프로토콜, 출발지와 목적지의 IP, Port, 네트워크를 포함
      • Rule Action + Protocol + 출발지 정보 + 목적지 정보
    • Snort에서는 세가지의 패틴 매칭 알고리즘을 제공하고 있으며 사용자가 선택 가능
      • Aho-Corasick, Wu-Manber,Boyler-Moore 알고리즘
    • Snort의 규칙 파일은 다른 규칙 파일을 포함할수 있음
      • Include <complete_path_and_filename>

 

  • Rule Action
    • 각 Rule Action은 서로 다른 목적과 결과를 발생시킴
    • 패킷과 규칙이 일치할 경우 탐지 엔진에서 할 일을 정함
    • Rule Action을 정할떄는 Rule의 목적과 중요성을 고려
    • Rule Action 중 'Pass'액션은 기업 네트워크에서 거의 사용할일이 없으나, 특정 네트워크로부터 트래픽을 무시하고 싶을 때 유용하게 사용됨
    • Custom Rule Action
      • Ruletype suspicious 

              type log 
              output log_tcpdump:suspicious.log 
    • 기본 Rule Action

Rule Action

설명

alert

log 액션과 동일한 방법으로 패킷을 로그로 저장한뒤 사용자가 설정한 방법대로 사용자에게 경고를 보낸다. Alert은 치명적인 공격에 대해서만 사용하는것을 권장한다. 많은 Alert로그는 로그분석에 어려움을 준다

log

패킷에 대한 로그를 저장한다.

pass

pass액션은 패킷을 무시한다. 말 그래돌 악의적인 패킷이 아니라고 
판단될 경우 사용하면 된다

activate

Snort 의 기본 액션 중 가장 강력한 규칙으로 alert을 발생시킨후
다른 dynamic 규칙을 활성화한다. 즉, 복잡한 패킷이나 공격의 경우
activate 액션을 적용하면 좀더 효과적인 탐지가 가능하고 하나의
데이터에 대해서 다양한 검사 방법을 적용할수 있다.

dynamic

dynamic액션은 처음에 비활성화 상태로 있다가 activate 액션에 의해 
활성화 된다. 활성화 된 이후에는 log액션 규칙과 동일하다.

drop

iptable에 의해 패킷을 거부하고 로그를 남긴다.

reject

iptable에 의해 패킷을 거부하고 로그를 남긴후, 프로토콜이 TCP나 
ICMP포트일 경우 TCP를 보낸다.

sdrop

iptable에 의해 패킷을 거부하고 로그를 남기지 않는다.

 

  • Rule Protocol
    • TCP, UDP,IP,ICMP 네 가지의 프로토콜을 지원

      (ARP, ICRP,GRE,OSPF,RIP,IPX등 개발 중)

    • Rule Action 다음에 공백으로 구분하여 원하는 프로토콜 지정
    • 하나의 Rule에는 하나의 프로토콜만이 지정할수 있음
    • 프로토콜 지정의 예
      • log tcp any any -> any any (tcp의 아무 IP, 아무 포트에서 아무 IP 아무 port로 들어가는 패킷에 대한 로그를 남겨라)

 

  • IP Address
    • 프로토콜 다음은 출발지와 목적지에 대한 IP 주소 입력
    • IP 주소는 CIDR를 사용해서 지정하거나 단일 IP,주소를지정할수 있음
      • CIDR방식은 특정 네트워크 세그먼트나 일정한 IP 주소 대역을 지정해 줄수 있음
      • 192.168.100.0/24 : 192.168.100.0 ~ 192.168.100.255
      • 192.168.100.1/32 : 단일 IP 주소를 CIDR로 표현

         

    • Snort 규칙에서 일반도메인 이름을 사용할수 없으므로 CIDR의 표현 방식의 이해가 필요함
    • '!' 부정 연산자로 특정 네트워크 대역을 제외시킬 때 사용
    • '[]' : 단일 IP와 네트워크 대역 등 연속적이지 않은 IP주소를 지정할수 있음
    • 'any' : 모든 주소를 가리키는 와일드 카드로 유니코드 또는 버퍼 오버플로우와 같은 so,외부에서 모두 행해질수 있는 기술적인 취약점을 찾을 때 유용함
    • IP 주소의 재사용성을 위해서 변수를 사용함
    • 다양한 IP 주소 지정의 예
      • alert tcp !192.168.1.0/24 any -> 192.168.1.0/24 111 (tcp 192.168.1.0/24가 아닌 아무 포트에서 192.168.1.0/24 IP에 111 포트로 들어오는 모든 패킷에 대해 alert 을 남겨라)
      • alert tcp ![192.168.1.0./24, 10.1.1.0/24] any -> [192.168.1.0/24, 10.1.1.0/24] 111 ( tcp 192.168.1.0/24와 10.1.1.0/24 IP가 아닌 아무 포트에서 192.168.1.0/24와 10.1.1.0/24IPdml 111번 포트로 들어오는 패킷에 대해 alert을 남겨라

 

  • Port
    • IP 주소 할당에서 사용된 부정 연산자(!)와 와일드 카드(any)문자를 동일하게 사용
    • ':' : 연속된 port 번호를 지정할 경우 사용
    • 포트 번호는 tcp와 udp 규칙에서만 사용되나, snort 탐지 엔진이 정상적으로 동작하기 위해서는 포트 정보가 필요하므로 타 프로토콜에도 'any'를 사용
    • port 번호 지정의 예
      • log udp any any -> 192.168.1.0/24 1:1024 (UDP 모든 주소IP 의 모든 port에서 192.168.1.0/24 IP의 1번부터 1024번포트 로 들어오는 모든 패킷읠 로그를 남긴다)
      • log tcp any :1024 -> 192.168.1.0/24 500: (tcp 모든 주소의 1024번까지의 port에서 192.168.1.0/24 주소에서 500번port 부터 들어오는 모든 패킷에 대해 로그를 남긴다)

 

  • 방향 연산자
    • 방향 연잔자는 패킷의 방향을 표시
    • '->' 연산자는 왼쪽에 있는 내용이 출발지에 대한 정보이며, 오른쪽 내용은 목적지에 대한 정보를 나타냄
    • '<>' 연산자는 출발지와 목적지 사이에서 오가는 모든 패킷을 나타냄
    • '<>'연산자는 '->' 연산자에 비해서 IDS에 많은 부하를 가져옴
      • '<>'연산자는 대량의 트래픽을 발생시키지 않는 네트워크에 적용
    • 방향 연산자의 예
      • log tcp !192.168.1.0/24 any <> 192.168.1.0/24 23 (tcp 192.168.1.0/24의 주소가 아닌 모든 포트에서 192.168.1.0/24주소의 23 포트로 오고가는 모든 패킷에 대해 로그를 남긴다)

 

  • Activate 규칙과 Dynamic 규칙
    • Activate 규칙은 자신이 활성화 될 경우 다른 Dynamic 규칙을 활성화 시킴
    • Activate 규칙은 경고를 발생시키고 연관된 Dynamic 규칙을 활성화 시켜 log를 남길수 있음
    • Activate 규칙에서 'activates'뒤에 오는 값과 Dynamic규칙에서 'activated_by'뒤에 오는 값이 일치하면 Activate 규칙에 의해서 Dynamic 규칙이 활성화 됨
    • 'count'는 dynamic 규칙이 활성화 되는 빈도수 지정
    • Activate 규칙과 Dynamic 규칙의 예
      • activate tcp any any -> !$HOME_NET 23(activates :23; msg: "Telnet Access!";)

        dynamic tcp any any -> !$HOME_NET 23(activated_by: 23; count: 20;)

        [tcp 모든 주소의 모든 포트에서 $HOME_NET이 아닌 23번 포트로 들어오는 패킷이 activates가 23이면 메시지를 띄어라. tcp 모든 주소의 모든 포트에서 $HOME_NET이 아닌 23번 포트로 들어오는 패킷 activates 가 23이면 20번 으로 활성화 되는 빈도수를 지정하라]

      • activate tcp ! $HOME_NET any -> $HOME_NET 143 (flags : PA; content : "|E8C0FFFFFF|/bin"; activates: 1; msg: "IMAP buffer overflow!";)

        dynamic tcp !$HOME_NET any -> $HOME_NET 143 (activated_by:1; count: 50)

        [tcp $HOME_NET이 아닌 모든 포트에서 $HOME_NET 의 143포트로 가는 flags 가 PA이고 content가 "|E8C0FFFFFF|/bin"이고 activates가 1이면 msg를 띄어라. tcp $HOME_NET이아닌 모든 포트에서 $HOME_NET의 143번포트로 들어오는 패킷중 activates가 1이면 50번으로 활성화되는 빈도수를 지정]

[SNORT] Configure preprocessors

1. Configure preprocessors 
프로프로세서 설정은 사용자가 snort 에 지원되는 여러가지 plugin 를 쉽게 사용할수 있도록 한다. 
설정 형식은 다음과 같다. 

---------------------------------------------------------- 
preprocessor <name_of_processor>: <configuration_options> 
---------------------------------------------------------- 

preprocessor 로는 다음과 같다. 

Minfrag 
------- 
minfrag 는 아주 작게 조각난 패킷을 탐지하는 역활을 한다. 
공격자는 침입탐지 툴을 피하기 위해서 패킷을 잘게 잘게 쪼게서 보내기도 하는데 이렇게 되면 조각난 패킷에 대해 패턴검사를 하기 때문에 정확한 검사를 할수 없다. 그러므로 몇 바이트 미만의 패킷이 들어오면 경고를 해주게 된다. 

사용방법 : preprocessor minfrag:128 //128byte 이하의 패킷은 경고. 

Defrag 
------ 
defrag preprocessor 는 조각된 패킷을 경고하는 minfrag 와는 달리 이를 감지 하고 IP 패킷을 재조합 한다. minfrag 보다는 강력한 탐지를 할수 있다. 하지만 이를 사용할 경우 시스템에 많은 부하가 걸려 전송량이 많은 네트웍에서는 주의를 해야 할것이다. 

사용방법 : preprocessor defrag // 옵션 없음 

Stream 
------ 
stream 은 TCP stream 을 재조합하여 탐지율을 높인다. 하지만 이것역시 많은 시스템 부하를 일으키게 된다. 텔넷이나 ftp, web 정도의 서비스를 하는 port 정도를 조합하면 좋을거 같다. 
그리고  stream 을 사용할때 주의할점이 하나 있다. 설정 위치 인데... stream preprocessor 는 반드시 defrag 뒤에 , http_decode 보다는 앞에 설정이 되어 있어야 한다. 

사용방법 : preprocessor stream2: timeout 10, ports 21 23,  maxbytes 16384 

timeout : 초단위로 패킷이 없을때 stream 을 얼마간 계속할것인지 결정 
port : 조합할 패킷이 들어 오는 port 
maxbytes 는 패킷을 재조합할 최대 크기를 말한다. 

HTTP Decode 
------------ 
http_decode 는 HTTP URL 문자열이 알아보지 못하게 되있는 경우 그것을 snort 엔진에서 알아볼수 있는 문자열로 변환. 

사용방법 : preprocessor http_decode: 80 -unicode -cginull 

Portscan 
--------- 
Portscan 공격을 탐지하고 로그를 남기게 된다. 

사용방법: preprocessor portscan: $HOME_NET 4 3 portscan.log 

Portscan Ignorehosts 
--------------------- 
portscan detector 가 작동하지 않아야 할 IP 리스트를 지정할수 있다. 

사용방법: portscan-ignorehosts: <host list> 


2. Config output plugins 
패킷 감시 결과를 출력할때 사용되는 plugins 을 지정하는 것이다. 
각 plugin 마다..출력하는 각각의 출력형태를 가지고 있기에 어떤식으로 출력을 할것인지를 이곳에서 결정하면 된다. 
사용되는 plugin module 종류는 다음과 같다. 

Alert_syslog : alert 를 syslog 로 보내 버린다. 

Alert_fast : alert 로그를 남길때 output file 이 한라인으로 남기기 때문에 무척 빠르다. 

Alert_full : alert 로그를 남길때 output file 에 모든 로그를 남기기 때문에 상당히 느리다. 

Alert_smb : alert 를 줄때 WinPopup 형식으로 netbios 를 사용하는 원격 머신에 경고를 날려 준다. 

Alert_unixsock : Unix domain socket을 설치해서 이곳으로 alert를 준다. 

log_tcpdump : log packets 를 tcpdump 형태로 바꾸어 outfile 을 남긴다. 

database : snort 의 data 를 mysql,postgresql 등으로 저장한다. 

Alert_smb : alert 를 줄때 WinPopup 형식으로 netbios 를 사용하는 원격머신에 경고를 날려 준다. 

Alert_unixsock : Unix domain socket을 설치해서 이곳으로 alert를 준다. 

log_tcpdump : log packets 를 tcpdump 형태로 바꾸어 outfile 을 남긴다. 

database : snort 의 data 를 mysql,postgresql 등으로 저장한다. 


3. Rule set config 
Snort Rule set 설정파일을 snort.conf 파일에서 include 를 이용해서 가져 온다. 
include xxxxxxx.rules 

주의 할점은 c 언어와 같이 include 문 마지막에 ; 를 사용하지 않는다. 

Snort 잘 설명된 사이트 : http://kthan.tistory.com/category/IT%20%EC%83%9D%ED%99%9C/IPS/Snort