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!.