Pescando phishing sin presupuesto


Normalmente cuando configuramos los datos de TcpIp en cualquier equipo (tablet, celular, notebook, smartTv, etc), para que los mismos puedan por un lado dialogar entre si y por otro acceder a Internet, tenemos que tener presente 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 como 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 esta 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:



Ahora, este protocolo tiene ciertas carencias


1.- Ausencia absoluta de autenticación en el protocolo, esto significa que cualquier máquina puede modificar el comportamiento de acuerdo a los paquetes ARP que recibe, sin determinar si los mismos son auténticos o no.

2.- 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 trafico 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 trafico 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



Esto puede ser utilizado para muy buenos fines (como vamos a vera 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

}



# Vacio 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 trafico y reenviarlo, necesitamos activar el forwarding o reenvío de paquetes en la interfaz de red, lo cual significa que el trafico 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 mas 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 ultimo 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 !!