jueves, 14 de mayo de 2009

Recursos: LiveCDs y Máquinas Virtuales

En el trabajo tanto de un pentester como de un incident handler es habitual que tengamos que tirar mano de LiveCDs y Máquinas Virtuales, tanto para utilizarlas como herramientas como para utilizarlas como sistemas sobre los que realizar pruebas.

Hay montones y montones de webs que albergan su livecd propia o su máquina virtual, pero también existen otras webs que lo que hacen es recopilar toda esta información, lo cual nos va a ahorrar mucho tiempo. Algunas de las que más me gustan a mi son las siguientes:
  • BagVapp: Web que recopila un montón de máquinas virtuales preinstaladas de un montón de sistemas operativos diferentes, incluso Windows 7 (por estar en estado beta, supongo, luego con las licencias...). Algunas de ellas de seguridad que incluso no están en el enlace anterior, como Caine, y otras que sí que están pero que resulta más cómodo tenerlas en una máquina virtual, como Samurai (aunque ahora mismo no están actualizados a la última versión).
  • VMWare Appliances: Muchos fabricantes de productos, incluso de pago, dejan preparadas máquinas virtuales con el producto preinstalado para que lo pruebes a modo de demostración. Puede ser muy interesante para probar este tipo de software antes de decidirnos a comprarlo.
De entre todas ellas, las que yo he probado o las que me parece que tienen buena pinta y que tengo pensado probar, son las siguientes:
  • BackTrack: Por supuesto, la distro de seguridad por excelencia, yo uso la versión en máquina virtual porque me resulta más cómoda cuando trabajo desde mi equipo, pero tengo también una distribución en el USB que utilizo de llavero (aún pendiente de actualizar de la versión 3 a la 4), para que no me encuentre en algún sitio sin el portátil y se requieran mis habilidades y tenga que decir aquello de "es que me pillas sin herramientas" ;)
  • Helix: Distribución para realizar respuesta ante incidentes y análisis forense. Extremadamente conocida y utilizada, de hecho como en su propia web indican, es utilizada por entidades de mucho prestigio como herramienta para sus cursos de formación sobre Forensics.
  • Samurai: Esta no la he probado todavía pero la tengo apuntada en la agenda. El ser un producto de la empresa InGuardians, fundada por los gurús de SANS Ed Skoudis y Mike Poor, es una garantía de su calidad.
  • Sumo: Esta es una de las distros que hecho en falta en los enlaces anteriores. Se trata de una distro en DVD que contiene varias LiveCD, y que te muestra un menú en el arranque para que elijas con cual la quieres arrancar. Ahora mismo las versiones no están excesivamente actualizadas, e incluso yo cambiaría las que vienen, pero lo bueno de las distros Linux es que te las puedes tunear a tu gusto :)
  • Caine: Otra de las que hecho en falta en la web de SecurityDistro pero que también es de las que tengo pendientes por probar y que le voy a hacer un seguimiento muy de cerca. Este proyecto se inición como Tesis de un estudiante Italiano que tenía como objetivo desarrollar una herramienta para análisis forense que no fuera únicamente un compendio de herramientas, sino que fuera una integración total de dichas herramientas.
  • SANS SIFT: Ahora mismo estoy ojeando esta, es una máquina virtual creada por SANS para Forensics, lo cual ya es toda una garantía. Está muy bien, contiene un montón de herramientas de las que se suelen utilizar y es muy completa.
  • Otras de las que tengo pendientes por probar a ver que tal son porque me parece que pueden tener buena pinta son DEFT y FCCU para Forensics, que son muy nombrados en los foros y listas que frecuento. En cuanto a Pentesting, OWASP Labrat es otra de las que tengo ganas de probar, sobretodo por lo excepcional que son las guias de OWASP, aunque dudo que aporte más que distribuciones como BackTrack o Samurai.
Por supuesto, hay muchas más distros y cada uno tendrá sus favoritas, así que estais invitados a sugerirnos vuestras distros favoritas y hacer una buena recolección entre todos.

lunes, 11 de mayo de 2009

Reverse Engineering de Código Cifrado

En ocasiones cuando te pones a intentar analizar un fichero sospechoso de ser Malware, es posible hacerse una idea de lo que hace simplemente observando el contenido del binario. Otras veces el Malware se encuentra cifrado, por lo que únicamente podremos ver el contenido de la rutina de descifrado.

Sin embargo, cualquier software que se cifra y se tiene que descifrar automáticamente sin intervención humana es necesario que almacene hardcodeada la contraseña de descifrado (o se la descargue de Internet, o por algún otro medio), así que para saber que hace este tipo de malware podemos optar por buscar la contraseña de descifrado en la rutina, o bien optar por dejar que el propio malware descifre el código y analizarlo en memoria. Esta segunda es la aproximación que suelo utilizar yo, y así lo hice recientemente para intentar averiguar el formato enviado y sobretodo devuelto por el Malware ASPROX al acceder a la web forum.php durante un ejercicio que nos pusimos los miembros de Pentester.es durante nuestro último "Hacking Day".
  1. Lo primero es dejar que el malware se ejecute libremente, controlando con una traza de red o monitorización del equipo que su ejecución haya llegado al punto que queremos (en este caso mandar una conexión POST /forum.php). En ese momento lanzamos OLLYDBG y hacemos Attach (File->Attach) del proceso aspimgr.exe, con lo que pasaremos a tener acceso al espacio del proceso.



  2. Una vez tenemos el espacio del proceso nos vamos a la zona de memoria (M) y buscamos la cadena "forum.php". Esta cadena la encontraremos tanto en el sitio original donde la rutina de descifrado la escribirá como en otros sitios donde se haya copiado, así que sabemos que al menos una de las direcciones que saquemos va a ser el sitio donde originalmente va a estar. Conocer esta dirección nos va a ser tremendamente útil para analizar el malware, puesto que a partir de ahí vamos a saber todas las acciones que realiza el malware utilizando esta cadena.




  3. Una vez tenemos esas direcciones de memoria, paramos el proceso, y esta vez lo lanzamos junto con el depurador desde el primer momento, es decir, antes de que descifre, y antes de ejecutarlo, buscamos en la memoria esta misma zona que, por supuesto, no contendrá todavía la misma información, y colocamos un "breakpoint, memory on access" para que el software se detenga cuando se acceda a esta dirección.



  4. Ahora sólo tenemos que dejar que el malware siga su ejecución. Observaremos que se para una primera vez al realizarse una escritura (cuando la rutina de descifrado escribe encima), así que lo lanzamos otra vez y esta vez sí que se detiene en un acceso para lectura.


  5. En muchas ocasiones, la función que accede directamente a la información es una función del Kernel que ha sido llamada desde el malware, así que esa zona del código no es la que nos interesa. Para ir a la zona interesante iremos al menú "Debug->Execute till user code" (ejecutar hasta el código del usuario) para acabar en el código del malware que estamos analizando.

  6. A partir de ahí podriamos proseguir con el análisis. Como podemos ver ya estamos en una zona donde se pueden apreciar cosas interesantes:


Después de acabar este proceso nos encontramos con el código descifrado en la zona de datos, con o que a partir de este punto se puede empezar a analizar los accesos a las cadenas que nos interesan, en este caso un strlen de la cadena que contiene la URL a la que accede el malware.

De esta manera podemos realizar análisis de malware con zonas de código cifradas sin tener que ir ejecutando paso a paso cada instrucción, lo cual nos llevaría mucho tiempo y esfuerzo.

lunes, 4 de mayo de 2009

Analizando malware como servicio

El pasado día 01 de Mayo nos reunimos la gente de Pentester en nuestro "Hacking Day", que no es más que un día en el que nos juntamos para compartir ideas, herramientas, "trucachos", etc. La agenda de ese día era destripar el funcionamiento del malware Asprox (poniendo en práctica las enseñanzas del curso de malware que hace poco hemos recibido por parte de David Pérez).

Durante ese análisis nos encontramos con un pequeño "incoveniente", como era que el bichito una vez infectaba el equipo creaba un servicio, por lo que debíamos depurar un servicio de Windows (cosa que ninguno de los asistentes a la HD había realizado). Para ello le preguntamos al todo poderoso Google y nos llevó hacia una guía que ha sido de mucha utilidad para poder depurar el servicio creado por Asprox. A continuación os pongo el proceso que hemos seguido nosotros para depurar un servicio con Ollydbg:

  1. Configurar las opciones de "ejecución del archivo de imagen", para ello hemos utilizado el metodo 1 de la guía (Nosotros hemos instalado el paquetedbg_x86_6.11.1.402.msi que contiene gflags.exe). A continuación os mostramos las opciones que hemos activado:





  2. El siguiente paso es permitir que el servicio interactúe con el escritorio bajo cuenta del sistema:




  3. Por último subir el tiempo de espera del Administrador de control, el cual tiene un tiempo máximo en el cual el servicio debe haberse iniciado (vamos un timeout). Como vamos a estar trasteando y depurando lo aumentaremos un poco ;).




  4. Por último tendremos que reiniciar (sí, es necesario reiniciar :P) y ya podremos arrancar nuestro servicio (bichito en este caso) junto con Ollydbg para poderlo analizar con detenimiento.