CORE SECURITY
Transcript of CORE SECURITY
![Page 1: CORE SECURITY](https://reader031.fdocuments.us/reader031/viewer/2022012518/61924ddcd2f9a1129677a6e1/html5/thumbnails/1.jpg)
P A G E
CORE SECURITY 2 threads, 1 app (Inyección en Dalvik VM)
Martín Balao | [email protected]
Martín Fernández | [email protected]
Octubre 2014
![Page 2: CORE SECURITY](https://reader031.fdocuments.us/reader031/viewer/2022012518/61924ddcd2f9a1129677a6e1/html5/thumbnails/2.jpg)
P A G E
Introducción
2
![Page 3: CORE SECURITY](https://reader031.fdocuments.us/reader031/viewer/2022012518/61924ddcd2f9a1129677a6e1/html5/thumbnails/3.jpg)
P A G E
¿Qué es un Web View?
3
Aplication View
HTML + JS
WebView
![Page 4: CORE SECURITY](https://reader031.fdocuments.us/reader031/viewer/2022012518/61924ddcd2f9a1129677a6e1/html5/thumbnails/4.jpg)
P A G E
WebView + addJavascriptInterface
4
HTML + JS Objeto Java
Expuesto
Puente
![Page 5: CORE SECURITY](https://reader031.fdocuments.us/reader031/viewer/2022012518/61924ddcd2f9a1129677a6e1/html5/thumbnails/5.jpg)
P A G E
addJavascriptInterface exploit – Java Reflection
5
getClass()
forName(Clase B)
Objeto Java expuesto
Clase A Clase B
…
Método_Estático_B
Invocación de métodos estáticos en clases Java
JS
Puente
![Page 6: CORE SECURITY](https://reader031.fdocuments.us/reader031/viewer/2022012518/61924ddcd2f9a1129677a6e1/html5/thumbnails/6.jpg)
P A G E
addJavascriptInterface exploit – OS commands
6
getClass()
forName(Java Runtime)
Objeto Java expuesto
Clase A Java
Runtime
…
Inyección de OS Commands
JS
Puente
exec
![Page 7: CORE SECURITY](https://reader031.fdocuments.us/reader031/viewer/2022012518/61924ddcd2f9a1129677a6e1/html5/thumbnails/7.jpg)
P A G E
Limitaciones del exploit – Java Reflection
• Desde Javascript, sólo se pueden invocar métodos Java que tengan como argumento tipos nativos o String
• Por lo anterior:
• No se pueden instanciar objetos
• No se puede interactuar con otras aplicaciones del ecosistema Android
7
![Page 8: CORE SECURITY](https://reader031.fdocuments.us/reader031/viewer/2022012518/61924ddcd2f9a1129677a6e1/html5/thumbnails/8.jpg)
P A G E
Limitaciones del exploit – OS Commands
• Hay un sand-boxing fuerte a nivel del sistema operativo
• Permisos RWX en el sistema de archivos
• No se pueden instalar nuevas aplicaciones desde el usuario de la aplicación vulnerada
• ¿Cómo interactuar con otras aplicaciones del ecosistema Android?
8
![Page 9: CORE SECURITY](https://reader031.fdocuments.us/reader031/viewer/2022012518/61924ddcd2f9a1129677a6e1/html5/thumbnails/9.jpg)
P A G E
Limitaciones del exploit – OS Commands
• Es posible levantar una segunda Dalvik VM pero no va a tener los permisos de la aplicación vulnerada: UID + PID
9
process_id_500 user_id_1234 app_vulnerable
process_id_432 user_id_1234 app_maliciosa
![Page 10: CORE SECURITY](https://reader031.fdocuments.us/reader031/viewer/2022012518/61924ddcd2f9a1129677a6e1/html5/thumbnails/10.jpg)
P A G E 1 0
Comunicación en Android • Context.ContentResolver
.query(URI(content://SMS))
![Page 11: CORE SECURITY](https://reader031.fdocuments.us/reader031/viewer/2022012518/61924ddcd2f9a1129677a6e1/html5/thumbnails/11.jpg)
P A G E
Objetivo
Usar los permisos de la aplicación vulnerada para interactuar con otras aplicaciones del ecosistema Android.
1 1
![Page 12: CORE SECURITY](https://reader031.fdocuments.us/reader031/viewer/2022012518/61924ddcd2f9a1129677a6e1/html5/thumbnails/12.jpg)
P A G E
Inyección en Dalvik VM
1 2
![Page 13: CORE SECURITY](https://reader031.fdocuments.us/reader031/viewer/2022012518/61924ddcd2f9a1129677a6e1/html5/thumbnails/13.jpg)
P A G E 1 3
Ejecutables en disco y memoria
![Page 14: CORE SECURITY](https://reader031.fdocuments.us/reader031/viewer/2022012518/61924ddcd2f9a1129677a6e1/html5/thumbnails/14.jpg)
P A G E
Mapa de memoria: cat /proc/<PID>/maps
• 00400000-0040b000 r-xp /bin/app
• 00c9a000-00cbb000 rw-p [heap]
• 7fcada45a000-7fcada617000 r-xp /lib/libc-2.17.so
• 7fff9acc0000-7fff9ace1000 rw-p [stack]
1 4
![Page 15: CORE SECURITY](https://reader031.fdocuments.us/reader031/viewer/2022012518/61924ddcd2f9a1129677a6e1/html5/thumbnails/15.jpg)
P A G E 1 5
¿Qué entendemos por inyección?
![Page 16: CORE SECURITY](https://reader031.fdocuments.us/reader031/viewer/2022012518/61924ddcd2f9a1129677a6e1/html5/thumbnails/16.jpg)
P A G E 1 6
Cambio de contexto
![Page 17: CORE SECURITY](https://reader031.fdocuments.us/reader031/viewer/2022012518/61924ddcd2f9a1129677a6e1/html5/thumbnails/17.jpg)
P A G E
Ptrace - Debugging
• Attacharse a un thread de un proceso
• Leer memoria
• Escribir memoria
• Modificar contexto de un thread (leer y escribir)
• Continuar proceso y handlear señales
1 7
![Page 18: CORE SECURITY](https://reader031.fdocuments.us/reader031/viewer/2022012518/61924ddcd2f9a1129677a6e1/html5/thumbnails/18.jpg)
P A G E 1 8
Inyección clásica
![Page 19: CORE SECURITY](https://reader031.fdocuments.us/reader031/viewer/2022012518/61924ddcd2f9a1129677a6e1/html5/thumbnails/19.jpg)
P A G E
Problemas de la inyección clásica
• Compilar shellcode
• Alocar memoria
• Crear thread
• Resolver símbolos • Para usar funciones de otras libs
1 9
![Page 20: CORE SECURITY](https://reader031.fdocuments.us/reader031/viewer/2022012518/61924ddcd2f9a1129677a6e1/html5/thumbnails/20.jpg)
P A G E 2 0
Inyección por dlopen
![Page 21: CORE SECURITY](https://reader031.fdocuments.us/reader031/viewer/2022012518/61924ddcd2f9a1129677a6e1/html5/thumbnails/21.jpg)
P A G E 2 1
Encontrar dlopen
![Page 22: CORE SECURITY](https://reader031.fdocuments.us/reader031/viewer/2022012518/61924ddcd2f9a1129677a6e1/html5/thumbnails/22.jpg)
P A G E 2 2
#include <stdio.h> #include <binder.h> #include <jni.h>
libAgent.so (C/C++, NDK)
__attribute__((constructor)) init_agent(){ pthread_create(agent_main_loop); raise(SIGINT); }
void agent_main_loop(){ sleep(5); // restauración del thread secuestrado … }
![Page 23: CORE SECURITY](https://reader031.fdocuments.us/reader031/viewer/2022012518/61924ddcd2f9a1129677a6e1/html5/thumbnails/23.jpg)
P A G E 2 3
Después de la inyección
![Page 24: CORE SECURITY](https://reader031.fdocuments.us/reader031/viewer/2022012518/61924ddcd2f9a1129677a6e1/html5/thumbnails/24.jpg)
P A G E 2 4
#include <jni.h>
libAgent.so (C/C++, NDK)
JavaVM* java_vm = AndroidRuntime::getJavaVM(); java_vm->AttachCurrentThread(…); java_vm->GetEnv(…);
• Instanciar objetos Java
• Invocar métodos de objetos Java
• Invocar métodos estáticos de clases Java
• Acceder a variables estáticas de clases Java
![Page 25: CORE SECURITY](https://reader031.fdocuments.us/reader031/viewer/2022012518/61924ddcd2f9a1129677a6e1/html5/thumbnails/25.jpg)
P A G E 2 5
APK Load – Java Agent
![Page 26: CORE SECURITY](https://reader031.fdocuments.us/reader031/viewer/2022012518/61924ddcd2f9a1129677a6e1/html5/thumbnails/26.jpg)
P A G E 2 6
libAgent – Java Agent
• Desde libAgent puedo acceder a todas las clases Java cargadas (ver métodos, atributos, instanciar)
• Desde Java Agent solo las de la SDK
• Pasar referencias a objetos desde libAgent a Java Agent (ej. Activity Thread).
![Page 27: CORE SECURITY](https://reader031.fdocuments.us/reader031/viewer/2022012518/61924ddcd2f9a1129677a6e1/html5/thumbnails/27.jpg)
P A G E 2 7
Context
• En Java Agent, no podemos heredar de Activity: ¿Quién nos instancia?
![Page 28: CORE SECURITY](https://reader031.fdocuments.us/reader031/viewer/2022012518/61924ddcd2f9a1129677a6e1/html5/thumbnails/28.jpg)
P A G E 2 8
Activity Thread
Class ActivityThread(){ static Handler sMainThreadHandler public static Application currentApplication() public static void main(String[] args) }
¿ NULL ?
![Page 29: CORE SECURITY](https://reader031.fdocuments.us/reader031/viewer/2022012518/61924ddcd2f9a1129677a6e1/html5/thumbnails/29.jpg)
P A G E 2 9
Ejecución en el Thread Principal
![Page 30: CORE SECURITY](https://reader031.fdocuments.us/reader031/viewer/2022012518/61924ddcd2f9a1129677a6e1/html5/thumbnails/30.jpg)
P A G E 3 0
Runnable
![Page 31: CORE SECURITY](https://reader031.fdocuments.us/reader031/viewer/2022012518/61924ddcd2f9a1129677a6e1/html5/thumbnails/31.jpg)
P A G E 3 1
Java Agent - Runnable Class JavaAgent{ public static Context app_context; public native Context get_context(); Class JavaAgentRunnable implements Runnable{ public void run(){ JavaAgent.app_context = get_context(); } } }
![Page 32: CORE SECURITY](https://reader031.fdocuments.us/reader031/viewer/2022012518/61924ddcd2f9a1129677a6e1/html5/thumbnails/32.jpg)
P A G E 3 2
Java Agent – Main loop Class JavaAgent{ public static Context app_context; public native Context get_context(); public void main_loop(){ JavaAgent.app_context.getContentResolver(). query(…) } }
![Page 33: CORE SECURITY](https://reader031.fdocuments.us/reader031/viewer/2022012518/61924ddcd2f9a1129677a6e1/html5/thumbnails/33.jpg)
P A G E
Demo
3 3
![Page 34: CORE SECURITY](https://reader031.fdocuments.us/reader031/viewer/2022012518/61924ddcd2f9a1129677a6e1/html5/thumbnails/34.jpg)
P A G E
Ambiente de ataque
3 4
![Page 35: CORE SECURITY](https://reader031.fdocuments.us/reader031/viewer/2022012518/61924ddcd2f9a1129677a6e1/html5/thumbnails/35.jpg)
P A G E
Conclusiones
3 5
![Page 36: CORE SECURITY](https://reader031.fdocuments.us/reader031/viewer/2022012518/61924ddcd2f9a1129677a6e1/html5/thumbnails/36.jpg)
P A G E
Conclusiones
• Si podemos debuggear, el PID como parte de la autenticación de una app puede ser bypasseado.
• APKs buildeados durante el desarrollo pueden terminar en producción (“Skip packaging and dexing…”).
• Una vulnerabilidad (ejecución sandboxeada) + una debilidad (privilege-escalation) pueden configurar un vector de ataque exitoso.
• No se limita a addJavascriptInterface: aplica para cualquier OS command injection.
• Target posible: apps a medida (ej. ambiente enterprise).
3 6
![Page 37: CORE SECURITY](https://reader031.fdocuments.us/reader031/viewer/2022012518/61924ddcd2f9a1129677a6e1/html5/thumbnails/37.jpg)
P A G E
Trabajo futuro
• Sniffear comunicaciones a través de Binder de la aplicación vulnerada
• Instrumentar dinámicamente libs cargadas en la memoria del proceso (ej. librerías criptográficas y libdvm.so)
• Fuzzear driver de Binder
3 7
![Page 38: CORE SECURITY](https://reader031.fdocuments.us/reader031/viewer/2022012518/61924ddcd2f9a1129677a6e1/html5/thumbnails/38.jpg)
P A G E
Trabajos relacionados y referencias
• WebView addJavascriptInterface Remote Code Execution - MWR Labs https://labs.mwrinfosecurity.com/blog/2013/09/24/webview-addjavascriptinterface-
remote-code-execution/
• Putting JavaScript Bridges into (Android) Context - MWR Labs https://labs.mwrinfosecurity.com/blog/2014/06/12/putting-javascript-bridges-into-android-context/
• Introduction to Dynamic Dalvik Instrumentation - Collin Mulliner http://www.mulliner.org/android/feed/mulliner_ddi_summercon2013.pdf
• Android Binder – Android Interprocess Communication - Thorsten Schreiber http://www.nds.rub.de/media/attachments/files/2012/03/binder.pdf
3 8
![Page 39: CORE SECURITY](https://reader031.fdocuments.us/reader031/viewer/2022012518/61924ddcd2f9a1129677a6e1/html5/thumbnails/39.jpg)
P A G E
¿Preguntas? Gracias.
3 9