좋은 룰을 작성하는 법

http://vrt-sourcefire.blogspot.com/2009/01/tips-for-writing-good-rules-from-n00b.html

이 글은 위 글을 토대로 작성 되었다.

 

snort 2.0부터 Fast pattern matcher 가 도입되었다. 이것은 탐지 프로세스의 추진력을 올리는 개념이다.

Snort의 탐지 엔진은 rule을 두 가지 레벨 라벨(-level label)로 분류한다.

Protocol-port 번호와 content or uricontent이다.

두 번째 (level lable) 에서는 fast pattern matcher로 가장 처음으로 오는 가장 긴 non-negative content를 먼저 매칭을 위해 선택한다.

두 번째 (level lable) 에서는 fast_pattern 이라는 content modifier로 매칭 순서를 변경할 수 있다.

[Rule 1] alert tcp $HOME_NET any -> $EXTERNAL_NET 80

(msg:”Bad Search”; content:”writing”; content:”bad”; content:”pig”; content:”rules”; content:!”snort”; sid:1;)

여기서는 writing이 fast pattern matcher로 선정 될 것이고

[Rule 2] alert tcp $HOME_NET any -> $EXTERNAL_NET 80

(msg:”Bad Search”; content:”writing”; content:”bad”; content:”pig”; fast_pattern; content:”rules”; content:!”snort”; sid:2;)

여기서는 pig가 fast pattern matcher로 선정 될 것이다.

 

예를 들어 http/80 박스에 각각 “bad”, “good”, “writing”, “erasing”, “pig” 그리고 unlabel을 가지는 fast pattern matcher가 있다고 하자.

[Figure 1: Labeled boxes with labeled bins]

****** [“http/80”] ****************

 * “bad” bin: 12, 13, 14

* “good” bin: 10, 11

* “writing” bin: 1, 3

* “erasing” bin: 4, 8

* “pig” bin: 2

* unlabeled bin: 9, 15

********************************

 

 만약 웹브라우져에서 다음과 같은 글을 친다면

writing bad pig rules”

snort는 sids가 1, 2, 3, 9, 12, 13, 14, 15. 인 순서로 rule을 참조할 것이다.

Label이 적어도 하나는 있어야 좋으며 자주 쓰이는 것보다 잘 안쓰이는 단어로 fast pattern matcher를 사용하는 것이 좋다.

 “a” 는 “pneumonoultramicroscopicsilicovolcanoconiosis” 보다 많이 매치 될 것이기 때문이다.

 

alert tcp $EXTERNAL_NET 80 -> $HOME_NET any

(msg:”Bad Result”; flow:to_client,established; flowbits:isset,bad_search; content:”bacon”; content:”|90 90 90 90 90|”; sid:3;)

이 같은 룰을 다음과 같이 파싱되고

 

 [Table 1: Parsed Rule 3]

flow:to_client,established

 flowbits:isset,bad_search

 content:”bacon”

content:”|90 90 90 90 90|”

Dsize, flow, flowbits 등의 옵션을 쓰면 더 많은 프로세싱과 미스매치를 제거 할 수 있기에 룰의 젤처음에 써주는 것이 좋다.

Advertisements

About this entry