Recuperar datos en EXT3

Diciembre 28th, 2007

Hace unos días tuve la desgracia de presenciar como unos datos de importante valor eran sobreescritos por una mala copia de seguridad, perdiéndose para siempre. Esto me llevó a investigar sobre como recuperar la información y lo cierto es que en un sistema de archivos EXT3 esto es una tarea bastante complicada.

Para los sistemas EXT2 existían varias utilidades capaces de recuperar la información (debugfs era una bastante buena), sin embargo, la forma de trabajar de los sitemas EXT3 (rellena con ceros el puntero hacia el archivo borrado) hace que este tipo de utilidades sean inservibles.

Una vez borrado un archivo la información sigue estando ahí, el problema es que no hay forma de localizarla, no podemos saber donde está, ni como está repartida entre los bloques. Simplemente sabemos que sigue estando en alguna(s) parte(s) del disco duro. Esto es un problema mucho mayor de lo que pudiera parecer ya que no sabemos cuando empieza un fichero y acaba otro, o mucho peor, no podemos saber si el fichero está en un grupo de bloques consecutivos o no. Recuperar archivos binarios en estas condiciones es impensable, sin embargo, recuperar archivos de texto es algo un poco más factible. Quizás no podamos recuperar el archivo como tal, pero sí que podemos leer su contenido y ya que los archivos de texto no suelen ser demasiado grandes, es posible que todo esté contenido en el mismo bloque (es decir, no lo encontraríamos disperso por el disco duro).

La estrategia para conseguir esto es volcar todo el texto de la partición afectada en un fichero y luego examinarlo en busca de las partes que nos interesen. Esto lo podemos conseguir con strings:

# strings /dev/sda7 > /ruta/hacia/archivo

Es recomendable almacenar el volcado en una partición distinta a la que queramos recuperar, ya que si no corremos el riesgo de sobreescribir los datos que estamos intentando salvar antes de haberlos leído.

Espero que esto os sea útil, pero lo mejor es tener las copias de seguridad siempre actualizadas.

Categorías: interesante, linux | 4 comentarios

HOWTO: Cómo romper claves WEP (a.k.a. Cómo tener internet gratis)

Diciembre 15th, 2007

Parece que todo el mundo sabe que las claves WEP son débiles y que pueden romperse con relativa facilidad, pero lo cierto es que pocos conocen por qué esto es posible y cómo hacerlo.

En mi afán por mostrar los senderos oscuros de las redes y sobre todo porque muchos me lo han pedido, aquí está el tutorial sobre cómo romper claves WEP para uso y disfrute del personal.

Antes que nada un poco de teoría, el protocolo de seguridad WEP trata de incorporar a las redes inalámbricas una seguridad equivalente a la que podemos encontrar en las redes cableadas, de ahí su nombre, Wired Equivalent Privacy (Privacidad Equivalente al Cable). Este protocolo permite cifrar las conexiones entre los clientes y el punto de acceso (AP), protegiendo así la confidencialidad e integridad de los datos.

El protocolo WEP requiere que las estaciones y el AP compartan una clave secreta antes de comenzar la comunicación, éste es uno de sus grandes puntos flacos, hay que comunicar por otra vía la clave a los distintos clientes lo que genera una serie de problemas importantes, entre ellos cabe destacar lo costoso de cambiar la clave, hay que informar a todos los clientes de la nueva lo que, según el número de los mismos, puede que no sea una tarea trivial. Esto lleva a que las claves WEP se cambien con poca frecuencia.

Cuando una máquina quiere conectar con un punto de acceso que use WEP, ésta realiza una petición inicial de asociación al AP, el cual a su vez responde con un texto aleatorio (desafío). El cliente deberá cifrar dicho texto con su clave compartida y enviar la respuesta al AP. Éste descifrará el texto con su propia clave y la compara con la enviada, si son iguales, se le permite el acceso al cliente.

El algoritmo usado para cifrar la comunicación WEP es conocido como RC4. Ya sabemos que una parte de la clave usada en el algoritmo es la clave compartida, pero para impedir que un atacante puede recolectar datos suficientes para romper la clave, una parte de la misma es dinámica y cambia en cada trama. A esta parte se le llama IV (vector de inicialización) y según el estándar debe ser distinta para cada paquete enviado. Por lo tanto, la clave final usada para cifrar/descifrar es la concatenación del IV con la clave compartida. El IV siempre tiene un tamaño de 24bits, ese es el motivo de por qué la clave secreta deberá tener un tamaño de 40bits (en claves de 64bits) o de 104 (en claves de 128bits), aclaro esto porque más de una vez me he enfrentado a la discusión de por qué si la clave es de 128bits sólo se pueden escribir 13 caracteres (13*8=104) y no 16 (16*8=128) como sería de esperar.

El IV es sólo conocido por uno de los extremos, así que es necesario enviarlo sin cifrar al otro. Es decir, junto con los datos cifrado se envía el IV, así el otro extremo puede reconstruir la clave secreta a partir de la que iniciar el proceso de descifrado. Existen varias debilidades asociadas al IV que correctamente explotadas puedan llevar al compromiso de la clave WEP. No quiero seguirme entreteniendo en esto, pero para acabar diré que si se consiguen capturar los suficientes paquetes WEP es posible llevar a cabo un ataque que permitirá recuperar la clave compartida, para los que quieran ampliar información sobre el tema recomiendo el artículo Protocolo de seguridad Wep y si estáis interesado en el criptoanálisis del ataque, nada mejor que el documento liberado por los autores del descubrimiento: Weaknesses in the Key Scheduling Algorithm of RC4

Modo Monitor

Y ahora al tajo, vamos a reventar unas cuantas claves WEP. Para hacer esto es condición indispensable que vuestra tarjeta de red sea capaz de entrar en modo Monitor. Algunas tarjetas son incapaces de entrar en este modo y en otras es posible que no tengáis los controladores adecuados. En cualquier caso, lo primero es saber si la tarjeta puede entrar en modo monitor o no, para averiguarlo escribimos algo parecido a lo siguiente (mi tarjeta de red está en la interfaz eth2, cambiadlo según corresponda)

# iwconfig eth2 mode monitor

# iwconfig eth2

eth2 unassociated ESSID:”" Nickname:”none”
Mode:Monitor Frequency=2.437 GHz Access Point: 72:00:00:00:00:27
Bit Rate:0 kb/s Tx-Power:16 dBm
Retry limit:15 RTS thr:off Fragment thr:off
Encryption key:off
Power Management:off
Link Quality:0 Signal level:0 Noise level:0
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:9273 Missed beacon:0

Si podéis leer Mode:Monitor en la respuesta al segundo comando, vuestros vecinos pueden ir empezando a temblar.

Método 1: AirSnort

A partir de este punto contamos con varias herramientas que nos permiten llevar a cabo el ataque hacia claves WEP. Si no os queréis complicar la vida, lo más fácil es usar AirSnort, una utilidad que cuenta con una bonita GUI y que nos basta con darle a comenzar para que ella solita haga todo el trabajo. Eso sí, hay que tener paciencia pues para romper una clave hacen falta capturar entre 4,000,000 y 6,000,000 paquetes de datos.

Captura AirSnort

Método 2: aircrack-ng

Para los que queráis esperar un poco menos y nos os importe prescindir de las interfaces gráficas, tenéis el kit aircrack-ng. Éste añade varias mejoras al ataque clásico (FMS) y permite recuperar la clave capturando entre 500,000 y 2,000,000 paquetes de datos. Además incluye una maravillosa utilidad llamada aireplay-ng que permite inyectar tráfico en la red wifi con el objetivo de que se generan más paquetes de datos y así obtener antes la clave, esto es ideal cuando estamos ante una red con poco tráfico.

Veamos como usar el aircrack-ng:

1. Lo primero es capturar todo el tráfico de la red:

# airodump-ng -w datos eth2

airdodump-ng cuenta con muchas opciones entre las que cabe destacar –channel, que nos permite capturar sólo los datos que se emitan por un canal determinado. Recomiendo usarla siempre que podamos.

Lo siguiente es poner el aireplay-ng a funcionar para generar más tráfico de red. Esta utilidad tiene varios modos de ataque y la verdad es que necesitaría otro post para hablar de todas las posibilidades que tiene. En principio voy a comentar un ataque muy efectivo y quizás otro día hable de sus multiples capacidades. El ataque que vamos a usar se llama ARP Injection, y consiste simplemente en enviar peticiones ARP al AP con el objetivo de que responda con nuevos paquetes de datos. Para esto es necesario conocer la MAC de un cliente ya conectado, pues lo que se hace este ataque es reenviar peticiones ARP capturadas con anterioridad a dicho cliente (obviamente el ataque fallará si no hay clientes conectados, aunque aireplay-ng también presenta soluciones a este problema, pero ya hablaremos de eso en otro momento).

# aireplay-ng –arpreplay -b 00:13:F7:64:10:27 -h 00:A0:C5:53:7F:9F -r datos-01.cap eth2

–arpreplay es el ataque de inyección de arp

-b es el BSSID del AP

-h es la MAC del cliente autenticado

-r es el fichero de datos que estamos capturando con el airodump-ng

Y ya por último sólo queda poner a funcionar el aircrack-ng, que será el que trate de encontrar la clave WEP:

# aircrack-ng datos-01.cap

Método 3: aircrack-ptw

Y cómo suele pasar con estas cosas, lo más importante es tener paciencia y suerte. Pero si la paciencia no es mucha, estáis de enhorabuena porque han descubierto nuevos sistemas para atacar las claves WEP, reduciendo el número de paquetes necesarios para recuperla a menos de 80000. Os dejo la url de los autores, la utilidad se llama aircrack-pwt y funciona de forma similar al aircrack-ng, de hecho necesitareis el kit aircrack-ng para realizar el ataque completo.

Pues no os quejaréis, ya sabéis todo lo que necesitáis saber… a disfrutar!

Categorías: seguridad, tutoriales | 2 comentarios