Archive

Archive for March 20th, 2009

Creando un punto de acceso falso (airbase-ng)

March 20th, 2009 1 comment

POST ACTUALIZADO: http://safetybits.net/2009/10/05/creando-un-punto-de-acceso-falso-ii/

Hasta hace relativamente poco tiempo, una condición necesaria para crear un punto de acceso era que el driver de nuestra tarjeta debía de soportar el modo “master” (ej: chipsets atheros), pero como no todos cumplimos en un determinado momento esta condición, los desarrolladores de la suite “aircrack-ng” están desarrollando una herramienta llamada “airbase-ng”, cuyo propósito es el de poder crear un punto de acceso a partir de una interface de red en modo monitor.

Si visitamos la página de la documentación de la herramienta,  veremos entre otras cosas, que podemos usar esta herramienta tanto para montar un AP para dar conexión a internet, como para realizar auditorías en redes wireless con protección WEP/WPA/WPA2, pero también vemos el siguiente mensaje:

++++++ IMPORTANT ++++++
++++++ IMPORTANT ++++++
++++++ IMPORTANT ++++++

This functionality will be available in a future release. It is NOT available currently.

++++++ IMPORTANT ++++++
++++++ IMPORTANT ++++++
++++++ IMPORTANT ++++++

Esta herramienta no está disponible en la descarga de la versión estable de la suite, pero podemos descargarnos la suite completa desde el CVS de la siguiente manera:

$ svn co http://trac.aircrack-ng.org/svn/trunk/ aircrack-ng
$ make
# make install

Repasemos los requisitos necesarios para crear un punto de acceso funcional:

  • Servidor DHCP
  • Servidor DNS

En mi caso, usaré como servidor DHCP “dhcp3-server” y como servidor DNS “bind9″ (en distribuciones basadas en Debian GNU/Linux: apt-get install dhcp3-server bind9).

Hecho esto, vamos a configurar el servidor DHCP (una configuración básica), para ello editamos el archivo “/etc/dhcp3/dhcpd.conf”, de manera que tengamos únicamente las siguientes entradas sin comentar:

ddns-update-style none;
option domain-name-servers 10.0.0.1;
default-lease-time 60;
max-lease-time 72;
authoritative;
log-facility local7;
subnet 10.0.0.0 netmask 255.255.255.0 {
range 10.0.0.33 10.0.0.254;
option routers 10.0.0.1;
option domain-name-servers 10.0.0.1;
}

Una vez hecho esto, vamos a crear un punto de acceso sin encriptación, proporcionando acceso a internet a los clientes, con lo que suponiendo:

  • ath0 —> Conectada a internet
  • ath1 —> Modo monitor

Usaremos “ath1″ para crear el AP con airbase-ng, y “ath0″ para dar conexión a los clientes, con lo que procederemos de la siguiente manera:

Creamos el punto de acceso:

blanquito:/# airbase-ng -P -C 2 -c 6 --essid Wifli_Gratis ath1
19:04:40  Created tap interface at0
19:04:40  Trying to set MTU on at0 to 1500
19:04:40  Trying to set MTU on ath1 to 1800
19:04:40  Access Point with BSSID XX:XX:XX:XX:XX:XX started.

Podemos asegurarnos que se ha creado haciendo:

blanquito:/# iwlist ath0 scan | grep ifli
             ESSID: "Wifli_Gratis"

Como vemos, se ha creado una interface virtual llamada “at0″, que será con la que trabajemos de aquí en adelante, ya que de haber creado un AP con cifrado WEP, esta sería la interface que tendría todos los paquetes descifrados, de manera que la levantamos de la siguiente manera:

blanquito:/# ifconfig at0 10.0.0.1 netmask 255.0.0.0 up

Una vez hecho esto, iniciamos el servidor DHCP indicándole el fichero de configuració y la interface de red con la que debe trabajar:

blanquito:/# /etc/init.d/dhcpd3-server stop
blanquito:/# dhcpd3 -cf /etc/dhcp3/dhcpd.conf at0
Internet Systems Consortium DHCP Server V3.1.1
Copyright 2004-2008 Internet Systems Consortium.
All rights reserved.
For info, please visit http://www.isc.org/sw/dhcp/
Wrote 2 leases to leases file.
Listening on LPF/at0/XX:XX:XX:XX:XX:XX/10.0.0/24
Sending on   LPF/at0/XX:XX:XX:XX:XX:XX/10.0.0/24
Sending on   Socket/fallback/fallback-net

El siguiente paso, es iniciar el servidor DNS para la resolución de nombres:

blanquito:/# /etc/init.d/bind9 restart

Los últimos pasos que vamos a relaizar serán, activar el ip forwarding, y agregar unas reglas a la tabla “nat” de iptables para poder dar acceso a internet a los clientes, por tanto:

blanquito:/# sysctl net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1
blanquito:/# iptables -t nat -F
blanquito:/# iptables -t nat -A PREROUTING -i ath0 -j REDIRECT
blanquito:/# iptables -t nat -A POSTROUTING -o ath0 -j MASQUERADE

Y con esto ya estará todo listo, tendremos un AP y los clientes tendrán acceso a internet, pero como todos estos pasos son un poco engorrosos, lo mejor es hacerse un script que automatice todo el proceso.

Aquí os pongo el mío, y una nota importante, los parámetros extra que se le pasen al script, los pasará a “airbase-ng”.

#!/bin/sh
#
# Script para crear un punto de acceso usando airbase-ng
#
# Argumentos basicos: interface_conexion interface_monitor ip_gw mascara
#
#

RUTA_WLANCONFIG="/usr/local/bin/wlanconfig" #Solo para crear la interface monitor con chipsets atheros
RUTA_AIRBASE="/usr/local/sbin/airbase-ng"
RUTA_BIND9="/etc/init.d/bind9" #script de inicio
RUTA_DHCPD3S="/etc/init.d/dhcp3-server" #script de inicio
RUTA_DHCPD3="/usr/sbin/dhcpd3"
RUTA_CFG_DHCPD3="/etc/dhcp3/dhcpd.conf"
RUTA_SYSCTL="/sbin/sysctl"
RUTA_IPTABLES="/sbin/iptables"

OPC_CREAR="-m"

clear
echo "###############################"
echo "#           SCRIWAP           #"
echo "#=============================#"
echo "#  Chema Garcia (aka sch3m4)  #"
echo "#      [email protected]      #"
echo "#      http://safetybits.net      #"
echo "###############################"
echo ""

if [ "$UID" -ne 0 ]
then
	echo "[!] Has de ser root!"
	exit 0
fi

if [ "$#" -lt 3 ]
then
	echo "Uso: " $0 "      "
	echo ""
	echo "Ej:  " $0 " eth0 wlan0 192.168.1.1 255.255.255.0"
	echo ""
	echo "Opciones:"
	echo "         -m ---> Crear interface monitor (Chipsets Atheros)"
	echo ""
	exit 0
fi

#comienzo de parametros de airbase
num=5

#comprobamos si debemos crear la interface
if [ $# -ge 5 ] && [ "$5" = "$OPC_CREAR" ]
then
	let num=$num+1
	echo "[+] Creando interface $2"
	$RUTA_WLANCONFIG $2 destroy 2>/dev/null
	$RUTA_WLANCONFIG $2 create wlanmode monitor wlandev wifi0 >/dev/null
fi
iface=$2
ip=$3
mascara=$4
var=$#
if [ $num -eq 5 ]
then
	while [ $# -gt 0 ] && [ $num -le $var ];do
		param="$param $5"
		shift
		num=$(($num+1))
	done
else
        while [ $# -gt 0 ] && [ $num -le $var ];do
                param="$param $6"
		shift
                num=$(($num+1))
        done
fi
param="$param $iface"

#Activamos el IP Forwarding
echo "[+] Activando IP Forwarding"
$RUTA_SYSCTL net.ipv4.ip_forward=1 >/dev/null

#Limpiamos la tabla 'nat' de iptables y agregamos nuestras reglas
echo "[+] Limpiando tabla 'nat' de iptables"
$RUTA_IPTABLES -t nat -F

echo "[+] Agregando reglas PREROUTING y POSTROUTING"
$RUTA_IPTABLES -t nat -A PREROUTING -i $iface -j REDIRECT
$RUTA_IPTABLES -t nat -A POSTROUTING -o $iface -j MASQUERADE

echo "[+] Creando punto de acceso"
rmmod tun 2>/dev/null
xterm -e $RUTA_AIRBASE $param &
sleep 3

echo "[+] Levantando interface at0"
ifconfig at0 $ip netmask $mascara up

echo "[+] Reiniciando servidor DHCP"
$RUTA_DHCPD3S stop >/dev/null
$RUTA_DHCPD3 -cf $RUTA_CFG_DHCPD3 at0 2>/dev/null

echo "[+] Reiniciando servidor DNS"
$RUTA_BIND9 restart >/dev/null

echo ""
echo "[+] Finalizado!"
echo ""

Para usar este script en el ejemplo anterior, sería algo así:

./ap.sh ath0 ath1 10.0.0.1 255.0.0.0 -P -C 2 -c 6 --essid Wifli_Gratis

En el foro de seguridadwireless hay un post sobre cómo hacer balanceo de carga entre redes: http://foro.seguridadwireless.net/zona-linux/balanceo-de-carga-en-linux/

Categories: GNU/Linux, Seguridad, Wireless Tags: