¿Cómo medir el eslabón más débil de la cadena?
Una excusa para aprender en sencillos pasos cómo armar una arquitectura que nos permita hacerlo, con Terraform y AWS, en menos de 5 minutos.
Introducción
Creo que a esta altura explicar que es el Phishing es redundante, más o menos todos tenemos una ide. Para los desprevenidos, en pocas líneas, es una técnica de ingeniería social que se usa para obtener de manera fraudulenta información confidencial.
Siempre se dice que la seguridad, de una empresa, es tan fuerte como el eslabón más débil de la cadena. No es para preocuparse, pero sí para ocuparse. Podemos poner tecnología de punta, pero si los usuarios no están instruidos o como dice un colega "hardenizados" seremos débiles. Es importante entrenar a nuestros compañeros de trabajo y eso es algo que cae sobre nosotros, la gente de seguridad de la información. Los que conocen mi blog, saben que no pondre que control es en CIS Benchmark o en ISO27001. ¡Vamos al Hands On!
¿Que les traigo hoy? Les acerco un repositorio, que hice ya hace un tiempo, donde armaremos una infraestructura como código, con Terraform en AWS, e instalaremos GoPhish en una EC2. El script de inicio será encargado de gestionar los certificados válidos con Let's Encrypt. De esta manera vamos a tener una plataforma para entrenar y medir a nuestros usuarios corporativos en 5 minutos y gratis.
¿Que vamos a necesitar?
Un dominio. Existen varias web, para dominios gratis.
Vamos asociar ese dominio y gestionar los DNS a través Cloudflare.
AWS Free Tier, donde generamos una VPC con la Instancia que tendrá GoPhish.
Para los primeros pasos, pueden seguir este tutorial. Donde se adquiere un domino en Freemon y se asocia a Cloudflare.
Usuario de AWS
Generamos un usuario en AWS que tenga permisos sobre VPC & EC2. En mi caso genere el usuario terraform-gophish. Claro esta que se puede hacer más granular, el permiso, pero para los fines prácticos los voy a dejar de esta manera.
Una vez instalado en nuestro equipo aws-cli, configuramos las credenciales programáticas. Si son nuevos en esto, les dejo el tutorial para realizarlo de manera sencilla.
Terraform
Lógicamente vamos a tener que tener instalado Terraform en nuestro equipo, clonamos el proyecto y revisamos la configuración. Solo nos interesan dos ficheros. Por un lado ec2.tf que es donde tenemos que cargar la llave pública para acceder a nuestro servidor y por el otro el install.sh, que corre al inicio de la creación de la instancia, que tiene las variables para el diálogo con Cloudflare y Let's Encrypt.
Primero vamos a pegar nuestra llave publica en el ec2.tf. Si no sabes como hacerlo, aca te dejo este tutorial. Una vez que las conocemos nos resta agregarlo al manifiesto. Hacemos un cat ~/.ssh/id_rsa.pub.
Copiamos y pegamos en nuestro terraform.
Script de Instalación
Ahora vamos a agregar los datos que son necesarios para actualizar el registro A, que hayamos creado en Cloudflare. Yo para esta prueba cree gophish.esprueba.com. Logicamente si tu empresa tiene un dominio: buenascompras.com intentaria crear un dominio buenasc0mpras.com o algo por el estilo.
Vamos a necesitar completar estos datos:
# Variables
API_EMAIL="TU_CORREO"
API_KEY="API_KEY_DE_CLOUDFLARE"
RECORD_NAME="gophish.esprueba.com"
ZONE_ID="XXXX"
# Aca te dejo el comando para saber el Record ID. Hay que la variable ZONE_ID
# curl -X GET "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records" \
# -H "Authorization: Bearer API_KEY"
RECORD_ID="XXXXX"
echo "Update & Upgrade | Install Golang & GoPhish..."
sudo add-apt-repository ppa:certbot/certbot -y
sudo apt update & sudo upgrade -y
sudo apt install golang-go unzip jq -y
# Install GoPhish
#wget https://github.com/gophish/gophish/releases/download/v0.11.0/gophish-v0.11.0-linux-64bit.zip
wget https://github.com/gophish/gophish/releases/download/v0.12.1/gophish-v0.12.1-linux-64bit.zip
sudo mkdir /opt/gophish
sudo unzip gophish-v0.12.1-linux-64bit.zip -d /opt/gophish
echo "Obtein IP and PUT on Cloudflare..."
INTERNET_IP="$(dig +short myip.opendns.com @resolver1.opendns.com -4)"
curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID" \
-H "X-Auth-Email: $API_EMAIL" \
-H "X-Auth-Key: $API_KEY" \
-H "Content-Type: application/json" \
--data "{\"type\":\"A\",\"name\":\"$RECORD_NAME\",\"content\":\"$INTERNET_IP\",\"ttl\":1,\"proxied\":false}" | jq .
echo "Install Certbot..."
sudo apt-get install python3-certbot-apache -y
sudo certbot --apache -d $RECORD_NAME --register-unsafely-without-email --agree-tos -n
echo "Copy the certs files..."
sudo cp /etc/letsencrypt/live/${RECORD_NAME}/privkey.pem /opt/gophish/
sudo cp /etc/letsencrypt/live/${RECORD_NAME}/fullchain.pem /opt/gophish/
echo "Change Config Files..."
sudo sed -i 's/127.0.0.1/0.0.0.0/g' /opt/gophish/config.json
sudo sed -i 's/80/443/g' /opt/gophish/config.json
sudo sed -i 's/false/true/g' /opt/gophish/config.json
sudo sed -i 's/gophish_admin.key/privkey.pem/g' /opt/gophish/config.json
sudo sed -i 's/example.key/privkey.pem/g' /opt/gophish/config.json
sudo sed -i 's/gophish_admin.crt/fullchain.pem/g' /opt/gophish/config.json
sudo sed -i 's/example.crt/fullchain.pem/g' /opt/gophish/config.json
echo "Stop Apache2. Apache was used to Validate the certificate..."
sudo service apache2 stop
echo "Execute GoPhish..."
cd /opt/gophish
sudo chmod +x gophish
sudo ./gophish
El script es sencillo:
Actualización del Sistema Operativo.
Instalación de GoPhish.
Obtención de Direccion IP Publica.
PUT a la API de Cloudflare, sobre el registro A creado.
Generación de certificados y copia a las carpetas de GoPhish.
Modificacion de configuración.
Ejecución de GoPhish.
Solo resta realizar estos comando, de terraform, dentro del directorio vpc.
terraform init
terraform plan
terraform apply
Si queremos ver el paso a paso de la instalación podemos hacer un ssh al servidor y revisar con tail -f /var/log/syslog.
¿Qué es lo importante? El cambio de dirección en el registro A y el registro del certificado.
Vamos a revisar si nuestro servidor está listo en gophish.esprueba.com:3333
Uala! Para saber el password ejecutamos este comando.
ubuntu@ip-10-0-1-135:~$ grep -n "Please login with the username admin and the password" /var/log/syslog
2824:Mar 1 22:26:02 ip-10-0-1-135 cloud-init[1195]: time="2024-03-01T22:26:02Z" level=info msg="Please login with the username admin and the password 427b68e138895277"
Configuración de GoPhish
Sending Profile
Vamos a tener que configurar nuestro SMTP, para el envío de correos.
Revisamos la prueba.
Ahora vamos a cargar un template de Instagram. Será necesario una pagina para recepcionar la víctima y un template de correo, para enviar.
Landing Page
Cuando el usuario haga click, ingresa a esta web. En este caso una vez que cargue los datos, irá al sitio real.
Email Template
Este será el modelo de correo. Parte importante del Phishing. Solo modifique {{.FirstName}}, para personalizar el envio.
Campaña de Envío
Aca se juntan las 3 configuraciones anteriores. Previo a esto es importante cargar los correos de las víctimas, en la sección Usuarios y Grupos.
Listo, ahora a esperar. Revisamos el correo y es imperceptible a los ojos.
¿Como nos daríamos cuenta? Miren estos pequeños detalles.
En la dirección del Sender.
En el enlace del cuerpo del mail.
Bueno, ¿Qué pasa si el usuario "fue pescado"? Revisamos el Dashboard de la campaña y vemos el paso a paso de la víctima ¿Que acciones realizo? ¿Reporto? Podríamos hasta conocer la contraseña que nos entregó.
Una vez que cargo los datos, el usuario fue redireccionado a la página oficial. Seguramente pensara que hubo un problema con internet o algo no funcionó como debía.
Cuando quieras eliminar la infraestructura creada, solo tienes que escribir terraform destroy.
Conclusión
Como pueden ver es sencillo y poco costoso realizar campañas para medir la concientización dentro dentro de nuestro entorno. ¿Quienes son nuestros usuarios más endebles? ¿Donde debemos poner énfasis?
Importante*: Esta entrada tiene fines teoricos y practicos, no esta hecho para complicarle la vida a ningún usuario. Si estás leyendo esto sabe que es condición sine qua non tener doble factor de autenticación en todas las plataformas.*
Espero que les sirva.