Hiding the Rabbit – Conexión a redes no confiables con AP transparente

Buenas a todos!! Hoy vengo a traeros un pequeño tutorial acerca de cómo realizar una conexión a una red inalámbrica con salida a internet, normalmente desprotegida o potencialmente monitorizada (wifi pública, hoteles, conexiones compartidas…) y además poder conectar diversos dispositivos a la misma creando un puente entre ellos y la red con nosotros como salto.

¿Suena complicado? En realidad no lo es. Básicamente lo que vamos a hacer es:

  • Cambiar la dirección MAC de nuestra tarjeta de red inalámbrica de forma aleatoria para evitar reconocimiento mediante la misma.
  • Conectarnos a la red de forma manual, utilizando wpa_supplicant, como si fuésemos cualquier cliente wifi ante sus ojos.
  • Conectarnos con un servidor VPN con OpenVPN de forma que todo nuestro tráfico queda cifrado.
  • Levantaremos un punto de acceso, con servicio DHCP, utilizando una segunda tarjeta de red inalámbrica y los servicios hostapd e isc-dhcp-server.
  • Estableceremos reglas de IPTables para permitir la comunicación de nuestros clientes inalámbricos con la red con salida a internet de forma protegida, creando una NAT Masquerade, ocultando nuestros dispositivos ante el exterior.

¿Cuál será el resultado? Nuestra propia red inalámbrica protegida a la que podremos conectar un buen número de dispositivos de forma transparente ante la red de salida a internet. ¡Vamos allá!

Preparación inicial

Lo primero que haremos es, en caso de que nuestra distribución lo utilice (que por cierto, todo esto lo haremos en linux, faltaría más), es deshabilitar NetworkManager para las interfaces inalámbricas mediante el comando:

sudo nmcli radio wifi off

Esto nos permitirá tener el control total de las mismas. Sin embargo, NetworkManager entonces las coloca en un estado de bloqueo. Para poder utilizarlas debemos desbloquearlas con el comando:

sudo rfkill unblock all

Además, cambiaremos de forma aleatoria nuestra dirección MAC para evitar nuestra identificación (usad en el comando la interfaz que vayáis a utilizar como punto de conexión a la red real):

sudo macchanger -r <interfaz>

Conexión a la red real

Ahora realizaremos la conexión a la red con salida a internet con la que queremos camuflarnos. Lo primero será levantar la interfaz que utilizaremos para ello:

sudo ifconfig <interfaz> up

Seguidamente utilizaremos la utilidad wpa_supplicant para realizar la conexión. Tendremos que crear un fichero de configuración que refleje las propiedades de la conexión. En este caso nos conectaremos a una red protegida con WPA2-PSK, pero puede ajustarse para utilizar redes abiertas o WEP.

Crearemos y editaremos un fichero llamado conexion_fuente.conf con las siguientes características, donde <ssid> y <password> serán el SSID y la contraseña de acceso a la red:

network={
  ssid="<ssid>"
  proto=RSN
  key_mgmt=WPA-PSK
  pairwise=CCMP TKIP
  group=CCMP TKIP
  psk="<password>"
}

Podemos ahora ejecutar wpa_supplicant para conectar a la red con el siguiente comando, viendo cómo nos asociamos y autenticamos de forma correcta:

wpa_supplicant -i <interfaz> -c conexion_fuente.conf

Podéis echar un vistazo aquí para ver configuraciones para redes abiertas y WEP.

Como estamos haciendo la conexión de forma manual, deberemos obtener mediante DHCP una dirección IP para nuestra interfaz:

sudo dhclient <interfaz>

Por último, realizaremos la conexión OpenVPN con el servidor de nuestra elección, utilizando por ejemplo un fichero de configuración .ovpn que normalmente nos proporciona el proveedor:

sudo openvpn <fichero_ovpn>

(La imagen está recortada, la salida es más extensa).

Ahora mismo tenemos una conexión protegida para nosotros mismos en la red con salida a internet. Procedemos ahora a crear nuestro punto de acceso redireccionado a la misma.

Creación del punto de acceso

En este punto levantaremos un servicio hostapd para crear el punto de acceso. Como lo gestionaremos como un servicio, editaremos el fichero /etc/hostapd/hostapd.conf para establecer los parámetros de configuración:

# basic
interface=<interfaz2>
ssid=OWRT-001
channel=1
#wpa
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_psk_file=/etc/hostapd/hostapd-psk
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP
rsn_pairwise=CCMP
#hard
ieee80211n=1
hw_mode=g
device_name=AP
manufacturer=OWRT

Podemos ver en el primer apartado (basic) la segunda interfaz que utilizaremos para crear el AP, el SSID del mismo (lo llamaré OWRT_001 por llamarlo de alguna forma disimulada :^P) y el canal de emisión. En el segundo apartado (wpa) establecemos una protección WPA-PSK, cuya contraseña guardamos en /etc/hostapd/hostapd-psk como explicaré ahora. En el tercer apartado (hard o hardware) introduciremos datos acerca del hardware del punto de acceso y su driver (dependerá del vuestro).

