Phishing práctico con Gophish

Configuración del marco de trabajo de phishing de código abierto Gophish en AWS para probar las defensas contra el phishing de su empresa.

Introducción

Hace poco me pidieron que realizara pruebas de phishing contra nuestros propios empleados de Airwalk para evaluar nuestra susceptibilidad a los ataques. No queríamos gastar dinero en contratar a una empresa de pruebas de terceros porque, como empresa de tecnología, pensamos que probablemente podríamos hacerlo nosotros mismos.

En mi artículo anterior, Filosofía del phishing , discutí las cosas que uno debe considerar antes de enviar spam a sus colegas con correos electrónicos falsos, junto con la forma que deben tomar esos mensajes.

Aquí discutiré la implementación práctica del sistema que utilicé para realizar la prueba. Esta historia tendrá un enfoque más técnico que la anterior.

Describiré todos los pasos técnicos que tomé en caso de que desee hacer algo similar para probar las defensas de su empresa. Enfatizaría aquí, asegúrese de tener la autoridad de las personas correctas en su organización antes de emular cualquier cosa que describa aquí. Si bien estoy feliz de responder cualquier pregunta, no me culpes si te despiden :-)

Se acabó el phishing

Habiendo respondido previamente todas las preguntas de cómo debo formar un correo electrónico de prueba de phishing, necesitaba elegir una herramienta con la que crearlo y enviarlo. Después de leer un poco, descubrí Gophish , una pieza de software de código abierto lanzado bajo la licencia MIT que maneja la creación de plantillas de correo electrónico y páginas de destino, listas de destinatarios, el envío de correo electrónico real y la gestión de campañas. Se parece mucho a una herramienta de marketing por correo electrónico. Armado con esto y una retransmisión SMTP amigable, estaría en camino.

Como ahora es natural, decidí implementar Gophish en una instancia EC2 en AWS .

Elegí usar una región de AWS que estaba lejos de nosotros aquí en Londres por dos razones. En primer lugar, para reducir las posibilidades de que los colegas técnicos noten mi instancia y sospechen que se avecina una prueba. En segundo lugar, para agregar otra pequeña pista al vigilante de que este iba a ser un correo electrónico inusual en caso de que decidieran mirar los encabezados. Por lo tanto, elegí São Paulo.

En el meollo de la cuestión: configuración de EC2

Inicié sesión en la consola EC2 y seleccioné la región São Paulo (sa-este-1).

Como no había usado antes la región sa-east-1 en esta cuenta de AWS en particular, tuve que importar un par de claves SSH a EC2.

Luego lancé una nueva instancia EC2 en la que ejecutar Gophish, siguiendo las distintas pantallas para configurar las opciones de la instancia.

Paso 1: elija AMI — Elegí Amazon Linux 2, HVM con SSD

Paso 2: Tipo de instancia: t2.micro

(Aparte, encontré que el t2 micro es perfectamente adecuado, entonces, ¿por qué pagar más?)

Paso 3: Detalles de la instancia: seleccioné la VPC predeterminada y elegí todas las opciones predeterminadas para los detalles de la instancia, incluida la asignación de una IP pública (detalles completos en la imagen a continuación). NB: si tiene una VPC no predeterminada existente, querrá colocar la instancia en una subred pública y elegir asignar una IP pública.

Paso 4: Almacenamiento: el almacenamiento se dejó en los valores predeterminados; 8 GB de almacenamiento en el dispositivo raíz serán suficientes.

Paso 5: Etiquetado: agregué algunas etiquetas apropiadas.

Paso 6: Grupos de seguridad: creé un nuevo grupo de seguridad que permite: - HTTP (TCP/80) desde cualquier lugar: requerido para los pingbacks y para alojar páginas de destino - HTTPS (TCP/443) desde cualquier lugar: las mismas razones que las anteriores - SSH (TCP/22) de la dirección IP de nuestra oficina - TCP/3333 de la dirección IP de nuestra oficina: esta es la consola de administración de Gophish que usaría en mi navegador para controlar las campañas

Paso 7: Revisar: revisé mi configuración (ver a continuación) y lancé la instancia, seleccioné mi par de claves SSH y acepté los términos.

Después de esperar a que se iniciara la instancia, asigné una dirección IP elástica y la asocié con mi instancia. Esto ayudaría en caso de que tuviera que reiniciar la instancia por algún motivo, ya que necesitaba permanecer en un lugar una vez que comencé a enviar correos electrónicos con enlaces a páginas de destino y pingbacks.

