# ¿Cómo medir el eslabón más débil de la cadena?

## 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](https://github.com/safernandez666/Terraform), 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](https://dev.to/hieplpvip/get-a-free-domain-with-freenom-and-cloudflare-k1j). Donde se adquiere un domino en [Freemon](https://www.freenom.com/es/index.html?lang=es) 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.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1709327518304/81c832b6-d35a-477b-bc05-dcaff62bcaf2.png align="center")

Una vez instalado en nuestro equipo **aws-cli**, configuramos las credenciales programáticas. Si son nuevos en esto, les dejo el [tutorial](https://docs.aws.amazon.com/es_es/cli/latest/userguide/getting-started-install.html) para realizarlo de manera sencilla.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1709327757177/c04887ed-99dd-47ff-923b-6f23b4a4c496.png align="center")

## Terraform

Lógicamente vamos a tener que tener [instalado](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) 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**.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1709327889021/24a197ae-6492-4368-85fa-a156fcfeb1b9.png align="center")

Primero vamos a pegar nuestra llave publica en el **ec2.tf**. Si no sabes como hacerlo, aca te dejo este [tutorial](https://es.siteground.com/kb/generar-clave-ssh-linux/). Una vez que las conocemos nos resta agregarlo al manifiesto. Hacemos un cat **~/.ssh/id\_rsa.pub**.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1709328343143/ec237bbe-829e-4cc1-bf72-090b774692b2.png align="center")

Copiamos y pegamos en nuestro terraform.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1709328354099/7118d406-1b43-4de9-a952-2661a1f3ee56.png align="center")

## 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:

```bash
# 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
    

%[https://www.loom.com/share/7993ca584a574bfca9f5fc47ac80dbc9?sid=4fdbfb8d-9666-4964-a3a0-5226948ad295] 

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.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1709332274278/b9a3f099-e399-4913-b581-ee5d73657183.png align="center")

Vamos a revisar si nuestro servidor está listo en *https://gophish.esprueba.com:3333*

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1709332287901/9a62439e-2b2f-4c0d-be7b-dff2f1e010e7.png align="center")

Uala! Para saber el password ejecutamos este comando.

```bash
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.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1709332841160/f530942d-fdee-4509-9b0d-c78f6d64f827.png align="center")

Revisamos la prueba.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1709332861139/5246bd08-772f-4751-ad61-f651f121dc2d.png align="center")

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.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1709334230384/0277a4dd-169a-4207-b6ea-cc36736abd18.png align="center")

### Email Template

Este será el modelo de correo. Parte importante del Phishing. Solo modifique {{.FirstName}}, para personalizar el envio.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1709334327199/bd013643-de6b-4159-938c-8a26bb41cf14.png align="center")

### 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.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1709334429643/01aa7389-9c1e-4499-baa8-464ed3b04c8c.png align="center")

Listo, ahora a esperar. Revisamos el correo y es imperceptible a los ojos.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1709334508568/bceb33d0-de81-49c4-aa18-7500540ab1a6.png align="center")

¿Como nos daríamos cuenta? Miren estos pequeños detalles.

En la dirección del Sender.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1709334628876/f2509b69-d76e-4ada-a335-569b99db6520.png align="center")

En el enlace del cuerpo del mail.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1709334637344/9b1d2c52-fb5e-4af5-8d19-d14d18a39a3d.png align="center")

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ó.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1709334693049/90026667-c6ab-4d7c-8e32-d20538f05c0c.png align="center")

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**.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1709349358968/8ec576d6-8130-4e89-a5df-91753c3b3155.png align="center")

## 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.
