Está en la página 1de 26

Compilador ROP

Christian Heitman
Fundaci on Dr. Manuel Sadosky
Septiembre de 2013
1 / 26
Return Oriented Programming

Los mecanismos de protecci on actual previenen la ejecuci on de


c odigo en p aginas de datos.

La t ecnica ROP permite evadir estos mecanismos.

Consiste en utilizar fragmentos de c odigo dentro de un binario,


llamados gadgets, para computar ciertas operaciones.

Encadenando varios gadgets se puede armar funciones


arbitrarias.
2 / 26
Return Oriented Programming
3 / 26
ROPC

Es un PoC de un compilador ROP Turing Complete.

GitHub del autor: http://github.com/pakt

Posee un lenguaje de programaci on similar a C + ASM,


llamado ROPL.

Saltos condicionales

Funciones (soporta recursi on)

Variables locales

Etiquetas

Punteros, dereferenciaci on de memoria, etc.


Hola Mundo (ROPL)
4 / 26
ROPC

Est a basado en el paper Q: Exploit Hardening Made Easy.

Est a escrito en OCaml.


Hola Mundo
Sumar una lista de enteros
5 / 26
Q / BAP

Q es similar a ROPC pero no est a disponible.

BAP es una plataforma de an alisis de binarios, con enf asis en la


vericaci on formal.

ROPC utiliza BAP para varias cosas:

Pasar c odigo x86 a un lenguaje intermedio

Ejecuci on simb olica

Interacci on con SMT solvers


6 / 26
SMT (Satisability Modulo Theories)

Extensi on de SAT solver para trabajar con otros tipos de teoras,


por ejemplo, teora aritm etica.

Con SAT podemos responder cosas del estilo:

Existen r , p, q tales que (r p) (q p)

Con SMT podemos responder cosas del estilo:

Existen x, y tales que 2x + 5y = 12 x > 2 y > 1

SMT permite modelar f acilmente c odigo binario y podemos


preguntar sobre propiedades del mismo

Por ejemplo, el gadget g es sem anticamente equivalente a una


suma?

Lo logramos expresando el gadget mediante f ormulas y a nadiendo


las restricciones que queremos que cumpla.
7 / 26
ROPC - Estructura/Etapas

Gadgets:

Descubrimiento : procedimiento estandar

Clasicaci on : mediante ejecuci on simb olica

Cargar una constante : reg valor

Copiar un registro : reg dst reg src

Operaci on aritm etica : reg reg 1 OP reg 2

Escribir a memoria : mem[addr + offset] reg

Leer de memoria : reg mem[addr + offset]

Leer y operar : reg reg OP mem[addr + offset]

Operar y escribir : mem[addr + offset] reg OP mem[addr + offset]

Vericaci on : mediante SMT solvers


8 / 26
ROPC - Estructura/Etapas

Parsing:

Parsea un programa en ROPL y genera un AST (Abstract Syntax


Tree)

Transformaci on:

Transforma el AST a una lista de pseudo instrucciones y en forma


SSA (Static Single Assigment)

Compilaci on:

Matching casi directo entre instrucciones simplicadas y gadgets

Busca una asignaci on de registros y gadgets que eviten conictos


entre los mismos.
9 / 26
ROPC - Workow
10 / 26
LLVM

Conjunto de herramientas para el desarrollo de compiladores.

Tiene un lenguaje intermedio llamado LLVM IR

Existen front-ends para C/C++/Objective-C, etc que generan


LLVM IR

Ejemplo del IR:


C odigo C
11 / 26
LLVM
IR LLVM
12 / 26
ROPC - Soporte B asico para LLVM

La idea es poder usar cualquier lenguaje que tenga un front-end


de LLVM para desarrollar un exploit

Se trat o de modicar lo menos posible el c odigo de ROPC.

La opci on eligida fue traducci on de ASTs: LLVM ROPL

Hay ventajas y desventajas:

Modicaciones mnimas al c odigo actual

Hay que lidiar con algunas limtaciones de ROPL

Por lo tanto,

