<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:st1="urn:schemas-microsoft-com:office:smarttags" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 11 (filtered medium)">
<!--[if !mso]>
<style>
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style>
<![endif]--><o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="PersonName" /><!--[if !mso]>
<style>
st1\:*{behavior:url(#default#ieooui) }
</style>
<![endif]--><style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman";}
a:link, span.MsoHyperlink
        {color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {color:blue;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-reply;
        font-family:Arial;
        color:navy;}
@page Section1
        {size:8.5in 11.0in;
        margin:1.0in 1.25in 1.0in 1.25in;}
div.Section1
        {page:Section1;}
-->
</style>
</head>
<body lang="EN-US" link="blue" vlink="blue">
<div class="Section1">
<p class="MsoNormal"><font size="2" color="navy" face="Arial"><span style="font-size:
10.0pt;font-family:Arial;color:navy">Hello good sirs,<o:p></o:p></span></font></p>
<p class="MsoNormal"><font size="2" color="navy" face="Arial"><span style="font-size:
10.0pt;font-family:Arial;color:navy"><o:p> </o:p></span></font></p>
<p class="MsoNormal"><font size="2" color="navy" face="Arial"><span style="font-size:
10.0pt;font-family:Arial;color:navy">I wanted to chime in here and say that ‘depth’ is ‘relative’, but only to the ‘offset’ flag, and if no ‘offset’ flag is set, the beginning
 of the payload is used as the starting point.  With that in mind, ‘within’ is a useful content matching option as every time you want to constrain a match to a certain field after your previous match, you don’t have to move your offset (The workaround to this
 would be an ugly hack of using distance+depth).<o:p></o:p></span></font></p>
<p class="MsoNormal"><font size="2" color="navy" face="Arial"><span style="font-size:
10.0pt;font-family:Arial;color:navy"><o:p> </o:p></span></font></p>
<p class="MsoNormal"><font size="2" color="navy" face="Arial"><span style="font-size:
10.0pt;font-family:Arial;color:navy">Now I think this is much clearer when you run a test on a rule that is not a simple composite, but rather a complex, ie, more than 3
 content matches:<o:p></o:p></span></font></p>
<p class="MsoNormal"><font size="2" color="navy" face="Arial"><span style="font-size:
10.0pt;font-family:Arial;color:navy"><o:p> </o:p></span></font></p>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:
12.0pt">alert tcp any any -> any any (msg:"DEPTH TEST-passed!"; flow:established,to_server; content:"hello"; nocase; content:"3"; distance:2; depth:3; content:"world"; nocase;
 distance:1; depth:5; classtype:trojan-activity; sid:20104568; rev:1;)<o:p></o:p></span></font></p>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:
12.0pt"><o:p> </o:p></span></font></p>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:
12.0pt">vs<o:p></o:p></span></font></p>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:
12.0pt"><o:p> </o:p></span></font></p>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:
12.0pt">alert tcp any any -> any any (msg:"WITHIN TEST-passed!"; flow:established,to_server; content:"hello"; nocase; content:"3"; within:3; content:"world"; within:6; classtype:trojan-activity;
 sid:20104569; rev:1;)</span></font><font size="2" color="navy" face="Arial"><span style="font-size:10.0pt;font-family:Arial;
color:navy"><o:p></o:p></span></font></p>
<p class="MsoNormal"><font size="2" color="navy" face="Arial"><span style="font-size:
10.0pt;font-family:Arial;color:navy"><o:p> </o:p></span></font></p>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:
12.0pt">or a composite of the two types:</span></font><font size="2" color="navy" face="Arial"><span style="font-size:10.0pt;font-family:Arial;color:navy"><o:p></o:p></span></font></p>
<p class="MsoNormal"><font size="2" color="navy" face="Arial"><span style="font-size:
10.0pt;font-family:Arial;color:navy"><o:p> </o:p></span></font></p>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:
12.0pt">alert tcp any any -> any any (msg:"COMBO TEST-passed!"; flow:established,to_server; content:"hello"; nocase; content:"3"; within:3; content:"world"; distance:1; depth:5;
 classtype:trojan-activity; sid:20104570; rev:1;)</span></font><font size="2" color="navy" face="Arial"><span style="font-size:10.0pt;font-family:Arial;
