Phishing con Evilginx2

Advertencia: Lo explicado en este post es únicamente con fines educativos. El uso indebido de esta o cualquier otra herramienta de hacking sin consentimiento expreso por parte del objetivo, así como el robo de credenciales o acceso no autorizado a un sistema puede ser constitutivo de delito y es únicamente responsabilidad de aquel que haga un uso inadecuado.

Ya hemos visto antes qué es un phishing e hicimos un análisis de cómo suelen ser estos ataques. Es este post vamos a ver cómo se puede utilizar una herramienta muy potente para realizar ataques de phishing (por ejemplo, si hemos sido contratados por una empresa para probar cómo está preparada ante estos ataques, para enseñar del peligro y de la facilidad de estos ataques, o bien para experimentar y aprender, siempre dentro de un entorno controlado y con fines éticos, todo con el objetivo de aprender a defendernos de estos ataques).

Evilginx2 es un framework que utiliza un ataque tipo man-in-the-middle para poder interceptar los datos de login y las credenciales de nuestro objetivo, pudiendo incluso evadir la autenticación de 2 factores. La herramienta levanta un servidor nginx junto con un servidor DNS, mientras que a la vez crea un certificado digital firmado a través de Let’s Encrypt para que todo vaya cifrado y el ataque sea lo más real posible.

Una vez hecha esta breve introducción, vamos a ponernos manos a la obra.

Lo primero que vamos a hacer es instalar las herramientas git, make y go (ya que evilginx2 está escrito en este lenguaje) necesarias para instalar evilginx2 y descargarla desde su github.

En mi caso voy a utilizar una máquina EC2 de Amazon Linux en AWS. Debemos revisar el grupo de seguridad asociado a la instancia EC2, ya que necesitaremos tener los puertos 53 (DNS), el puerto 80 (http) y 443 (https) para que nuestra herramienta funcione bien desde Internet (el puerto 22 es para que podamos hacer ssh y acceder a la instancia ?. Es aconsejable que solo se permita acceso a este puerto desde nuestra IP).

Configuración reglas de entrada del grupo de seguridad de la instancia EC2

Una vez levantada nuestra máquina y hayamos accedido a ella, los pasos a seguir para instalar la herramienta son los siguientes:

yum update -y
yum install -y git
yum install -y make
yum install -y go
git clone https://github.com/kgretzky/evilginx2
cd evilginx2/
make
sudo make install  #opcional

Ahora que ya tenemos todo instalado, no tenemos más que ejecutar la herramienta. Si lo ejecutamos con un usuario sin permisos de root veremos que nos da error al arrancar el servidor dns (puerto 53) y para escuchar por el puerto 443 (https).

Evilginx2 sin permisos de root

Por tanto, debemos ejecutarlo con permisos de root:

Evilginx2 con permisos de root

Lo primero que vemos al arrancar es que los phishlets se cargan desde /usr/share/evilginx/phishlets/ y la configuración desde /root/.evilginx. Los phishlets no son más que ficheros YAML con la configuración de los sitios web a los cuales podremos realizar un ataque de phishing (en otro post veremos estos ficheros con más detalle y cómo crear nuestro propio phishlet para atacar a otro sitio). Como vemos, se cargan una serie de phishlets que podremos utilizar para probar la herramienta.

También vemos que nos aparece una «unauthorized request redirection URL«. Esta URL es a la que se redirigirán todas aquellas peticiones que no estén autorizadas. Podemos configurar esta URL con el comando «config redirect_url» y la URL a la que queramos que se redirijan estas peticiones :

config redirect_url https://www.secdevoops.es/

Vemos también que nos aparecen un par de warnings, ya que debemos configurar el «server domain» y el «server ip». El comando help nos va a mostrar una ayuda de todas las opciones que tenemos:

Ayuda de evilginx2

Podemos escribir el comando «help config» para ver la ayuda de la configuración si la necesitamos.

Help config

Bien, pues como vemos, es sencillo de configurar los parámetros que necesitamos. Necesitaremos un nombre de dominio y una dirección IP. Si tenemos un nombre de dominio ya registrado que nos sirva para hacer nuestro ataque, genial. Sólo tendremos que indicar en el DNS de nuestro servidor de dominio la dirección IP donde hayamos levantado nuestro evilginx2 para que se redirija allí. Si no, podemos registrar cualquier dominio (existen multitud de servicios que te dan dominios gratuitos) y redirigir.

