[Snort-devel] HTTP Reassembly issue PAF enabled
rcombs at ...402...
Fri Apr 5 12:15:50 EDT 2013
On Fri, Apr 5, 2013 at 11:56 AM, Parmendra Pratap
<parmendra.pratap at ...398...> wrote:
> Hi Hui
> Thanks again for a quick response.
> Have tried -Q flag , but since I am using Pcap DAQ it fails to start with -Q
> However it does start wiith --test-inline mode , which I assume works no
> different from -Q except that drops are not enabled.
Actually, normalizations are not enabled in that case. You should see
something like this in your startup output:
WARNING: tcp normalizations disabled because not inline.
Try running with:
--daq dump --daq-var load-mode=read-file -Q
> My snort.conf does have preprocessor normalize_tcp: ips have set.
> But even with the above set up I can still replicate the same issue related
> to incorrect tcp flags.
> As I said before , I think it seems like a matter of setting the tcp header
> of the last packet that completes the PDU inside Packet->tcph->th_flags in
> the s5 preprocessor when doing a PAF based flushing.
> I can see that the direction i.e. sourceIP/port and destIP/port being
> reversed for the same reason in the Packet struct when doing a reassembly
> based flushing from s5.
> Hi Parmendra,
> To be clear, you must use IPS mode to get what you want, so you need to
> 1) use -Q when you run snort
> 2) Enable Normalization for TCP:
> preprocessor normalize_tcp: ips
> On 04/04/2013 08:25 AM, Parmendra Pratap wrote:
>> Hi Hui
>> Thanks for a quick reply.
>> I tried the use case with Snort 220.127.116.11.
>> Does not make a difference.
>> Issue is still replicable with the steps outlined in my root email.
>> This is what I think is going on , based on few tests and source
>> lookups <excuse my newbieness if it reflects anywhere below :) >-
>> Stream5 reassembly does not tag a packet as complete PDU until it
>> recieves subsequent ack gainst the packet no matter wheter or not the
>> packet actually holds complete PDU (in this case HTTP) or not.
>> With PAF enabled this prevents the URI Bufs from being created and
>> inspected in HTTP inspect module until the next packet arrives (ie ack
>> against the original packet that contained the HTTP req).
>> When the HTTP inspect URI Bufs based match fires, with PAF ON, its
>> always(mostly?) when the ack on reverse direction is received.
>> The spo_alert* modules simply uses the header data provided in the
>> Packet->tcph which holds the header from the current packet ie ack
>> packet from the server ... and hence the incorrect TCP header display
>> with PAF on.
>> There is no way curently to get the correct TCP headers unless Stream
>> 5 is queried to give the original raw packet <spo_log_tcp_dump.c does
>> Realworld issue arising from the above is incorrect TCP header data in
>> alerts. TCP dumps are OK though for reason mentioned above.
>> There seems multiple ways to get around this:
>> Generate TCP dump on all alerts and assume the alerts will have
>> incorrect TCP headers
>> Write an alert output plugin that inspects the raw packet for correct
>> TCP headers etc
>> Add more metadata to Packet struct which can provide the correct TCP
>> headers at least for the last packet that completed the PDU in the
>> alert output plugins.
>> Last option looks the most organic and least sub optimal one to me.
>> Given my little experience with snort so far , I wont be surprised if
>> any of the above stated flow is incorrect.
>> I will more than appreciate if someone can correct me above and
>> enlighten me more about the internals :) .
> Minimize network downtime and maximize team effectiveness.
> Reduce network management and security costs.Learn how to hire
> the most talented Cisco Certified professionals. Visit the
> Employer Resources Portal
> Snort-devel mailing list
> Snort-devel at lists.sourceforge.net
> Please visit http://blog.snort.org for the latest news about Snort!
More information about the Snort-devel