Hi Joel,<br><br>I've attached some pcaps to assist you and Sourcefire in understanding this.  Here are some rules for testing as well:<br><br>alert tcp $HOME_NET any -> $EXTERNAL_NET $HTTP_PORTS (msg:"Test for multipart POST -- http_header"; flow:established,to_server; content:"Content-Disposition"; http_header; content:"form-data"; sid:11111;)<br>
<br>alert tcp $HOME_NET any -> $EXTERNAL_NET $HTTP_PORTS (msg:"Test for multipart POST -- http_client_body"; flow:established,to_server; content:"Content-Disposition"; http_client_body; content:"form-data"; sid:22222;)<br>
<br>I believe that the rules, pcaps, and previous description of the problem should be sufficient for you guys to get a good handle on the issue I am talking about.<br><br>At this point, I do not believe that Snort handles this as you suggest.  Please let me know if I am incorrect about this and what specific version added this support.<br>
<br>When can we expect http_inspect to be able to handle multi-part headers and make the appropriate data available in the http_* content buffers?  Until then, what is a good solution for this situation?  Should we simply not use the http_* buffers and just do global content matches?<br>
<br>Thanks for all your help!<br><br>-Mike Cox <br><br><div class="gmail_quote">On Wed, Oct 17, 2012 at 1:18 PM, Joel Esler <span dir="ltr"><<a href="mailto:jesler@...435..." target="_blank">jesler@...435...</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div>Mike,</div><div><br></div>I understand what you mean, however the http inspect preprocessor should handle multipart headers.  There's a format that they must adhere to in the RFC as well for that, and I know we handle that as I had to do some testing on that awhile back to ensure that we not only detect but handle that.    So I'd ask you to verify that this is, indeed the case.  (You say "I believe", so I'm just being sure)<div>
<br></div><div>That being said, yes, we are rewriting http_inspect right now and multipart headers are one of the feature requirements. (as the present http_inspect handles it).  I'll ask devel to take a look at this, but my testing and understanding is that we handle it.  </div>
<div><br></div><div>I know you said you can't get it, but that's why we always ask for a pcap.  We can't recreate every network in the world, and not all devices adhere to RFCs correctly.  Heck, some vendors don't adhere to their <i>own</i> RFC's.  Development will ask me for a pcap from you, as our pcaps that are testing with show we handle this multipart (if that's what it really is) scenario correctly.</div>
<div><br></div><div>I'm not trying to be difficult, and I'm not arrogant enough to think that there's some scenario out that there that we might not handle.  We're all humans, we know it probably exists, however, given the scenario that you describe, and from my experience, that shouldn't be a problem.</div>
<div><br></div><div><div class="im"><div>--</div><div>Joel Esler</div><div>Senior Research Engineer, VRT</div><div>OpenSource Community Manager</div><div>Sourcefire</div><div><br></div></div><div><div class="h5"><div><div>
<br><div><div>On Oct 17, 2012, at 1:04 PM, Mike Cox <<a href="mailto:mike.cox52@...2420..." target="_blank">mike.cox52@...2420...</a>> wrote:</div><br><blockquote type="cite">Hi Joel,<br><br>I appreciate your timely response and feedback.<br>
<br>I believe the issue here is that HTTP headers normally seen in the initial HTTP data are being sent in subsequent packets (as a result of multipart/form-data POSTS) and formatted differently from the standard HTTP header.  I hope I made this clear in previous emails but some simple Google searches would also help illuminate what I'm talking about.  I'd rather not get in to a RFC argument with you (if you really want to we can but, apparently this is a standard format and accepted by both modern browsers and servers).<br>

<br>My concern here is Snort rules that are looking for data normally in the HTTP headers (using the http_header buffer) do not work in the case of some multipart/form data POSTS.  This means that snort rules are not alerting as intended (and introduces an IDS bypass avenue, albeit somewhat paltry in terms of eloquence but nonetheless functional).<br>

<br>Does Sourcefire/VRT,etc. intend to account for this in future http-inspect capabilities or should we modify our current rules to do inefficient, global content matches?  Or is there another solution that I am missing here?  What can we do *now*?<br>

<br>Thanks.<br><br>-Mike Cox<br><br><br><div class="gmail_quote">On Wed, Oct 17, 2012 at 10:51 AM, Joel Esler <span dir="ltr"><<a href="mailto:jesler@...435..." target="_blank">jesler@...435...</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word">Well, from the looks of the "dump" (or whatever you sent below) it looks like there are multiple carriage returns in there.<div>

<br></div><div>If the "header" of an http session has |0d 0a 0d 0a|, according to the RFC which states that character sequence indicates the end of the header, and the start of the packet data.  In which case the http_inspect preprocessor will move onto the http_client_data buffer.</div>

<div><br></div><div>Hence why I asked for the pcap, to see if this is true.  We can create a pcap that looks like yours below, but I know the exact behavior of the preprocessor in this case.</div><div><br></div><div>If you wanted to test it, you could do a </div>

<div>content:"Content-Type"; http_header; content:"Content-Disposition"; http_header; distance:0;</div><div><br></div><div>which you indicated doesn't work.</div><div><br></div><div>then test by doing:</div>

