Saltar al contenido principal
Show me your
                                             Kung-Fu




Sebastián Guerrero
 Jorge Mieres                                         @0xroot
sguerrero@malwareint.com   http://blog.seguesec.com   @jorgemieres
 jamieres@malwareint.com
Contenido
  •   Introducción
  •   Análisis Estático
  •   Análisis Dinámico
  •   Análisis Forense
  •   Nickispy
  •   Protecciones
  •   Vulnerabilidades
  •   Conclusión
Estructura del sistema
• Usado para empacar las aplicaciones
               • Todo APK incluye:
                    • classes.dex
                   • resources.asc
                   • /res
                   • /META-INF
                   • AndroidManifest.xml




Ficheros APK
Formato de ficheros DEX
Android Manifest
• java/Fuente (Compiler) – dex/dexdump
• dex/dex2jar (jdgui) – java/jd-gui
• dex/dexdump (basksmali) - smali/basksmali




Ejemplo de código
Análisis Estático
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
• 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
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
• 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
• 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
Encrip… What da fuck?
Si pierdes tu teléfono prepárate para…
• 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




NickiSpy
• No se distribuyó nunca por el Market.                    MD5                                    Ratio      Fecha
                                                           ad4dbe34853f1d58543b0b8db133eb5b       10/44      2011.08.31
• Se puede descargar desde la página de la compañía:
       • Elegir marca de Smartphone.                       a21ae2802a0ee460ca2d17a9102ff7b1       14/44      2011.09.04
      • Elegir modelo concreto.                            15afe9bfa1b3139b5727112aa12b8f70       19/44      2011.08.31

• Acto seguido fue distribuido por varios Markets chinos   426cedcf268bdf556aa405e0c8e03c16       20/44      2011.08.31
       • CamangiMarket - camangimarket.com                 0d2d9504649a97e7afee2caca61e277e       15/44      2011.09.02
      • GoAPK - goapk.com
                                                           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)
  Estadísticas
Autor
•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




Lista de permisos
• 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
• 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
• Servidor C&C: jin.56mo.com
               • Puerto: 2018



Servidor C&C
Análisis I
• /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
• 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
• 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”
• 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?
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
•   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
• 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?
Conclusiones
¡MUCHAS GRACIAS!
Sebastián Guerrero
 Jorge Mieres                                         @0xroot
sguerrero@malwareint.com   http://blog.seguesec.com   @jorgemieres
 jamieres@malwareint.com