domingo, 20 de junio de 2010

Autenticación Mysql con FreeRadius en GNU/Linux Centos 5.4

De vuelta por acá y esta vez le debo al Fabricio quién me animó nuevamente a publicar cosas y experiencias en software libre que hemos desarrollado y que pueden servir como aporte a quienes intenten realizar estas implementaciones probablemente como deberes o quien sabe en la empresa donde presten sus servicios.

La tarea de hoy tiene por objeto la instalación y configuración de una infraestructura que permita la autenticación de usuarios de una wlan o red wireless hacia un servidor de FreeRadius mismo que debe conectarse a una base de datos en MySql y extraer de ahí la información para autenticar, si la autenticación es correcta entonces el usuario de la wlan podrá hacer uso del internet.


La idea aquí es que el mismo server que vemos en el gráfico con FreeRadius va actuar como server de base de datos con Mysql, es decir ese server va ha brindar ambos servicios y entonces debemos:

  • Instalar y Configurar FreeRadius
  • Instalar y Configurar MySql
  • Configurar la Base de Datos e ingresar información a la misma
  • Configurar el Access Point

Asumimos que ya tenemos instalado el sistema operativo en este caso GNU/Linux 5.4 actualizado y todo lo demás, entonces para la instalación de FreeRadius lo que haremos es desde una consola lo siguiente:

Instalando y Configurando FreeRadius

# yum -y install freeradius

FreeRadius tiene sus archivos de configuración en la ruta: /etc/raddb, sin embargo con los que vamos ha trabajar son los siguientes:

→ Users .- En este archivo se puede especificar los usuarios autorizados para conectarse a la red, también se puede añadir mas usuarios, cabe mencionar que aquí se pueden configurar varios usuarios vía texto y serán usados cuando no exista autenticación con mysql por ejemplo. El cambio que realizaremos en este archivo es habilitar el usuario de prueba.

steve Auth-Type := Local, User-Password == "testing"

→ clientes.conf .- aquí especificamos los dispositivos que realizarán sus consultas al servidor Radius mediante una pequeña descripción que contiene: ip, secreto y nombre corto.

client 127.0.0.1 {
secret = testing123
shortname = localhost
nastype = other
# localhost isn't usually a NAS...
}

client 192.168.1.5 {
secret = elsecreto
shortname = router1
}

Donde la dirección 192.168.1.5 es el cliente quien puede hacer las consultas al servidor de radius, OJO: el cliente será el access point el es quien tendrá esa dirección ip.

→ eap.conf .- este archivo contiene las diferentes directivas de eap configuradas
posteriormente en radius.conf.