Instalando Gophish

Para la instalación del software, seguí la página de instalación de la Guía del usuario de Gophish .

Instalación de software

Una vez que inicie sesión en la instancia a través de ssh, necesitaba descargar un paquete binario para Gophish. En el navegador de mi computadora portátil, fui a la página de lanzamientos de Gophish en GitHub y encontré la URL de la distribución de Linux de 64 bits haciendo clic con el botón derecho (la experiencia de su navegador puede diferir ligeramente).

De vuelta en mi instancia, creé un usuario llamado gophishy descargué el binario:

sudo adduser -c “usuario de Gophish” gophish 
sudo su — gophish 
curl -L  -o gophish -v0.7.1-linux-64bit.zip

Tenga en cuenta:

  • No copie y pegue mis URL anteriores, ya que puede haber una versión más nueva disponible desde que escribo

  • Recuerde usar -Lcomo la URL en la página web no se vincula directamente al binario, su curl tendrá que seguir las redirecciones

Luego creé un directorio para esta versión de Gophish y lo descomprimí:

mkdir gophish-v0.7.1 
cd gophish-v0.7.1/ 
unzip ../gophish-v0.7.1-linux-64bit.zip 
rm ../gophish-v0.7.1-linux-64bit.zip

Para facilitarme la vida con futuras actualizaciones y scripts de inicio, hice un enlace simbólico a la versión actual:

ln -s /home/gophish/gophish-v0.7.1 /home/gophish/gophish

Configuración Gophish

Luego, inspeccioné config.json usando mi editor favorito:

{ 
    “servidor_admin”: { 
        “url_escucha”: “0.0.0.0:3333”, 
        “use_tls”: verdadero, 
        “ruta_cert”: “gophish_admin.crt”, 
        “ruta_clave”: “gophish_admin.key” 
    }, 
    “servidor_phish”: { 
        “listen_url”: “0.0.0.0:80”, 
        “use_tls”: falso, 
        “cert_path”: “example.crt”, 
        “key_path”: “example.key” 
     }, 
     “db_name”: “sqlite3”, 
     “db_path” : “gophish.db”, 
     “prefijo_migraciones”: “db/db_”, 
     “dirección_contacto”: “”

admin_server -> listen_url

Para que el servidor de administración escuche nuestra dirección IP pública en el puerto TCP 3333 (cuyo acceso estaba restringido a la dirección IP de nuestra oficina en las reglas del grupo de seguridad anteriores), necesitaba actualizar admin_server -> listen_url el0.0.0.0:3333

Elegí dejar todo lo demás en los valores predeterminados. Si bien esto configuró HTTPS para nuestra interacción con el servidor de administración (Gophish lo crea automáticamente), aún usaba HTTP sin cifrar para cualquier comunicación entre el cliente de correo electrónico y el servidor de Gophish. Esto podría cambiarse para usar HTTPS, pero requeriría un certificado SSL firmado por una autoridad de certificación de confianza; de lo contrario, los clientes de correo electrónico de los destinatarios mostrarían una advertencia y regalarían el juego. Por lo tanto, opté por no habilitar HTTPS ahora, ya que no recopilaría datos a través de formularios, solo usaría las páginas de destino para mostrar un mensaje de que se trataba de una prueba de phishing. Sin embargo, cubriré cómo configurar HTTPS como un paso opcional en una historia futura.

También opté por dejar la base de datos como sqlite . Se puede usar MySQL , como se describe en la página de instalación de la Guía del usuario de Gophish , si cree que sqlite puede no ser suficiente para sus necesidades, si desea usar RDS, o si simplemente lo prefiere. Nuevamente, cubriré la habilitación de Gophish con MySQL en una historia futura.

Guiones de inicio

Si bien podría haber iniciado Gophish en un shell interactivo, mi preferencia era iniciarlo como un servicio, lo que significa que comenzaría en el arranque del sistema. Para ello, me remití a este tema , enlazado desde la página de instalación.

Adapté ligeramente el script para que coincidiera con mi ubicación de instalación, por lo que se convirtió en:

#!/bin/bash 
# /etc/init.d/gophish 
# archivo de inicialización para detener/iniciar el servidor de aplicaciones gophish 
# 
# chkconfig: — 64 36 
# descripción: detiene/inicia el servidor de aplicaciones gophish 
# nombreproceso:gophish 
# config:/ opt/goapps/src/github.com/gophish/gophish/config.json# definir variables de scriptprocessName=Gophish 
process=gophish 
appDirectory=/home/gophish/gophish 
logfile=/var/log/gophish/gophish.log 
errfile=/var/log/gophish/gophish.errostart() { 
echo 'Iniciando '${processName}'…' 
cd ${appDirectory} 
nohup ./$process >>$logfile 2>>$errfile & 
sleep 1 
}stop() { 
echo 'Deteniendo '${processName}'…' 
pid=$(/usr/sbin/pidof ${process}) 
kill ${pid} 
sleep 1 
}status() { 
pid=$(/usr/sbin/pidof ${proceso}) 
if [[ “$pid” != “” ]]; entonces 
echo ${processName}' se está ejecutando...' 
else 
echo ${processName}' no se está ejecutando...' 
fi 
}case $1 en 
start|stop|status) “$1” ;; 
esac

Sí, se ejecuta como root, pero esto es necesario para conectarse al puerto 80. Puede configurar su servidor web favorito como un proxy frente a Gophish, pero esto se deja como un ejercicio para el lector.

Como ahora necesitaba dar algunos pasos con el privilegio sudo, salí de mi shell que se estaba ejecutando como gophishusuario:

salida

Coloqué el script de inicio anterior en /etc/init.d/gophish:

sudo vi /etc/init.d/gophish

(pegar y guardar)

Cambié el permiso de este archivo para que sea un script de inicio adecuado:

sudo chmod 744 /etc/init.d/gophish

Hice que Gophish comenzara en el arranque:

sudo chkconfig gophish en

Creé el directorio de registro para Gophish al que se hace referencia en el script de inicio:

sudo mkdir /var/log/gophish

Empecé Gophish:

Inicio gophish del servicio sudo

Revisé los registros /var/log/gophishy parecía feliz. También verifiqué que el proceso aún estaba activo:

ps -ef |grep [g]phish

Eso me llevó al final de la página de instalación, así que cambié a seguir la página de inicio

Primeros pasos con Gophish

En mi navegador, me conecté a través de HTTPS a mi dirección IP elástica en el puerto 3333:

https://11.22.33.44:3333/

Tuve que aceptar el certificado autofirmado en mi navegador. Recuerde, esto es solo para la consola de administración, nuestros destinatarios de correo electrónico no necesitarán hacer esto.

Inicié sesión con las credenciales predeterminadas (admin / gophish)

Lo primero que hice fue cambiar la contraseña de administrador a través de Configuración

Desde aquí, seguí la página principal de documentación de la guía del usuario de Gophish y comencé a crear un grupo de prueba, que contenía solo mi propia dirección de correo electrónico de Airwalk, luego creé una plantilla de correo electrónico de prueba y una página de inicio. No volveré a crear los documentos aquí, ya que no hice nada que no cubrieran, excepto:

  • Para usar una imagen en mi página de destino, tenía que cargarla en mi servidor y colocarla /home/gophish/gophish/static-endpoint; este directorio se menciona en los documentos pero no existía, por lo que primero tuve que crearlo.

  • Está cubierto en la documentación, pero al configurar mi plantilla de correo electrónico, el valor de plantilla de {{.URL}}se usa para representar la página de destino de su campaña, por lo que al crear su plantilla de correo electrónico HTML, haga clic en el botón de enlace y simplemente ingrese la URL exactamente como{{.URL}}

En realidad enviando correo

Cuando se trataba de crear un perfil de envío en Gophish, tuve que volver a pensar en el administrador de sistemas. ¿Cómo iba realmente a originar el correo? ¿Qué relé SMTP podría usar?

"Entonces, cuando estás cerca de mí, cariño, ¿no puedes oírme, SES?"

Como estaba originando mi correo electrónico en AWS, pensé en probar el servicio de correo electrónico simple (SES) de Amazon. Consideré brevemente si AWS Support consideraría mi caso de uso lo suficientemente bueno como para permitirle salir del SES Sandbox (en resumen, cuando comienza a usar SES por primera vez, está en el "Sandbox", lo que no le permite enviar correos electrónicos a cualquier persona, excepto a las direcciones que usted controla. Debe solicitar a AWS Support que le permita enviar correos electrónicos a extraños). Supuse que si no pides, no obtienes. Alerta de spoiler: todo estuvo bien, así que leer la siguiente parte no es una pérdida de tiempo.

