Pescando Phishing sin presupuesto

Bienvenidos a esta segunda publicación.

En la entrada anterior estuvimos hablando acerca del posible fin de las soluciones de filtrado por DNS por un nuevo estándar llamado Dns-Over-Https o DoH (  https://i-guardian.biz/2019/12/16/filtrado-por-dns-el-fin-de-una-era/ ) , en ese articulo mencionamos lo simple que resulta interceptar las comunicaciones dentro de una red y por lo tanto jugar un poco con la imaginación y ver que uso le podemos dar a la misma, en este caso va a ser algo noble (lo prometo).

El año pasado fui invitado por ASIAP ( http://www.asiap.org ) para dar una charla en sus jornadas de seguridad CSI, en la cual presente una charla practica llamada “Cazando Phishing sin presupuesto” un colega (Gustavo Antonini) me sugirió renombrar el “Cazando” por “Pescando” pero la charla ya estaba armada y publicada, por lo cual, a efectos de complementar el primer articulo y hacer honor a un titulo que creo es mas acertado, les traigo esta segunda entrada del blog llamada “Pescando Pishing sin presupuesto”.

phishing

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:

diagrama 1

Ahora, este protocolo tiene ciertas carencias

1.- Ausencia absoluta de autenticación en el protocolo, esto significa que cualquier maquina 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

diagrama 2

Basado en todo esto, vamos a ver como podemos hacer para interceptar las comunicaciones en la red para monitorear la navegación.

(*)Todos los programas utilizados en este articulo se encuentran disponibles para descargar en este link  (Cabe aclarar que los programas que ofrecemos para descargar son parte de lo que desarrollamos diariamente en GuardiaN y los mismos necesitan algunas dependencias para su correcto funcionamiento, por lo cual su instalación esta detallada en un breve instructivo en el archivo de descarga. Por otro lado mencionar que los programas están compilados para correr en Linux de 64 bits).

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 y sitios identificados como phishing (sitios que emulan la pagina de login de un banco, una red social , etc). Si vemos que algún equipo accede a uno de esos sitios, generamos algún tipo de notificación.

Para tener rápida respuesta, vamos a utilizar una base de datos en memoria llamada “redis”

Los pasos son los siguientes (los mismos son el contenido de los scripts disponibles en la descarga):

  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

Paso 1

Para realizar la carga de los sitios, vamos a descargar la lista desde la siguiente dirección utilizando el comando wget:

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

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

#!/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

Paso 2

Para recibir trafico y reenviarlo, necesitamos activar el forwarding o reenvio de paquetes en la interfaz de red, esto significa que el trafico que llega a la interfaz, pueda ser reenviado, de lo contrario quedaría congelado ahí y el efecto (hacia la red) seria que Internet dejo de funcionar

Para habilitar el forwarding ejecutamos lo siguiente

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

Paso 3

El envenenamiento lo logramos ejecutando el programa “arppoison” en el cual le pasamos la interfaz de red que vamos a utilizar, la IP de la puerta de enlace y nuestra dirección MAC. Este programa envía en intervalos regulares a la red un mensaje diciendo que el es la puerta de enlace (notese el uso del comando sudo ya que requiere permisos de root)

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

Paso 4

Luego vamos a disparar otro programa “sni” que se va a encargar de obtener las peticiones http y https para analizar los cabezales y de ahí obtener a donde están intentando acceder los equipos. Cabe aclarar que si bien http se puede leer directamente de la red, para el caso de https utilizamos “sni” (https://en.wikipedia.org/wiki/Server_Name_Indication)

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

sudo /usr/bin/stdbuf -i0 -o0 -e0 ./sni -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

tail -fn0 ./navegacion.log |

while read linea

do

   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 «#### Phishing detectado ####  $equipo == $dominio»

   else

      echo $equipo – $dominio – OK

   fi

Done

El resultado final en pantalla es el siguiente

192.168.168.23 aliado.com.uy

192.168.168.10 tiles.services.mozilla.com

192.168.168.71 asiap.org

192.168.168.10 google.com

192.168.168.71 facebook.com

#### Phishing detectado ####  192.168.168.10 == 011bank.com

192.168.168.10 gmail.com

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

Espero que esta entrada haya sido interesante y nos veremos dentro de poco con una nueva publicacion.

Saludos !!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

EnglishPortugueseSpanish