9. 1. Creamos una máquina virtual usando el SDK.
2. Lanzamos el emulador y almacenamos las conexiones en un pcap:
• emulator –port n @device-name –tcpdump foo.pcap
3. Instalamos la aplicación
• adb install appname.apk
4. Lanzamos pruebas sobre el dispositivo y la aplicación
• adb shell monkey –v –p package.app n
5. Leemos los logs
• adb shell logcat –d
6. Podemos apoyarnos en Wireshark para leer los logs de conexiones.
Análisis Dinámico
10. • Llamadas de teléfono
• gsm call p-n
• gsm accept p-n
• gsm cancel p-n
• SMS
• sms send prefix-number text
• Emular velocidad de red
• netspeed gsm n
• netspeed umts n
• Cambiar coordenadas GPS
• geo fix -13… 21…
Simular Eventos
11. 1. AXMLPrinter2 – Extraemos la información del
AndroidManifest.xml
2. Dex2jar – Convertimos el fichero .dex en un fichero
de clases .jar.
JAD – Transformamos los ficheros .class en ficheros .jad
3. JDgui – Leemos el código almacenado en el fichero
.jar.
4. Understand – Análisis estático del código.
5. Wireshark – Análisis dinámico del código.
Modus Operandi
12. • Noob
• Nombrar ficheros de clases con el mismo nombre en minúscula/mayúscula.
Esto ocultará los ficheros en sistemas que no distingan entre minúsculas/mayúsculas:
N.class ~ n.class
• Cifrar las conexiones que realiza el malware (DES) dificultando su análisis.
• Rookie
• Introducir técnicas para comprobar si se está ejecutando en un emulador.
• Mejorar la eficiencia del código y ofuscarlo con alguna aplicación como ProGuard.
• Master of Universe
• Modificar el propio bytecode para inutilizar las herramientas de reversing.
Técnicas antianálisis
13. • Android está basado en el núcleo de Linux.
• Se usa MTD para interactuar con la memoria flash.
• Sigue la nomenclatura /dev/mtd*
• Puntos de montura para /system, /data, /cache están asociados a diferentes mtdblocks.
• Cada dispositiva está asociado a un dispositivo ro (Read Only).
• Es necesario ser usuario root para poder realizar un análisis forense.
• Exploits.
• Aplicaciones específicas
• A la hora de traernos los ficheros al disco podemos usar:
• Comando PULL del SDK para descargar/subir ficheros.
• Instalar un servidor SSH en el teléfono como DropBear.
• Instalar un servidor FTP.
• Hacer correlaciones de los diferentes puntos de montaje.
• Tener acceso a los datos y bases de datos.
Forensics
20. • Inicializamos el emulador (podemos especificar el puerto, seleccionar la VM, almacenar las conexiones, entre otras opciones).
• Instalamos la aplicación.
• Árbol inicial (Antes de la infección).
• Simulamos actividad
• Árbol final (Después de la infección)
Proceso de infección
21. • Obtiene el IMEI del dispositivo.
• Crea un fichero de configuración
• Ruta: com.nicky.lyyws.xamll/lib/shared_prefs
• Nombre fichero: XM_All_Setting
Fichero de configuración
24. • /sdcard/shangzhou/callrecord/
• setAudioSource(1)
• public static final int MIC
• Microphone audio source
• Constant Value: 1 (0x00000001)
• setOutputFormat(1)
• public static final int THREE_GPP
• 3GPP media file format
• Constant Value: 1 (0x00000001)
• setAudioEncoder(1)
• public static final int AMR_NB
• AMR (Narrowband) audio codec
• Constant Value: 1 (0x00000001)
Servicio de grabación
25. • Número SMS Premium: 15859268161.
• Envía un SMS con el IMEI.
• El número premium pertenece a Fujiance.
• Comprueba que la aplicación no corra en un emulador.
Servicio SMS
26. • Formato AMR
• AMR (Adaptative Multi-Rate) es un formato de compresión de audio
optimizado para la codificación de voz.
• El malware almacena el audio grabado en:
• /sdcard/shangzhou/callrecord
•El fichero creado tiene como nombre la fecha y hora en que fue creado:
• 20110907184158001 – año//mes/día– hora/minutos
Formato “AMR”
27. • Se basa en una simple condición de estado
• Usa dos simples métodos de autentificación
• checkAccess para comprobar que tenemos los suficientes permisos para ejecutar
la aplicación.
• handleServiceConnectionError para manejar los errores.
¿Protección en las aplicaciones?
28. Proceso manual
1. Desempacar el APK usando la herramienta Baksmali.
2. Realizar el cambio de código en los métodos checkAccess y handleServiceConnectionError .
3. Generar la clave privada con la que firmar el paquete.
4. Empacar el APK usando APKTool
5. Firmar la aplicación con jargsigner
6. Usar zipalign
7. Instalar y disfrutar.
Proceso automatizado
• Sólo es necesario revertir la librería encargada de veriticar las licencias (License
Verification Library)
• Usar la herramienta anti-lvl:
Rompiendo la protección
29. • Vulnerabilidad “Touch-Event Hijacking”
• Podemos mostrar al usuario una interfaz tapadera.
• Hacer compras, click en banners de publicidad, instalar aplicaciones,
saltarnos los permisos, o incluso robar cualquier tipo de información
del teléfono
• ¿Cómo funciona?
• A través de Toasts , que permiten pasar los eventos a las capas
inferiores
• ¿Qué versiones se ven afectadas?
• Según Google ninguna, esta vulnerabilidad está corregida.
• Remitiéndonos a las pruebas, a día de hoy <= 2.3.4
• ¿Qué piensa Google de todo esto?
TapJacking
30. • Se han diseñado un total de 4 payloads
• CallPayload.java – Realiza llamadas al número de indicado.
• MarketPayload.java – Descarga e instala aplicaciones del market.
• ResetPayload.java – Devuelve al estado de fábrica el teléfono.
• SMSPayload.java – Envía un mensaje de texto al número indicado.
• Está diseñado para que se puedan añadir payloads por el usuario de forma sencilla.
• La estructura interna es la siguiente:
• Main.java – Ejecuta el servicio y carga los payloads.
• MalwarePayload.java – Abstracción para implementar más fácilmente los payloads.
• MalwareService.java – Crea el toast e inicia el proceso de tap-jack.
• main.xml – Tiene el layout de la aplicación, lanzando con un evento onClick cada payload.
• strings.xml – Contiene las cadenas que son utilizadas en la aplicación.
• El código puede descargarse desde:
• http://code.google.com/p/tap-android/
¿Cómo está organizado?