<div><br></div><div>content:"Content-Type"; http_header; content:"Content-Disposition"; http_client_body;</div><div><br></div><div>and if that fires, then there's your problem.  Broken RFC adherence by whatever program is generating that traffic.</div>

<div><br></div><div><div><div>--</div><div>Joel Esler</div><div>Senior Research Engineer, VRT</div><div>OpenSource Community Manager</div><div>Sourcefire</div><div><br></div><div><br></div></div><div><div>
<div><div>On Oct 17, 2012, at 11:45 AM, Mike Cox <<a href="mailto:mike.cox52@...2420..." target="_blank">mike.cox52@...2420...</a>> wrote:</div><br><blockquote type="cite">Hey Joel, thanks for the quick response.  Right now I don't have a pcap ... the info I got was reproduced from what I saw on a screen while helping our guys/gals track down an issue/RCA in the "Temptest" (SOC) room and I can't get any data out of there and if I could, it would be breaking many laws (well, internal "laws" but there could be international intel impact and NDA lawsuits if you know what I mean :)<br>


<br>However, I think that the information provided is sufficient to illustrate this issue and it should be trivial for VRT to create necessary pcaps for their testing, if that is what you want.<br><br>I can cook up a pcap but as earlier implied, I don't think it is is necessary for me to provide this at this point and I certainly do not want to insult VRT by spoon-feeding them data that they can easily and more completely create on their own with minimal effort.<br>


<br>I believe that I have outlined the issue and provided the necessary data to accurately describe the problem.  Even without a pcap, I think the info provided is sufficient for a good discussion.  Has anyone else experienced this challenge with their snort installs?  If so, how do you deal with this nuance of HTTP and the current state of http-inspect?<br>


<br>Please let me know if you are unclear on anything or need more information regarding this issue.<br><br>Thanks all.<br><br>-Mike Cox<br><br><br><br><div class="gmail_quote">On Tue, Oct 16, 2012 at 4:51 PM, Joel Esler <span dir="ltr"><<a href="mailto:jesler@...435..." target="_blank">jesler@...435...</a>></span> wrote:<br>


<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word">Can you send me a pcap?<div><br></div><div><div>--</div><div>Joel Esler</div><div>Senior Research Engineer, VRT</div>


<div>OpenSource Community Manager</div><div>Sourcefire</div><div><br></div><div><div><div>On Oct 16, 2012, at 5:18 PM, Mike Cox <<a href="mailto:mike.cox52@...2420..." target="_blank">mike.cox52@...2420...</a>> wrote:</div>


<br></div><blockquote type="cite"><div>I've noticed that in some multipart/form-data POSTs, data that is normally in the HTTP header gets sent in the body of the message and not parsed by http-inspect as part of the http_header buffer.  Specifically, the headers "Content-Type", "Content-Disposition", and "Content-Transfer-Encoding", although there could be others.  For example:<br>



<span style="font-family:courier new,monospace"><br>POST /blackhole/safe.php HTTP/1.1<br>Host: <a href="http://snort.org/" target="_blank">snort.org</a><br>Content-Type: multipart/form-data, boundary=---dG91Y2hteXNub3J0<br>


Content-Length: 8675309<br>
<br>---dG91Y2hteXNub3J0<br>Content-Disposition: form-data; name="name"<br><br>Joshua<br>---dG91Y2hteXNub3J0<br>Content-Disposition: form-data; name="play_a_game"<br><br>True<br>---dG91Y2hteXNub3J0<br>


Content-Disposition: form-data; name="file"; filename="GLOBAL_THERMONUCLEAR_WAR.pdf"<br>
Content-Type: application/pdf<br>Content-Transfer-Encoding: binary<br>...</span><br><br>So a snort rule looking for a specific filename in a Content-Disposition header wouldn't match if it were written as you would expect it to be written.  For example, this wouldn't match the above:<br>



<br><span style="font-family:courier new,monospace">alert tcp $HOME_NET any -> $EXTERNAL_NET $HTTP_PORTS (msg:"Bad PDF File Upload"; flow:established,to_server; content:"Content-Disposition"; http_header; content:"filename="; distance:0; http_header; content:".pdf"; distance:0; within:100; http_header; sid:1234567;)</span><br>



<br>What is the best way to match this and not incur the overhead of using global content matches?  Is there a plan for the http-inspect pre-processor to account for this?<br><br>Thanks.<br><br>-Mike Cox<br></div>
------------------------------------------------------------------------------<br>Everyone hates slow websites. So do we.<br>Make your web apps faster with AppDynamics<br>Download AppDynamics Lite for free today:<br><a href="http://p.sf.net/sfu/appdyn_sfd2d_oct_______________________________________________" target="_blank">http://p.sf.net/sfu/appdyn_sfd2d_oct_______________________________________________</a><br>


Snort-sigs mailing list<br><a href="mailto:Snort-sigs@...1306...et" target="_blank">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>


<a href="http://www.snort.org/" target="_blank">http://www.snort.org</a><br><br><br>Please visit <a href="http://blog.snort.org/" target="_blank">http://blog.snort.org</a> for the latest news about Snort!</blockquote></div>


<br></div></div></blockquote></div><br>
</blockquote></div><br></div></div></div></div></blockquote></div><br>
</blockquote></div><br></div></div></div></div></div></div></blockquote></div><br>