SES no existe en São Paulo, así que elegí la región de N.Virginia porque estaba "cerca" ( cerca de 5000 millas ).

En la consola SES, elegí Verificar un nuevo dominio , agregué mi dominio y elegí generar una nueva configuración de DKIM:

Luego, SES me mostró algunos valores para agregar como registros TXT, MX y CNAME al DNS de mi dominio:

Agregar estos registros a mi dominio fue trivial a través del panel de control del registrador de mi dominio.

Mientras editaba el DNS para mi dominio falso, decidí agregar un registro A que apunta a la dirección IP elástica de nuestro servidor Gophish, que sería útil más adelante.

www.airwalk-consulting.com A 11.22.33.44

Después de muy poco tiempo, el dominio se mostraba como "Habilitado para enviar".

Luego elegí la configuración de SMTP en la consola SES para obtener la información que necesitaría agregar al perfil de envío en Gophish.

También tuve que hacer clic en Crear mis credenciales de envío (como se ve en azul arriba) para obtener algunas credenciales de autenticación SMTP. Esto crea un nombre de usuario y una contraseña de SMTP en forma de un usuario de IAM con una clave y una clave secreta. Los anoté para ponerlos en Gophish más tarde.

Todavía estaba en SES Sandbox , por lo que para realizar algunas pruebas necesitaba verificar los dominios de los destinatarios en SES. Agregué la dirección de correo electrónico de mi empresa genuina a "Direcciones de correo electrónico" en la consola de SES y la verifiqué haciendo clic en el enlace del correo electrónico que SES me envió allí.

De vuelta en Gophish, ahora tenía lo que necesitaba para crear un perfil de envío.

  • De: elegí una dirección de correo electrónico arbitraria en mi dominio recién comprado

  • Anfitrión: utilicé el servidor SMTP que figura en la página de configuración de SMTP de SES , con :465la parte del puerto ( Actualización : originalmente tenía esto configurado, :25pero AWS parece haberse vuelto más estricto en las instancias EC2 que envían tráfico saliente en el puerto SMTP predeterminado y yo ahora vea las fallas de la campaña al enviar correos electrónicos usando el puerto 25. SES acepta conexiones en 25, 465 y 587, por lo que es más seguro evitar el puerto 25)

  • Nombre de usuario/contraseña: las credenciales de estilo IAM creadas y anotadas anteriormente

Luego elegí Enviar correo electrónico de prueba y Guardar perfil

La prueba terminó en mi carpeta de correo no deseado, lo que me llevó a hacerme otra pregunta...

Más filosofía de phishing

¿Deberíamos incluir en la lista blanca nuestro dominio "dudoso" en nuestro servidor de correo corporativo?

El filtro de spam funcionó: el correo electrónico de prueba terminó en mi carpeta de correo no deseado con una advertencia de que parecía sospechoso, aunque en este momento ni siquiera contenía ningún enlace o archivo adjunto. Un tema que analicé con más detalle en mi historia anterior, Filosofía del phishing , es si debo eliminar deliberadamente esta capa tecnológica de protección para mi dominio de prueba de phishing. Mi conclusión fue: ¡ por supuesto! Sabemos que existe una tecnología razonable para bloquear correos electrónicos sospechosos y, con suerte, todos la estamos usando, pero lo que estamos aquí para probar es a las personas. Por lo tanto, incluí mi dominio de imitación en la lista blanca en nuestro servidor de correo corporativo y volví a enviar la prueba. Esta vez llegó a mi bandeja de entrada sin ninguna advertencia. Auge.

¡Hora de una campaña!

Una campaña es donde puedes ponerlo todo junto. Creé una campaña de prueba con la plantilla, la página de destino y el perfil de envío que creé anteriormente.

Todo se explica por sí mismo y la página de la campaña en la Guía del usuario lo explica todo.

Para la URL, utilicé el nombre de host de nuestro servidor Gophish que configuré anteriormente como un registro A en nuestro DNS.

Después de hacer clic en Lanzar campaña , tuve que aceptar un par de veces que realmente quería lanzar mi campaña de prueba ahora mismo.

Mi correo electrónico llegó a mi bandeja de entrada del trabajo. El enlace fue a mi página de destino y pude ver el estado de mi campaña en el tablero de Gophish:

Pierde esas ruedas de entrenamiento

Era hora de salir del SES Sandbox . Envié una solicitud de soporte a AWS, solicitando un aumento del límite del servicio SES a 100 correos electrónicos por día, lo que no me pareció demasiado codicioso, siendo totalmente honesto acerca de para qué tenía la intención de usar su servicio. Luego, tuve que esperar a que me respondieran mi boleto.

