Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

app-layer: add defensive checks #895

Closed
wants to merge 1 commit into from
Closed

app-layer: add defensive checks #895

wants to merge 1 commit into from

Conversation

inliniac
Copy link
Contributor

Add defensive checks to most AppLayer API calls as we've observed some
unusual cases making these checks necessary.

Bug #1101. https://redmine.openinfosecfoundation.org/issues/1101

Prscript:

Add defensive checks to most AppLayer API calls as we've observed some
unusual cases making these checks necessary.

Bug #1011.
@inliniac inliniac closed this Mar 27, 2014
@inliniac inliniac deleted the dev-bug1011-v3 branch March 27, 2014 09:45
alessandro-guido pushed a commit to alessandro-guido/suricata that referenced this pull request Jun 20, 2014
We have follow TCP RFC (http://tools.ietf.org/html/rfc793#section-3.4).
There is two cases depending on wether the original packet contains a
ACK.
If packet has no ACK, the RST seq number is 0 and the ACK is built the
standard way.
If packet has a ACK, the seq of the RST packet is equal to the ACK of
incoming packet and the ACK is build using packet sequence number and
size of the data.

Regarding standard Ack number, it is computed using seq number of captured
packet added to packet length. Finally 1 is added so we respect the
RFC:
    If the ACK control bit is set this field contains the value of the
    next sequence number the sender of the segment is expecting to
    receive.  Once a connection is established this is always sent.

With this patch we have some correct results. With the following rule:
    reject ssh any any -> 192.168.56.3 any (msg:"no SSH  way"; sid:3; rev:1;)
ssh connection to 192.168.56.3 is correctly resetted on client side.

But this is not perfect. If we have the following rule:
    reject tcp any any -> 192.168.56.3 22 (msg:"no way"; sid:2; rev:1;)
then the connection is not resetted on a standard ethernet network. But
if we introduce 20ms delay on packets, then it is correctly resetted.
This is explained when looking at the network trace. The reset is sent
as answer to the SYN packet and it is emitted after the SYN ACK from
server because the exchange is really fast. So this is discarded by the
client OS which has already seen a ACK for the same sequence number.

This should fix OISF#895.
This was referenced Sep 13, 2013
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
2 participants