Para el ejemplo, he creado un dominio instagram-es.ga (la idea es que sea lo más parecido al dominio real para que sea más fácil el engaño), por lo que tendré que indicar este dominio en la configuración junto con la IP de la máquina EC2 donde tengo levantado evilginx2.

Configuración dominio y dirección IP del servidor

Ahora lo que necesitamos es habilitar el phishlet que queramos utilizar, pero antes debemos indicarle un hostname. Puede ser el mismo que hemos utilizado para el nombre de dominio o un subdominio. Yo voy a utilizar el mismo, aunque se podría utilizar un subdominio si quisiéramos tener varios phishlets activos.

Como vemos en la ayuda, para configurar el hostname debemos utilizar el comando phishlets hostname, indicando el nombre del phishlet al que queremos asociarle el hostname y el hostname propiamente dicho.

Configurar phishlet hostname

Ahora, si intentamos habilitar el phishlet, veremos cómo evilginx2 crea un certificado e intenta firmarlo utilizando Let’s Encrypt para nuestro phishlet.

Error al crear el certificado

Pero como podemos ver en la imagen anterior, evilginx no ha podido obtener el certificado firmado debido a que existe un problema de DNS, ya que no encuentra los registros de tipo A para m.instagram-es.ga ni para www.instragra-es.ga. Cada phishlet utiliza unos subdominios distintos, dependiendo del sitio donde queramos hacer el phishing. Para instagram, vamos a necesitar estos dos subdominios, por lo que debemos indicar en nuestro DNS que esos subdominios se resuelven con la IP de nuestro servidor.

Configuración de nuestro servidor DNS

Bien, ahora que ya hemos creado en nuestro servidor DNS los subdominios, vamos a activar de nuevo el phishlet .

Nota: puede ser que dé error a pesar de tener todo bien configurado, por ejemplo que el DNS no esté actualizado (en tal caso, intentar activar de nuevo el phishlet) o podría ser que hubiera algún error en la configuración (revisar bien el error por si fuera otra cosa: alguna entrada en el DNS que nos haya faltado, algún puerto olvidado sin abrir, etc.).

Como anécdota curiosa, cuando estaba levantando empecé a recibir peticiones. Diría que alguien quería escanear lo que había detrás, diría que buscando algo muy concreto ?‍♂️.

Bueno, sigamos con nuestra prueba de concepto después de esta pequeña interrupción. El siguiente paso que tenemos que hacer es crear un lures, que son configuraciones más específicas para un phishlet concreto. Para crear un lures usaremos el comando «lures create instagram» para el caso que nos lleva.

Lures

Podemos establecer una redirect_url que se usará para redirigir al usuario en caso de acceso con éxito, también podemos modificar el path (que será el que usaremos para dirigir a nuestro objetivo a nuestro ataque de phishing) y otros parámetros que para este caso no necesitamos tocar.

Para ver la url que enviaremos a nuestra victima, usaremos el comando «lures get-url» y el id del lures creado, como se veía en la imagen anterior.

Ahora, si copiamos esa URL (https://www.instagram-es.ga/nCoPsOLO) en nuestro navegador, veremos que nos redirige a la página de login de instagram, pero a través de nuestro dominio.

Como vemos en la barra de navegación, estamos en nuestro dominio (por https, lo cual lo hará todavía más creíble), aunque por debajo está realizando una redirección a https://www.instagram.com/accounts/login/ y haciendo un MiTM. Si introducimos nuestras credenciales, todo parecerá normal, entraremos dentro de nuestra cuenta de instagram sin ningún problema, pero como vemos, seguimos dentro de nuestro dominio ?.

Y en nuestro evilginx2 veremos cómo se han capturado las credenciales.

Podemos visualizar las distintas sesiones capturadas con el comando «sessions» y ver los datos concretos de una sesión con el comando «sessions» seguido del número de sesión.

Como vemos, nos muestra no solo el username/password, sino que además tenemos las cookies de sesión, las cuales podemos utilizar también para impersonar a la víctima de manera sencilla usando herramientas como EditThisCookie, copiando el JSON que tenemos capturado e importándolo con esta herramienta.

Una vez hemos copiado el JSON, validamos las cookies para que se almacenen en el navegador.

Y ahora no tenemos más que refrescar la página de instagram y… voilà! Ya estamos en instagram con la sesión robada a nuestra víctima.

Categorías