Kismet, es un fabuloso sniffer para la red inalambrica, cambia el modo de la placa seleccionada a "Monitor", saltando de canal en canal, capturando todo lo que encuentra, como si eso fuera poco, es un increible framework para plugins y tiene la capacidad de procesar los paquetes que son capturados por otro Kismet remoto (aka: Drone).
En este caso en particular, vamos a dedicar el wifi de un router a trabajar como Drone1 (192.168.1.4), este va a estar conectado mediante cable a la lan del Router/Firewall (192.168.1.1) que nos es mas que otro router haciendo su trabajo basico. Usamos cable para evitar de una forma facil el loop que se generaria entre la transferencia al server y la captura constante. Teoricamente esto se podria tambien evitar aplicando filtros en la configuracion del Kismet drone.
Todo la captura en crudo va a ser recolectada por el Servidor (192.168.1.10), este la va a procesar y loguear en formato pcap para un futuro analisis. Este proceso podemos verlo en vivo y en directo conectandonos desde el mismo Servidor o desde un Cliente remoto (192.168.1.15).
Tenemos que tener en cuenta que el proyecto Kismet migro su diseño no hace mucho y no hay buena compatibilidad entre las versiones, por lo que se recomienda bajar la ultima version para el server/cliente y por otro lado compilar el drone de la ultima version para OpenWRT. Esta es la combinacion que me funciono sin problema tras varias pruebas, ya que el drome del paquete funciona pero por algun motivo no captura.
TODO: En algun momento trataremos el tema de como compilar modulos o programas para el router.
Aca dejo el Drone ya compilado para la version de OpenWRT BackFire 10.03. Este es solo un binario listo para correr en el router.
kismet-2010-07-R1/ipkg-ar71xx/kismet-drone/usr/bin/kismet_drone
La version que se encuentra en los repositorios es la vieja, a quien quiera intantarlo, tenga en cuenta que cambian los parametros en el archivo de configuracion.
# opkg list "kismet-drone"
kismet-drone - 2009-06-R1-2 - An 802.11 layer2 wireless network detector, sniffer, and intrusion detection system.
This package contains the kismet remote sniffing.and monitoring drone.
Aca esta la pagina oficial donde encontramos los sources y paquetes de 32 y 64 bits para el server.
Teniendo en cuenta que el server es Debian 64bits. Usamos el truco de "apt-get -f" para resolver las dependencias que pueda necesitar el paquete. Durante la instalacion se nos va a ofrecer elegir un usuario normal para correr Kismet con privilegios.
wget http://www.kismetwireless.net/code/kismet-2011.03.2.amd64.deb
wget http://www.kismetwireless.net/code/kismet-2011.03.2.plugins-restricted.amd64.deb
dpkg -i kismet-2011.03.2.amd64.deb
apt-get -f install
dpkg -i kismet-2011.03.2.plugins-restricted.amd64.deb
Interface
# vi /etc/config/wireless
config 'wifi-iface'
option 'device' 'radio0'
option 'mode' 'monitor'
# /etc/init.d/network restart
LuCI
Archivo
Creamos el archivo de configuracion en el router
# vi /etc/kismet/kismet_drone.conf
version=newcore.1
servername=drone1
dronelisten=tcp://192.168.1.4:2502
droneallowedhosts=192.168.1.10
dronemaxclients=1
droneringlen=65535
gps=false
ncsource=wlan0
channelvelocity=5
channellist=IEEE80211b:1:3,6:3,11:3,2,7,3,8,4,9,5,10
# channellist=IEEE80211a:36,40,44,48,52,56,60,64,149,153,157,161,165
# channellist=IEEE80211ab:1:3,6:3,11:3,2,7,3,8,4,9,5,10,36,40,44,48,52,56,60,64,149,153,157,161,165
Ejecucion
Desde donde hayamos copiado el archivo binario.
# ./kismet_drone -f /etc/kismet/kismet_drone.conf
ERROR: NOT spawning suid-root IPC capture control, because we are ALREADY running as root. This is not the preferred method of running Kismet because it prevents certain security features from operating.
INFO: Reading from config file /etc/kismet/kismet_drone.conf
INFO: Plugin system disabled by Kismet configuration file or command line
INFO: Setting drone connection buffer to 65535 bytes
INFO: Kismet will attempt to hop channels at 5 channels per second unless overridden by source-specific options
INFO: No specific sources named on the command line, sources will be read from kismet.conf
INFO: Matched source type 'ath9k' for auto-type source 'wlan0'
INFO: Using hardware channel list 1,2,3,4,5,6,7,8,9,10,11, 11 channels on source wlan0
INFO: Source 'wlan0' will attempt to create and use a monitor-only VAP instead of reconfiguring the main interface
INFO: Created source wlan0 with UUID 449a006a-7e4c-11e0-8bf5-156103c30632
INFO: Will attempt to reopen on source 'wlan0' if there are errors
INFO: Created Kismet drone TCP server on port 2502
INFO: Starting GPS components...
INFO: GPS support disabled in kismet.conf
INFO: Kismet drone starting to gather packets
ERROR: Source 'wlan0' doesn't have mac80211 support, disabling VAP creation of default monitor mode VAP
INFO: Interface 'wlan0' is already marked as being in monitor mode, leaving it as it is.
INFO: Started source 'wlan0'
Archivo
Como este archivo existe y contiene otras muchas opciones, solo cambiaremos aquellas que nos interesan. Es importante filtrar si tenemos algun AP nuestro para evitar cantidad de paquetes que consumen RAM. Otra cosa que encontre, es que usando los plugins cuando queremos capturar todo, consume muchisima ram, por lo que me vi obligado a desactivarlos.
vi /usr/etc/kismet.conf
servername=Server
allowplugins=false
ncsource=drone:host=192.168.1.4,port=2502
listen=tcp://192.168.1.10:2501
allowedhosts=192.168.1.0/24
gps=false
filter_tracker=BSSID(!54:E6:FC:BF:46:58)
writeinterval=60
Ejecucion
Hay varias opciones que no estamos teniendo en cuenta, como por ejemplo "--daemonize" para que quede corriendo como demonio. Una vez ejecutado, mostrara una salida similar a la de abajo, donde nos interesa saber que esta viendo bien al drome y que el server esta esperando conexiones. Si el drome esta operando bien, ya deberiamos ver mensajes de informacion mostrandonos las redes detectadas.
$ kismet_server -f /usr/etc/kismet.conf
INFO: Not running as root - will try to launch root control binary (/usr/bin/kismet_capture) to control cards.
INFO: Started kismet_capture control binary successfully, pid 3964
INFO: Reading from config file /usr/etc/kismet.conf
...
INFO: No specific sources named on the command line, sources will be read from kismet.conf
INFO: Matched source type 'drone' for auto-type source 'drone'
INFO: Using default channel list 'n/a' on source 'drone'
INFO: Created source drone with UUID b3c6c0d2-7e55-11e0-b433-30040c171802
INFO: Disabling channel hopping on source 'drone' because it is not capable of setting the channel.
INFO: Will attempt to reopen on source 'drone' if there are errors
INFO: Created TCP listener on port 2501
...
INFO: GPS support disabled in kismet.conf
INFO: Started source 'drone'
INFO: kismet_capture pid 3964 synced with Kismet server, starting service loop
INFO: Kismet drone client connected to remote server "drone1" using protocol version 1
...
INFO: Detected new ad-hoc network...
encryption no, channel 0, 0.00 mbit
INFO: Detected new data network...
encryption yes, channel 0, 0.00 mbit
INFO: Detected new data network...
...
Archivo
Al igual que con el server, solo editamos las opciones que nos interesan.
$ vi ~/.kismet/kismet_ui.conf
default_host=192.168.1.10
default_port=2501
Ejecucion
$ kismet_client