Rule의 성능 향상 : content

http://vrt-sourcefire.blogspot.com/2009/07/rule-performance-part-one-content.html

 

이 글은 위 글을 참조한 것이다.

 

alert tcp $EXTERNAL_NET $HTTP_PORTS -> $HOME_NET any 
(msg:"WEB-CLIENT VML fill method overflow attempt";
flow:from_server,established; content:"|3A|fill"; nocase;
pcre:"/<\w+\x3afill\s[^>]*method\s*=\s*(\x27[^\x27]{32}|\x22[^\x22]{32}|[^\s>]{32})/smi";
metadata:policy balanced-ips drop, policy connectivity-ips drop, policy security-ips drop;
reference:bugtraq,20096; reference:cve,2006-4868;
reference:url,www.microsoft.com/technet/security/bulletin/ms06-055.mspx;
classtype:attempted-user; sid:8416; rev:5;)
 
위 룰에서 pcre앞에 content를 넣었다.
이는 패스트 패턴 매치를 적용하여 pcre에서 검사할 패킷의 수를 미리 content로 하여금 줄인다.
즉, HTTP_PORT에서 오는 패킷 중 |3a|fill 을 포함하는 패킷만을 PCRE 엔진에서 검사한다.
alert tcp $HOME_NET 300 -> $EXTERNAL_NET (msg:”SPECIFIC-THREAT Oh noes”;
flow: to_client, established;
content:”|00 00 00 00 00 00 00 00|”; content:”BISCUIT”; sid: 5;)
 
위 룰은 다음과 같이 바뀔 수 있다.
alert tcp $HOME_NET 300 -> $EXTERNAL_NET (msg:”SPECIFIC-THREAT Oh noes”;
flow: to_client, established;
content:”|00 00 00 00 00 00 00 00|”; content:”BISCUIT”; fast_pattern; sid: 5;)
 
snort 는 null이 8 바이트이기 때문에 더 길어서 먼저 탐지하게 되있다.
null 이 연속되는 content 보다는 BISCUIT 이라는 단어가 더 unique 하기 때문에 
fast_pattern으로 먼저 탐지하는 것이다.
이로서 좀 더 성능이 좋아 질 수 있다.
Advertisements

About this entry