fast_pattern 매칭옵션 변화 (fast_pattern:only?)

alert udp $HOME_NET any -> $EXTERNAL_NET 5060 (msg:"POLICY Gizmo register VOIP state"; content:"INVITE sip|3A|"; nocase; content:"User-Agent|3A|"; nocase; content:"Gizmo"; nocase; pcre:"/^User-Agent\x3A[^\n\r]+Gizmo/smi"; reference:url,www.gizmoproject.com; classtype:policy-violation; sid:6407; rev:1;)

여기서 Snort는 패스트 패턴매칭을 위해 "INVITE sip|3A|" 를 고른다. 하지만 이 문구는 모든 SIP 요청에서 잡힐것이니 fast_pattern 옵션을 이용하여

가장 먼저 찾을 문구를 바꾼다.

alert udp $HOME_NET any -> $EXTERNAL_NET 5060 (msg:"POLICY Gizmo register VOIP state"; content:"INVITE sip|3A|"; nocase; content:"User-Agent|3A|"; nocase; content:"Gizmo"; nocase; fast_pattern; pcre:"/^User-Agent\x3A[^\n\r]+Gizmo/smi"; reference:url,www.gizmoproject.com; classtype:policy-violation; sid:6407; rev:1;)

패스트 패턴매칭을 위한 문구는 Gizmo가 되었다.
alert tcp $HOME_NET any -> $EXTERNAL_NET $HTTP_PORTS (msg:"SPYWARE-PUT Hijacker xp antispyware 2009 runtime detection - pre-sale webpage"; flow:to_server,established; uricontent:"/buy.html?"; nocase; uricontent:"wmid="; nocase; uricontent:"skey="; nocase; content:"Host|3A| http://www.xpas2009.com"; nocase; reference:url,research.sunbelt-software.com/threatdisplay.aspx?name=XPAntiSpyware%202009&threatid=429593; reference:url,www.ca.com/us/securityadvisor/pest/pest.aspx?id=453141780; classtype:misc-activity; sid:16136; rev:2;)

위 룰에서는 패스트 패턴매칭을 위해 무슨 문구를 사용할까? Snort는 "/buy.html?" 를 선택한다.

URI 컨텐츠의 버퍼가 작고 검사할 부분도 적기 때문. 그러나 특징적인 문구를 탐지하기 위해 다음과 같이 룰을 변경할 수 있다.

alert tcp $HOME_NET any -> $EXTERNAL_NET $HTTP_PORTS (msg:"SPYWARE-PUT Hijacker xp antispyware 2009 runtime detection - pre-sale webpage"; flow:to_server,established; uricontent:"/buy.html?"; nocase; uricontent:"wmid="; nocase; uricontent:"skey="; nocase; content:"Host|3A| http://www.xpas2009.com"; nocase; fast_pattern; reference:url,research.sunbelt-software.com/threatdisplay.aspx?name=XPAntiSpyware%202009&threatid=429593; reference:url,www.ca.com/us/securityadvisor/pest/pest.aspx?id=453141780; classtype:misc-activity; sid:16136; rev:2;)

여기서 한가지 알아둘것은 fast_pattern:only; 이다.

alert tcp $HOME_NET any -> $EXTERNAL_NET $HTTP_PORTS (msg:"SPYWARE-PUT Hijacker xp antispyware 2009 runtime detection - pre-sale webpage"; flow:to_server,established; uricontent:"/buy.html?"; nocase; uricontent:"wmid="; nocase; uricontent:"skey="; nocase; content:"Host|3A| http://www.xpas2009.com"; nocase; fast_pattern:only; http_header; reference:url,research.sunbelt-software.com/threatdisplay.aspx?name=XPAntiSpyware%202009&threatid=429593; reference:url,www.ca.com/us/securityadvisor/pest/pest.aspx?id=453141780; classtype:misc-activity; sid:16136; rev:2;)

Snort는 패스트 매칭후 다시한번 그문구를 탐지한다. 그문구 이후에 나오는 content가 distance, within옵션을 가지고 있다면 유리할것이다.

하지만 예제에서는 only를 붙여서 한번만 검사하게 한다. 그리하여 CPU사용을 줄인다.

Snort 메뉴얼 상의 설명을 보자

아래 룰은 IJKLMNO가 짧지만 패스트 패턴 매칭으로 쓰겠다는 뜻이다.
alert tcp any any -> any 80 (content:"ABCDEFGH"; content:"IJKLMNO"; fast_pattern;)
아래 룰은 IJKLMNO가 패스트 패턴 매칭에만 쓰인다. 패스트 매턴 매치 이후 컨텐츠 옵션으로 쓰지 않는다.
alert tcp any any -> any 80 (content:"ABCDEFGH"; content:"IJKLMNO"; nocase; fast_pattern:only;)
패스트 패턴 매치할 문구를 오프셋과 길이를 지정하여 검사한다.
alert tcp any any -> any 80 (content:"ABCDEFGH"; content:"IJKLMNO"; fast_pattern:1,5;)

참조 : snort manual 2.8.6

Snort는 성능을 향상시키기 위해 많은 기법을 도입하고있다.

룰을 만드는 입장에서는 이 모든것을 고려해야한다.

모든 것을 고려하여 룰을 만드는사람이 뛰어난것인가...

참조 : http://vrt-sourcefire.blogspot.com/2010/04/using-snort-fast-patterns-wisely-for.html

패스트 룰을위한 현명한 fast_pattern 옵션 사용법

Advertisements

About this entry