martes, 15 de noviembre de 2011

Quick Post - DRx Calculator v.1.1 x64 & source code

Hola!,

hace un tiempo hice un post sobre una pequeña tool que desarrollé luego del training "Defeating Software Protections" en la Ekoparty 2011.

Este pequeño y rápido post es para hacerles saber que he agregado la versión de 64 bits y que además he colgado el source code de la herramienta en googlecode.

Hasta pronto!.

miércoles, 9 de noviembre de 2011

ARTeam Tutorial - Analyzing an Adobe Flash Malware CVE-2011-2110

Hola!,

acá pueden encontrar un nuevo tutorial que escribí, esta vez, para la gente de ARTeam.

El tutorial es sobre un bug de hace un par de meses en Adobe Flash. Van a poder encontrar, entre otras cosas:

- Anáisis del bug
- Análisis del malware que explota el bug
- Análisis del exploit utilizado para explotar el bug
- Como desarrollar una pequeña herramienta utilizando Pin

Antes de despedirme, quiero agradecer a marciano, que fue con quien estuve analizando este bug, a Nacho_dj por el feedback sobre el tutorial y a Shub por editarlo y publicarlo. Gracias a todos ellos!.

El tutorial fue escrito en Inglés y Español, para que nadie se quede afuera :P

Espero que sea de su agrado!.

Cualquier comentario acerca del tutorial es bienvenido :)

Hasta pronto!.

miércoles, 28 de septiembre de 2011

[TOOL] DRx Calculator v1.0

Mientras dictabamos el training Defeating Software Protections uno de los temas que se tocaban era el de como fabricanos un Loader Debugger (LD).

Para aquellos que no sepan de que se trata un LD les diré rápidamente que no es mas que un Loader (un programa que carga otro) pero con las capacidades de un debugger. Un LD permite tener una comunicación sincrónica con el target.

El hecho y motivo de este post tiene que ver con que cuando construimos un LD queremos colocar breakpoints para poder detenernos en ciertos lugares del programa y hacer nuestras modificaciones.

Como todo debugger, podemos colocar software breakpoints, memory breakpoints y hardware breakpoints. Estos últimos tal vez sean los más tediosos de colocar dado que tenemos que colocar un par de valores en una estructura llamada CONTEXT:


typedef struct _CONTEXT {
DWORD ContextFlags;
DWORD Dr0;
DWORD Dr1;
DWORD Dr2;
DWORD Dr3;
DWORD Dr6;
DWORD Dr7;
FLOATING_SAVE_AREA FloatSave;
DWORD SegGs;
DWORD SegFs;
DWORD SegEs;
DWORD SegDs;
DWORD Edi;
DWORD Esi;
DWORD Ebx;
DWORD Edx;
DWORD Ecx;
DWORD Eax;
DWORD Ebp;
DWORD Eip;
DWORD SegCs;
DWORD EFlags;
DWORD Esp;
DWORD SegSs;
BYTE
ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];
} CONTEXT;

Básicamente, lo que se hace es colocar las direcciones, en las cuales queremos que estén los hardware breakpoints, en los registros que van desde DR0 a DR3 (DEBUG REGISTERS) y luego, colocar un valor en el registro DR7 que indica tres cosas:

Que registro se utilizó para colocar el HB
De que tipo es el HB (ON_EXECUTION, ON_READ, ON_WRITE)
La cantidad de bytes que abarcamos con el breakpoint (1, 2 ó 4)

