La aparicion del bit NX en los CPUs de Intel y el uso de este en los sistemas operativos actuales marcó un antes y un después en la forma de explotacion de bug binarios. Con el tiempo, la ejecucion directa de DATOS fué perdiendo terreno y reemplazada por DEP (Data Execution Prevention), obligando a mejorar las tecnicas usadas hasta el momento. Hoy en día, no es posible tomar el control de una aplicacion moderna sin usar ROP (Returned Oriented Programming). ROP implica usar GADGETS (generalmente pequeños grupos de instrucciones) que no siempre son detectables por gadget-finders primitivos (la mayoría). La evolucion en la forma de explotacion de SEHs mas el uso de gadgets podría ser un muy buen ejemplo de esto: First-generation exploits (DEP disabled): - "pop REG" - "pop REG" - "ret" <--- Stack address Second-generation exploits (DEP enabled): - "mov REG,[ebp+0xc]" - "mov [esp],REG" - "call dword [REG+0x8]" <--- Stack Pivoting address En esta presentacion voy a mostrarles una tool recientemente desarrollada que, usando: * El "CPU/MMU" de QEMU (x86) * Taint Analysis * Snapshot del proceso * Busqueda por objetivo Es capaz de encontrar, a través de CODE EMULATION, todos los gadgets existentes en el espacio de memoria del proceso. En la segunda parte de la presentacion, se mostrarán las heuristicas implementadas para generar ROP-CHAINS.