next up previous
Next: Memory hogs Up: Denial Of Service Previous: Denial Of Service

Fork bombs

These are basically variants of the code snippet above. For instance, fingerd (the server for network finger requests) lets a client query all users on a host by using

finger @hostname

It also allows forwarding by using

finger @hostB@hostA

The way this was implemented is that the fingerd server process strips off the trailing @hostB and run finger @hostA. Consider a nasty attacker fingering @127.0.0.1@victimhost. This will cause the finger daemon at victimhost to query for all users on host 127.0.0.1. This will cause another connection to the victim's finger service to be established, which starts another instance of the fingerd program. Nasty attacker also recalls that using a single 0 instead of 127.0.0.1 makes no difference,9.1 and putting two and two together, he executes

finger `perl -e 'print "\@0" x 100'`@victimhost

This will send a finger query to victimhost containing one hundred times the string @0. This causes fingerd to open up another connection to the local finger service, causing another daemon process to be started, and sending the string @0 repeated 99 times. So all in all, this will create at least 100 new processes on the victim server; maybe even twice as many if fingerd executes /usr/bin/finger for every forwarded query. On most systems, this used to be enough to bring the machine to a grinding halt.

There is an interesting twist to the story. Usually, the finger daemon is controlled by inetd. For every incoming TCP connection to port 79, inetd forks a new fingerd process - up to a certain limit. In its default configuration, inetd will not start more than 40 instances of any one service within 60 seconds. As many system administrators learned the hard way, this attack on fingerd will bring the machine to its knees before inetd reaches its limit.

Of course, this bug is ancient history. But when it was first reported to a public mailing list, many kids made it a sport to trash network servers running a vulnerable fingerd. Today, operating systems either ship with the finger service disabled altogether, or with a default configuration that disallows forwarding of requests.

Still, this example shows some characteristics of many remote denial of service attacks:


next up previous
Next: Memory hogs Up: Denial Of Service Previous: Denial Of Service
Olaf Kirch 2002-01-16