Esa constante que se coloca en DR7 se calcula en base a una tabla (http://members.fortunecity.com/blackfenix/seh.html). Por ejemplo, si quisieramos colocar un HB ON_EXECUTION en DR0, deberíamos de hacer una cuenta como esta:


LOCAL_EXACT_BPM_ENABLED + DR0_LOCAL_EXACT_BPM_ENABLED + DR0_EXECUTION + DR0_LEN1

Según la tabla, los valores para cada constante son:


LOCAL_EXACT_BPM_ENABLED = 100000000b
DR0_LOCAL_EXACT_BPM_ENABLED = 1
DR0_EXECUTION = 0
DR0_LEN1 = 0

Por lo tanto, el resultado es: 101h

Para no tener que andar haciendo ninguna cuenta hice una pequeña aplicación que calcule las cosas solitas, nada del otro mundo pero tal vez a alguno le pueda ser útil (sobre todo a aquellos que siempre tienen fiaca :P):


Puede bajar la aplicación aquí.

UPDATE: Subí una nueva version (v1.1) con un pequeño fix acá.

Hasta la próxima!.

miércoles, 21 de septiembre de 2011

Defeating Software Protections - Un año más!


Como dice el título, un año más se suma a nuestra experiencia como trainers en la Eko.

Este 2011 nos dejo un buen sabor de boca con el training "Defeating Software Protections" que dictamos junto con @ricnar456 y @solidcls en la Ekoparty.

El training comenzó con una introducción básica a ASM (para todos aquellos que no tenian muy fresco el tema) y luego continuo con la Introduccón al Cracking en la cual se comienzan a ver las técnicas básicas de protección y los mecanismos que existen para atacarlas. Algunos de los temas mas importantes que se trataron fueron Loaders, Cracking en Java, Cracking en .NET y Unpacking, pero además se tocaron otros temas como Loaders y estructura PE.

Realizamos ejercicios paso a paso junto con los alumnos y prácticas para ver si la gente que asistió realmente estaba aprendiendo :)

Por los comentarios que recibimos de la misma gente que asistió al training podemos decir que fue todo un éxito! todos quedaron contentos!.

Quiero agradecer, primero, a Core Security por permitirnos preparar el training, a la organización de la Ekoparty por darnos el lugar para dictarlo, a las personas que asistieron y a mis compañeros con los cuales preparamos todo el material.

Les dejo una postal!.

 


lunes, 5 de septiembre de 2011

BlackHat 2011 USA - Defcon 19

















Hace un par de semanas tuvieron lugar en Las Vegas dos de las conferencias mundiales mas importantes en lo que a seguridad informática se refiere, BlackHat y Defcon.

Tuve la suerte de estar este año allí y poder ver de que se trata. Lamentablemente no fui como speaker (no faltará oportunidad) pero de todas maneras fue una experiencia increíble que sin dudas quiero volver a repetir.

Este post es para contarles un poco sobre algunas de las charlas a las que asistí. No quiero discutir en detalle cada una de las charlas sino comentarles un poco de que trató cada una. Para tener más información al respecto pueden ver cada uno de los papers y/o videos de los mismos.

Vamos a hablar primeramente de las charlas de BH.

Constant Insecurity: Things you didn't know about (PE) Portable Executable file format (Mario Vuksan + Tomislav Pericin): Esta fue la primera de las charlas a las que asistí. Los que me conocen saben que el trabajo de la gente de ReversingLabs me agrada mucho y como no podía ser de otra manera esta charla no podía perdermela. Lo primero que se hizo fue dar un breve repaso por la estructura PE y luego se contrasto lo que dice el PECOFF con lo que realmente hace el loader de Windows al cargar un ejecutable. Se mostraron los diferentes tipos de malformaciones que existen en la estructura de un ejecutable que según la documentación oficial de Miscrosoft no pasarían como archivos válidos, sin embargo los archivos se ejecutaban perfectamente.

Muchas de las malformaciones en archivos ejecutables no son contemplados por las herramientas que hoy en día se utilizan para realizar RCE. Por lo tanto, es interesante para cualquier persona sean malware analysts o virus writters, desarrolladores de packers o crackers, etc; estar al tanto de estás cosas para no fallar en su análisis o desarrollo, respectivamente.

Aquí pueden encontrar el paper y los slides de la charla.


Attacking Clientside JIT Compilers (Chris Rohlf + Yan Ivnitskiy): Esta charla fue interesante hasta un punto dado. Por qué? pues porque en un punto era necesario tener una idea clara sobre JIT compilers, cosa que yo no tengo :P.

La charla se baso en dos ejes, los JITs de Mozilla y el de LLVM. Mostraron como funciona cada uno de ellos y sus diferencias. Esta parte estuvo un poco densa para mi gusto pero tal vez haya sido por la falta de conocimiento sobre el tema.

Además, hablaron sobre varias cosas más como vulnerabilidades en los JIT compilers y sobre técnicas de explotación como JIT Spray, JIT Feng Shui (una variación del Heap Feng Shui) y especialmente sobre las herramientas que desarrollaron y utilizaron en su research.

Para el que quiera saber un poco más al respecto, puede consultar el paper y los slides aquí.

Windows Hooks of Death: Kernel Attacks Through User-Mode Callbacks (Tarjei Mandt): Esta era una de las charlas obligadas para todas aquellas personas a las cuales nos apasiona el mundo de ring0, los kernels y las cosas a muy bajo nivel.

En esta charla se habló sobre las decenas de vulnerabilidades que Tarjei encontró en el kernel de Windows, más precisamente en win32k.sys cuando maneja la transición de un callback desde user-mode a kernel-mode. Cada una de las vulnerabilidades fue clasificada en una categoría específica, habló de cada una de esas categorías, donde fue que estaba la falla y como se podía hacer para explotarla aunque primeramente nos dió un paseo por win32k y varias estructuras utiilzadas por el mismo. Finalmente, hizo dos demos en las cuales nos enseñó  como logró explotar de manera reliable dos de esos bugs. Una charla que no tuvo desperdicios.

Aquí pueden encontrar los slides y el paper de la charla.

Reverse Engineering Browser Components: Dissecting and Hacking Silverlight, HTML 5 and Flex (Shreeraj Shah): Al leer sobre que iba a tratar esta charla estaba bastante entusiasmado por asistir. Cosas que tienen que ver con la Web directamente como HTML5, Silverlight y Flex no me apasionan demasiado, sin embargo, para mi trabajo diario era una buena oportunidad de aprender algo al respecto para luego aplicarlo.

Shreeraj contó sobre el uso de las diferentes herramientas existentes hoy en día para atacar cada una de las tecnologías mencionadas. Al menos yo, esperaba ver un IDA abierto en algun momento con código, contando algo más que presionar un botón para poder realizar determinada tarea.

De todas maneras, al que le interese puede mirar los slides + paper.

Playing In The Reader X Sandbox (Paul Sabanal + Mark Yason):Esta charla estuvo buena salvo por el final donde se hicieron los piolas. Antes les cuento más o menos de que iba la charla.

Como se podrán imaginar, en la charla se discutía sobre el sandbox implementado en Adobe Reader X. Primero hablaron de la relación entre este sandbox y el de Chromium (sí, parece que está basado en el sandbox de Chromium), las herramientas que utilizaron para poder reversearla, sobre la arquitectura y mecanismos de restricciones que posee y lo más importante para un Exploit Writter, que se puede hacer y que nó, es decir, limitaciones y debilidades del sandbox.

Como les dije al principio, todo iba bien hasta el final donde hicieron dos demos. La primera fue sobre una vulnerabilidad conocida publicamente (CVE-2011-0609). En la segunda demo, aparentemente, bypassearon el sandbox con un bug que no es público hasta el momento y del cual no se conocen detalles. Esto último fue algo que no me pareció que le sumara valor a la charla, simplemente, a mi manera de ver las cosas, lo mostraron como una manera de decir: "Miren que piolas que somos, tenemos un 0-day y ustedes no". Porque además fue algo como: "Ahora vamos a  hacer la segunda demo en la cual vamos a bypassear el sandbox.", "OK, demo terminada", "No más preguntas". WTF?.

En fin, el que quiera puede mirar los slides y el paper.

Algunas de las charlas de Defcon 19 a las que asistí fueron:

Chip & PIN is Definitely Broken (Andrea Barisani + Adam Laurie + Zac Franken + Daniele Bianco): Esta charla fue otra de esas en las que si no estás un poco al tanto de las cosas te perdes algunas otras :P pero en términos generales, hablaron sobre estas tarjetas que pueden ser utilizadas como débito y crédito gracias a un chip que tienen y les permite hacer este tipo de transacciones. En Argentina no conozco a nadie todavía que tenga una de estas, de hecho creo que en nuestro país aún no existe este sistema sino que tenemos que contar con dos tarjetas, una de débito y otra de crédito.

La charla se centraba en los mecanismos de protección y validación que se tienen para este tipo de tecnología y como un atacante podía clonar y utilizar una tarjeta robada.

Acá pueden encontrar el paper de la charla.


Economics of Password Cracking in the GPU Era (Robert "Hackajar" Imhoff-Dousharm): El speaker en esta charla era un troll hecho y derecho. La verdad, lo que menos importó fue la charla en sí, podría haber estado hablando de como construir un cohete a marte que a nadie le hubiera interesado. Puedo resumir esta charla en dos cosas: Troll y pendejas golpeandose con almohadas. Pero antes de seguir, les voy a comentar un poco de que iba la cosa.

La charla fue meramente informativa. Habló sobre que hardware y software necesitamos para crackear passwords utilizando GPUs.  Además, había una planillita que calculaba el tiempo que tardaríamos en crackear un password de x cantidad de caracteres utilizando una configuración determinada. Ah, y cual sería la mejor máquina que podríamos armar para poder crackear passwords!, lástima que salía algo de 52.000 dólares!.

Ahora sí, lo interesante de la charla fueron dos cosas:

1) En casi toda la charla se la pasó trolleando a todas aquellas empresas que tenían productos para crackear passwords y que, según su opinión, no servían para nada.

2) En un momento de la charla entraron aproximadamente 10 chicas golpeandosé con almohadas, se fueron hasta el escenario a continuar golpeandosé entre ellas y finalmente se fueron.

Fue una charla bastante atípica!.

Los slides de la charla los pueden encontrar aquí.

Como habrán podido observar, no hay nada espectacular en este post, nada técnico ni detallado en profundidad, simplemente quería compartir con ustedes mi opinión sobre cada una de las charlas a las cuales asistí. Si a alguno le gustó bien y sino ... también.

Hasta cualquier otro momento!.

miércoles, 13 de julio de 2011

[TUTORIAL] Writing Dynamic Unpackers for Fun with TitanEngine (English)

Hola!,

esta entrada es para comentarles que finalmente, y a pedido de muchos, la versión en inglés del tutorial sobre TitanEngine y FUU fue agregado a la sección de Downloads del proyecto.

Quiero agradecer a las personas que tuvieron mucho que ver con este arduo trabajo que fue traducir y revisar mas de 80 páginas:

* Juan Esteban Forgia (@ztoker) por traducir las primeras 4 páginas del tutorial.
* Apokliptiko por traducir la segunda parte del tutorial.
* Francisco Falcón (@fdfalcon) por leer y revisar la gramática.
* Fotis (@__fastcall) por darnos ánimos estas últimas semanas. Eso nos dió la fuerza que faltaba para terminar este trabajo!.

Gracias a todos ellos!.

Si encuentran algun error, por favor, avisenme y será corregido a la brevedad.

Espero que lo disfruten!.

Un abrazo!.

jueves, 7 de julio de 2011

[Training Ekoparty 2011] Defeating software protections

Hola!,

esta entrada es para hacerles saber que este año 2011 estaremos nuevamente presentes en la Ekopary, la conferencia mas importante sobre seguridad informática en Latinoamérica, con el training "Defeating Software Protections".

A continuación, les dejo el temario del curso:


CONTENIDO:

Cuando una empresa o programador necesita distribuir su Software, Shareware, Trial o Demo, necesita optar por algún mecanismo para proteger la propiedad intelectual de los ojos curiosos de los crackers.

Que mejor que un curso de cracking para estar al tanto de las técnicas mas utilizadas a la hora de romper protecciones de software?. Conocer las técnicas mas comunes a la hora de desproteger software brinda la posibilidad de desarrollar nuevos mecanismos para protegerlos.

El training comenzará con una introducción de assembler(x86) y las herramientas generalmente empleadas para luego continuar con la descripción del formato ejecutable utilizado en Windows.

Se mostraran diversas técnicas para obtener un serial en memoria o como patchear instrucciones para desviar la ejecución del programa y evitar que se ejecuten funciones no deseadas. Este día finalizara con la creación de un patcher, el cual facilita por ejemplo la distribución de los cambios hechos en un ejecutable.

Durante el transcurso del segundo día, se intensificara lo aprendido aplicándolo a diferentes lenguajes de programación. Se expondrán las técnicas para atacar aplicaciones .NET y Java entre otros.

Se explicara el funcionamiento de las protecciones comerciales ( packers ) y las diferentes formas de atacarlas. También se demostrara como modificar los programas protegidos sin necesidad de desempacar los binarios ( inline patching ).

Los alumnos aplicaran los conceptos aprendidos en la resolución de ejercicios creados especialmente para el Training versión EKOparty.

Se realizara la entrega de un manual con mas 300 paginas ilustrativas + CD con el contenido completo de todo el curso, incluyendo sus ejercicios, herramientas y la foto de Ricardo Narvaja.

Día 1:

* Conceptos básicos y herramientas
* PE structure
* String references
* Serial fishing
* API cracking
* Patchers
* Loaders

Día 2:

* .NET cracking
* Java Cracking
* Unpacking
* OEP finding
* Stolen bytes recovering
* IAT rebuilding
* Ollyscripting
* Inline patching
* Antidumping
* Antidebugging
* Keygenning

Para el que le interese y necesite más información, consulte aquí.

Los esperamos!.

miércoles, 29 de junio de 2011

[Advisory] HP Data Protector EXEC_CMD Buffer Overflow Vulnerability

Hola!,

después de un par de meses sin ningún post volvemos con algunas noticias.

En esta pequeña entrada les quiero hablar un poco de un bug que encontré haciendo research de otro bug (ZDI-11-055).

El bug ZDI-11-055 es un path traversal que termina en Remote Code Execution.

El paquete que se envia para triggerear el Path Traversal contiene un Path (el ejecutable que queremos lanzar en la maquina remota), si este path es lo suficientemente largo, puede producir un stack overflow.

Pueden encontrar el advisory con el analisis del bug acá.

Algo importante para mencionar es que al momento de escribir este post no hay patch oficial para este bug.

Aprovecho para comentarles que en breve voy a publicar un par de tutoriales que tal vez les puedan interesar!. Asi que atenti!.

Saludos.

viernes, 18 de febrero de 2011

Nuevo Plugin para FUU - dePFE

crosspost de: http://pastafr0la.wordpress.com/2011/02/18/probando/

Gracias a "El Tio Pastafrola" por la colaboracion y por prenderse con el proyecto FUU!.

--

Hola amigos, hoy les traigo una pequeña reseña sobre el packer PFE CX v0.1 con el cual hice mis primeros pinitos en TitanEngine y FUU

primero echemos una mirada a la GUI del protector

img1

haremos una muestra con el maximo nivel de compresion y todas las opciones activadas, en mi caso usare calc.exe para probarlo.

Este protector corre en dos procesos como podemos ver en la imagen

img2

asi que lo cargamos con OllyDBG y buscamos las llamadas a CreateProcessA para caer en la zona caliente del packer

img3

aca estamos en la zona caliente, vemos como crea el proceso hijo en modo suspendido, alloca memoria y despues le escribe algunas cosas en memoria :)

Pongamos un bp en el WriteProcessMemory que le sigue al VirtualAllocEx y miremos que tiene el buffer

img4

ese MZ corresponde a la cabezera de nuestro protegido, en mi caso calc.exe. Esto significa que no tendremos que trabajar con el segundo proceso porque el primero ya nos da el programa en bandeja de plata.

Lo unico que tenemos que hacer ahora es alinear y dumpear

Para alinearlo, cambiamos el RawOffset y RawSize de cada seccion por su VirtualOffset y VirtualSize respectivamente.

img5

y hacemos un dumpeado de memoria con por ejemplo, el dumper del plugin IsDebuggerPresent

img6

Obteniendo un PE valido y funcional.

Automatizarlo con TitanEngine es bastante sencillo, los pasos a seguir serian:

  • Setear un BP en WriteProcessMemory con la funcion SetAPIBreakPoint.
  • El callback encargado de procesar ese breakpoint, alineara y dumpeara la imagen :)

Para dumpear regiones de memoria tampoco nos tenemos que complicar mucho, ya que TitanEngine nos provee de la funcion DumpMemory.

Eso es todo amigos, un packer facilito siempre y cuando ataquemos el primer proceso. En las primeras pruebas arranque trabajando con el segundo proceso y la verdad es que cuesta mucho trabajar con los 2 procesos a la vez debido a que el SDK aun no nos provee de dichas funciones y lo tenemos que hacer a mano.

Todo este proceso fue automatizado en el siguiente plugin: bin src

p.d. Para los que estan interesados en crear algun plugin para FUU, les paso la buena noticia que ya no es necesario el uso de la funcion _DoUnpack para elegir setear nuestro primer callback.

Ahora directamente trabajamos con InitDebugEx que como ultimo argumento nos permite definir un bp que se ejecutara cuando llegue al callback del debuggee.

Tengan bien presente esto, ya que si tratan de definir bp en API's sin haber iniciado el DebugLoop, esta funcion no procesara el LOAD_DLL (CodeException 06) y por lo tanto no podran setear los bp debido a que no estan cargadas las dll's.