color:navy"><o:p></o:p></span></font></p>
<p class="MsoNormal"><font size="2" color="navy" face="Arial"><span style="font-size:
10.0pt;font-family:Arial;color:navy"><o:p> </o:p></span></font></p>
<p class="MsoNormal"><font size="2" color="navy" face="Arial"><span style="font-size:
10.0pt;font-family:Arial;color:navy">I have verified that all three of the aforementioned rules trigger.  It would seem to me that ‘within’ is a much more elegant solution
 if you are trying to ensure that a value is scattered somewhere with a range of possibilities, but if you want to be surgical with your rules ‘distance’ + ‘depth’ would be better suited, but really at this point you’re double-dipping with options:  distance
 is going to set your match at the beginning and depth is going to set your end of the field, so you might just be better off using distance at that point, ie:<o:p></o:p></span></font></p>
<p class="MsoNormal"><font size="2" color="navy" face="Arial"><span style="font-size:
10.0pt;font-family:Arial;color:navy"><o:p> </o:p></span></font></p>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:
12.0pt">alert tcp any any -> any any (msg:"CONTENT TEST-passed!"; flow:established,to_server; content:"hello"; nocase; content:"3"; distance:2; content:"world"; nocase; distance:1;
 classtype:trojan-activity; sid:20104571; rev:1;)<o:p></o:p></span></font></p>
<p class="MsoNormal"><font size="2" color="navy" face="Arial"><span style="font-size:
10.0pt;font-family:Arial;color:navy"><o:p> </o:p></span></font></p>
<p class="MsoNormal"><font size="2" color="navy" face="Arial"><span style="font-size:
10.0pt;font-family:Arial;color:navy">I think both depth and within deserve their place in rules, as sometimes room for padding needs to be made whereas other times exact
 placement of payload is necessary.<o:p></o:p></span></font></p>
<p class="MsoNormal"><font size="2" color="navy" face="Arial"><span style="font-size:
10.0pt;font-family:Arial;color:navy"><o:p> </o:p></span></font></p>
<p class="MsoNormal"><font size="2" color="navy" face="Arial"><span style="font-size:
10.0pt;font-family:Arial;color:navy">I hope I haven’t confused anyone.  I tried to be as clear as I could, and if any of it needs clarification, I’ll be happy to provide
 it.<o:p></o:p></span></font></p>
<p class="MsoNormal"><font size="2" color="navy" face="Arial"><span style="font-size:
10.0pt;font-family:Arial;color:navy">-Parker<o:p></o:p></span></font></p>
<p class="MsoNormal"><font size="2" color="navy" face="Arial"><span style="font-size:
10.0pt;font-family:Arial;color:navy"><o:p> </o:p></span></font></p>
<div>
<div class="MsoNormal" align="center" style="text-align:center"><font size="3" face="Times New Roman"><span style="font-size:12.0pt">
<hr size="2" width="100%" align="center" tabindex="-1">
</span></font></div>
<p class="MsoNormal"><b><font size="2" face="Tahoma"><span style="font-size:10.0pt;
font-family:Tahoma;font-weight:bold">From:</span></font></b><font size="2" face="Tahoma"><span style="font-size:10.0pt;font-family:Tahoma">
<st1:PersonName w:st="on">Matt Olney</st1:PersonName> [mailto:molney@...3395...35...]
<br>
<b><span style="font-weight:bold">Sent:</span></b> Thursday, June 10, 2010 12:00 PM<br>
<b><span style="font-weight:bold">To:</span></b> L0rd Ch0de1m0rt<br>
<b><span style="font-weight:bold">Cc:</span></b> snort-sigs@...680...orge.net<br>
<b><span style="font-weight:bold">Subject:</span></b> Re: [Snort-sigs] No need for content modifier 'within'</span></font><o:p></o:p></p>
</div>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:
12.0pt"><o:p> </o:p></span></font></p>
<div>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:
12.0pt">Your Chodeship,<o:p></o:p></span></font></p>
</div>
<div>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:
12.0pt"><br>
I'm at home taking a couple of days off, and haven't tested it, but here is my understanding:<o:p></o:p></span></font></p>
</div>
<div>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:
12.0pt"> <o:p></o:p></span></font></p>
</div>
<div>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:
12.0pt"> <o:p></o:p></span></font></p>
</div>
<div>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:
12.0pt">For the string:<o:p></o:p></span></font></p>
</div>
<div>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:
12.0pt"> <o:p></o:p></span></font></p>
</div>
<div>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:
12.0pt">"I wrote hello world"<o:p></o:p></span></font></p>
</div>
<div>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:
12.0pt"> <o:p></o:p></span></font></p>
</div>
<div>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:
12.0pt">content:"hello"; content:"wrote"; distance: 0; depth:5;<o:p></o:p></span></font></p>
</div>
<div>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:
12.0pt"> <o:p></o:p></span></font></p>
</div>
<div>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:
12.0pt">would fire because "depth" and "offset" force a flag of non-relative to the match.  I may be getting this backwards, and it may be that "distance" sets a relative flag
 instead, but one way or another those two terms are bound together.  I'll do some testing<o:p></o:p></span></font></p>
