ISSUE 535 November 1 Green Triangle toasts united forest ...
Show me your Kung-Fu · • A través de Toasts , que permiten pasar los eventos a las capas...
Transcript of Show me your Kung-Fu · • A través de Toasts , que permiten pasar los eventos a las capas...
@jorgemieres Jorge Mieres [email protected]
Show me your
Kung-Fu
Sebastián Guerrero
[email protected] http://blog.seguesec.com
@0xroot
Contenido
• Introducción
• Análisis Estático
• Análisis Dinámico
• Análisis Forense
• Nickispy
• Protecciones
• Vulnerabilidades
• Conclusión
Estructura del sistema
Ficheros APK
• Usado para empacar las aplicaciones
• Todo APK incluye:
• classes.dex
• resources.asc
• /res
• /META-INF
• AndroidManifest.xml
Formato de ficheros DEX
Android Manifest
Ejemplo de código
• java/Fuente (Compiler) – dex/dexdump
• dex/dex2jar (jdgui) – java/jd-gui
• dex/dexdump (basksmali) - smali/basksmali
Análisis Estático
Análisis Dinámico
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.
Simular Eventos
• 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…
Modus Operandi
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.
Técnicas antianálisis
• 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.
Forensics
• 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.
Encrip… What da fuck?
Si pierdes tu teléfono prepárate para…
NickiSpy
• Alerta de seguridad - 19 julio
• Detectado por Symantec ~ 20apps
• Procedencia – Fujian (China)
• Nombre – com.nicky.lyyws.xmall
• Desarrollado por – 56mo http://www.56mo.com
• Descargar desde – http://user.c5005.com/DownList.aspx
Estadísticas
• No se distribuyó nunca por el Market.
• Se puede descargar desde la página de la compañía:
• Elegir marca de Smartphone.
• Elegir modelo concreto.
• Acto seguido fue distribuido por varios Markets chinos
• CamangiMarket - camangimarket.com
• GoAPK - goapk.com
•
•
MD5 Ratio Fecha
ad4dbe34853f1d58543b0b8db133eb5b 10/44 2011.08.31
a21ae2802a0ee460ca2d17a9102ff7b1 14/44 2011.09.04
15afe9bfa1b3139b5727112aa12b8f70 19/44 2011.08.31
426cedcf268bdf556aa405e0c8e03c16 20/44 2011.08.31
0d2d9504649a97e7afee2caca61e277e 15/44 2011.09.02
0d2d9504649a97e7afee2caca61e277e 15/44 2011.09.02
83a98eabf044826622db7c211764cdf4 13/44 2011.08.23
298446914e6c845fb331bfbfd2176d9d 26 /44 2011.08.23
f6cea3c1c0e9d2cf0ec373f142852399 12/44 2011.08.23
f4514598c47658e513888ae6cb3fd8b1 23 /44 2011.08.14
1cbb2e45356bad1f3ecb103ed76dffdd 9 /44 2011.08.11
a72adce41ea55c239ef04fbda446ceb1 2/44 2011.09.02
edf5d97f1d47bdb3ca9c414f33337a87 7/44 2011.08.12
0e7989aac352df525e5ebb077c786072 9/44 2011.08.11
5664e00084e949b07227459d8bdaf9f3 13/44 2011.08.10
a21ae2802a0ee460ca2d17a9102ff7b1 14/44 2011.09.04
18 muestras ~ 1ª muestra (19.07) ~ Detectadas (11.08-04.09)
Autor
Lista de permisos
•android.permission.CALL_PHONE
•android.permission.PROCESS_OUTGOING_CALLS
•android.permission.INTERNET
•android.permission.ACCESS_GPS
•android.permission.ACCESS_COARSE_LOCATION
•android.permission.ACCESS_COARSE_UPDATES
•android.permission.ACCESS_FINE_LOCATION
•android.permission.READ_PHONE_STATE
•android.permission.READ_CONTACTS
•android.permission.WRITE_CONTACTS
•android.permission.ACCESS_WIFI_STATE
•android.permission.SEND_SMS
•android.permission.READ_SMS
•android.permission.WRITE_SMS
•android.permission.WAKE_LOCK
•android.permission.RECORD_AUDIO
•android.permission.WRITE_EXTERNAL_STORAGE
Proceso de infección
• 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)
Fichero de configuración
• Obtiene el IMEI del dispositivo.
• Crea un fichero de configuración • Ruta: com.nicky.lyyws.xamll/lib/shared_prefs
• Nombre fichero: XM_All_Setting
Servidor C&C
• Servidor C&C: jin.56mo.com
• Puerto: 2018
Análisis I
Servicio de grabación
• /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 SMS
• 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.
Formato “AMR”
• 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
¿Protección en las aplicaciones?
• 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.
Rompiendo la protección
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 manual
Proceso automatizado
• Sólo es necesario revertir la librería encargada de veriticar las licencias (License
Verification Library)
• Usar la herramienta anti-lvl:
TapJacking
• 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?
¿Cómo está organizado?
• 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/
Conclusiones
@jorgemieres Jorge Mieres [email protected]
@jorgemieres
¡MUCHAS GRACIAS! Sebastián Guerrero
[email protected] http://blog.seguesec.com
@0xroot