[9767] in bugtraq

home help back first fref pref prev next nref lref last post

Re: Process table attack (from RISKS Digest)

daemon@ATHENA.MIT.EDU (Dirk Moerenhout)
Tue Feb 23 19:20:42 1999

Date: 	Tue, 23 Feb 1999 00:11:50 +0100
Reply-To: Dirk Moerenhout <dirk@STAF.PLANETINTERNET.BE>
From: Dirk Moerenhout <dirk@STAF.PLANETINTERNET.BE>
X-To:         Mark Boolootian <booloo@cats.ucsc.edu>
To: BUGTRAQ@NETSPACE.ORG
In-Reply-To:  <19990220134253.A14210@muscat.UCSC.EDU>

While you are certainly right about the possible implications of this it
looks as if you're lifting this higher than it is. You should not make an
elephant from a fly. This is a possible problem but wise
system-implementation can solve this easily enough.

> ...
> To launch a process table attack, the client need only open a connection to
> the server and not send any information. As long as the client holds the
> connection open, the server's process will occupy a slot in the server's
> process table.

This is true though a lot of services will time out after a while thus
shutting down the proces and freeing the slot again. Services that wait
hours without receiving a byte of data are badly coded.

> ...
>   1. Use IP spoofing so that the incoming connections appear to come from
>      many different locations on the Internet. This makes tracking
>      considerably harder to do.

Tracking would be harder yes. But don't you think it's pretty hard to get
a full spoofed 3WHS? AFAIK most Unices pass connects after the 3WHS. And
while it's easy to spoof a SYN, it's a lot harder to spoof the rest.

>   2. Begin the attack by sending 50 requests in rapid fire to the telnet,
>      rlogin and rsh ports on the target machine. This will cause inetd to
>      shut down those services on the target machine, which will deny
>      administrative access during the attack.

The use of rlogin, rsh and telnet have long been depricated in favor of
ssh.

>   3. Instead of initiating a new connection every 4 seconds, initiate one
>      every minute or so. The attack slowly builds, making it more difficult
>      to detect on packet traces.

Ok, but there aren't that many services that don't time out when receving
either no data or invalid data. And if they don't they should.

> There are several ways to defend against the attack:
>
>   1. inetd and other programs should check to see the number of free slots
>      in the process table before accepting new connections. If there is less
>      than a predefined number of free slots, new connections should be
>      accepted.
>   2. Alternatively, if there are more than a preset number of network daemons
>      for the service running, incoming requests should be queued rather than
>      serviced.
>   3. Network services (such as finger) should implement timeouts. For
>      example, the statement alarm(30) could be inserted into the finger
>      daemon source code so that the program would stop running after 30
>      seconds of execution.

Stuff like this already exists in many daemons. This isn't really a case
of OS-problems but rather poorly implement services. Services that handle
connects in a sane way should not be an aid in performing this attack.

> Simson L. Garfinkel, Sandstorm Enterprises, Inc. <www.sandstorm.net>

Dirk Moerenhout

home help back first fref pref prev next nref lref last post