</div>
<div>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:
12.0pt"> <o:p></o:p></span></font></p>
</div>
<div>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:
12.0pt">I'll try and set some time aside Monday to test this, if no one else gets to it, but in the meantime, please follow the recommendations.<o:p></o:p></span></font></p>
</div>
<div>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:
12.0pt"> <o:p></o:p></span></font></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><font size="3" face="Times New Roman"><span style="font-size:12.0pt">Matt<o:p></o:p></span></font></p>
</div>
<div>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:
12.0pt">On Thu, Jun 10, 2010 at 11:32 AM, L0rd Ch0de1m0rt <<a href="mailto:l0rdch0de1m0rt@...2420...">l0rdch0de1m0rt@...2420...</a>> wrote:<o:p></o:p></span></font></p>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:
12.0pt">I understand what you are saying but I'm not sure it is congruent with<br>
current reality.  Try this -- run these two rules:<br>
<br>
alert tcp any any -> any any (msg:"DEPTH TEST!";<br>
flow:established,to_server; content:"hello"; nocase; content:"world";<br>
distance:4; depth:5; classtype:trojan-activity; sid:20104568; rev:1;)<br>
<br>
alert tcp any any -> any any (msg:"WITHIN TEST!";<br>
flow:established,to_server; content:"hello"; nocase; content:"world";<br>
distance:4; within:5; classtype:trojan-activity; sid:20104569; rev:1;)<br>
<br>
And then browse to <a href="http://www.google.com/hello1234world" target="_blank">
http://www.google.com/hello1234world</a><br>
<br>
Do they both alert?  If so, that would seem to indicate that depth is<br>
relative, no?<br>
<br>
I'd also encourage you to test <a href="http://www.google.com/hello123world" target="_blank">
http://www.google.com/hello123world</a> and<br>
<a href="http://www.google.com/hello12345world" target="_blank">http://www.google.com/hello12345world</a> and verify that those don't<br>
cause alerts.<br>
<br>
Cheers,<o:p></o:p></span></font></p>
<div>
<div>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:
12.0pt"><br>
-L0rd Ch0de1m0rt<br>
<br>
On 6/10/10, Joel Esler <<a href="mailto:jesler@...435...">jesler@...3451...5...</a>> wrote:<br>
> I apologize I mean depth instead of distance.  My fingers typed the wrong<br>
> word.<br>
><br>
> You can do a distance:0, but within allows you to tell the search where to<br>
> stop.  Distance is relative to the last match, within is relative to this<br>
> match.<br>
><br>
> Depth tells Snort how far to read into a packet to search for a pattern<br>
> Offset tells Snort how far to read into a packet to START searching for a<br>
> pattern<br>
> Distance tells Snort how far into a packet Snort should skip relative to the<br>
> end of the previous content match<br>
> Within makes sure that there is "x" amount of bytes between pattern matches.<br>
><br>
> You can't use a depth with a distance, as depth references the offset, not<br>
> the relative distance from last match (that's what distance is for)<br>
><br>
> There are reasons for all four, we've had this debate for years.<br>
><br>
> Plus with distance, you can do negative relativity, you can't do that with<br>
> offset.  Just FYI.<br>
><br>
><br>
> 11:04 AM, on Jun 10, 2010, wrote:<br>
><br>
>> What?  Are you confusing distance and offset?  According to your blog<br>
>> post according to the Snort manual, "The distance keyword allows the<br>
>> rule writer to specify how far into a packet Snort should ignore<br>
>> before starting to search for the specified pattern relative to the<br>
>> end of the previous pattern match."<br>
>><br>
>> Distance is relative and I'm saying we don't really need the 'within'<br>
>> keyword since we can just do distance:0; and then use depth since<br>
>> depth is relative as well.<br>
>><br>
>> Hope this helps.<br>
>><br>
>> -L0rd Ch0de1m0rt<br>
>><br>
>> On 6/10/10, Joel Esler <<a href="mailto:jesler@...435...">jesler@...435...</a>> wrote:<br>
>>> Distance tells Snort how far to read into a packet to search for a<br>
>>> pattern<br>
>>> Within makes sure that at most "x" amount of bytes are between pattern<br>
>>> matches.<br>
>>><br>
>>> Within is relative, distance is not.<br>
>>><br>
>>><br>
>>> 10:39 AM, on Jun 10, 2010, wrote:<br>
>>><br>
>>>> Hello.  Not trying to beat a dead horse here but I was reading<br>
>>>> <a href="http://blog.joelesler.net/2010/03/offset-depth-distance-and-within.html" target="_blank">
http://blog.joelesler.net/2010/03/offset-depth-distance-and-within.html</a><br>
>>>> and came to a part where it said, "Offset goes with Depth, distance<br>
>>>> goes with within.  Don’t mix them."  I'm not sure I agree with this<br>
>>>> and I'm not much of an Blogger/Internet Exhibitionist so I'm posting<br>
>>>> this here.<br>
>>>><br>
>>>> We all know, offset tells Snort how far into the payload (starting<br>
>>>> from the beginning of the payload) to start looking for a content<br>
>>>> match.  Distance tells Snort how far into the payload (starting from<br>
>>>> the previous content match) to start looking for a content match.<br>
>>>> Depth *and* within tell Snort where to stop looking based on where it<br>
>>>> started looking.  So you can have distance and use depth if you want<br>
>>>> and it is perfectly OK to do this.  Do not be afraid.  The only reason<br>
>>>> within exists is so if you have a situation where you don't use<br>
>>>> distance but want to make sure no more than N bytes are between<br>
>>>> content matches.  But within isn't really necessary. In fact, we could<br>
>>>> get rid of within in the case described and just add distance:0; and<br>
>>>> use depth.<br>
>>>><br>
>>>> Hope this helps clarify a few things about the within content modifier.<br>
>>>><br>
>>>> Cheers,<br>
>>>><br>
>>>> -L0rd Ch0de1m0rt<br>
>>>><br>
>>>> ------------------------------------------------------------------------------<br>
>>>> ThinkGeek and WIRED's GeekDad team up for the Ultimate<br>
>>>> GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the<br>
>>>> lucky parental unit.  See the prize list and enter to win:<br>
>>>> <a href="http://p.sf.net/sfu/thinkgeek-promo" target="_blank">http://p.sf.net/sfu/thinkgeek-promo</a><br>
>>>> _______________________________________________<br>
>>>> Snort-sigs mailing list<br>
>>>> <a href="mailto:Snort-sigs@lists.sourceforge.net">Snort-sigs@lists.sourceforge.net</a><br>
>>>> <a href="https://lists.sourceforge.net/lists/listinfo/snort-sigs" target="_blank">
https://lists.sourceforge.net/lists/listinfo/snort-sigs</a><br>
>>><br>
>>> --<br>
>>> Joel Esler<br>
>>><br>
>>><br>
>>><br>
><br>
> --<br>
> Joel Esler<br>
><br>
><br>
><br>
<br>
------------------------------------------------------------------------------<br>
ThinkGeek and WIRED's GeekDad team up for the Ultimate<br>
GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the<br>
lucky parental unit.  See the prize list and enter to win:<br>
<a href="http://p.sf.net/sfu/thinkgeek-promo" target="_blank">http://p.sf.net/sfu/thinkgeek-promo</a><br>
_______________________________________________<br>
Snort-sigs mailing list<br>
<a href="mailto:Snort-sigs@lists.sourceforge.net">Snort-sigs@...639...forge.net</a><br>
<a href="https://lists.sourceforge.net/lists/listinfo/snort-sigs" target="_blank">https://lists.sourceforge.net/lists/listinfo/snort-sigs</a><o:p></o:p></span></font></p>
</div>
</div>
</div>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:
12.0pt"><o:p> </o:p></span></font></p>
</div>
</body>
</html>