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

Malware intelligence ppt-slides

  • 1.
    Show me your Kung-Fu Sebastián Guerrero Jorge Mieres @0xroot sguerrero@malwareint.com http://blog.seguesec.com @jorgemieres jamieres@malwareint.com
  • 2.
    Contenido • Introducción • Análisis Estático • Análisis Dinámico • Análisis Forense • Nickispy • Protecciones • Vulnerabilidades • Conclusión
  • 3.
  • 4.
    • Usado paraempacar las aplicaciones • Todo APK incluye: • classes.dex • resources.asc • /res • /META-INF • AndroidManifest.xml Ficheros APK
  • 5.
  • 6.
  • 7.
    • java/Fuente (Compiler)– dex/dexdump • dex/dex2jar (jdgui) – java/jd-gui • dex/dexdump (basksmali) - smali/basksmali Ejemplo de código
  • 8.
  • 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 detelé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
  • 14.
  • 15.
    Si pierdes tuteléfono prepárate para…
  • 16.
    • Alerta deseguridad - 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
  • 17.
    • No sedistribuyó 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
  • 18.
  • 19.
  • 20.
    • Inicializamos elemulador (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 elIMEI 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
  • 22.
    • Servidor C&C:jin.56mo.com • Puerto: 2018 Servidor C&C
  • 23.
  • 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 SMSPremium: 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 basaen 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 handiseñ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?
  • 31.
  • 32.
    ¡MUCHAS GRACIAS! Sebastián Guerrero Jorge Mieres @0xroot sguerrero@malwareint.com http://blog.seguesec.com @jorgemieres jamieres@malwareint.com