Biblioteca Online : ¡La Suscripción ENI por 9,90 € el primer mes!, con el código PRIMER9. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Seguridad informática y Malwares
  3. Malwares dirigidos contra los sistemas Android
Extrait - Seguridad informática y Malwares Análisis de amenazas e implementación de contramedidas (3ª edición)
Extractos del libro
Seguridad informática y Malwares Análisis de amenazas e implementación de contramedidas (3ª edición) Volver a la página de compra del libro

Malwares dirigidos contra los sistemas Android

Introducción

Se estima que hay más de 7 700 millones de abonados a la telefonía móvil en el mundo. En España, el 96 % de los ciudadanos tiene un teléfono móvil (el 66 % de la población mundial tiene un móvil, datos de 2022 según Forrester). Es natural que esos equipos también sean el objetivo de los programadores de malwares. El mercado se divide principalmente en dos actores: Android, desarrollado por Google y iOS, desarrollado por Apple. Este capítulo está dedicado al sistema operativo Android. Android representa en 2023 casi el 71 % de los teléfonos presentes en el mundo (fuente: StatCounter), lo que hace de este sistema un objetivo prioritario.

Este capítulo presentará rápidamente Android, así como su sistema de aplicaciones. Veremos los principales vectores de infecciones específicas en los terminales móviles. Al igual que en los capítulos anteriores, veremos cómo crear nuestro propio laboratorio de análisis, tanto en una máquina virtual como en un teléfono físico. Para finalizar, veremos cómo analizar una aplicación maliciosa, las técnicas utilizadas por los desarrolladores de malwares y las herramientas que nos ayudarán en esta tarea.

El sistema operativo Android

1. Historia

La primera versión del sistema operativo Android se publicó en 2007. Hasta febrero de 2023, existían catorce versiones de este sistema operativo y muchas otras subversiones. Este sistema operativo está basado en el núcleo (kernel) Linux. Las versiones de Android se pueden identificar gracias a un número de versión, pero también gracias a un nombre en clave proporcionado por Google. He aquí un recapitulativo de las distintas versiones de Android:

Versión

Fecha de publicación

Nombre en clave

Kernel Linux

1.0

Noviembre 2007

-

-

1.1

Octubre 2008

Petit Four

-

1.5

Abril 2009

Cupcake

2.6.27

1.6

Septiembre 2009

Donut

2.6.29

2.1.x

Octubre 2009

Eclair

2.6.29

2.2.x

Mayo 2010

Froyo

2.6.32

2.3.x

Diciembre 2010

Gingerbread

2.6.35

3.x.x

Febrero 2011

Honeycomb

2.6.36

4.0.x

Octubre 2011

Ice Cream

Sandwich

3.0.1

4.1.x / 4.2.x /4.3.x

Julio 2012

Jelly Bean

3.0 - 3.1

4.4.x

Octubre 2013

KitKat

3.4

5.x.x

Noviembre 2014

Lollipop

3.10

6.0

Octubre 2015

Marshmallow

3.10 - 3.18

7.x

Agosto 2016

Nougat

3.18 - 4.4

8.x

Agosto 2017

Oreo

4.4 - 4.9

9.0.x

Diciembre 2018

Pie

4.14

10.x

Septiembre 2019

Quince tart

11.x

Septiembre 2020

Red velvet cake

12.x

Octubre 2021

Snow cone

13.x

Agosto 2022

Tiramisu

14.x

Febrero 2023

Upside down cake

Las principales versiones que todavía circulan son Oreo y Pie (Android 10.0), así como Android 12.

El sistema operativo permite gestionar el material del teléfono, como la pantalla, teclado (físico o virtual), sensores (acelerómetro, GPS…), conexiones (Wi-Fi, Bluetooth, telefonía…), cámara, puerto USB e incluso la tarjeta de memoria. El sistema operativo ofrece una API a los desarrolladores de aplicaciones para que todos los modelos de dispositivos que usen ese sistema operativo utilicen la misma.

Es interesante recalcar que Android funciona en teléfonos y tabletas, pero también en otros dispositivos más exóticos, como televisiones o incluso frigoríficos. Esto nos lleva a plantearnos interrogantes en lo relativo a la seguridad de los objetos conectados. ¿Habrá frigoríficos infectados en los próximos años?

2. Arquitectura

Android no es una simple distribución Linux, sino un sistema operativo completo. Google ha desarrollado distintas capas aplicativas, desde la capa de abstracción de hardware hasta la interfaz gráfica pasando por las máquinas virtuales Java que permiten que las aplicaciones Android funcionen. He aquí un esquema de la arquitectura de Android:

Images/cap5_img01.png

Detengámonos más de cerca en cada una de las capas de la arquitectura Android de abajo hacia arriba.

Hardware

Esta capa no representa realmente el sistema operativo; sin embargo, todo comienza por el equipo soporte físico (hardware en inglés). Esta capa abarca todos los aspectos físicos del dispositivo móvil: pantalla, sensor, conexiones, etc.

Núcleo de Linux

El kernel (núcleo) de Linux permite establecer el vínculo entre la parte puramente aplicativa y la parte material. A lo largo de los años, Android ha modificado ligeramente el kernel de Linux con el objetivo de optimizar algunas tareas del núcleo. Por ejemplo, se ha implementado ASHMem (Anonymous Shared Memory, Memoria anónima compartida) como mecanismo para compartir la memoria. Binder es una implementación hecha por Android de los IPC (Inter Process Call, llamada interproceso) con el objetivo de permitir una comunicación entre los procesos. Logger es un sistema de registro de eventos a nivel del kernel implementado también por Android. A estas modificaciones del kernel de Linux hechas por Android se las conoce por el término Androidisms

El kernel lleva también al HAL (Hardware Abstraction Layer, capa de abstracción de hardware). Esta capa permite que una aplicación pueda comunicarse de manera transparente con el hardware...

Vectores de infección

1. Instalar usando Google Store

Las aplicaciones Android se instalan, teóricamente, desde Google Store. Los atacantes intentan utilizar el mismo procedimiento. Los usuarios confían en la Store y los desarrolladores de malwares se aprovechan de ello para infectar el máximo número de usuarios. Por ejemplo, el malware BeiTaAd es un adware que estaba alojado y se expandió por la tienda de Android. En 2019, se identificaron más de 230 aplicaciones que contenían dicho malware. Este se hacía pasar, principalmente, por un paquete de soporte de idiomas y temas.

Es difícil elegir víctimas específicas a través de la store de Google. Generalmente, el objetivo de los malwares que utilizan dicha tienda es infectar un número máximo de víctimas.

En el caso de BeiTaAd, el malware estuvo disponible durante más de siete meses e infectó miles de dispositivos a través de todo el mundo.

2. Instalar usando tiendas alternativas

Existen tiendas (stores) alternativas a la de Google. Samsung, por ejemplo, dispone de un store desde hace años y Huawei ha creado una alternativa desde el veto de E.E. U.U. en 2019. También existen tiendas mantenidas por la comunidad y no por empresas. Al igual que sucede con Google Store, los atacantes pueden utilizarlas con el objetivo de desplegar sus malwares en los dispositivos de los usuarios....

Crear un laboratorio de análisis

1. ¿Máquina virtual o teléfono físico?

Con el fin de poder analizar una aplicación, instalarla y manipularla, necesitamos un laboratorio de análisis. Para esto tenemos dos soluciones: la virtualización o un dispositivo físico. Cada una de estas soluciones tiene sus ventajas e inconvenientes.

Android en una máquina virtual

Existe un Android portado en x86. Este nos permite ejecutar Android en una máquina virtual en un ordenador estándar con VirtualBox (u otra herramienta de virtualización). Este Android portado está disponible en: https://www.fosshub.com/Android-x86.html

He aquí el procedimiento de instalación en VirtualBox.

El primer paso consiste en crear la máquina virtual haciendo clic en Máquinay después en Nueva. Se nos pide el nombre de la máquina virtual, tipo e imagen ISO por usar:

Images/cap5_img02.png

En la pantalla siguiente, se nos solicita la contraseña de usuario, nombre de la máquina y dominio. El siguiente paso consiste en añadir memoria RAM y procesadores. Un valor de 4 GB de RAM es una cifra realista para un dispositivo móvil. Después, VirtualBox nos pide el tamaño del disco duro que se va a crear. Son necesarios 16 GB como mínimo para poder trabajar cómodamente.

La máquina virtual está casi lista. Ya se puede instalar el sistema operativo:

Images/cap5_img03.png

El procedimiento es bastante simple: basta con ir al menú de instalación y seguir los pasos del instalador. Una vez la instalación finalizada, la máquina virtual queda lista para su uso y ya se puede lanzar:

Images/cap5_img04.png

Esta es la configuración de la máquina virtual al final de la operación:

Images/cap5_img05.png

El uso de una máquina virtual es muy práctico y no necesita de ningún equipo particular. Sin embargo, tiene muchas limitaciones. Por ejemplo, Android-x86 solamente puede ejecutar binarios x86 o x64. Si un malware carga un binario para ARM o ARM64, la ejecución será imposible y el binario fallará. Un malware podrá identificar fácilmente que está en una máquina virtual porque no hay servicio GSM, ni tarjeta SIM, etc. Por este motivo, muchos analistas utilizan dispositivos físicos para analizar malwares en Android. 

Android en un dispositivo físico

El uso de un dispositivo físico para el análisis de malwares es a menudo la elección más simple. Se puede utilizar cualquier teléfono con Android. Rootearlo puede ser buena idea para facilitar el análisis. No todos los teléfonos se pueden rootear; es conveniente comprobar si el dispositivo en cuestión lo es en foros especializados, como XDA Developers: https://forum.xda-developers.com. Para que el dispositivo parezca un dispositivo estándar, vale la pena añadir algunas aplicaciones, una tarjeta SIM de prepago desechable o incluso tener una cuenta Google dedicada al análisis.

Sin embargo, hay que tener cuidado y no activar el GPS: esto podría dar nuestra geolocalización al atacante que ha desarrollado el malware que estamos analizando si este recupera esta información. En el caso de los análisis en Android, hay que tener mucho cuidado con los datos que se encuentren en el dispositivo de prueba y con los datos a los que el atacante podría tener acceso si el teléfono ejecuta la aplicación maliciosa.

2. Adb (Android Debug Bridge)

Adb es una consola interactiva que permite realizar diferentes acciones en un dispositivo Android usando su puerto USB. Adb forma parte de la suite SDK Platform Tools de Android y puede descargarse en: https://developer.android.com/studio/releases/platform-tools.html

Para activar el depurador en el dispositivo Android, dependiendo de la versión de Android, habrá que mostrar el menú Opciones para desarrolladores. Para activar la depuración por USB se debe acceder a Configuración - Sistema - Avanzado - Opciones para desarrolladores y finalmente Depuración por USB. En la primera conexión a un ordenador, el teléfono...

Análisis estático y descompilación de una aplicación

Para ilustrar esta sección, analizaremos dos malwares diferentes: KevDroid (md5: 56b1f4800fa0e083caf0526c3de26059) y FakeSpy (md5: a5cb6cd85b134a7b5d2f871a0b596d3f). Los analizaremos ambos en función de los mecanismos implementados por los desarrolladores.

1. Analizar un archivo APK

Para empezar, trabajaremos con el malware KevDroid. El primer paso consiste en listar los permisos que necesita esta apk:

paul@lab:~$ aapt dump permissions KevDroid.apk  
package: com.cool.pu  
uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' 
uses-permission: name='android.permission.READ_CALL_LOG'  
uses-permission: name='android.permission.READ_SMS'  
uses-permission: name='android.permission.RECEIVE_SMS'  
uses-permission: name='android.permission.RECORD_VIDEO'  
uses-permission: name='android.permission.RECORD_AUDIO'  
uses-permission: name='android.permission.CAMERA'  
uses-permission: name='android.permission.READ_PHONE_STATE'  
uses-permission: name='android.permission.PROCESS_OUTGOING_CALLS' 
uses-permission: name='android.permission.ACCESS_FINE_LOCATION'  
uses-permission: name='android.permission.ACCESS_COARSE_LOCATION' 
uses-permission: name='android.permission.GET_ACCOUNTS'  
uses-permission: name='android.permission.READ_CONTACTS'  
uses-permission: name='android.permission.READ_EXTERNAL_STORAGE'  
uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' 
uses-permission: name='android.permission.ACCESS_NETWORK_STATE'  
uses-permission: name='android.permission.INTERNET'  
uses-permission: name='android.permission.READ_FRAME_BUFFER'  
uses-permission: name='android.permission.ACCESS_SUPERUSER'  
uses-permission: name='com.google.android.c2dm.permission.RECEIVE' 
uses-permission: name='android.permission.WAKE_LOCK'  
permission: com.cool.pu.permission.C2D_MESSAGE  
uses-permission: name='com.cool.pu.permission.C2D_MESSAGE' 