En un par de días, AWS aceptó mi solicitud y me dio un límite de 50,000 mensajes por día. Era mucho más de lo que necesitaba, pero estaba bien.

Vamos a atrapar algo de phishing

Una vez que todos en Airwalk confirmaron que habían completado la capacitación, llegó el momento de crear una campaña "real".

Elegí un grupo objetivo adecuado dentro de la empresa. La forma en que elija hacer esto dependerá de su organización. Tal vez se dirija a todos, tal vez a un departamento específico, o tal vez a una porción de varios departamentos.

En la interfaz de administración de Gophish, creé un nuevo grupo y usé la opción de importación masiva de usuarios para cargar un archivo CSV en lugar de tener que ingresar los detalles de todos a mano.

Como verá si descarga la plantilla CSV de ejemplo, el formato es bastante sencillo:

Nombre, Apellido, Correo electrónico, Cargo

Dejé el puesto de trabajo vacío porque no lo usaré y, además, fue un error recopilar esa información con precisión. Una cosa que me tomó un tiempo fue darme cuenta de que tenía que dejar los encabezados de las columnas (de la plantilla, como se indica arriba) en el archivo en la primera línea; de lo contrario, no tomaría ningún dato del archivo.

A continuación, creé una plantilla de correo electrónico más "realista", invitando a mis colegas a leer todo sobre la planificación del Brexit de Airwalk a través de un enlace perteneciente a nuestra intranet. Esta no era una idea original, ya que los phishers son conocidos por elegir temas populares de actualidad para despertar el interés de las personas y distraerlas de considerar la validez del remitente.

También creé una página de destino más interesante, que indicaba claramente que el lector había participado en una prueba de phishing de Airwalk, pero aun así no pude resistirme a tener una lluvia verde al estilo Matrix cayendo de fondo.

Luego creé un nuevo perfil de envío, creado como una copia del de prueba que creé anteriormente, lo que significa que el servidor SMTP y los detalles de autenticación se completaron previamente. Lo único que cambié fue la dirección del remitente y el nombre descriptivo, para que sea más apropiado para el contenido del correo electrónico.

Con eso completo, pude crear una nueva campaña donde seleccioné la nueva plantilla de correo electrónico, la página de destino y el perfil de envío.

Luego hice clic en Lanzar campaña, confirmé mi intención y comenzó la diversión.

Luego podría monitorear el estado de la campaña en la página de resultados de la campaña. Como podemos ver, una persona ya ha hecho clic en el enlace del correo electrónico. Ups:

El panel de resultados de la campaña es donde pasé una gran cantidad de tiempo en los minutos inmediatamente posteriores al envío del correo electrónico. Este es un ejemplo de la página de resultados de una campaña de prueba. Muestra una línea de tiempo lineal sobre una representación de los correos electrónicos enviados/abiertos/en los que se hizo clic, así como si las personas enviaron datos, si colocó un formulario en una página de destino.

Utilizando los datos del tablero, llevé a las personas a un canal privado de Slack cuando abrieron el correo electrónico. En ese canal solicité que mantuvieran cualquier conversación sobre el correo electrónico a ese lugar específico y no en canales más generales o abiertamente en la oficina.

Hacer un seguimiento

En una reunión general poco después de que realicé la primera prueba de phishing en toda la empresa, tuvimos una sesión constructiva en la que presenté los resultados. Discutimos las diversas consecuencias de hacer clic en enlaces incorrectos y abrir archivos adjuntos maliciosos, y luego brindé consejos prácticos para evitar ser víctima de phishing u otros tipos de ataques cibernéticos. Hemos acordado brindar más capacitación y realizar más pruebas para mantener el nivel de conciencia sobre el phishing en el personal actual y futuro.

Conclusiones

Me gusta Gophish y lo fácil que resulta realizar una prueba de phishing para su propia empresa. Estábamos en lo correcto en nuestra afirmación inicial de que no necesitábamos contratar a una empresa externa para hacer esto y ciertamente no tomó una gran cantidad de tiempo. Todavía puedo ver por qué las empresas más grandes pueden subcontratar todo, pero si eres razonablemente técnico y tienes la autoridad, deberías echarle un vistazo a Gophish, especialmente si actualmente no tienes ningún tipo de prueba de phishing.

Last updated