viernes, 20 de marzo de 2015

Desafío ESET #29: Write Up

WeLiveSecurity es un blog sobre seguridad informatica administrado por la comunidad de analistas de seguridad que trabajan para ESET, si el famoso antivirus!

Cada cierto tiempo en este blog presentan retos en los que cualquiera puede participar, divertirse un rato, aprender y ganar algun premio. Hoy presentaron el reto 29 el cual se basa en buscar un flag, asi que alla vamos....

Entramos al post del blog y nos encontramos con un zip para descargar, pero nos avisan que el mismo tiene una contraseña la cual podemos encontrar si es que logramos resolver el problema en la siguiente imagen...

Otro codigo Qr si...
Tenemos otro codigo Qr como en el Write Up del CTF InfosecInstitute, asi que volvemos a utilizar nuestra herramienta online para decodificar su contenido y nos encontramos con...

RG9Nb3Jl==

Debido a los dos signos "=" del final, nos damos cuenta rapidamente que se trata de un string en base 64, decodificandolo terminamos obteniendo la clave...

DoMore

En este punto tenemos una carpeta llamada "Desafio_-_29" la cual contiene un archivo llamado "Desafio__29.exe" asi que vamos a investigar un poco ese ejecutable.
El primer paso es extraer todos los strings que este contiene por lo que utilizando la herramienta "strings.exe" de SysInternals terminamos obteniendo entre otras cosas...

8fda2e04="Archivo auto-extra
ble WinRAR"

Ok al parecer tenemos un ejecutable que en realidad es un un archivo SFX generado con Winrar, el siguiente paso es abrirlo y ver cuales son sus ordenes de extraccion junto con su contenido...

Un archivo y un comentario.
Adentro de este SFX tenemos un archivo sin extension y un comentario que indica que se realizara la extraccion silenciosamente (Silent = 1) por lo que no veremos ninguna ventana al momento de realizarse la descompresion, tambien vemos que la ruta donde se hara la misma es en "C:\WINDOWS\Temp".
Ahora podemos ejecutar el exe con seguridad de que no se nos paso nada, y buscar ese archivo "Desafio__29" para identificar su contenido gracias a sus primeros bytes, los cuales son...

d0 cf 11
Un poco de Google y nos encontramos con la respuesta : Microsoft Office Document.
Renombramos el archivo a "Desafio__29.doc" por probar y acertamos...
Unas buenas cartas :p

A simple vista no hay ningun flag, pero ahora mismo tenemos un archivo de Word y un reto de una compania de anti malware, donde uno puede guardar malware en un archivo de Office?...
En los Macros!!
Codigo Visual Basic script

Vamos a analizar un poco este codigo ...

En el principio (el cual no esta en la imagen), podemos observar como se declaran las funciones "CreateThread", "VirtualAlloc", "RtlMoveMemory" lo cual nos hace sospechar de que en algun lugar hay codigo ejecutable que sera cargado en memoria gracias al uso de estas funciones anteriormente mencionadas.

Si nos vamos al final del codigo podemos ver "Workbook_Open()", este es un evento que se ejecuta al iniciar el documento siempre y cuando los macros esten activados, el mismo como se puede observar llama a la funcion Auto_Open.

Analizando Auto_Open ...
  • "Array" guarda el codigo ejecutable, codificado en decimal, que sospechabamos que habia.
  • VirtualAlloc reserva memoria con el tamaño justo (gracias a UBound) para almacenar el Array.
  • RtlMoveMemory realiza movimientos de memoria para colocar la shellcode en memoria de manera correcta, toma como destino a "Ffhzpyadi + Spcwl" y como origen a Xosacrosk, siempre realizando movimientos de 1 byte. Por lo que tenemos basicamente en este bucle, un decoder!
  • CreateThread crea un nuevo hilo de ejecucion ejecutando ese codigo.
En este punto convencido de que el flag debe estar en ese shellcode, lo que voy a hacer es cargar en memoria ese shellcode y localizarlo a traves de "Ffhzpyadi" .
Para esto agrego un punto de inspeccion a la variable "Ffhzpyadi" y ejecuto el codigo hasta la linea de CreateThread. Ahora mismo el shellcode deberia estar ya en memoria y para ubicarlo miro el valor de la variable "Ffhzpyadi" el cual es "193003520", pasando a hexadecimal obtenemos "0xb810000".

Abrimos Inmunity Debugger y nos vamos a ver la direccion de memoria que obtuvimos antes, al final de todo nos encontramos con el FLAG!

Flag_is_EnjoySaferTechnology


Y hasta aca llega el reto, felicitaciones a ESET por este tipo de iniciativas para incentivar el aprendizaje en materia de seguridad informatica.

Saludos!

2 comentarios:

  1. Excelente tu metodo y las tools que utilizas, me causa impresion que en ningun momento hizo falta usar gnu / linux, saludos.

    ResponderEliminar
    Respuestas
    1. Gracias por el comentario, la verdad no hizo falta la utilizacion de GNU/Linux ya que el reto no era tan complejo. Si hubiese sido necesario en caso de tener que analizar una muestra de malware un poco mas compleja en donde Cuckoo,Volatily o Radare hubiesen ayudado mucho.
      Saludos!

      Eliminar