eap {
default_eap_type = tls
timer_expire = 60
ignore_unknown_eap_types = no
cisco_accounting_username_bug = no
md5 {
}
leap {
}
gtc {
auth_type = PAP
}
tls {
private_key_password = whatever
private_key_file = ${raddbdir}/certs/cert-srv.pem
certificate_file = ${raddbdir}/certs/cert-srv.pem
CA_file = ${raddbdir}/certs/demoCA/cacert.pem
dh_file = ${raddbdir}/certs/dh
random_file = ${raddbdir}/certs/random
fragment_size = 1024
include_length = yes
}

→ sql.conf .- en este archivo vamos a realizar las diferentes configuraciones para la respectiva comunicación entre la base de datos de mysql y el servidor de freeRadius, la parte mas importante del archivo para sql es la siguiente:

sql {
driver = "rlm_sql_mysql"
server = "localhost"
login = "root"
password = "ibmlnx"
# Database table configuration
radius_db = "radius"
acct_table1 = "radacct"
acct_table2 = "radacct"
postauth_table = "radpostauth"
authcheck_table = "radcheck"
authreply_table = "radreply"

Como podemos fijarnos hasta este momento, este es el archivo mas importante ya que es aquí donde especificamos los parámetros necesarios para indicarle al freeradius con cual base de datos de mysql debe autenticar y esos parámetros son:
server = "localhost" ( si tuviéramos por separado la base de datos de freeradius en esta directiva deberíamos especificar la ip o el nombre de la máquina o server de base de datos )
login = "root" (hacemos referencia al usuario que estamos usando para la conexión con la base de datos)
password = "ibmlnx" ( es la clave del usuario root de la base de datos, no tiene nada que ver con el root del sistema operativo)
radius_db = "radius" ( es la base de datos donde residiran los usuarios quienes deseen autenticarse)

Instalando y Configurando MySql

# yum -y install mysql mysql-server freeradius-mysql

Una vez instalada la base de datos lo que tenemos que hacer es ingresar a ella y luego crear las bases de datos e ingresar información para los usuarios que vamos a autenticar.

Creando la base de datos:

# mysql -u root -p
mysql> create database radius;
mysql> exit;


Creando las Tablas dentro de la base de datos “Radius”, en esta parte cabe mencionar que dentro de la instalación de freeRadius este viene con un script
de creación de las tablas para mysql u oracle, de acuerdo a nuestro caso vamos a usar el script para la creación de las tablas en mysql.

# cd /usr/share/doc/freeradius-1.3.3/examples/
# mysql -uroot -proot radius <> use radius
mysql-> insert into radgroupcheck values ('', 'admin', 'Auth-Type', ':=', 'Local');
mysql-> insert into usergroup values ('joseluis', 'admin','');
mysql-> insert into radcheck values ('', 'joseluis', 'Password', '==', 'abc123');
mysql-> insert into usergroup values ('jorge', 'admin','');
mysql-> insert into radcheck values ('', 'jorge', 'Password', '==', '123abc');
mysql-> exit;

Comprobando lo hecho:



Configurar el Access Point

Ahora lo que tenemos que hacer es configurar nuestro access point, indicándole que la autenticación debe ser 802.1x es decir que apunte a la dirección ip de nuestro servidor con freeradius con mysql para que sepa que de ahí debe tomar los usuarios que tienen que ser autenticados, en este caso pondré un par de imágenes donde detallo la configuración.


Configurando la dirección ip del Access Point




Activando la configuración 802.1x e indicando la dirección ip del servidor FreeRadius.



Como podemos ver, le estamos indicando que la dirección ip del servidor freeradius es 192.168.11.100

Configurando el SSID y el Tipo de Encryptación.



Configurando el SSID



En resumen:

Todo cliente wlan o wireless que desee navegar al internet primero deberá ser autenticado, para ello el deberá configurar sus credenciales como una red WPA - LEAP y con SSID = RadiusTest (como vemos en el gráfico), el Access Point que tiene la ip 192.168.1.5 este realizará solicitará la autenticación al servidor FreeRadius con dirección 192.168.11.100, este a su vez hará la consulta sql a la base de tados que está en Mysql y si el usuario existe lo autenticará y en lo posterior podrá salir al internet.

Bueno espero que les sirva este manual, si tienen alguna consulta no duden en comentar.

Saludos,




lunes, 2 de noviembre de 2009

Como Romper WEP en linux debian lenny

Hola, este es mi primer post y decidí hacerlo porque quiero compartir con ustedes un deber que me enviaron en la universidad donde estudio,el tema que debía hacer es: "romper wep", para quienes no sepan wep (Wired Equivalent Privacy) es un protocolo de seguridad en una red wireless, a través de este permite cifrar la información que se transmite en la misma, este se basa en un algoritmo de cifrado RC4 y actualmente ya está roto, es decir para quienes deseen configurar una red wireless con confidencialidad WEP en sus hogares pues ya no es recomendable, ahora hay muchas técnicas que permiten obtener la clave de cifrado y tranquilamente ingresar a una red sin pedir permiso, bueno esto NO puede suceder si tomamos alguna otra técnica de seguridad como por ejemplo hacer un filtrado por MAC address en los AP (access points) que vayamos a configurar.
Para empezar ahora hay muchos programas, incluso distribuciones que permiten romper wep, conozco el caso de wifislax , pueden descargar un livecd, esta es una distribución basada en Slackware con un entorno kde donde pueden ejecutar los comandos que pronto comentaré.

Bueno basta de palabrerias, se supone que sabemos lo que vamos hacer, entonces a continuación detallo los pasos que debemos tomar en cuenta para romper wep.

- Asumiremos que ya tenemos configurado un Access Point con encriptación WEP, así como también hosts autenticados al AP navegando sin problemas.
- Desde el punto de vista de la máquina que va actuar como intrusa lo primero que debemos ver es si la tarjeta wireless es compatible con aircrack-ng que es el programa que vamos a usar para la demostración, aqui podemos revisar si es compatible o no.

En mi caso utilizo una interfaz Centrino b/g la misma que usa el driver ipw2200 en linux es decir soy compatible con el programa.

Pues bien ahora que sabemos que tenemos instalada nuestra interface wireless y que somos compatibles con el programa que vamos a usar entonces instalemos el programa.

# apt-get install aircrack-ng

Una vez instalado el programa, ejecutamos este comando:

# airmon-ng (este comando detecta la interface inalambrica que tenemos, así como el chipset y los drivers) esta es la salida de ese comando:

~# airmon-ng


Interface Chipset Driver

eth1 Centrino b/g ipw2200


- Ahora es necesario desactivar el modo monitor de la interface inalámbrica

# airmon-ng stop eth1

- Apagamos la interface

# ifdown eth1

- Cambiamos la mac-address de la interface, con el afán de no mostrar quienes somos.

# macchanger --mac 00:11:22:33:44:55 eth1

- Habilitamos el modo monitor nuevamente.

# airmon-ng start eth1

- Ahora si snifiemos la red con el siguiente comando.

# airodum-ng eth1

La salida de este comado mostrará algo como esto.., lo cual significa que está sniffiando todas las redes que recepta mi tarjeta inalámbrica, para nuestro ejemplo he marcado solamente quien tiene el protocolo wep, pues ese va ha ser nuestra demostración.


Como podemos ver en la imagen, el SSID que tiene configurado el AP con wep es "Gigo", trabaja a 54M, está trabajando en el canal 1, la mac-address del AP es: 00:12:0E:99:D7:0A, este dato en lo posterior lo llamaremos como bssid, eso entre los datos mas importantes de la captura.

Nuestro siguiente paso es ahora si capturar datos específicamente de la conexión wep, ya no del resto solamente wep y para ello ejecutamos el siguiente comando.

# airodum-ng -c 1 -w capturawep --bssid 00:12:0E:99:D7:0A eth1

Lo que hacemos con este comando, es sniffear la red exclusivamente wep, la opción -c significa al canal donde nos vamos a conectar, recuerden el canal lo tomamos del comando anterior ingresado pues este nos mostraba el canal en el que está trabajando el AP. Con la opción -w le indicamos que escriba la captura a un archivo, en nuestro caso yo para este ejemplo he puesto que se llame capturawep, este al final de la captura generará 2 archivos uno que se llame capturawep.cap y otro capturawep.txt, --bssid aquí especificamos la mac-address del AP, por último la interface eth1 es nuestra interface inalámbrica.
En este momento debemos esperar al menos unos 5 a 10 minutos, esto depende de cuanta información estén transmitiendo los hosts que formen parte de esta red.
Después de esperar el tiempo sugerido entonces le damos un Crtl-C para parar la captura y vemos efectivamente que se han creado los archivos antes mencionados.

Por último ejecutamos el siguiente comando y con esto determinaremos la clave que están usando para ingresar al AP que tiene un cifrado wep.

# aircrack-ng -b 00:12:0E:99:D7:0A capturawep.cap

La opción -b de este comando especifica la mac-address del AP comprometido y por último capturawep.cap es el archivo que se creó con el comando anterior.

Por obvias razones no pongo que clave descubrí pero espero que alguien de ustedes ponga en práctica este pequeño tuto y compruebe que realmente funciona vale la pena recalcar que este manual solo tiene fines educativos no lo usen para hacer daño.

Saludos,