Se implement o un parser/lexer de LLVM

Se implement o un traductor entre el AST de LLVM y el AST de


ROPL.

Antes, se hizo refactoring del c odigo y se crearon m odulos bien


denidos.

Una vez conseguido eso se pudo compilar ROP partiendo de un


.c (bueno, maso. . . )
13 / 26
ROPC - Workow con LLVM
14 / 26
Parseando LLVM

LLVM incluye mucha informaci on que, a nes pr acticos de lo que


estamos haciendo, no es necesaria:

Atributos de funciones

Informaci on de tipado

Metadata

Etc.

Durante el parseo y la generaci on del AST, se descarta esta


informaci on.

El IR de LLVM es bastante extenso

Escribimos programas b asicos en C

Los compilamos al IR (con clang)

Implementamos las instrucciones necesarias para poder


compilarlos a ROP.

El AST generado est a pensado para que sea lo m as parecido al


de ROPL

Esto facilita la implementaci on del traductor de ASTs


15 / 26
Traducci on entre ASTs (LLVM ROPL)

Hay instrucciones que no tiene un matching inmediato

Hay funcionalidades que no est an soportadas en ROPL

Para estos casos, se hace la traducci on en 2 etapas,

Simplicaci on / Reescritura del AST de LLVM

Resoluci on

Por ejemplo,

Branches:

Consta de 2 instrucciones diferentes, comparaci on y salto, la


condici on de salto est a en una y las etiquetas en otra.

GetElementPtr:

Es una instrucci on compleja para calcular el offset dentro de un


arreglo / estructura.

Return:

La instrucci on return de ROPL no retorna valores.


16 / 26
ROPC - Ejemplo
b.ropl b.ropl (parseado)
17 / 26
ROPC con Soporte para LLVM - Ejemplo
b.c funci on b (LLVM) funci on main (LLVM)
18 / 26
ROPC con Soporte para LLVM - Ejemplo
funci on b (parseado) funci on main (parseado)
19 / 26
ROPC con Soporte para LLVM - Ejemplo
20 / 26
Problemas Encontrados

Limitaciones de ROPL. . .

Variables globales

En ROPC, todas las variables son globales

Hay una tabla donde est an denidas

Las variables globales (de LLVM), se inicializan al comienzo del


main en la traducci on.

Intrinsics de LLVM

Funciones conocidas, muy difundidas y con sem antica denida:

memcpyllvm.memcpy

memmovellvm.memmove

memsetllvm.memset

Etc.

Pueden aparecer en c odigo LLVM sin, necesariamente, haberlas


usado en el c odigo C.
21 / 26
Limitaciones

Por el momento, es solo un PoC. . .

El c odigo ROP generado es muy grande para ser usado en un


ambiente de producci on.

Escrito en OCaml, lenguaje no muy difundido. . .


22 / 26
Trabajo Futuro

Optimizar c odigo generado

Soportar un subconjunto m as grande de LLVM


23 / 26
Referencias

ROPC - Soporte para LLVM

http://github.com/programa-stic/ropc-llvm

ROPC

http://github.com/pakt/ropc

Non-exec stack

http://seclists.org/bugtraq/2000/May/90

Future of buffer overows ?

http://seclists.org/bugtraq/2000/Nov/32

Advanced return-into-lib(c) exploits (PaX case study)

http://www.phrack.com/issues.html?issue=58&id=
4&mode=txt
24 / 26
Referencias

The Geometry of Innocent Flesh on the Bone: Return-into-libc


without Function Calls (on the x86)

http://cseweb.ucsd.edu/

hovav/dist/geometry.pdf

Q: Exploit Hardening Made Easy

http://users.ece.cmu.edu/

ejschwar/papers/usenix11.pdf

BAP : The Next-Generation Binary Analysis Platform

http://bap.ece.cmu.edu/

SMT Solvers for Software Security

http://www.usenix.org/system/files/conference/
woot12/woot12-final26.pdf
25 / 26
Gracias!
Me contactan en:
26 / 26

También podría gustarte