黑客培训教程

源代码在线查看: a simple tcp spoofing attack.txt

软件大小: 9884 K
上传用户: teasler111
关键词: 黑客 培训教程
下载地址: 免注册下载 普通下载 VIP

相关代码

												                        A simple TCP spoofing attack												Over the past few years TCP sequence number prediction attacks have become a				real threat against unprotected networks, taking advantage of the inherent				trust relationships present in many network installations.  TCP sequence				number prediction attacks have most commonly been implemented by opening a				series of connections to the target host, and attempting to predict the				sequence number which will be used next.  Many operating systems have				therefore attempted to solve this problem by implementing a method of				generating sequence numbers in unpredictable fashions.  This method does				not solve the problem.								This advisory introduces an alternative method of obtaining the initial				sequence number from some common trusted services.  The attack presented here				does not require the attacker to open multiple connections, or flood a port				on the trusted host to complete the attack.  The only requirement is that				source routed packets can be injected into the target network with fake				source addresses.								This advisory assumes that the reader already has an understanding of how				TCP sequence number prediction attacks are implemented.								The impact of this advisory is greatly diminished due to the large number of				organizations which block source routed packets and packets with addresses				inside of their networks.  Therefore we present the information as more of				a 'heads up' message for the technically inclined, and to re-iterate that				the randomization of TCP sequence numbers is not an effective solution				against this attack.												Technical Details				~~~~~~~~~~~~~~~~~								The problem occurs when particular network daemons accept connections				with source routing enabled, and proceed to disable any source routing				options on the connection.  The connection is allowed to continue, however				the reverse route is no longer used.  An example attack can launched against				the in.rshd daemon, which on most systems will retrieve the socket options				via getsockopt() and then turn off any dangerous options via setsockopt().								An example attack follows.								Host A is the trusted host				Host B is the target host				Host C is the attacker								Host C initiates a source routed connection to in.rshd on host B, pretending				to be host A.								Host C spoofing Host A             -->  Host B in.rshd								Host B receives the initial SYN packet, creates a new PCB (protocol				control block) and associates the route with the PCB.  Host B responds,				using the reverse route, sending back a SYN/ACK with the sequence number.								Host C spoofing Host A  								Host C responds, still spoofing host A, acknowledging the sequence number.				Source routing options are not required on this packet.								Host C spoofing Host A             -->  Host B in.rshd								We now have an established connection, the accept() call completes, and				control is now passed to the in.rshd daemon.  The daemon now does IP				options checking and determines that we have initiated a source routed				connection.  The daemon now turns off this option, and any packets sent				thereafter will be sent to the real host A, no longer using the reverse				route which we have specified.  Normally this would be safe, however the				attacking host now knows what the next sequence number will be.  Knowing				this sequence number, we can now send a spoofed packet without the source				routing options enabled, pretending to originate from Host A, and our				command will be executed.								In some conditions the flooding of a port on the real host A is required				if larger ammounts of data are sent, to prevent the real host A from				responding with an RST.  This is not required in most cases when performing				this attack against in.rshd due to the small ammount of data transmitted.								It should be noted that the sequence number is obtained before accept()				has returned and that this cannot be prevented without turning off source				routing in the kernel.								As a side note, we're very lucky that TCP only associates a source route with				a PCB when the initial SYN is received.  If it accepted and changed the ip				options at any point during a connection, more exotic attacks may be possible.				These could include hijacking connections across the internet without playing				a man in the middle attack and being able to bypass IP options checking				imposed by daemons using getsockopt().  Luckily *BSD based TCP/IP stacks will				not do this, however it would be interesting to examine other implementations.								Impact				~~~~~~								The impact of this attack is similar to the more complex TCP sequence				number prediction attack, yet it involves fewer steps, and does not require				us to 'guess' the sequence number.  This allows an attacker to execute				arbitrary commands as root, depending on the configuration of the target				system.  It is required that trust is present here, as an example, the use				of .rhosts or hosts.equiv files.												Solutions				~~~~~~~~~								The ideal solution to this problem is to have any services which rely on				IP based authentication drop the connection completely when initially				detecting that source routed options are present.  Network administrators				and users can take precautions to prevent users outside of their network				from taking advantage of this problem.  The solutions are hopefully already				either implemented or being implemented.								1. Block any source routed connections into your networks				2. Block any packets with internal based address from entering your network.								Network administrators should be aware that these attacks can easily be				launched from behind filtering routers and firewalls.  Internet service				providers and corporations should ensure that internal users cannot launch				the described attacks.  The precautions suggested above should be implemented				to protect internal networks.								Example code to correctly process source routed packets is presented here				as an example.  Please let us know if there are any problems with it.				This code has been tested on BSD based operating systems.								        u_char optbuf[BUFSIZ/3];				        int optsize = sizeof(optbuf), ipproto, i;				        struct protoent *ip;								        if ((ip = getprotobyname("ip")) != NULL)				                ipproto = ip->p_proto;				        else				                ipproto = IPPROTO_IP;				        if (!getsockopt(0, ipproto, IP_OPTIONS, (char *)optbuf, &optsize) &&				            optsize != 0) {				                for (i = 0; i < optsize; ) {				                        u_char c = optbuf[i];				                        if (c == IPOPT_LSRR || c == IPOPT_SSRR)				                                exit(1);				                        if (c == IPOPT_EOL)				                                break;				                        i += (c == IPOPT_NOP) ? 1 : optbuf[i+1];				                }				        }												One critical concern is in the case where TCP wrappers are being used.  If				a user is relying on TCP wrappers, the above fix should be incorporated into				fix_options.c.  The problem being that TCP wrappers itself does not close				the connection, however removes the options via setsockopt().  In this case				when control is passed to in.rshd, it will never see any options present,				and the connection will remain open (even if in.rshd has the above patch				incorporated).  An option to completely drop source routed connections will				hopefully be provided in the next release of TCP wrappers.  The other option				is to undefine KILL_IP_OPTIONS, which appears to be undefined by default.				This passes through IP options and allows the called daemon to handle them				accordingly.												Disabling Source Routing				~~~~~~~~~~~~~~~~~~~~~~~~								We believe the following information to be accurate, however it is not				guaranteed.								--- Cisco								To have the router discard any datagram containing an IP source route option				issue the following command:								no ip source-route								This is a global configuration option.												--- NetBSD								Versions of NetBSD prior to 1.2 did not provide the capability for disabling				source routing.  Other versions ship with source routing ENABLED by default.				We do not know of a way to prevent NetBSD from accepting source routed packets.				NetBSD systems, however, can be configured to prevent the forwarding of packets				when acting as a gateway.								To determine whether forwarding of source routed packets is enabled,				issue the following command:								# sysctl net.inet.ip.forwarding				# sysctl net.inet.ip.forwsrcrt								The response will be either 0 or 1, 0 meaning off, and 1 meaning it is on.								Forwarding of source routed packets can be turned off via:								# sysctl -w net.inet.ip.forwsrcrt=0								Forwarding of all packets in general can turned off via:								# sysctl -w net.inet.ip.forwarding=0												--- BSD/OS								BSDI has made a patch availible for rshd, rlogind, tcpd and nfsd.  This				patch is availible at:								ftp://ftp.bsdi.com/bsdi/patches/patches-2.1								OR via their patches email server 								The patch number is				U210-037 (normal version)				D210-037 (domestic version for sites running kerberized version)												BSD/OS 2.1 has source routing disabled by default								Previous versions ship with source routing ENABLED by default.  As far as				we know, BSD/OS cannot be configured to drop source routed packets destined				for itself, however can be configured to prevent the forwarding of such				packets when acting as a gateway.								To determine whether forwarding of source routed packets is enabled,				issue the following command:								# sysctl net.inet.ip.forwarding				# sysctl net.inet.ip.forwsrcrt								The response will be either 0 or 1, 0 meaning off, and 1 meaning it is on.								Forwarding of source routed packets can be turned off via:								# sysctl -w net.inet.ip.forwsrcrt=0								Forwarding of all packets in general can turned off via:								# sysctl -w net.inet.ip.forwarding=0												--- OpenBSD								Ships with source routing turned off by default.  To determine whether source				routing is enabled, the following command can be issued:								# sysctl net.inet.ip.sourceroute								The response will be either 0 or 1, 0 meaning that source routing is off,				and 1 meaning it is on.  If source routing has been turned on, turn off via:								# sysctl -w net.inet.ip.sourceroute=0								This will prevent OpenBSD from forwarding and accepting any source routed				packets.												--- FreeBSD								Ships with source routing turned off by default.  To determine whether source				routing is enabled, the following command can be issued:								# sysctl net.inet.ip.sourceroute								The response will be either 0 or 1, 0 meaning that source routing is off,				and 1 meaning it is on.  If source routing has been turned on, turn off via:								# sysctl -w net.inet.ip.sourceroute=0												--- Linux								Linux by default has source routing disabled in the kernel.												--- Solaris 2.x								Ships with source routing enabled by default.  Solaris 2.5.1 is one of the				few commercial operating systems that does have unpredictable sequence				numbers, which does not help in this attack.								We know of no method to prevent Solaris from accepting source routed				connections, however, Solaris systems acting as gateways can be prevented				from forwarding any source routed packets via the following commands:								# ndd -set /dev/ip ip_forward_src_routed 0								You can prevent forwarding of all packets via:								# ndd -set /dev/ip ip_forwarding 0								These commands can be added to /etc/rc2.d/S69inet to take effect at bootup.												--- SunOS 4.x								We know of no method to prevent SunOS from accepting source routed				connections, however a patch is availible to prevent SunOS systems from				forwarding source routed packets.								This patch is availible at:								ftp://ftp.secnet.com/pub/patches/source-routing-patch.tar.gz								To configure SunOS to prevent forwarding of all packets, the following				command can be issued:								# echo "ip_forwarding/w 0" | adb -k -w /vmunix /dev/mem				# echo "ip_forwarding?w 0" | adb -k -w /vmunix /dev/mem								The first command turns off packet forwarding in /dev/mem, the second in				/vmunix.												--- HP-UX								HP-UX does not appear to have options for configuring an HP-UX system to				prevent accepting or forwarding of source routed packets.  HP-UX has IP				forwarding turned on by default and should be turned off if acting as a				firewall.  To determine whether IP forwarding is currently on, the following				command can be issued:								# adb /hp-ux				ipforwarding?X      				ipforwarding:				ipforwarding: 1				#								A response of 1 indicates IP forwarding is ON, 0 indicates off.  HP-UX can				be configured to prevent the forwarding of any packets via the following				commands:								# adb -w /hp-ux /dev/kmem				ipforwarding/W 0				ipforwarding?W 0				^D				#								--- AIX								AIX cannot be configured to discard source routed packets destined for itself,				however can be configured to prevent the forwarding of source routed packets.				IP forwarding and forwarding of source routed packets specifically can be				turned off under AIX via the following commands:								To turn off forwarding of all packets:								# /usr/sbin/no -o ipforwarding=0								To turn off forwarding of source routed packets:								# /usr/sbin/no -o nonlocsrcroute=0								Note that these commands should be added to /etc/rc.net																If shutting off source routing is not possible and you are still using				services which rely on IP address authentication, they should be disabled				immediately (in.rshd, in.rlogind).  in.rlogind is safe if .rhosts and				/etc/hosts.equiv are not used.												Attributions				~~~~~~~~~~~~								Thanks to Niels Provos  for providing				the information and details of this attack.  You can view his web				site at http://www.physnet.uni-hamburg.de/provos								Thanks to Theo de Raadt, the maintainer of OpenBSD for forwarding this				information to us.  More information on OpenBSD can be found at				http://www.openbsd.org								Thanks to Keith Bostic  for discussion and a quick				solution for BSD/OS.								Thanks to Brad Powell  for providing information				for Solaris 2.x and SunOS 4.x operating systems.								Thanks go to CERT and AUSCERT for recommendations in this advisory.								You can contact the author of this advisory at oliver@secnet.com																-----BEGIN PGP PUBLIC KEY BLOCK-----				Version: 2.6.3ia								mQCNAzJATn0AAAEEAJeGbZyoCw14fCoAMeBRKiZ3L6JMbd9f4BtwdtYTwD42/Uz1				A/4UiRJzRLGhARpt1J06NVQEKXQDbejxGIGzAGTcyqUCKH6yNAncqoep3+PKIQJd				Kd23buvbk7yUgyVlqQHDDsW0zMKdlSO7rYByT6zsW0Rv5JmHJh/bLKAOe7p9AAUR				tCVPbGl2ZXIgRnJpZWRyaWNocyA8b2xpdmVyQHNlY25ldC5jb20+iQCVAwUQMkBO				fR/bLKAOe7p9AQEBOAQAkTXiBzf4a31cYYDFmiLWgXq0amQ2lsamdrQohIMEDXe8				45SoGwBzXHVh+gnXCQF2zLxaucKLG3SXPIg+nJWhFczX2Fo97HqdtFmx0Y5IyMgU				qRgK/j8KyJRdVliM1IkX8rf3Bn+ha3xn0yrWlTZMF9nL7iVPBsmgyMOuXwZ7ZB8=				=xq4f				-----END PGP PUBLIC KEY BLOCK-----								Copyright Notice				~~~~~~~~~~~~~~~~				The contents of this advisory are Copyright (C) 1997 Secure Networks Inc,				and may be distributed freely provided that no fee is charged for				distribution, and that proper credit is given.								 You can find Secure Networks papers at ftp://ftp.secnet.com/pub/papers				 and advisories at ftp://ftp.secnet.com/advisories								 You can browse our web site at http://www.secnet.com								 You can subscribe to our security advisory mailing list by sending mail to				 majordomo@secnet.com with the line "subscribe sni-advisories"											

相关资源