La lista de los permisos nos permite ver rápidamente las probables funcionalidades de KevDroid :

  • RECEIVE_BOOT_COMPLETED: esta aplicación tiene el permiso de iniciarse al arrancar el dispositivo;

  • READ_CALL_LOG: esta aplicación puede leer el historial de llamadas;

  • READ_SMS: esta aplicación puede leer los SMS almacenados;

  • RECEIVE_SMS: esta aplicación puede leer los SMS recibidos;

  • RECORD_VIDEO: esta aplicación puede grabar vídeos usando la cámara;

  • RECORD_AUDIO: esta aplicación puede grabar a través del micrófono (sonido, voz);

  • CAMERA: esta aplicación puede grabar usando la cámara (imágenes, vídeos);

  • READ_PHONE_STATE: esta aplicación puede obtener información del dispositivo como su ID o el IMEI del proveedor de telefonía;

  • PROCESS_OUTGOING_CALLS: esta aplicación puede realizar llamadas telefónicas;

  • ACCESS_FINE_LOCATION: esta aplicación puede recuperar la geolocalización exacta del dispositivo;

  • ACCESS_COARSE_LOCATION: esta aplicación puede recuperar la geolocalización aproximada del dispositivo;

  • GET_ACCOUNTS: esta aplicación puede recuperar la información sobre las cuentas guardadas en el dispositivo;

  • READ_CONTACTS: esta aplicación puede leer la información de los contactos que se encuentren en el dispositivo (apellido, nombre, número, fotografía, etc.);

  • READ_EXTERNAL_STORAGE: esta aplicación puede leer lo que esté guardado en el almacenamiento externo;

  • WRITE_EXTERNAL_STORAGE: esta aplicación puede escribir en el almacenamiento externo;

  • ACCESS_NETWORK_STATE: esta aplicación puede comprobar el estado de la red;

  • INTERNET: esta aplicación puede usar Internet;

  • READ_FRAME_BUFFER: este derecho le permite, por ejemplo, hacer capturas de pantalla del dispositivo;

  • ACCESS_SUPERUSER: le permite obtener los derechos de root (superuser) si el teléfono esta rooteado;

  • WAKE_LOCK: esta aplicación puede bloquear el estado...

Análisis dinámico

1. Usar Frida

Al igual que para Windows, el código en ejecución se puede analizar dinámicamente. Una de las herramientas más populares es Frida, que está disponible en: https://www.frida.re/

Frida permite rastrear la ejecución de una aplicación Android. Permite, por ejemplo, leer los valores que se utilizan en distintas funciones; leer los valores a la salida o, incluso, modificarlos con el objetivo de cambiar la ejecución de la aplicación.

Para usar Frida en Android, primero hay que instalar Frida-server en el dispositivo. Está disponible en: https://github.com/frida/frida/releases (atención, elija la arquitectura de CPU correcta que corresponda al dispositivo):

C:\Users\paul> adb.exe root  
C:\Users\paul> adb.exe push frida-server-12.6.10-android-arm /data/ 
local/tmp/  
C:\Users\paul> adb.exe shell "chmod 755 /data/local/tmp/frida-server" 
C:\Users\paul> adb.exe shell "/data/local/tmp/ frida-server-12.6.10- 
android-arm &" 

Probaremos la instalación desde la máquina Windows:

C:\Program Files\Python3\Scripts>frida-ps.exe -U  
 PID  Name  
-----  --------------------------------------------------  
14118  -  
3605  .dataservices  
1965  ATFWD-daemon  
5990  adbd  
1945  adspd  ...

Resumen

En este capítulo, hemos visto cómo analizar un dispositivo y una aplicación en formato APK. A diferencia de los malwares que se ejecutan en los sistemas Windows, casi nunca es necesario depurar las aplicaciones. Los descompiladores hacen un trabajo de buena calidad combinando la depuración con scripts para descifrar las cadenas de caracteres. De esta manera, se puede analizar cualquier archivo .apk.

El número de dispositivos con Android aumenta cada año y estos contienen un número increíble de datos personales o profesionales. Esto hace de Android un objetivo prioritario para los desarrolladores de malwares, cuyo objetivo es infectar el máximo de dispositivos, sin atacar a una persona en concreto, así como lanzar campañas de espionaje dirigidas a individuos específicos. Por este motivo, el número de operaciones dirigidas contra plataformas Android debería aumentar en los próximos años.