El fichero /etc/hostapd/hostapd-psk que contendrá la contraseña en realidad contendrá la PSK de acceso a la red, que se crea combinando el SSID y la contraseña. Podemos generar esta passphrase con el comando:

wpa_passphrase "<ssid>" "<password>"

Esto nos dará la PSK, que procederemos a copiar al fichero hostapd-psk como clave única de la red:

00:00:00:00:00:00 <PSK>

A modo de ejemplo:

Hecho esto configuraremos el servicio isc-dhcp-server. En el fichero /etc/dhcp/dhcpd.conf agregaremos estas líneas al final para establecer una DHCP Pool en el rango 11.0.0.0/8 (por ejemplo):

subnet 11.0.0.0 netmask 255.255.255.0 {
  range 11.0.0.10 11.0.0.20;
  option broadcast-address 11.0.0.255;
  option routers 11.0.0.1;
  default-lease-time 600;
  max-lease-time 7200;
  option domain-name "local";
  option domain-name-servers 8.8.8.8;
}

Además estableceremos la interfaz que entregará las IPs en /etc/default/isc-dhcp-server:

INTERFACES="<interfaz2>"

Habilitaremos y asignaremos una dirección IP a la interfaz:

sudo ifconfig <interfaz2> 11.0.0.1

sudo ifconfig <interfaz2> up

Hecho esto podemos levantar ambos servicios y comprobar que todo ha ido correctamente:

sudo systemctl start hostapd isc-dhcp-server

sudo systemctl status hostapd isc-dhcp-server

Confirmamos que todo ha ido bien 🙂 El último paso será crear y aplicar las reglas de IPTables que nos permitirán crear la NAT Masquerade y admitir conexiones salientes desde nuestra red protegida. Para ello crearemos un fichero firewall_wifi.rules con este contenido:

#!/bin/bash
sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
sudo iptables -A FORWARD -i tun0 -o <interfaz2> -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i <interfaz2> -o tun0 -j ACCEPT

Básicamente lo que estamos declarando es que:

  1. Se cree una NAT Masquerade en la interfaz tun0 (la interfaz virtual de la VPN, para poder dirigir todo el tráfico de forma protegida).
  2. Se realice un forward del tráfico que entre por la VPN hacia la interfaz de nuestra red inalámbrica, pero solamente si la conexión se ha realizado ya (evitando por tanto conexiones entrantes).
  3. Se realice un forward del tráfico que va entre nuestra red inalámbrica y la VPN, de forma que admitimos conexiones al exterior.

Aplicamos las reglas con el comando:

sudo bash firewall_wifi.rules

¡Y ya está! Cualquier dispositivo podrá conectarse a nuestra red inalámbrica personal y protegida y tener acceso a internet de forma totalmente transparente ante la red de acceso a internet en la que no confiamos.

Espero que os haya gustado y os haya servido para aprender un poquito 🙂 Un saludo y gracias como siempre por leernos!

10 comentarios en «Hiding the Rabbit – Conexión a redes no confiables con AP transparente»

  1. Os conoci a traves del podcast Bitacora de Ciberseguridad, me caguen… ya os podria haber conocido antes… el blog es genial los articulos son brutales, la variedad de contenido es alucinante, enhorabuena por tan buen curro, larga vida al conejo blanco

    1. Que aparecía compuesta por la dirección MAC de mi adaptador 🙂 (la otra no, pero ya por inercia la censuré también). Gracias por leernos!

  2. llegue al conejo blanco por el famoso youtube y algunos videos de su curso de pentest, me parecen muy buenos post, no escribire un mensaje en cada uno de ellos pero me parecen geniales todos, gracias a dios encontre mas gente que sabe y en mi idioma, saludos y un abrazo desde chile.

  3. Hola Hartek, probando a realizar esta configuración usando la RPI3b+, me encuentro con la siguientes dudas:
    1- ¿Existe algún problema si uso la RPI3b+ como servidor openvpn instalando pivpn?
    2- En caso de querer redireccionar el tráfico de la interfaz que se conecta a internet siendo esta inalámbrica a la interfaz ethernet de la RPI3b+ ¿bastaría con las reglas correctas en iptables?
    3- ¿Se puede redireccionar el trafico a una interfaz usb declarandola en el archivo dhcpd.conf pudiendo asignarle una direccion ip a esta interfaz?

    Muchas gracias de antemano, sigo probando a ver si saco la solución!!

    1. Hola krazilec! No hay ningún problema en usar otro modelo de raspberry u otra interfaz ya sea inalámbrica o ethernet, o física o usb, siempre que utilices el nombre correspondiente en las configuraciones donde figuren. Un saludo y gracias por echarle un ojo a la entrada!!

Los comentarios están cerrados.