IDS mailing list archives

RE: Active response... some thoughts.


From: "Abe L. Getchell" <abegetchell () qx net>
Date: Fri, 24 Jan 2003 01:17:04 -0500

        ...and this would solve the problem, sort of.  For all practical
purposes you're entering a "packet race" when you use this technique.
You're trying to get the resets to either endpoint of the connection
before the real packet gets there, thus making sure sequence numbers are
correct so the machines at both ends don't know anything funny is going
on and reject the subsequent "real" packets like you're trying to make
them do.  When you only send resets to one end of the connection you're
technically cutting your chances of this succeeding in half, the way I
see it (which very well may be wrong).  The more resets you send out on
the wire as fast as you can, the better the chance of one of those
getting there before the real packet does and closing the connection
before any damage can be done.  This is why Marty spent a considerable
amount of time manipulating the FelxResp code in Snort a year or so ago
to setup precaching of IP and UDP/TCP headers used in the response
packets... the less time you spend generating these headers on the fly,
the more of them you can send out at a higher rate of speed.
        FWIW, we found that during the original Code Red outbreak, we
saw a 90% success rate when using FlexResp to snipe sessions from
infected hosts.  This, of course, means that 10% of all of those forged
reset packets didn't make it to either end of the connection in time...
this was before the days in Snort where the precaching I mentioned above
was implemented.  I haven't been lucky (?) enough to be in a situation
again where I've needed to test this ability in a high-volume production
environment.

Thanks,
Abe

--
Abe L. Getchell
Security Engineer
abegetchell () qx net


-----Original Message-----
From: Ron Gula [mailto:ronald.gula () verizon net] 
Sent: Monday, January 20, 2003 11:01 PM
To: focus-ids () securityfocus com
Subject: Re: Active response... some thoughts.


I have not looked at this problem in a while, but why not 
just send your reset
packets to the target host and not the attacker? That way 
nothing comes
from the NIDS to the attacker directly.

Ron Gula, CTO
Tenable Network Security

At 01:37 PM 1/16/2003 -0500, Abe L. Getchell wrote:
Greetings all,
        Yesterday I was discussing one of my favorite topics with a
friend who works at Enterasys.  We were discussing intrusion 
detection
systems and active response; the use of IDS sensors to detect attacks
and either make a policy change on a firewall or actively respond to
intrusions itself (through the use of TCP resets, ICMP port 
and network
unreachable's, etc).  While discussing the benefits and drawbacks we
both feel come along with this technology, I mentioned a 
specific issue
I had with a sensor directly responding to detects, and he 
said it was
something that he had never thought of before.  After poking 
around for
a while in the list archives, I can't find anywhere where it's
mentioned, even when discussing this particular topic.  I 
find it hard
to believe that I'm the first one to think of this, because there are
much smarter people on this list than me, but I'm curious to 
know what
the community here thinks about this...
        Basically, it's possible for an attacker to 
calculate where an
IDS sits on an organization's network by looking at the TTL in the IP
header of the TCP reset or ICMP error message he receives in 
response to
an attack.  For example, let's say we have the following 
network setup:

[Server]--[Router]--[Router]--[IDS]--[Firewall]--[Router]--[R
outer]--[At
tacker]

        The attacker is trying to break into the server and 
the sensor
has a signature that resets the connection when it sees the 
exploit he's
trying to use.  When the attacker sends his exploit to the target
server, it doesn't work.  Since this is a smart attacker, he grabs a
packet capture to find out exactly what's happening and sees that his
connection is being reset.  He notices that in the resets 
the TTL in the
IP header is 252 compared to 250 for normal responses.  
Knowing now that
an IDS must be using active response to keep him from exploiting the
target server, he wants to find out where this sensor resides.
Referencing the source code of his favorite IDS (and mine - 
Snort 1.9.0
from http://www.snort.org/ (SHAMELESS PLUG)), he finds the following
bits of code in sp_respond.c:

libnet_build_ip(TCP_H, 0,
                libnet_get_prand(PRu16) /* IP ID */ ,
                0 /* fragmentation */ , 255 /* TTL */ , IPPROTO_TCP,
                0, 0, NULL, 0, tcp_pkt);

libnet_build_ip(ICMP_UNREACH_H, 0,
                libnet_get_prand(PRu16) /* IP ID */ ,
                0 /* fragmentation */ , 255 /* TTL */ , 
IPPROTO_ICMP,
                0, 0, NULL, 0, icmp_pkt);

        He sees that these bits of code build the IP header 
for the TCP
reset and ICMP unreachable messages that the IDS uses for active
response.  Knowing from this code that the TTL is statically 
set to 255
and hence, that's what it was when the reset left the NIC of 
the IDS, he
can then easily trace the path backwards through each hop (assuming
there's no asymmetric routing happening) and determine on 
what segment
the sensor resides by using simple addition!  This information is
invaluable to the attacker for future attacks against the 
network, and
he now knows where he should focus his attack if he wants to 
disable the
sensor itself.
        I posted a message about this on the Snort 
developers list quite
some time ago, which got a good discussion going, but we 
couldn't come
up with a good solution to this problem.  I believe the best 
idea that
we can up with was to randomize the TTL, though if an 
attacker would see
a whole bunch of resets come back with TTL's that wildly jump around,
that would be a clue that the organization he is attacking is using
Snort... and telling an attacker what IDS you're using, is 
of course, a
bad thing.  Another good idea was to let the user specify (in a
configuration file somewhere for those that don't build from 
source) a
TTL that they wanted to use... obviously you'd want to use some
off-the-wall number like 213 or so.  The attacker wouldn't 
know what hop
to count back too because he wouldn't know what the TTL was 
originally
set too.
        Please note that I'm only using Snort as an example 
here because
it's the only IDS software that I have the source code for and could
easily pull an example from.  I believe, but am not _sure_, that
probably all IDS software is affected by this specific issue.  Of
course, this is just another good reason _not_ to use active 
response...
or if you must, just break the connection on the internal side.  The
attacker could manipulate his TCP stack not to honor resets anyway.
Thoughts?

Thanks,
Abe

--
Abe L. Getchell
Security Engineer
abegetchell () qx net



Current thread: