lunes, 17 de noviembre de 2008

Winrar: I give up

Alien [blackhat4all@gmail.com]

Todo aquel que me conoce desde hace ya varios años, sabe que entre mis quimeras se encuentran:
1. Encontrar vulnerabilidades en Windows
2. Encontrar vulnerabilidades en Winrar
3. Perder un poco de tiempo con lo números primos
4. Encontrar algunas cositas más sobre...

Del primer caso está más que claro que existen así como en el cuarto, no sucediendo lo mismo con el segundo y tercero; no obstante estoy totalmente convencido de que el triunfo solo se alcanza con la perseverancia y como no estamos hablando de cosas triviales, las trabas que me pueda encontrar no son razones suficientes para desalentarme. Además, uno de los requisitos es lograr no solo encontrar nuevos bug en dichos programas o servidores, sino llevarlos a explotación sin contar con otra herramienta que no sean mis propias manos, cosa esta que hace más difícil la tarea.

No obstante, por la inmensa carga de trabajo que tengo últimamente, me declaro un fracasado totalmente al menos con el Winrar, así que dejaré a un lado todo análisis que haya hecho sobre el tema no sin antes compartirlo con ustedes.

Básico

Empezaré por lo que considero básico y de dominio general aunque sin adentrarme mucho en el tema pues, como quiera que se mire, es algo básico, y de dominio general ;)

Winrar permite no solo comprimir, sino escoger el nivel de compresión adecuado para cada cosa; acepta password, opciones personalizadas, exclusión de archivos, cargar comentarios y el resultado final puede ser dividido en varias partes de tamaño similar en caso que, aún compactado, el archivo .rar no quepa en el dispositivo en que queramos guardarlo.

Después de mucho intentar, leer y estudiar, acepto que quizás el método de compresión que utiliza Winrar es uno de los mejores, no solo porque utilice Hoffman o cualquier otro, sino porque liga esto a una increíble forma de jugar con la fecha de la máquina haciendo que sea más difícil “entrarle” a un archivo comprimido y con contraseña. Puede que se compacte el mismo archivo, de la misma forma, incluso con el mismo password, pero simplemente porque la fecha de la máquina sea distinta hará que los archivos resultantes sean también diferentes.

Esto es quizás el motivo de que Winrar sea tan difícil de decodificar por otra vía que no sea Brute Force y que se haya convertido en el formato perfecto para proteger los datos pero, al final es un archivo igual, y como todo archivo tiene algo que lo iguala a los demás: La cabecera.

Intermedio

Puede que para muchos la cabecera del Winrar sea: Rar!. Pero para mi son unos cuantos caracteres más.

Viendo cualquier archivo .rar vemos que hay unos 19 caracteres que son invariables, que no cambian, que se mantienen iguales sin importar que el contenido sea un .exe, .doc o .me_da_la_gana; para mi, esta es la verdadera cabecera y si bien, alguno de estos caracteres puede ser modificado y no afecta la apertura del archivo, en caso de hacerlo se muestra un mensaje al inicio de la aplicación advirtiéndonos de algún Warning como “header is corrupt”.

Después de romperme mucho la cabeza, cambiar muchos valores, e ir comprobando el resultado en cada caso, encontré una letra, una combinación de 0 y 1 que puede ser modificado sin problema alguno y que puede traernos ciertas facilidades.

El carácter que se encuentra en la posición 22 representado en hexagesimal como 74 y visto en el código de un .rar como una “t” puede ser reemplazado por un espacio (“ ”) por ejemplo, logrando que el archivo .rar suprima de forma virtual el primer archivo que encuentre.

Nota: El primer archivo que Winrar encuentra siempre aparece a partir del carácter 50 (viendo el código del .rar en formato hexagesimal) y es además el primero que se ve cuando se abre la carpeta.

Nota: Si hay varios archivos, entonces el primero será definido por orden alfabético.

Advanced

Esto funciona tanto para los archivos comprimidos con contraseña como para los archivo comprimidos de forma normal y puede además llevarse a un ambiente automatizado como:

Nota: El código ha sido escrito en Visual Basic
‘para esconder
Dim linea As String * 1
linea = " "
Open ("d:\a.rar") For Binary As #1
  Put #1, 23, linea
Close #1

‘para mostrar
Dim linea As String * 1
linea = "t"
Open ("d:\a.rar") For Binary As #1
  Put #1, 23, linea
Close #1

Cuando se oculta información de esta manera, evidentemente el tamaño del .rar no se ve afectado de ninguna manera, ya que no se elimina o añade información, sino que se reemplaza un carácter por otro.

Y como si fuera poco, al ocultar un archivo de esta forma, cuando se le da extraer aquí al Winrar se descomprimen todos los archivos menos el que no se muestra, siendo quizás este otro de los truquillos de Winrar que aún quedan por descubrir.



Artículos relacionados


No hay comentarios: