martes, 25 de noviembre de 2008

VI: convertir archivos a formato utf-8

Para cambiar dentro de Vi la codificación a utf-8 ejecutamos lo siguiente:
:set fileencoding=utf-8
Podemos abreviarlo como
:set fenc=utf-8
Si queremos ejecutarlo desde línea de comandos o agregarlo a un batch:
vi archivo '+set fenc=utf-8' '+x'
El +set fenc, cambia la codificación y con el +x sale de vi y guarda los cambios si es necesario .El vi detecta automáticamente la codificación, si el archivo ya tuviese codificación utf-8 no salvará nada con lo que nos ahorramos "cálculo".

Por ejemplo podemos combinarlo con un find para cambiar todos los archivos de un tipo:
find -iname '*.html' -exec vi {} '+set fenc=utf-8' '+x' \;
En este caso cambiariamos la codificación de todos los archivos html a utf-8. Que nos podría hacer falta para cargar archivos utf-8 con el sqlloader(SQLLOADER: unicode (UTF8))

Para ver la codificación actual
:set fenc?

viernes, 7 de noviembre de 2008

Kismet: detectando redes wifi

Kismet según su autor ( http://www.kismetwireless.net/) es un detector de redes, un sniffer y un detección de intrusiones, y que ademas funciona con cualquier tarjeta wireless que soporte raw monitoring (rfmon). Nosotros vamos a explotar su faceta de detector para localizar redes vecinas cercanas, averiguar su canal y su encriptación. Su funcionalidad es similar a netstumbler en windows en este aspecto. Para linux barajamos dos alternativas: kismet y swscanner.

La siguente información es un pequeño Manual / tutorial que explica cómo manejar y utilizar a grandes rasgos el programa. Para completar la información es conveniente ir a la web del autor y usar la ayuda tanto en linea de comandos (kismet --help) como dentro del programa (tecla h).

¿Por qué kismet frente a Swscanner?
En primer lugar porque swscanner ha sido extremadamente complicado de poner en marcha y al final no funciona:
1) La pagina http://www.swscanner.org lleva caída varios días por lo que tuve que descargar los fuentes de otras páginas web.
2) Requería bastante paquetes extra, algunos no estaban en los repositorios habituales (ej:shapelib-devel)
3) La versión descargada daba errores de compilación, así que tuve que editar algunos archivos .h para corregir los errores.
4) Tras poder compilarlo satisfactoriamente, el programa hacia crash cada vez que detectaba una nueva AP en un escaneo, por lo que no era posible usarlo para detectar la red.
Dado que el objetivo es ver que redes tenemos disponibles y su encriptación usamos la alternativa, Kismet, que a posteriori se ha mostrado muy eficaz en su tarea.



Instalación de Kismet:

Kismet se puede instalar fácilmente desde el repositorio de opensuse "Repositorio principal (OSS)" la URI es http://download.opensuse.org/distribution/11.0/repo/oss/. Si no tenemos el repositorio debemos añadirlo usando Yast o a mano con zypper (como añadir un repositorio). La instalación de la versión es tan sencilla como:
zypper in kismet

La versión que hay ahora mismo(2007_10_r1-60.1) es bastante anterior a la versión que aparece en la página web del autor (kismet-2008-05-R1), la versión del 2008 corrige bugs referentes a: wrt54, Darwin, gps e imagemagik (ver changelog en la pagina del autor).

Si optamos por bajar la ultima versión debemos ir a la página de kismet y a la sección de descarga (concretamente aqui) y descargar la "Stable Source Release".Y tras descomprimirlo en algún directorio ejecutamos
./configure
./make
./make dep
./make install

En el caso del configure estaremos pendientes de si existe algún problema por si requiere alguna librería (ej: libpcap). En caso de que nos falte buscaremos con zypper se nombre y la instalaremos con zypper in nombre, o bien usaremos Yast.
Hay que tener en cuenta que si compilamos a mano kismet , los archivos de configuración (ej: /usr/local/etc/kismet.conf) y los ejecutables estarán en directorios diferentes a los de la instalación con Yast/zypper ej: (/etc/kismet.conf)

Configuración de Kismet:

Antes de poder ejecutarlo tenemos que configurar kismet, editando el archivo /etc/kismet.conf (si usamos zypper/yast) o /usr/local/etc/kismet.conf (si hemos compilado el source). Editamos las siguientes opciones básicas para empezar a funcionar:
1) Editar suiduser. Editamos suiduser y ponemos un usuario de nuestro sistema que no sea el root. ej:
suiduser=dieguz2

2) Editar fuente de captura (la tarjeta desde donde se va a capturar), el formato es source=type,interface,name . El name podemos usar el que queramos.El tipo es el módulo del kernel que controla nuestra tarjeta de red. para ver los tipos disponibles debemos consultar la sección 12 de la documentacion ( http://www.kismetwireless.net/documentation.shtml ).. Para ver las interfaces que tenemos disponibles ejecutamos iwconfig. En el caso de la intel 3945ABG está controlada por el módulo iwl3945 y la interfaz a la que está asociada es la wlan0 así que pondremos:
source=iwl3945,wlan0,intel3945
Nota: los driver por defecto de las distribuciones para la intel 3945ABG sólo permiten detectar "beacon", y en kismet no veremos paquetes de datos. Para solucionarlo debemos instalar estos drivers (ver post).

3) Abrir puerto TCP 2501 en el cortafuegos, para permitir conexiones desde 127.0.0.1 a 127.0.0.1:2501 o bien cambiar el puerto por defecto modificando el parámetro tcpport en el archivo kismet.conf para poner un puerto que tengamos abierto (ej: tcpport=2501). Opcionalmente podríamos deshabilitar temporalmente el firewall (aunque lo desaconsejo). Para las gestiones de abrir puertos: 1) Yast/Cortafuegos 2)"Reglas Personalizadas" 3)"añadir" 4) Red Origen: 127.0.01 , Protocolo: TCP, Puerto Destino:2501

Opcionales:

4) El parámetro networkmanagersleep, permite que kismet desactive el NM (NetworkManager) antes de su ejecución, y cuando finaliza vuelve a lanzarlo. En el caso de mi tarjeta falla, ya que no consigue ponerla en modo "Managed" y el NM no funciona. Así que fijo el parámetro networkmanagersleep=false, para que no intente ni quitarlo ni lanzarlo, lo hago yo manualmente.


5) Existen otros muchos aspectos que se pueden configurar, pero que no son imprescindibles para empezar a ejecutar kismet.Todas ellas vienen explicadas en el archivo kismet.conf y en kismet_ui.conf (para el cliente) Algunas posibilidades son: configurar más de una fuente de capturo(parámetro source), fijar un directorio para guardar los log ...

Ejecución normal de Kismet
(sin logs)

1) Desactivar NetworkManager : el icono de la barra de tareas, click derecho y luego "activar red" para que quede desmarcado.

2) Ejecutar como root: kismet -n (en el caso de que queramos almacenar logs sin la opción -n)

3) Pulsamos 's' y luego 'p' para usar una ordenación de las redes por paquetes y poder navegar por las redes. Pulsamos 'i' para ver información detallada de la red. Pulsamos 'c' para ver información de los clientes. Pulsamos 'x' para cerrar las ventanas emergentes (información de la red, clientes ...)

4) Para salir de kismet pulsaremos : "shift q" o lo que es lo mismo: "tecla de mayuscula q" o equivalentemente Q

5) Si cuando salimos de kismet aparece el mensaje de error: "WARNING: Error disabling monitor mode" significa que nuestra tarjeta no ha podido ser devuelta a su estado normal. Ejecutamos: iwconfig wlan0 mode Managed

5) Activamos NetworkManager: el icono de la barra de tareas, click derecho y luego "activar red" para que quede marcado.

Interfaz Gráfica

La pantalla gráfica se encuentra dividida en 3 partes bien diferenciadas:
1) Info: a la derecha. aparece un resumen del número las redes encontradas (Ntwrks), paquetes (Pckets), canal que se esta escaneando(Ch), y el tiempo transcurrido de ejecucion
2)Status: En la parte inferior muestra mensajes y eventos del sistema, como que se ha encontrado un nuevo AP (access point)
3)Network list (modo de ordenación): Esta es la ventana importante, muestra un listado de las redes encontradas. Tiene una seríe de indicadores, los mas interesantes:
- T : Tipo de red. Los tipos de red más comunes serán
>A : Access point, esta es la red normal en la que hay un router y un conjunto de ordenadores conectados
>H : red Ad-hoc, red punto a punto, por ejemplo entre dos ordenadores conectados entre sí directamente con wifi y sin intermediarios
-W : muestra el tipo de encriptación de esa red, tiene tres posibles valores:
>N : sin encriptación, la red no necesita contraseña para ser usada. Es una red libre
>W: encriptación WEP estándar . Este tipo de encriptación es la que podemos romper con aircrack en 10m en buenas condiciones
>O: otro tipo de encriptación, por ejemplo WPA y WPA2. Esta por ahora no podremos tocarla t
-CH : canal de la red. normalmente del 1 al 13
-Packts : paquetes detectados


Por defecto la lista de redes se ordena de modo Automático, para poder seleccionar alguna red y ver información detallada debemos pulsar 's' para que se despliegue el menú de ordenación y seleccionar alguna de las ordenaciones, por ejemplo pulsando la 'p' o 'P' se ordena por el número de paquetes. Cuando se haya fijado alguna ordenación que no sea la automática, podemos navegar por las redes usando las teclas del cursor.

Podemos ver información detallada de una red pulsando 'i'. Los datos mas importantes:
SSID: nombre de la red
BSSID: dirección ethernet del AP (punto de acceso), normalmente el router
Channel: canal de la red
Encrypt: tipo de encriptación que se usa (ej: WEP o WPA TKIP PSK)
Packets: número de paquetes detectados y el tipo de cada uno.
Data: Cantidad de datos transmitidos (en relación directa con el número de paquetes de tipo data captados)

Podemos ver información sobre los clientes conectados a una red pulsando 'c'. Esta ventana tine dos tipos:
- T: tipo de cliente
> F: estación base
> S: cliente
En todos los casos podemos ver la Mac.


Algunas redes están protegidas por Mac filter, es decir que sólo dejan conectarse a tarjetas de red con una determinada MAC. Para poder acceder a estas redes tendremos que cambiar nuestra MAC por alguna de alguno de los clientes que se conectan a la red. En esta sección podremos ver que MAC están autorizadas a conectarse.

Atajos de teclado
Las letras en mayúsculas implica que se debe pulsar shift (es decir tecla de mayúsculas)
h : ayuda
Q : salir del programa
x : cerrar ventanas emergentes ej:ventana de clientes, de ordenación, potencia de señal ....
s : ordernar. Muestra el menú de ordenación
i : muestra información detallada de la red seleccionada
r : gráfico con el rate de paquetes
a : estadísticas
c : muestra ventana de clientes



Archivos de logs
sobre paquetes:
dump: Almacena los paquetes en bruto captados
weak: Paquetes débiles detectados WEP.

Sobre redes:
network
: Archivo de texto que nos muestra la información de todas las redes detectadas
csv: Identico al network pero se guarda en formato CSV (valores separados por comas), que podemos abrir con openoffice,excel...
xml: información de las redes en formato xml

Otros:
cisco: Recoge información sobre los equipos cisco detectados, su formato es cdp
gps: Si esta activado el gps almacena las coordenadas.

Podemos configurar los log que queremos desde la linea de comandos. Usualmente usando kismet como detector de redes nos bastará la información de las redes, por ejemplo la csv es muy comoda de manejar. Para que sólo guarde los logs de csv usaremos el comando

kismet -l csv
o
kismet -l csv,network

este último para que nos guarde los logs en formato csv y en formato txt (network)

lunes, 3 de noviembre de 2008

Xterm: recuperar terminal ilegible

A veces cuando hacemos por error un cat o un more de un archivo ejecutable el terminal se nos llena de letras ilegibles. No es posible leer el terminal y cualquier cosa que escribamos no se entiende (Ver imagen):
Para recuperar de nuevo el texto normal usaremos el siguiente comando que teclearemos en el terminal (lo que escribamos aparecerá ilegible):
reset

Tras ejecutarlo el terminal debería volver a su estado normal

domingo, 2 de noviembre de 2008

NetworkManager: Forzar el reinicio de las interfaces de red

Hay diversas estrategias para intentar recuperar nuestras interfaces de red (reiniciar interfaz de red) cuando se encuentrán inaccesibles. Podemos necesitar forzar el "down" de una interfaz de red cuando el NetworkManager no es capaz de arrancar porque otro proceso tiene bloqueado la tarjeta de red o simplemente la tarjeta está en un estado inconsistente o bloqueado. La idea es conseguir algo similar a lo que hace el comando ifdown (shutdown interface) / ifup.


a) En el caso de disponer de una tarjeta wifi y de un interruptor (normalmente en los portátiles), podemos realizar un apagado físico del dispositivo usando dicho interruptor y volver a encenderla.

b) Podemos probar directamente en el icono del NetworkManager , haciendo click con el botón derecho y pulsando sobre a "Activar red" para activar/desactivar toda nuestras redes. O en el caso de la wifi "activar inalámbrico"

c) Combinar las dos opciones anteriores, apagando tanto la tarjeta a nivel físico (interruptor) como el NetworkManager

d) Podemos "matar" y reiniciar el NetworkManager usando el comando:
(pidof NetworkManager | xargs kill -9 ) || NetworkManager
o simplemente
(pkill NetworkManager) || NetworkManager

donde pidof nos devuelve el pid (identificador del proceso) y en el caso de pkill mata un proceso por su nombre, en lugar de por el pid como hace el kill normal.

e) La última opción, pero no por ello la peor, consiste en usar el script de arranque /etc/init.d/network . Las opciones son las habituales:

/etc/init.d/network stop : realiza un "shut down" del NetworkManager,de todas las interfaces y del servicio network
/etc/init.d/network start : aranca el NetworkManager, las tarjetas de red y el servicio
/etc/init.d/network reload : realiza sucesivamente un stop y luego un start, es equivalente a reiniciar el servicio
/etc/init.d/network force-reload : fuerza un reload

Ejemplo:
Si estamos conectado a una red inalámbrica e intentamos poner la tarjeta inalámbrica en modo "Monitor":
iwconfig wlan0 mode Monitor

nos saldrá el mensaje de error:
Error for wireless request " Set Mode" (8B06):
SET failed on device wlan0 ; Device or resource busy.

Esto se debe a que el NetworkManager tiene ocupada la tarjeta inalámbrica. Asi que seguimos la estrategia (b):
click derecho en el NetworkManager y pulsamos "Activar inalámbrico" para desactivarla. Cuando esté desactivada podremos poner la tarjeta en modo monitor.

El ejemplo contrario. Si tras usar algún programa como kismet, no podemos volver a modo managed (iwconfig wlan0 mode Managed) o no funciona el NetworkManager usaremos alguna de las estrategias explicadas anteriormente. Por ejemplo como root ejecutaremos:

/etc/init.d/network reload

Y todo debería volver a la normalidad.