Por Alejandro Martínez Colombo Linkedin

  • Director at Aliado. Cto at Bprot. y Alumno de la 7ª edición del Máster en Ciberseguridad del Campus Internacional de Ciberseguridad
Alejandro Martín
Alejandro Martínez Colombo

Por Alejandro Martínez Colombo Linkedin

  • Director at Aliado. Cto at Bprot. y Alumno de la 7ª edición del Máster en Ciberseguridad del Campus Internacional de Ciberseguridad

Normalmente cuando configuramos los datos de TcpIp en cualquier equipo (Tablet, móvil, notebook, Smart TV, etc.) para que los mismos puedan por un lado dialogar entre sí y por otro acceder a Internet, tenemos que tener presente cuatro grandes componentes que son fundamentales.

Pescando phishing sin presupuesto

Los cuatro grandes componentes que son fundamentales:

  1. Dirección IP: Es mi dirección en la red y como me van a ubicar (ej. 192.168.168.10).
  2. Mascara: Complementa la dirección IP (ej. 255.255.255.0).
  3. Puerta de Enlace: Es el equipo que me va a ayudar cuando la dirección a la cual quiero acceder, no se encuentra dentro de la red (ej. www.banco.com).
  4. Dirección física o MAC Address: El gran olvidado y fundamental para que la magia ocurra.

Los tres primeros los conocemos muy bien, ¿Ahora cómo funcionan? Muy simple, cuando un equipo con el cual necesitamos dialogar (por ej. Un servidor web, correo, etc.) se encuentra dentro de la misma red, dialogamos directamente con el sin necesidad de un intermediario, pero cuando ese dialogo se hace con un equipo que no está dentro de la red (ej. Acceder a Google), nuestro equipo envía la solicitud a la puerta de enlace para que la misma se encargue de decirnos como llegar.

Hasta aquí (y de manera muy superficial) es lo que todos normalmente manejamos, pero (siempre hay un, pero) aquí entra el cuarto componente que es la dirección física o MAC address y quien realmente se encarga de la “magia”.

Cada equipo conectado a la red tiene un número de identificación de 48 bits (ej. 74:df:bf:94:84:47). Este es un número único establecido en el momento de la fabricación de la tarjeta de red. Para que las direcciones físicas (MAC) se puedan conectar con las direcciones lógicas (IP), existe un protocolo llamado ARP (Address Resolution Protocol) el cual interroga a los equipos de la red para averiguar sus direcciones físicas y luego crea una tabla de búsqueda entre las direcciones lógicas y físicas en una memoria caché.

Cuando un equipo debe comunicarse con otro, consulta la tabla de búsqueda. Si la dirección requerida no se encuentra en la misma, el protocolo ARP envía una solicitud a la red.

Todos los equipos en la red comparan esta dirección lógica con la suya. Si alguno de ellos se identifica con esta dirección, el mismo responderá la solicitud, la cual almacenará el par de direcciones en la tabla de búsqueda, y a continuación, podrá establecerse la comunicación.

Gráficamente, podemos detallar lo expresado de la siguiente manera.

Post alumno Ciberseguridad

Ahora, este protocolo tiene ciertas carencias

  • Ausencia absoluta de autenticación en el protocolo, esto significa que cualquier máquina puede modificar el comportamiento de acuerdo con los paquetes ARP que recibe, sin determinar si los mismos son auténticos o no.
  • Tabla de búsqueda alterable externamente, esto quiere decir que podemos modificar el contenido de una tabla de un equipo externo construyendo y enviando una petición de respuesta adecuada.

Todo esto se resume en el hecho de que, si generamos el tráfico correcto, podemos sustituir la dirección física (que los equipos tienen guardada de manera local) de la puerta de enlace real  por nuestra propia dirección física , logrando de esa manera que cuando intenten acceder a Internet seamos nosotros quienes recibimos dicho tráfico y luego lo enviemos hacia la puerta de enlace real.

Esta técnica tiene varios nombres, arp spoofing, arp cache poisoning o arp poison routing.

Post alumno Ciberseguridad

Esto puede ser utilizado para muy buenos fines (como vamos a ver a continuación), que es la posibilidad de interceptar las comunicaciones en la red para monitorear la navegación y poder de esa manera saber si tengo algún equipo en mi red accediendo a sitios indebidos.

La idea es muy simple, hacemos creer a los equipos que somos la puerta de enlace para que nos envíen las solicitudes de navegación, recibimos las mismas y las comparamos contra una base de datos de dominios identificados como dañinos y si vemos que algún equipo accede a uno de esos sitios, generamos algún tipo de notificación.

Para la carga de los dominios y tener una rápida respuesta en las consultas,  vamos a utilizar una base de datos en memoria llamada “redis

Los pasos son los siguientes:

  1. Cargamos la lista de los sitios dañinos dentro de la base redis.
  2. Preparamos nuestro equipo para recibir y reenviar el trafico.
  3. Procedemos a envenenar la red con nuestra MAC.
  4. Iniciamos el proceso de monitoreo de peticiones.
  5. Iniciamos el proceso de control de las mismas.

Parece complejo, pero no lo es. Vamos por partes

(NOTA: Los pasos que se indican funcionan en equipos con sistema operativo Linux)

Paso 1

Para realizar la carga de los sitios, vamos a descargar la lista de dominios maliciosos, desde la siguiente dirección en gihtub, utilizando el comando wget y lo guardamos con el nombre “dominios”:

wget https://raw.githubusercontent.com/mitchellkrogza/Phishing.Database/master/phishing-domains-ACTIVE.txt -O dominios

Luego realizamos la carga en la base redis (cabe aclarar que hay detalles de uso de redis que no vamos a abarcar en este momento).

Para ello generamos un script “cargo_redis.sh” con el siguiente contenido:

#!/bin/bash

creo_proto_redis() {

cmd=$1

proto=»»

proto+=»*»

palabras=0

byword=»»

for palabra in $cmd

do

palabras=$[palabras+1]

byword+=»$»

byword+=${#palabra}

byword+=»\\r\\n»

byword+=$palabra

byword+=»\\r\\n»

done

proto+=${palabras}

proto+=»\\r\\n»

proto+=${byword}

printf $proto

}

# Vacío la base de datos

redis-cli -n 1 flushdb

# Rutina que carga la base redis

for i in $(cat dominios)

do

creo_proto_redis «SET $i si» | redis-cli –pipe -n 1

Done

Lo ejecutamos “/bin/bash cargo_redis.sh”

Paso 2

Para recibir tráfico y reenviarlo, necesitamos activar el forwarding o reenvío de paquetes en la interfaz de red, lo cual significa que el tráfico que llega a la interfaz con destino a otro equipo que no sea el nuestro, pueda ser reenviado.

Para habilitar el forwarding ejecutamos lo siguiente (asumiendo somos root, de lo contrario utilizamos “sudo”)

echo 1 > /proc/sys/net/ipv4/ip_forward

Paso 3

El envenenamiento lo logramos ejecutando el programa “arp-poison” (https://github.com/m0nad/ARP-Poison).

Este programa es un utilitario muy sencillo escrito en C (se pueden encontrar cientos de programas de este tipo en diferentes lenguajes, por lo cual utilizamos aquel con el que nos sentimos más a gusto).

En la ejecución le pasamos como parámetros la interfaz de red que vamos a utilizar, la IP de la puerta de enlace a falsear y nuestra dirección MAC.

Primero lo compilamos de una manera muy sencilla:

gcc arp-poison.c -o arp-poison

Luego procedemos a ejecutar:

sudo ./arppoison wlp2s0 192.168.1.1 74:df:bf:94:84:47

Paso 4

Para la captura de las peticiones web, vamos a utilizar un programa llamado “snidump” (https://github.com/kontaxis/snidump), el cual se encarga de analizar los paquetes buscando el dominio accedido en puertos web (80, 443, 8080, etc) buscando para peticiones HTTP tradicionales el cabezal “Host” y para peticiones HTTPS el campo “ClientHello” (SNI. Por más referencia consultar https://en.wikipedia.org/wiki/Server_Name_Indication)

Este programa también debemos compilarlo, pero ejecutando el comando “make” (podemos tener algún warning pero va a finalizar correctamente)

make all

Luego procedemos a correrlo, enviando el registro a un archivo llamado “navegacion.log”:

sudo rm -f ./navegacion.log &>/dev/null

sudo /usr/bin/stdbuf -i0 -o0 -e0 ./snidump -i wlp2s0 -f ‘port 80 or port 443’ > ./navegacion.log 2>&1

Paso 5

El último paso, se encarga de monitorear el log generado en el paso 4 y en caso de encontrar un match, alertar del mismo.

Para este paso, escribimos un simple script que realiza dicho proceso

#!/bin/bash

tail -fn0 ./navegacion.log |

while read linea

do

fechahora=$(date «+%F %T»)

equipo=$(echo «$linea» | awk ‘{print $1}’)

dominio=$(echo «$linea» | awk ‘{print $2}’)

CHEQUEO=$(/usr/bin/redis-cli -n 1 GET $dominio)

if [ «$CHEQUEO» == «si» ]; then

echo $fechahora – $equipo – $dominio – ===PHISHING===

else

echo $fechahora – $equipo – $dominio – OK

fi

Done

Cuando corremos el mismo y empezamos a monitorear, vamos a ver lo siguiente

2021-12-02 18:24:21 – 192.168.168.23 – aliado.com.uy OK

2021-12-02 18:24:21 – 192.168.168.10 – tiles.services.mozilla.com OK

2021-12-02 18:24:21 – 192.168.168.71 – asiap.org OK

2021-12-02 18:24:21 – 192.168.168.10 – google.com OK

2021-12-02 18:24:21 – 192.168.168.71 – facebook.com OK

2021-12-02 18:24:21 – 192.168.168.10 – 011bank.com ===PHISHING===

2021-12-02 18:24:21 – 192.168.168.10 – gmail.com OK

Esto podemos automatizarlo, realizar envío de email, disparar algún tipo de alerta, etc. (Dejo abierta la posibilidad a que realicen los cambios que deseen).

Vemos de esta forma que con herramientas disponibles para todos y un poco de imaginación, si nos lo proponemos, podemos llegar a lograr muchas cosas

Gracias por el interés

Saludos !!

¿Quieres obtener el mismo conocimiento que Alejandro?

APRENDE MÁS CON EL MÁSTER EN CIBERSEGURIDAD

Comparte este post