DESARROLLO DE MALWARE PARA
DISPOSITIVOS MÓVILES CON S.O. ANDROID,
CON FINES DOCENTES
Manuel Costas Pardo
Trabajo de Fin de Grado
Escuela de Ingeniería de Telecomunicación
Grado en Ingeniería de Tecnologías de Telecomunicación
Tutores:
Cristina López Bravo
Jose Luis Rivas López
2019-2020
Escuela de
Ingeniería de
Telecomunicación
Grao en Ingeniería de
Tecnologías de
Telecomunicación
Mención:
Telemática
1
ÍNDICE
1. Introducción. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . 2
2. Análisis de necesidades . . . . . . . . . . . . . . . .. . . . . . . . . . . . . .. . . 3
3. Estado del arte. . . . . . . . . . . . . . .. . . . . . . . . . . . . . .. . .. . . . . . 4
4. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
5. Metodología seguida y decisiones tomadas. . . . . . . . . . . . . . .. . . . . . . . 6
6. Pruebas y resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
7. Discusión del impacto del trabajo y conclusión. . . . . . . . . . . . . . . . . . . . . 16
8. Bibliografía. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
9. Anexo I .. . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . 19
10. Anexo II . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . 22
11. Anexo III. . . . . . . . . . . . . . . .. . . . . . . . . . . . . .. . . . . . . . . . . . 25
Escuela de
Ingeniería de
Telecomunicación
Grao en Ingeniería de
Tecnologías de
Telecomunicación
Mención:
Telemática
2
1. INTRODUCCIÓN
La seguridad se define como el estado de bienestar que percibe y disfruta el ser humano [1]. En el
ámbito de la seguridad de la información, seguridad es el término atribuido a la protección y
defensa de la información digital y de recursos de las tecnologías de la información frente a
amenazas [1]. Es un concepto que se puede aplicar en muchos campos de la tecnología, por lo que
parece razonable que presente muchas vertientes, siendo una de ellas la seguridad en dispositivos
móviles.
Los dispositivos portátiles personales, o dispositivos móviles, han impactado significativamente en
nuestras vidas y las han llevado a un nuevo nivel. Hasta cierto punto, los móviles han sobrepasado a
los ordenadores clásicos en vista de la frecuencia de uso y la dependencia. Las elevadas capacidades
de estos equipos, junto con el número incremental de operaciones y actividades que los usuarios
realizan con ellos, han despertado cierta preocupación respecto a la protección de la privacidad y la
seguridad del dispositivo, y consecuentemente han impulsado nuevas maneras formas de
explotación y ataques. La información privada contenida en estos equipos incluye todo aquello
necesario para identificar a un usuario: nombre, género, edad, fotos, vídeos, grabaciones de voz,
número de teléfono, dirección, información de tarjetas de crédito y hasta historiales de localización
y navegación. Todos estos datos pueden ser potencialmente rastreados o robados por terceros para
usarlos en contra de los propios usuarios [2].
Los sistemas operativos actuales para smartphone han sido diseñados para ser altamente seguros, y
mejoran progresivamente con el tiempo, incorporando nuevos métodos y garantías, y por ello puede
resultar complicado romper la barrera de seguridad y poner en marcha operaciones maliciosas. No
obstante, muchas aplicaciones móviles presentan vulnerabilidades que más tarde son aprovechadas
para atacar la privacidad. Atendiendo a las millones de aplicaciones disponibles para descarga (3
millones en Play Store y más de 2 millones en App Store) [3], en ocasiones es una tarea compleja
para los sistemas detectar un comportamiento anómalo o discernir cuando una operación está
permitida o no por el usuario.
La seguridad móvil incluye la protección de información tanto personal como profesional
almacenada y transmitida entre dispositivos portátiles: móviles, tabletas, ordenadores, etc. El rango
de ocupación es muy amplio: desde reducir riesgos y garantizar la protección de información
confidencial en caso de robo, acceso no autorizado o pérdida del dispositivo, hasta proteger
dispositivos móviles frente a amenazas malware.
Se entiende por software malicioso o malware todo aquel software que causa algún tipo de daño a
un usuario, equipo o red. El abanico de clasificación es muy vasto, atendiendo al tipo de propósito y
operaciones que ejecute: virus, troyano, gusano informático, scareware y spyware son los más
comunes.
Para explicar de forma más detallada cómo procede un malware concreto, a continuación se
comenta brevemente un ejemplo que se da entre usuarios habitualmente. Supongamos que existe
una aplicación de edición audiovisual que permite trabajar con fotos y vídeos. En las plataformas de
descarga más populares existen muchas aplicaciones así, lo que lleva a hacer pensar a usuarios y
administradores de la plataforma que es una aplicación inofensiva. La aplicación es aprobada,
publicada y descargada por varios usuarios para usarse de forma habitual. Una vez instalada,
funciona como es esperado, pero por debajo de este funcionamiento superficial, la aplicación accede
a la galería, recoge todas las fotos y las envía a un servidor remoto.
Escuela de
Ingeniería de
Telecomunicación
Grao en Ingeniería de
Tecnologías de
Telecomunicación
Mención:
Telemática
3
Las aplicaciones maliciosas a menudo no son detectadas y pueden causar grandes daños al usuario,
es por ello que mantener un control exhaustivo y constante del dispositivo es vital para garantizar su
protección.
El malware juega un papel muy importante en la mayor parte de intrusiones computacionales de la
actualidad. Por este motivo, pese a que los factores que influyen en la seguridad de los dispositivos
móviles son muchos, este trabajo se focaliza en el estudio del malware y las medidas de protección
frente a él. Del mismo modo, si bien el abanico de sistemas operativos para dispositivos móviles es
amplio (iOS, Windows 10 Mobile, o Ubuntu Touch, entre otros), teniendo en cuenta que la cuota de
mercado de Android supera el 70% a nivel mundial [3] y el 80% en España [4], este trabajo se
centra en el análisis de dispositivos móviles con sistema operativo Android. El modelo de seguridad
de Android y de las medidas de protección de datos que adopta se explican desde una perspectiva
más práctica en el Anexo I de este documento.
2. ANÁLISIS DE NECESIDADES
Android ha sido el principal foco de ataque en los últimos años en cuanto a malware se refiere,
parcialmente debido a su gran popularidad en todo el mundo, su naturaleza de código abierto y la
gran cantidad de documentación que existe al respecto. El desarrollo de antivirus y productos para
detectar y evitar el software malicioso está en continuo crecimiento, pero su funcionamiento en
dispositivos móviles no es a menudo el esperado, relegando la mayor parte de la responsabilidad en
el usuario, quien debe ser consciente de qué software está instalado, cómo le afecta y el alcance de
las consecuencias.
Los usuarios acostumbrados a la tecnología y conscientes de los peligros existentes mantienen una
serie de buenas prácticas que reducen considerablemente el número de ataques provocados en su
entorno y en sus dispositivos, como revisar permisos, mantener actualizado el dispositivo.... Sin
embargo, tanto ese grupo como los demás usuarios pueden caer en el error de dar paso igualmente
al software malicioso, generalmente por desconocimiento.
Naturalmente, las causas por las que el malware entra en los móviles van más allá que la mera falta
de conocimiento de los usuarios. Algunas de las medidas de seguridad habitualmente tomadas para
estaciones y servidores no son directamente aplicables a los móviles (por ejemplo, no pueden ser
protegidos por firewalls o técnicas de cifrado con un coste computacional muy elevado). Sin
embargo, cada vez más usuarios usan móviles o tabletas en su día a día y no exclusivamente en el
ámbito personal, sino también profesional. El acceso a información sensible por parte de empleados
y trabajadores es algo muy común en la actualidad, poniendo a la compañía en riesgo frente a un
posible robo de datos por software malicioso.
Muchas compañías tienen recursos empresariales accesibles y disponibles en los dispositivos de
empresa, y basta que uno solo de ellos esté infectado por malware para comprometer toda su
seguridad, aún manteniendo políticas de seguridad estrictas y controles rigurosos.
Por todo esto, si queremos evitar que nuestros datos y nuestra privacidad en general no esté en
peligro, es necesario conocer el alcance de estas aplicaciones nocivas y su capacidad de actuación.
Para detectar y evitar algo primero hay que conocerlo, con este objetivo se desarrolla este TFG.
Escuela de
Ingeniería de
Telecomunicación
Grao en Ingeniería de
Tecnologías de
Telecomunicación
Mención:
Telemática
4
3. ESTADO DEL ARTE
Una de las principales fuentes de aprovechamiento para los creadores de malware es la continua
optimización de los dispositivos portátiles. Los atacantes programan malware usando técnicas
nuevas que los antivirus o detectores tradicionales no son capaces de distinguir, por lo que se hace
más complicado luchar contra las aplicaciones maliciosas.
Con el paso del tiempo van apareciendo nuevas versiones que incorporan novedades de sistema, y si
bien es cierto que las nuevas versiones son más robustas ante malware que las antiguas, también
presentan agujeros y vulnerabilidades que se pueden atacar. Se concluye así que el malware para
Android crece paralelamente con la popularidad y la mejora del sistema operativo Android.
El desarrollo de un malware para Android es una tarea cuya complejidad aumenta en base a las
funcionalidades que se desean implementar. Principalmente hay que tener un conocimiento mínimo
de Android y de su arquitectura, la cual se detalla en el Anexo I de este documento. Es importante
conocer las distintas capas del modelo para tener una visión global del funcionamiento conjunto de
todo el sistema y de las interacciones entre los niveles. Existen una gran variedad de entornos y
plataformas para el desarrollo de aplicaciones Android, siendo Android Studio el IDE [5] oficial
más popular y autocontenido para ello.
Pese a que no existen unas pautas estándar para desarrollar malware, hay una serie de aspectos que
conviene seguir durante su elaboración:
● Seleccionar un lenguaje de programación. Conocer el lenguaje de programación elegido, así
como sus ventajas e inconvenientes (portabilidad, capacidad de actuación, complejidad...)
es clave a la hora de afrontar el desarrollo de una aplicación maliciosa [6]. Por todas estas
razones, sumadas a ser el lenguaje de programación más popular en la actualidad, se ha
elegido Java para el desarrollo del malware.
● Conocer y comprender la arquitectura interna de los sistemas operativos (Windows,
Linux...) que se van a ver afectados por el malware, tanto de cara a su desarrollo como a su
actividad.
● Estudiar y analizar los distintos tipos de malware existentes. Es importante tener constancia
de las aplicaciones maliciosas que ya existen y entender cómo se han diseñado. Hay una
gran variedad de repositorios de malware de código abierto que permiten asimilar sus
características más notables [6].
● Decidir qué tipo de malware se va a realizar. Si bien se pueden atacar muchas
vulnerabilidades en dispositivos y sistemas, es importante saber qué actividades concretas
lleva a cabo nuestro malware para poder clasificarlo en alguna de las categorías ya
definidas. En este trabajo se explica detalladamente un malware de tipo espía, llamado
spyware, caracterizado por recopilar información privada de los dispositivos sin
conocimiento o aceptación de los usuarios.
● Fijar un entorno de pruebas exhaustivo. Llevar a cabo pruebas de manera continuada ayuda
a obtener mejores resultados en el desarrollo. Probar el malware en diferentes modelos de
dispositivo, distintas versiones o incluso en distintos entornos mejoran su robustez y calidad
[7].
La posición de Android en el mercado siempre ha atraído a los atacantes al considerarlo como el
principal foco de ataque, dado que las aplicaciones no son revisadas totalmente antes de su
publicación en la tienda oficial, proceso contrario al que sí realiza Apple, sometiendo cada nueva
aplicación a un severo control de seguridad [8]. Como se ha mencionado previamente, los distintos
tipos de malware se pueden agrupar en numerosas categorías a partir de la funcionalidad de su
carga (payload) maliciosa. El grado de daño causado es muy variable y a menudo invisible para los
afectados. Recientemente se ha descubierto malware que detecta cuando el dispositivo se apaga
Escuela de
Ingeniería de
Telecomunicación
Grao en Ingeniería de
Tecnologías de
Telecomunicación
Mención:
Telemática
5
para empezar a funcionar, recogiendo así información aún cuando el móvil parece no estar
operativo [2]. Existen incluso malware capaz de robar toda la información contenida en tarjetas de
crédito vinculadas a Google Play para completar transacciones [2]. Contando con estas técnicas tan
depuradas y sofisticadas, el malware para Android se ha convertido en una amenaza real que
compromete la seguridad de los datos y, por tanto, la nuestra.
Pese a que las aplicaciones maliciosas pueden poner en alto riesgo nuestros datos, existen formas de
combatirlas y detectar cuando nuestro dispositivo ha sido infectado por una o varias y combatirlas
o, cuanto menos, paliar notablemente sus negativos efectos. Fundamentalmente existen dos formas
de comprobar si malware desconocido ha atacado nuestro móvil o tableta:
1. Revisar el funcionamiento del dispositivo. Si se trata de un comportamiento anómalo (el
dispositivo se apaga o deja de funcionar inesperadamente, el sistema u otras aplicaciones se
congelan, la ejecución es lenta, etc) quizás se deba a que haya malware nocivo eliminando
o corrompiendo ficheros que son necesarios para un funcionamiento adecuado.
2. Detección de malware empleando software específico: Existen diversas soluciones
software, llamadas antivirus, que son capaces de depurar los dispositivos y evitar que
aplicaciones potencialmente peligrosas ataquen el sistema y su funcionamiento. Entre ellas,
destaca la solución oficial ofrecida por Android, Google Play Protect, un servicio integrado
de Google que protege los dispositivos de posibles amenazas, realizando análisis de
seguridad de las aplicaciones instaladas [9].
Una visión más detallada del malware y de los distintos tipos de aplicaciones móviles dañinas
existentes en la actualidad se ofrece en el Anexo II.
4. OBJETIVOS
El objetivo principal de este proyecto es diseñar y programar una aplicación que permita explotar
algunas de las vulnerabilidades en dispositivos Android, concretamente en versiones 6.0.1 y 8.0.1.
Con ello se pretenden dar a conocer algunos de los principales problemas y peligros de estos
dispositivos cuando se usan inconscientemente, y algunas de las formas de aprovecharse de la
inocencia y buena fe de la mayoría de los usuarios, entre las muchas existentes. Conocer estos
problemas permite el desarrollo de aplicaciones más seguras en el futuro.
Los objetivos específicos del presente trabajo son los siguientes:
● Mostrar cómo funciona un malware espía que recopila información, registrando datos e
información privada tanto del dispositivo como del usuario.
● Mostrar diversas formas y técnicas de robo de información sensible desde un punto de vista
tanto teórico como práctico. Concretamente, el proyecto aborda las técnicas que se
mencionan a continuación:
1. Registro de las coordenadas de localización del móvil.
2. Acceso a memoria y extracción de una copia del listado de los documentos
descargados.
3. Registro de la actividad del usuario en tiempo real.
4. Registro de cualquier nueva notificación emergente.
5. Registro todo el texto introducido por el usuario en el dispositivo.
También se proporciona una visión de alto nivel de los peligros que puede generar el robo de
información privada, así como las consecuencias sobre los usuarios cuando sus dispositivos son
controlados remotamente por un tercero.
Escuela de
Ingeniería de
Telecomunicación
Grao en Ingeniería de
Tecnologías de
Telecomunicación
Mención:
Telemática
6
Como objetivo secundario, se proporciona una herramienta práctica a la asignatura “Seguridad en
dispositivos móviles (SMOV)” del Máster Universitario en Ciberseguridad para que los alumnos,
mediante un análisis forense sobre teléfonos controlados, sean capaces de detectar aplicaciones
maliciosas y descubrir su modo de funcionamiento.
5. METODOLOGÍA SEGUIDA Y DECISIONES TÉCNICAS
TOMADAS
Desde un punto de vista práctico, el proyecto consta de dos componentes básicos: la
aplicación, que se instala en el dispositivo Android de la víctima, y el servidor, que recibe
las distintas notificaciones enviadas desde la aplicación con información privada del
usuario, mostrándola formateada en la consola o terminal del equipo del atacante.
La aplicación se ha realizado con Android Studio 3.5.1, y el lenguaje de programación elegido es
Java. Las pruebas se han completado en dos dispositivos: un móvil Samsung Galaxy J4+ con
Android 8.1.0, y una tableta Nexus 7 con Android 6.0.1.
El entorno de desarrollo del servidor es Ubuntu 18.04 y para su desarrollo se ha empleado Node.js.
La versión de Node usada es la 8.10.0. Para lanzar el servidor debe usarse el comando node
index.js. El fichero index.js contiene el código del servidor a ejecutar, y node es la cláusula usada
para ejecutar cualquier código Javascript. Otra forma de iniciar el servidor es npm start index.js.
NPM es un gestor de paquetes que puede ser usado para ejecutar, actualizar, eliminar, etc paquetes,
y npm start ejecuta el comando start que se encuentra en el ficheropackage.json en el directorio raíz
del proyecto.
Dicho fichero contiene metadatos relativos al proyecto en cuestión y es necesario para que NPM
pueda identificar tanto al proyecto como a sus dependencias. Para que esto funcione, la directiva
start del fichero package.json debe tener el valor nodeindex.js.
Los detalles de la instalación y configuración completa de las herramientas de trabajo se explican en
el Anexo III de este documento.
El desarrollo de ambas partes se ha llevado a cabo de forma simultánea. A medida que la aplicación
se ha programado, el código del servidor se ha completado paralelamente.
La aplicación envía diversos paquetes de mensajes cifrados al servidor de manera periódica,
conforme el usuario interactúa con el dispositivo afectado. Dichos paquetes son recibidos por el
servidor, que muestra en la consola del equipo la información enviada por la aplicación.
En la Figura 1 se puede ver la arquitectura del entorno de trabajo.
Escuela de
Ingeniería de
Telecomunicación
Grao en Ingeniería de
Tecnologías de
Telecomunicación
Mención:
Telemática
7
Figura 1. Entorno práctico del proyecto
La aplicación extrae información de diversos tipos: geolocalización del dispositivo, ficheros
descargados localizados en la memoria, alertas ante nuevas notificaciones como descargas y
seguimiento del uso. También consta de un capturador de teclado exhaustivo que recoge el texto
introducido y la hora a la que se realiza dicha entrada, presentándola estructurada en pantalla.
El proceso de configuración del servidor en la nube se detalla al final del Anexo III.
● Geolocalización
Esta vulnerabilidad se ha seleccionado por el peligro que puede representar para los usuarios dar
acceso a sus datos de localización a aplicaciones con intenciones maliciosas. Con estas variables y
suficiente conocimiento de localizaciones específicas, es posible crear un perfil preciso de varios
usuarios de estos dispositivos. La geolocalización se muestra en función de las coordenadas de
longitud y latitud del dispositivo. Dichas variables se obtienen únicamente si la aplicación cuenta
con el permiso de GPS y si este está activado. Además, previamente el usuario debe haber
solicitado la localización mediante una aplicación ajena para funcionar, ya que se emplea el método
getLastKnownLocation(), que recurre a las últimas coordenadas detectadas. En caso de que no se
puedan obtener las variables, no se muestran. Como para acceder al GPS se necesita un permiso
específico, la aplicación muestra un aviso de solicitud consultando al usuario si desea conceder
dicho permiso o no.
● Lectura de memoria
Android ofrece varios tipos de espacios de almacenamiento para guardar los datos y la información
de las aplicaciones, siendo uno de ellos el almacenamiento externo. El almacenamiento externo es
el espacio de almacenamiento de información privada en la memoria del dispositivo. Por regla
general, todos los archivos que figuran en ese espacio son privados, restringidos únicamente a sus
aplicaciones y sólo pueden ser eliminados cuando el usuario elimina la aplicación correspondiente.
Sin embargo, este espacio puede ser alterado por aplicaciones externas y existen métodos que
permiten leer todo el contenido guardado [10].
Escuela de
Ingeniería de
Telecomunicación
Grao en Ingeniería de
Tecnologías de
Telecomunicación
Mención:
Telemática
8
En todos los dispositivos Android existe una ruta de acceso real a los archivos de memoria.
Mediante Environment.getExternalStorageDirectory() se obtiene dicho valor de ruta:
storage/emulated/0 .1
Todos los documentos (ficheros de texto, archivos multimedia, descargas...) guardados en memoria
se localizan en este directorio, organizados en subcarpetas: Descargas, Imágenes, Vídeos… [11], tal
y como se recoge en la Figura 2.
Para acceder al directorio de descargas se emplea el método
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), y a partir
de ahí y teniendo el permiso necesario (READ_INTERNAL_STORAGE), el cual debe incluirse
también en el archivo Manifest de la aplicación, es posible obtener una lista de todos los archivos
descargados en el dispositivo.
Figura 2. Modelo de memoria de dispositivo Android
Los directorios de almacenamiento de los dispositivos Android pueden contener información de
gran importancia, tanto del usuario como del propio dispositivo. Acceder a dichos datos no es una
tarea de elevada complejidad para el peligro representa, motivo por el cual esta vulnerabilidad es
una de las seleccionadas para reflejar y explicar en este trabajo.
● Seguimiento de la actividad del usuario y capturador de teclado
Las interacciones del usuario con el móvil son capturadas por la aplicación mediante
métodos de rastreo que detectan determinados eventos, como un clic sobre una aplicación específica
o la activación de una opción concreta, de manera que se puede hacer un seguimiento de las
aplicaciones que más frecuente y conseguir un mapa del estado del dispositivo.
De la misma forma, el malware consta de un keylogger para recoger todas las entradas de texto
llevadas a cabo. Un keylogger es un software que se encarga de registrar las pulsaciones realizadas
en teclado y las almacena, permitiendo registrar todas las entradas, lo que puede provocar el robo de
contraseñas o contemplar las distintas búsquedas en navegadores, por ejemplo. En nuestro caso
también las envía remotamente junto con el resto de información.
1 Cuando se accede al sistema de ficheros de algunos dispositivos mediante conexión USB o
Bluetooth, el valor storage/emulated/0 aparece reflejado con una alias, generalmente Phone o e nombre del modelo del dispositivo, como Samsung, Xiaomi, etc.
Escuela de
Ingeniería de
Telecomunicación
Grao en Ingeniería de
Tecnologías de
Telecomunicación
Mención:
Telemática
9
Estas funcionalidades se han hecho empleando la clase AccessibilityService de Android. Tal y como
su nombre indica, es un servicio que se ejecuta de manera continuada y transparente en el
background del dispositivo, recibiendo notificaciones cada vez que un determinado evento, llamado
AccessibilityEvent se dispara. Estos eventos reflejan una interacción o transición entre el usuario y
la interfaz gráfica, y se pueden clasificar en función de dicha transición.TYPE_VIEW_CLICKED
permite detectar la pulsación de un icono o vista (lo que se puede corresponder con lanzar una
nueva aplicación), mientras que TYPE_VIEW_TEXT_CHANGED es la base del registrador de
teclado, alertando al servicio cada vez que una nueva tecla es presionada. A estas funcionalidades se
incorpora la detección de cualquier notificación recibida, como nuevas descargas generadas, usando
TYPE_NOTIFICATION_STATE_CHANGED.
Con toda esta información recuperada y enviada, se envía también la fecha y la hora a la que se
producen los eventos, provocando que el seguimiento sea aún más preciso.
Integrando todas estas operaciones se puede, como posible prueba de concepto, controlar la hora a
la que el usuario abre la aplicación Facebook, revelando el correo y la contraseña que introduce.
Esta prueba de concepto se muestra y explica, junto a otras, en el apartado 6.4.
● Servidor Node
La otra parte del proyecto es el servidor, el cual recibe la información enviada desde la
aplicación, la gestiona, la procesa y la entrega al equipo local para que sea mostrada con un formato
concreto.
La comunicación entre aplicación y servidor se realiza mediante sockets. En líneas generales, un
socket es un extremo (endpoint)2 de un enlace de comunicaciones bidireccional entre dos programas
que permite el intercambio fiable de datos entre ellos de manera ordenada. Los sockets siempre
están necesariamente vinculados a un puerto, de forma que TCP3 pueda identificar la aplicación o
programa que debe recibir los datos [12].
Desde la aplicación se realiza una solicitud de conexión; socket.connect() permite realizar una
petición de inicio de conexión que es escuchada por el servidor [13]. Dado que el cliente conoce el
nombre de host del servidor y el puerto en el que escucha, la solicitud es inmediata, dando lugar a
un enlace nuevo entre ambas entidades. Cuando el servidor acepta dicha conexión, se crea un nuevo
socket en sentido contrario, con el extremo remoto en dirección y puerto del cliente, que también
debe aceptar. Sólo cuando ambas partes han aceptado, el enlace se crea con éxito y la comunicación
es posible.
2Endpoint es la combinación directa de dirección IP y puerto
3TCP: Transmission Control Protocol
Escuela de
Ingeniería de
Telecomunicación
Grao en Ingeniería de
Tecnologías de
Telecomunicación
Mención:
Telemática
10
Figura 3. Comunicación entre la aplicación cliente y el servidor remoto usando sockets.
La interacción del servidor y la aplicación se realiza usando Node [14] y Express [15]. Node.js es
un entorno que trabaja en tiempo de ejecución que permite crear herramientas del lado de un
servidor y aplicaciones en Javascript. Algunas de las razones por las que se ha optado por Node son
su optimización de rendimiento y por su gestor de paquetes, que posibilita el acceso a un gran
número de paquetes, entre los que se encuentran las dependencias para trabajar con sockets.
Además, la ejecución en tiempo real se usa fuera del contexto del navegador, ejecutándose
directamente en el sistema operativo del equipo local.
Express es uno de los frameworks más comunes usados por Node y paralelamente es la librería que
proporciona acceso a otros frameworks diferentes. Ofrece al desarrollador la opción de modificar y
establecer ajustes de aplicaciones web (como cambiar el puerto de escucha), incorporar
procesamiento de peticiones y programar las vistas empleadas en la generación de una o varias
respuestas.
Para iniciar la comunicación entre aplicación y servidor, es necesario indicar a la aplicación el
extremo del servidor al que se debe conectar. IO.socket(endpoint) inicializa el socket y mediante
connect se realiza la petición de conexión. Una vez establecida la conexión, el intercambio de
información se lleva a cabo a través de mensajes con formato socket.emit(event, data) desde el lado
de la aplicación, donde event es una cadena de texto que indica el evento que representa el mensaje
y que usará el servidor para detectar un tipo de información concreta, referente a ese evento; y data
es la información enviada. En el lado del servidor, los mensajes se reciben con el comando
socket.on('event’, (data)), y a continuación se incluyen las instrucciones para procesarlo.
Como ejemplo, si se desea establecer una conexión socket entre ambas entidades y enviar desde la
aplicación una cadena de texto al servidor para mostrarla en pantalla, el código a usar para solicitar
el inicio de una comunicación, enviar un mensaje al servidor y recibirlo es el siguiente:
Escuela de
Ingeniería de
Telecomunicación
Grao en Ingeniería de
Tecnologías de
Telecomunicación
Mención:
Telemática
11
// Aplicación Android
socket = IO.socket(endpoint);
socket.connect();
socket.emit("cadena", "Esto es un ejemplo");
Código de la petición de conexión y transmisión en la aplicación
// Servidor Node
io = require('socket.io').listen(server);
io.on('connection', (socket) => {
socket.on('cadena', (messageContent) => {
console.log('Cadena recibida: ' + messageContent);
} )
} )
Código de establecimiento de conexión y recepción en el servidor
6. PRUEBAS Y RESULTADOS
El objetivo de esta sección es presentar un conjunto de pruebas que muestran las principales
funcionalidades del malware desarrollado, ofreciendo una visión del peligro de cada una y de la
vulnerabilidad explotada en cada caso.
En algunas pruebas se explica también la forma de detectar y evitar que las aplicaciones maliciosas
realicen dichos casos prácticos.
1. Primera prueba
- Descripción: Recepción de las coordenadas de longitud y latitud del dispositivo.
- Objetivo: Obtener y presentar las últimas coordenadas detectadas del dispositivo
para identificar la posición real del usuario.
El usuario lanza la aplicación Google Maps para conocer su posición y comprobar la ruta hacia un
destino concreto. El malware detecta que nuevas coordenadas han sido consultadas por el usuario y
son registradas y enviadas al servidor para ser mostradas en pantalla. En este caso, la vulnerabilidad
explotada es poder acceder a otras aplicaciones y registrar los datos correspondientes a dichas
aplicaciones, proceso que el malware no debería poder realizar.
La activación de GPS y la concesión de los permisos necesarios al malware permite que este pueda
acceder a datos calculados por otras aplicaciones de localización, como Google Maps. Android
cuenta con un modelo de permisos, explicado en el Anexo I, para prevenir que los datos de
localización sean registrados por otras aplicaciones, pero si el usuario lo permite, dichas variables
quedan totalmente expuestas. Las soluciones en este punto son diversas; el usuario puede
deshabilitar el GPS, impidiendo que cualquier aplicación registre sus coordenadas de esta forma, o
revisar el permiso de localización y comprobar qué aplicaciones cuentan con él, retirando el mismo
si resulta necesario.
Escuela de
Ingeniería de
Telecomunicación
Grao en Ingeniería de
Tecnologías de
Telecomunicación
Mención:
Telemática
12
Figura 4: Coordenadas de localización del dispositivo
2. Segunda prueba
- Descripción: Registrar la actividad del usuario.
- Objetivo: Obtener en tiempo real el historial del navegador del usuario.
El usuario realiza una o varias búsquedas en el navegador Google Chrome. Todas aquellas páginas
visitadas, así como el texto introducido son detectadas por el Keylogger y enviadas al servidor para
ser mostradas por pantalla.
Figura 5. Registro de actividad del usuario
El usuario emplea el dispositivo móvil para navegar por distintas aplicaciones. El keylogger
implementado detecta que nuevos iconos han sido pulsados y procesa el tipo de evento registrado,
en este caso son aplicaciones ejecutándose, entre las que destacan Facebook, Google Drive o la
cámara. Se observa cómo el usuario navega por los menús de Google Play, visitando diversas
secciones (aplicaciones más populares y aplicaciones más rentables). Finalmente, el usuario lanza la
aplicación Samsung Notes para crear una nueva nota, acción también detectada por el malware.
Mostrar cómo captura el texto introducido no es el objetivo de esta prueba, y se describe más
detalladamente en la cuarta prueba.
Desde Android 1.5, Android integra en sus dispositivos los medios necesarios para que los usuarios
implementen teclados personalizados desarrollados por terceros, por lo que los números de este tipo
de ataques se han incrementado desde entonces. Esta vulnerabilidad del sistema es aprovechada por
Escuela de
Ingeniería de
Telecomunicación
Grao en Ingeniería de
Tecnologías de
Telecomunicación
Mención:
Telemática
13
malware que inyecta dicho capturador de teclado entre el usuario y cualquier aplicación que
requiera entrada manual de datos. Afortunadamente, se puede comprobar el alcance y la capacidad
de estas aplicaciones maliciosas comprobando los permisos que tiene, otorgados por el usuario [16].
La solución ante este tipo de ataques es revisar los permisos de las aplicaciones, y comprobar que
aquellas de uso cotidiano o aparentemente inofensivas no requieren permisos de acceso a
funcionalidades o servicios que no mantienen relación con ellas.
La actividad en línea de los usuarios es un punto de ataque clave para varios tipos de aplicaciones
maliciosas, especialmente aquellas de tipo espía comercial4, ya que muestra las páginas que más se
visitan o las aplicaciones usadas frecuentemente, pudiendo hacer una estimación más o menos
precisa del perfil de gustos del usuario y someterlo posteriormente a constantes anuncios de
productos o servicios. A este tipo de malware se le conoce como Spam.
3. Tercera prueba
- Descripción: Detectar una nueva descarga.
- Objetivo: Mostrar una nueva notificación de descarga.
El usuario realiza una nueva descarga de un documento PDF usando el navegador. El programa la
detecta e indica que una nueva notificación se ha registrado, mostrando nuevamente en pantalla el
listado de documentos previamente existentes y el nuevo documento descargado.
Figura 6. Listado de descargas sin actualizar y actualizado
El malware inicialmente lista todas las descargas contenidas en memoria que registra una vez
activado, en caso de que haya alguna. Cuando el usuario realiza una nueva descarga, sea del tipo
que sea (fichero de texto, multimedia...), la aplicación también es capaz de detectarlo y avisarnos,
mostrando nuevamente el listado por pantalla con la nueva descarga añadida.
Concretamente, en la Figura 6 se aprecia que la lista inicial consta de 3 elementos, mientras que la
actualizada tiene 4. Se ha descargado el fichero dummy.pdf, y el malware toma nota de ello,
alertando por pantalla y mostrando otra vez la lista. Para proceder, una vez lanzada la aplicación, se
abre el documento en el navegador Google Chrome, motivo por el cual se muestra el mensaje de la
hora 00:02:19. A continuación, se accede al menú “Más opciones” y se pulsa la opción de descarga.
La aplicación detecta una nueva descarga, y la muestra como *** NUEVA NOTIFICACIÓN ***.
Esta funcionalidad es viable gracias a la implementación del keylogger, que registra todos los
eventos que suceden en el dispositivo y en función del tipo que sea muestra una cosa u otra. En este
caso, se trata de un evento del tipo TYPE_NOTIFICATION_STATE_CHANGED, que básicamente
captura todos los eventos que representen una nueva notificación, como las descargas recientes.
4 Las aplicaciones espía comerciales (commercial spyware) se explican brevemente en el Anexo II.
Escuela de
Ingeniería de
Telecomunicación
Grao en Ingeniería de
Tecnologías de
Telecomunicación
Mención:
Telemática
14
Debido a que el usuario concede el permiso de acceso a los directorios de memoria del dispositivo,
esta prueba se puede llevar a cabo y en ocasiones sus consecuencias pueden ser muy negativas. Un
usuario puede descargar documentos de suma importancia y estos ser detectados por el malware,
que se los presenta al desarrollador.
Esta funcionalidad también detecta aquellas descargas producidas automáticamente, como pequeñas
actualizaciones o instalaciones de software de sistema.
4. Cuarta prueba
- Descripción: Robar credenciales de aplicación del usuario.
- Objetivo: Mostrar el correo de identificación y la contraseña del usuario cuando
inicia sesión en una aplicación concreta.
El usuario inicia sesión en la aplicación Facebook. El correo introducido así como la contraseña son
recogidas por el keylogger implementado y enviadas al servidor para ser mostrados en pantalla.
Figura 7. Credenciales capturadas por el keylogger
Para la realización de esta prueba se han creado credenciales temporales nuevas. Un correo
electrónico [email protected] con contraseña passwdtfg, y se han dado de alta cuentas en
Gmail y Facebook. Al iniciar la aplicación Facebook, puede comprobarse que la aplicación lo
detecta, y es capaz de registrar todo el texto introducido por el usuario. Se reconocen tanto el correo
electrónico como la contraseña, pudiendo así robar las credenciales del usuario y acceder a su
información privada en cualquier momento.
Esta prueba es extrapolable y el mismo proceso sucede cuando el usuario introduce sus datos
personales en cualquier otra aplicación que requiera autenticación.
Cabe destacar que el registro de entrada de texto funciona para cualquier aplicación, no sólo las de
inicio de sesión. Las búsquedas realizadas en navegadores, las notas redactadas, los mensajes
enviados y cualquier entrada de datos es capturable.
Escuela de
Ingeniería de
Telecomunicación
Grao en Ingeniería de
Tecnologías de
Telecomunicación
Mención:
Telemática
15
5. Quinta prueba
- Descripción: Detectar la intrusión del malware en el sistema.
- Objetivo: Utilizar la aplicación CONAN mobile para detectar los riesgos que
conlleva el malware instalado en el dispositivo.
En ocasiones resulta muy complicado para el usuario notar que cierto malware ha infectado su
dispositivo y que su información y datos personales están en peligro. Por ello, existen muchas
soluciones software capaces de detectar y notificar los riesgos. Entre las más populares de habla
hispana, se encuentra CONAN mobile [17]. Se trata de una aplicación gratuita que ayuda a proteger
un dispositivo móvil, permitiendo conocer su estado, ofrecer soluciones frente a posibles riesgos o
problemas detectados y proporcionar consejos que permitan mejorar su estado de seguridad.
Figura 8. Análisis de riesgos llevado a cabo por la aplicación CONAN mobile
Entre las varias incidencias detectadas, se aprecia en la imagen que varios servicios como el GPS o
la conexión NFC están habilitados. En este caso, el servicio GPS permite dar a conocer a los
atacantes la posición en tiempo real del dispositivo y, consecuentemente, del usuario, permitiendo
saber cuando está fuera de su domicilio, cuando llega a una determinada localización, etc. La
aplicación notifica esta vulnerabilidad al usuario, que puede tomar la contramedida que considere.
Escuela de
Ingeniería de
Telecomunicación
Grao en Ingeniería de
Tecnologías de
Telecomunicación
Mención:
Telemática
16
Como se puede observar, todas las pruebas se pueden llevar a cabo dado que el usuario concede los
permisos necesarios en cada una de ellas. En el caso del keylogger, al tratarse de un servicio, el
usuario debe conceder el permiso de accesibilidad para que la funcionalidad pueda llevarse a cabo.
Cuando una aplicación se descarga de la tienda oficial de Android, se advierte al usuario de todos
los permisos requeridos. Frecuentemente se aceptan todos por considerar que dicha aplicación no
representa un peligro para la seguridad de nuestra información, provocando así que posible malware
camuflado tenga acceso libre a todo el contenido de nuestros dispositivos. La responsabilidad de
controlar los permisos de aplicación, así como de tener conocimiento de causa en relación a los
procesos de instalación que se producen recae sobre el usuario.
7. DISCUSIÓN DEL IMPACTO DEL TRABAJO Y CONCLUSIÓN
El objetivo fundamental de este trabajo es reflejar los peligros principales de utilizar de manera
poco responsable un dispositivo Android, poniendo en peligro la privacidad, extrayendo
información como fotografías y conversaciones e incluso datos de importancia máxima como
informes médicos, credenciales o datos bancarios.
Pese a que actualmente los fabricantes y las marcas tienen la responsabilidad de garantizar la
seguridad en los dispositivos, la actuación deliberada de los usuarios a la hora de utilizar sus
dispositivos puede acarrear graves consecuencias. La descarga de aplicaciones de fuentes no
oficiales y la conexión a redes Wi-Fi desconocidas y no fiables son sólo ejemplos que pueden abrir
las puertas a atacantes para explotar vulnerabilidades.
El enfoque que aquí se ofrece es puramente práctico, mostrando el desarrollo de un entorno
consistente en un servidor y en una aplicación espía que recopila información y la transmite a una
entidad externa sin el conocimiento del usuario. Se intenta poner de manifiesto no únicamente el
proceso de desarrollo e intrusión del malware en los dispositivos, sino también dar a conocer los
métodos de identificación y detención principales de este tipo de aplicaciones. Adicionalmente se
podría extender el desarrollo, consiguiendo una aplicación que no sólo recopile información, pero
que también administre el funcionamiento del móvil: borrar aplicaciones, autorizar pagos o
transacciones, descargar contenido inadecuado, enviar mensajes o realizar llamadas suplantando la
identidad del usuario… en definitiva, tener un mayor control sobre él.
Inyectar código malintencionadoen paquetes de aplicaciones Android es un proceso que ha ido
perdiendo complejidad con el tiempo, hasta el punto de convertirse en un procedimiento estándar
para los atacantes, que tratan de violar la privacidad de los usuarios y robar su información. Todos
estos datos pueden ser compartidos con terceros, provocando que el usuario pierda el control sobre
ellos. A menudo se almacenan en servidores localizados fuera de España, donde la legislación sobre
la protección de los datos es poco precisa o incluso inexistente, provocando que delincuentes se
aprovechen de cualquier accidente que ponga en riesgo esa información, usándola para llevar a cabo
actos delictivos como la extorsión [18].
En España la legislación es muy clara al respecto. El artículo 197 del Código Penal recoge la
regulación del delito de intrusión informática, contemplando la vulneración de medidas de
seguridad de un sistema de información y el delito de espionaje cibernético. La sanción de estos
delitos pretende garantizar la protección de los usuarios titulares de los sistemas informáticos y
dispositivos electrónicos de todos aquellos que acceden de manera no autorizada,
independientemente de la provocación de daños o perjuicios, estando el castigo en un mínimo de
dos años de prisión, pudiendo ascender a un máximo de siete en el peor de los casos.
Escuela de
Ingeniería de
Telecomunicación
Grao en Ingeniería de
Tecnologías de
Telecomunicación
Mención:
Telemática
17
Más concretamente, la primera parte del artículo 197 bis. recoge la sentencia frente a delitos de
espionaje y recopilación no autorizada de información, y que principalmente se corresponde y
relaciona con el tema del presente trabajo. Tal y como indica dicho artículo, se pretende castigar a
todo atacante que “mediante la utilización de artificios o instrumentos técnicos, y sin estar
debidamente autorizado, intercepte transmisiones no públicas de datos informáticos que se
produzcan desde, hacia o dentro de un sistema de información” [19].
Las técnicas de robo de información en dispositivos móviles han evolucionado, llegando a emplear
software específico para su obtención.
El malware analizado que se emplea en estos ataques lleva integrado un módulo que realiza las
tareas de espionaje en cuestión, recogiendo y enviando los datos al centro de control del malware,
pudiendo ser estos ficheros de configuración, claves o datos de aplicaciones.
El artículo 264 del Código Penal sanciona las conductas llevadas a cabo por atacantes que“por
cualquier medio, sin autorización y de manera grave borrase, dañase, deteriorase, alterase,
suprimiese o hiciese inaccesibles datos informáticos, programas informáticos o documentos
electrónicos ajenos” [19]; es decir, cualquier tipo de modificación sobre la información personal
privada de los usuarios de los dispositivos sin su aprobación es castigada con hasta cinco años de
prisión. Dentro de este bloque se recogen todos los ataques de ransomware, caracterizados por
tomar control del dispositivo y alterar su contenido de manera tanto parcial como total.
No obstante, la identificación de los delincuentes es una tarea complicada, fundamentalmente por la
naturaleza y las características de Internet: descentralización, anonimato y ausencia de autoridades
capaces de monitorizar toda la actividad llevada a cabo en la red. A pesar de todo, existen medidas
de carácter técnico que en ocasiones resultan incluso más efectivas que las de carácter jurídico,
como software capaz de identificar riesgos y problemas que comprometan la seguridad y los
sistemas de seguridad y detección de intrusiones.
Afortunadamente, existen varias formas de proteger el dispositivo frente a malware dedicado, y
algunas de ellas se mencionan a continuación [20]:
● Evitar descargar aplicaciones de fuentes no oficiales.
● Comprobar los permisos requeridos por la aplicación incluso cuando se descargue
de plataformas oficiales como Play Store. Por ejemplo, que una aplicación llamada
Canicas solicite permiso para acceder a la cámara o al micrófono debería generar
desconfianza.
● No proporcionar datos personales, acceso a tarjetas o contraseñas u otro tipo de
tokens de autenticación a sitios web o entidades anónimas sin haber previamente
comprobado la validez de sus certificados.
● Actualizar el dispositivo regularmente. En ocasiones, ciertas funciones o librerías
internas presentan errores que pueden ser aprovechados por software
malintencionado, como bucles infinitos o situaciones de overflow 5. Las
actualizaciones a menudo incluyen parches con estos errores solventados.
● Utilizar software dedicado y herramientas de seguridad en los dispositivos, como
CONAN mobile o los análisis de Play Protect, siendo este un sistema de seguridad
oficial de la propia tienda de aplicaciones. Algunos dispositivos incluyen de fábrica
la opción de realizar análisis de seguridad o de llevar a cabo un mantenimiento de
dispositivo.
5 Desbordamiento del búfer debido a un gran catidad de datos mal gestionada por un programa.
Escuela de
Ingeniería de
Telecomunicación
Grao en Ingeniería de
Tecnologías de
Telecomunicación
Mención:
Telemática
18
8. BIBLIOGRAFÍA
[1] Wikipedia: Seguridad. https://es.wikipedia.org/wiki/Seguridad
[2] Sunil Kumar Muttoo, Shikha Badhani. Android malware detection: state of art.
https://link.springer.com/epdf/10.1007/s41870-017-0010-
2?author_access_token=EMRLuhgOPN0axVC36T4rqve4RwlQNchNByi7wbcMAY73eYae6zFBqs
Plv69tIEr-vpoGNqAIu6ytDXSuyQsndrthVwsrSoyN-
UHgbCMI2XpQ5g2WO1hrlnhS4DQoSXEbF2nudTTdPMyL9umLZ6CiRA%3D%3D , 2017.
[3] Statcounter Global Stats | Mobile Operating System Market Share Worldwide.
https://gs.statcounter.com/os-market-share/mobile/worldwide
[4] Statcounter Global Stats | Mobile Operating System Market Share Spain.
https://gs.statcounter.com/os-market-share/mobile/spain
[5] Android Studio. https://developer.android.com/studio?hl=es-419
[6] Malware Development. https://niiconsulting.com/checkmate/2018/02/malware-development-
welcome-dark-side-part-1/
[7] Luis Buendía Carreño, Sergio Pastrana Portillo. Malware engineering for dummies, 2016.
https://e-archivo.uc3m.es/bitstream/handle/10016/26983/TFG_Luis_Buendia_Carreno_2016.pdf
[8] Apple. Principle practices. https://www.apple.com/es/ios/app-store/principles-practices/
[9] Google Play Protect. https://www.android.com/intl/es_es/play-protect/ [10] Android internal and external storage. https://www.futurelearn.com/courses/secure-android-
app-development/0/steps/21599 , 2017
[11] Tomer Ben Rachel. An overview of Android storage. https://www.freecodecamp.org/news/an-
overview-of-android-storage/ , 2019
[12] Oracle. What is a
socket?https://docs.oracle.com/javase/tutorial/networking/sockets/definition.html
[13] Documentación de Socket.IO. https://socket.io/docs/
[14] Node.js guides. https://nodejs.org/en/docs/guides/
[15] Documentación de Express. https://expressjs.com/es/guide/routing.html
[16] Fadi Mohsen, Mohammed Shebab. Android Keylogging Threat https://liisp.uncc.edu/wp-
content/uploads/2017/10/TrustCol2013.pdf , 2013
[17] CONAN mobile. https://www.osi.es/es/conan-mobile
[18] Instituto Nacional de Ciberseguridad de España. Android malware situation.
https://www.incibe-
cert.es/sites/default/files/contenidos/estudios/doc/android_malware_situation.pdf , 2015
[19] Boletín Oficial del Estado. https://www.boe.es/buscar/act.php?id=BOE-A-1995-25444
[20] Shawn Abraham. How to prevent malware on Android. https://www.malwarefox.com/prevent-
android-malware/ , 2018
[21] Android | Sign your app. https://developer.android.com/studio/publish/app-signing
[22] Android | Platform Architecture. https://developer.android.com/guide/platform
[23] Potential Harmful Applications. https://developers.google.com/android/play-
protect/potentially-harmful-applications?hl=en
Escuela de
Ingeniería de
Telecomunicación
Grao en Ingeniería de
Tecnologías de
Telecomunicación
Mención:
Telemática
19
ANEXO I - ARQUITECTURA Y MODELO DE SEGURIDAD DE ANDROID
● MODELO DE SEGURIDAD
Para cualquier sistema, la seguridad es un aspecto fundamental. Una aplicación dañina es capaz de
extraer toda nuestra información privada, leer nuestros mensajes, suplantar nuestra identidad…. Es
por ello que los usuarios deben ser muy cuidadosos a la hora de instalar aplicaciones en sus
dispositivos.
En el caso de iOS, las aplicaciones que se desean instalar deben proceder exclusivamente de App
Store, la tienda oficial de Apple, que debe validarlas primero. Android, por su lado, ofrece un
planteamiento basado totalmente en la línea del software libre, proponiendo una política y un
esquema de seguridad orientado a proteger a los usuarios, sin imponer un sistema centralizado
controlador.
Tres ideas básicas soportan la seguridad en Android:
1. Seguridad a nivel global. La base de la plataforma de Android es el sistema operativo
Linux. El auge de Linux ha ido en aumento durante los últimos años y se ha empleado de
manera generalizada en entornos sensibles donde la seguridad es clave. A raíz de ser
continuamente atacado y mejorado, se ha convertido en un núcleo estable y seguro en el
que compañías y empresas depositan su confianza plena. Android aprovecha esta capacidad
y la seguridad que Linux incorpora, impidiendo que las aplicaciones maliciosas puedan
acceder directamente al hardware del dispositivo o interfieran con otras aplicaciones.
2. Firma de la aplicación. Toda aplicación debe ser firmada. Un certificado digital es
necesario para que se pueda reconocer al autor de la aplicación. Las aplicaciones firmadas
por Google Play emplean dos claves privadas: la clave de firma (app signing key) y la clave
de carga (upload key). El programador guarda la clave de carga y la usa para firmar su
aplicación y publicarla en Play Store (tienda oficial de Google). Cuando la aplicación está
lista para ser publicada, se puede firmar usando Android Studio y ser posteriormente subida
a Google Play. Google usa el certificado de carga para verificar la identidad del
programador, firmando la APK6 con la clave de firma [21].
Figura 9. Proceso de firma de aplicación mediante Google Play. Fuente: [21]
6 Application Android Package (APK) es una extensión para paquetes usados por Android para la
distribución e instalación de aplicaciones.
Escuela de
Ingeniería de
Telecomunicación
Grao en Ingeniería de
Tecnologías de
Telecomunicación
Mención:
Telemática
20
3. Modelo de permisos. El objetivo de un permiso es proteger la privacidad del usuario. El
modelo de permisos es necesario si una aplicación instalada desde una fuente externa
(oficial o no oficial) requiere acceso a partes sensibles o vulnerables del sistema que puedan
poner en riesgo la seguridad. Dependiendo del requerimiento, el sistema puede
proporcionar acceso automáticamente a la aplicación o solicitar la aprobación manual del
usuario.
Ninguna aplicación tiene permiso para realizar operaciones que puedan afectar
negativamente al dispositivo (sistema u otras aplicaciones instaladas) o al usuario.
● ARQUITECTURA
La estructura de las aplicaciones Android es compleja. Como se ha explicado en el apartado
anterior, Android es una plataforma que contiene una pila software basada en Linux de código
abierto, la cual agrupa diversos módulos y componentes que utilizan servicios propios y
paralelamente, proporcionan dichos servicios a componentes de las capas superiores. El diagrama
mostrado a continuación permite entender gráficamente cómo está estructurada la pila de Android
[22].
Figura 10. Pila de software de Android. Fuente: [22]
Escuela de
Ingeniería de
Telecomunicación
Grao en Ingeniería de
Tecnologías de
Telecomunicación
Mención:
Telemática
21
La pila de Android se estructura en los siguientes módulos:
1. Núcleo Linux (Kernel). Como ya se ha mencionado, Android se fundamenta en el sistema
operativo Linux, principalmente por su consistencia y progreso en cuestiones de seguridad,
pero también es elegido por eficiencia en cuanto a otras cuestiones, como la gestión de
memoria a bajo nivel. En este nivel se encuadran los drivers7 para que cualquier pieza o
componente hardware pueda ser usado adecuadamente. Cada vez que un elemento hardware
es incluido por los fabricantes, han de crearse los drivers necesarios en el núcleo de Linux
para poder usarse en Android.
2. Capa de Abstracción Hardware (HAL). Proporciona una interfaz estándar que muestra al
framework Java de alto nivel las capacidades hardware de dispositivo. Cuenta con varios
módulos que son usados por niveles superiores, permitiendo la implementación de
componentes hardware como la cámara.
3. Tiempo de ejecución de Android (ART). En este nivel se agrupan las librerías con las
clases Java necesarias para la programación de las aplicaciones. Todas aquellas aplicaciones
desarrolladas en versiones de Android superiores a 5.0 cuentan con su propia instancia ART
para la ejecución.
4. Librerías nativas. Esta capa se corresponde con todas las librerías usadas por Android.
Mayoritariamente están escritas en C y C++, y son necesarias para trabajar con la mayor
parte de servicios y componentes, como ART y HAL, que están programados en código
nativo que emplea dichas librerías. Junto al núcleo Linux, este nivel constituye gran parte
del propio núcleo de Android, siendo estas sus dos capas más importantes.
5. Framework de aplicaciones. Representa el conjunto de herramientas de desarrollo usadas
en las aplicaciones. Todas las aplicaciones creadas utilizan el framework que se encuentra
en este nivel. Por ejemplo, Activity Manager se encarga de gestionar el ciclo de vida de las
aplicaciones; Telephone Manager integra todas las APIs vinculadas a las operaciones
propias del teléfono, como enviar mensajes o realizar llamadas… . De esta forma, todas las
propiedades del sistema operativo Android están disponibles para el programador de
aplicaciones.
6. Aplicaciones. El sexto y más alto nivel contiene todas las aplicaciones de Android, tanto
las que se incluyen por defecto como las añadidas por el usuario, ya sean programas por él
o por terceros. Estas aplicaciones hacen uso de los servicios, librerías y APIs
proporcionadas por los niveles inferiores.
Las aplicaciones por defecto (o de sistema) pueden ser usadas por su funcionalidad
principal por parte de los usuarios, o bien por las capacidades y propiedades que ofrecen y
que los desarrolladores pueden incluir en sus propias aplicaciones. Por ejemplo, si
desarrollamos una aplicación de mensajería instantánea, no es necesario que dicha
aplicación incluya la funcionalidad completa, basta con invocar a otra aplicación de
mensajería ya instalada en el sistema e indicar únicamente el destinatario.
7 Un driver es un controlador de dispositivo. Permite la interacción entre el sistema operativo y un
componente hardware, también llamado periférico.
Escuela de
Ingeniería de
Telecomunicación
Grao en Ingeniería de
Tecnologías de
Telecomunicación
Mención:
Telemática
22
ANEXO II - MALWARE
Malware es el nombre que reciben todas aquellas aplicaciones o software en general que pueden
generar un impacto negativo o poner en riesgo a los usuarios, su información o sus dispositivos.
Estas aplicaciones reciben el nombre de aplicaciones potencialmente dañinas (PHA, Potential
Harmful Applications) [23]. Aunque dependen del dispositivo en el que se instalen, las aplicaciones
bajo este término integran alguna funcionalidad que compromete la seguridad de una manera u otra.
Algunas aplicaciones reciben la denominación user-wanted. Estas aplicaciones no se encuadran
dentro del grupo de PHA a pesar de tener la capacidad de afectar a determinadas medidas de
seguridad de los dispositivos, y esto es debido a que incluyen funcionalidades que el usuario desea
poner a su servicio. Google Play Protect8 advierte de las capacidades de estas aplicaciones y es el
usuario quien decide instalarlas voluntariamente.
Estas aplicaciones se pueden clasificar en muchos grupos en función de cómo ataquen al dispositivo
o a la información contenida en él. Si Google Play Protect detecta un PHA emite un aviso. Cada
aplicación es clasificable en función de lo dañina que sea, y si presenta características de varias
categorías, se encuadra dentro de aquella que más dañina resulte.
Actualmente existen 14 categorías diferentes:
● Backdoor
Aplicaciones que permiten la ejecución potencialmente peligrosa y dañina de operaciones no
deseadas en un dispositivo. Funcionan como un controlador que abre la puerta a funcionalidades
maliciosas, de forma que, si dichas operaciones se ejecutasen de manera automática, estas
aplicaciones se englobarían en otra categoría.Por ejemplo, pueden permitir que determinadas
aplicaciones accedan a información privada vulnerable que fundamentalmente no debe ser visible.
● Billing fraud
El fraude de facturación es un tipo de malware que, como su propio nombre indica, factura al
usuario de manera automática y fraudulenta. Este fraude puede realizarse mediante SMS, llamada o
peaje.
- SMS: Aplicaciones que cobran el envío de mensajes sin consentimiento ni conocimiento
del usuario, ocultando los avisos de cobro o engañando al usuario a realizar suscripciones
no deseadas.
- Llamada: Aplicaciones que facturan al usuario realizando llamadas sin su consentimiento.
- Peaje: Aplicaciones que fuerzan al usuario a suscribirse a proveedores de contenido o a
adquirir algún bien vía móvil a través de su tarjeta de crédito sin su aprobación.
En esta categoría se incluye cualquier modelo de fraude de facturación a excepción de los
dos comentados previamente (SMS y llamadas). Uno de los ejemplos más comunes y
peligrosos es el fraude WPA9. Su forma más habitual de operar es incitar al usuario a pulsar
un botón que lo redirecciona a una vista web oculta, generalmente realizando una
suscripción a un servicio de pago. Los mensajes y avisos de confirmación se ocultan, de
manera que el usuario no tiene constancia de lo sucedido en ningún momento. Es entonces
cuando comienza la facturación fraudulenta.
8 Google Play Protect es el servicio de Google de protección frente a amenazas móviles más
popular. 9 Wireless Access Point
Escuela de
Ingeniería de
Telecomunicación
Grao en Ingeniería de
Tecnologías de
Telecomunicación
Mención:
Telemática
23
● Spyware commercial
Aplicación espía que recoge información privada del teléfono y la transmite a terceros sin la
aprobación del usuario. Estas aplicaciones suelen emplearse para recoger datos personales o
profesionales de los usuarios y se enviarlos a entidades, generalmente distintas al proveedor de la
aplicación. Lo más habitual es recoger los datos más generales del usuario como edad y género, y
acceder a los historiales de navegación y localización del dispositivo para realizar un estudio
completo de sus aficiones o lugares más frecuentados. De esta forma, se pueden ofrecer o presentar
determinados productos que encajen en la descripción del individuo afectado.
● Denial of Service (DoS)
Aplicaciones que ejecutan una denegación de servicio contra algún sistema o contra sus
propiedades. Denegación de servicio es el nombre atribuido a aquellos ataques que impiden que uno
o varios usuarios pueden usar un servicio. Enviar a un servidor remoto un gran número de
solicitudes HTTP para que no sea capaz de procesarlas correctamente, provocando sobrecarga e
impidiendo el uso del servicio ofrecido es uno de los casos más comunes.
● Hostile downloaders
Los descargadores hostiles son aplicaciones que descargan e instalan en el dispositivo otras
aplicaciones maliciosas. Navegadores y aplicaciones de compartición de archivos no se consideran
descargadores hostiles mientras las descargas de otras aplicaciones PHA no sean iniciadas por los
usuarios o en el proceso de otras instalaciones no se detecte ninguna interacción con el usuario.
● Phishing Uno de los tipos de malware más conflictivos es el phishing. El phishing, o la suplantación de
identidad consiste en engañar al usuario haciéndole creer que una aplicación tiene un fin rutinario
cuando en realidad sus intenciones son maliciosas. Habitualmente solicitan las credenciales de
autenticación de un usuario o información de tarjetas de crédito o datos bancarios, enviando todo a
un entidad remota, que los usa en su contra.
● Privilege escalation
Las aplicaciones maliciosas de escalada de privilegios o de control de sistema son aquellas que
atacan la integridad del sistema otorgando a sí mismas ciertos privilegios o deshabilitando el acceso
a funciones de seguridad del núcleo del sistema.
● Ransomware
También conocido como secuestro de datos, el ransomware es un tipo de malware que toma control
total o parcial del dispositivo afectado, pasándole el control al autor de la PHA, obteniendo así la
capacidad de poder bloquearlo y encriptar los ficheros, arrebatando a los usuarios el control sobre
todos sus datos. Un ejemplo común de ransomware es bloquear el dispositivo y solicitar un pago al
usuario para poder acceder a él.
El ransomware de cifrado es también muy común. No afecta al funcionamiento de los dispositivos,
sino que cifra aquellos datos más importantes y críticos almacenados. Es habitual que los
desarrolladores de esta PHA incluyan un mecanismo de cuenta regresivo: si no aportas la cantidad
exigida, todos los documentos afectados se eliminan. La importancia de realizar copias de seguridad
a menudo queda reflejada ante el potencial peligro que representan este tipo de aplicaciones, y los
efectos devastadores que pueden llegar a tener.
Escuela de
Ingeniería de
Telecomunicación
Grao en Ingeniería de
Tecnologías de
Telecomunicación
Mención:
Telemática
24
● Rooting
En esta categoría se agrupan aquellas aplicaciones malware que rootean10 los dispositivos. Se
caracterizan por no alertar a los usuarios del proceso de rooting o por ejecutar operaciones
maliciosas sobre las que el usuario no tiene ningún control, una vez que han obtenido los
privilegios.
● Spam
Aplicaciones maliciosas que acceden a la lista de contactos del dispositivo y envía en cadena
mensajes o correos no autorizados por el usuario. Comúnmente suele darse en correos electrónicos,
accediendo a todos los contactos de correo y enviando “correos basura”, normalmente publicidad de
todo tipo de productos o servicios.
● Spyware
Las aplicaciones spyware son aquellas aplicaciones que una vez instaladas en el móvil o tableta,
acceden a los registros internos y recogen información o datos privados para posteriormente
enviarla a una entidad remota, que los usa en propio beneficio. Todo esto se realiza de manera
transparente al usuario y sin su consentimiento. Existen varios tipos de datos que pueden ser
robados y transmitidos:
- Lista de contactos
- Archivos multimedia
- Ficheros contenidos en la tarjeta SD
- Registro de llamadas
- Registro de mensajes
- Historial de navegación
- Información de aplicaciones
Otras funcionalidades como acceder a la cámara y realizar fotografías o registrar el audio de la
llamadas también se considera robo de información, y las aplicaciones de ese tipo se incluyen en la
categoría de spyware.
● Trojan
Los troyanos son aplicaciones que aparentemente son legítimas y no suponen ningún peligro, pero
que realizan actividades contra la seguridad del dispositivo sin que el usuario tenga constancia de
ello, como enviar mensajes a otros números de tarificación especial, costando dinero al usuario.
Estrictamente, cualquier aplicación de las anteriormente mencionadas puede ser un troyano siempre
y cuando se muestre al usuario como algo que realmente no es, por ejemplo un juego o un bloc de
notas, que en principio no comprometen la seguridad.
10
Rootear es el término atribuido al proceso o método que otorga a un usuario control de administrador o superusuario del sistema operativo de su dispositivo.
Escuela de
Ingeniería de
Telecomunicación
Grao en Ingeniería de
Tecnologías de
Telecomunicación
Mención:
Telemática
25
ANEXO III - MANUAL DE REFERENCIA
- Proceso de instalación de las herramientas de desarrollo
En esta sección se detalla el proceso de instalación de todas las herramientas software necesarias
que se han utilizado para el desarrollo del proyecto. El sistema operativo empleado para el trabajo
ha sido Ubuntu 18.04, por lo que los pasos explicados a continuación son aplicables en una
distribución Linux.
Todas las distribuciones de Ubuntu contienen una versión de Node en sus repositorios. La versión
aquí utilizada es la 8.10.0, aunque los cambios en cuanto a versiones más recientes son mínimos y
la experiencia de desarrollo es muy similar.
Para instalar Node se usa el administrador de paquetes apt:
~$ sudo apt update // Actualización de repositorios locales
~$ sudo apt install nodejs // Instalación de Node desde los repositorios
Para instalar npm, que recordemos que es el administrador de paquetes de Node.js, necesario para
poder instalar módulos y paquetes y utilizarlos, la forma de proceder es homóloga:
~$ sudo apt install npm
A partir de este punto, el usuario puede decir con qué versiones de módulos y paquetes desea
trabajar.
A continuación se muestra la instalación de Express y la forma de empezar a trabajar con una
sencilla aplicación:
Asumiendo que ya se ha instalado Node.js, se debe crear un directorio de trabajo nuevo para la
aplicación en cuestión:
~$ mkdir miApp
~$ cd miApp
~$ npm init
El tercer comando del bloque anterior permite inicializar la aplicación y crear el fichero
package.json correspondiente. Finalmente, sólo resta instalar Express en el directorio miApp para
empezar a trabajar con el paquete.
~$ npm install express --save11
11
La cláusula save permite guardar Express en el paquete de dependencias. Es decir, se añade automáticamente a la lista dependencies del fichero package.json. Es un proceso que el propio usuario puede realizar manualmente.
Escuela de
Ingeniería de
Telecomunicación
Grao en Ingeniería de
Tecnologías de
Telecomunicación
Mención:
Telemática
26
- Configuración de la instancia AWS
Montar el servidor Node desarrollado en la nube es una tarea importante del proyecto para que las
conexiones desde la aplicación móvil puedan realizarse desde cualquier localización y en cualquier
momento. Existen una gran variedad de soluciones de computación en la nube que permiten
desplegar aplicaciones de todo tipo de manera totalmente gratuita: Openshift, Heroku, App
Engine… . En este caso, se ha decidido optar por una instancia de Amazon Web Services (AWS).
El primer paso es crear una cuenta de AWS. Dicha cuenta es de uso gratuito y limitado durante un
año, pero suficiente para trabajar con nuestra aplicación. Una vez creada la cuenta, se inicia sesión
en la consola de AWS: https://aws.amazon.com/es/console/ . La consola de gestión de AWS es una
aplicación web que permite administrar todos los servicios web de Amazon que se solicitan o
contratan.
Dado que una vez obtenida la instancia en la nube para montar la aplicación será necesario tener
acceso a dicho proyecto para el despliegue, conviene tener el código del proyecto accesible en un
repositorio (en este caso se emplea Github, por su facilidad de uso). Realizada la creación de la
cuenta y el inicio de sesión, los pasos a seguir son los siguientes.
1. Acceder a la sección Servicios, situada en la esquina superior izquierda. Una vez abierto el
panel de Servicios, seleccionar la opción EC2 en el apartado de informática. Una instancia
EC2 es un servidor virtual de AWS en el que se puede solicitar y mantener un servicio de
computación en la nube de Amazon, y sus siglas se corresponden con Elastic Compute
Cloud.
2. A continuación se muestra la pantalla de recursos de la instancia seleccionada. Los valores
asignados por defecto no imponen ningún tipo de limitación a la tarea, por lo que no es
necesario realizar cambios, pudiendo proceder directamente a lanzar la instancia,
seleccionado Launch Instance.
3. Con Amazon EC2, se pueden seleccionar el software y las especificaciones de la instancia
que se desea utilizar. La siguiente pantalla ofrece una serie de AMI12
. En este caso, se
selecciona la cuarta opción: Ubuntu Server 18.04 LTS (HVM), SSD Volume Type. Se
hace click en Select.
4. El paso 2 es elegir un tipo de instancia. Diferentes tipos de instancias proporcionan
diferentes combinaciones de recursos: memoria, uso de CPU, etc. La opción por defecto
t2.micro es la única de uso gratuito, por lo tanto es la escogida.
5. Es necesario hacer una configuración de puertos previa antes del siguiente paso, por lo que
en el menú de pasos de la parte superior, se selecciona el paso 6, Configure Security Group.
Se añaden tres nuevas reglas haciendo click en Add rule, y seleccionando los valores HTTP,
HTTPS y Custom TCP Port, introduciendo en esta última el puerto en el que va a escuchar
el servidor Node en la sección Port Range. Para todas las reglas seleccionadas, en el
apartado Source, se escoge la opción Anywhere. Finalmente, se selecciona Review and
Launch.
6. En el siguiente paso se ofrece la opción de añadir ajustes personalizados y de revisar los ya
configurados. Se recomienda no realizar cambios (no es necesario), y seleccionar
directamente Launch para lanzar la instancia.
12
AMI: Amazon Machine Image. Una AMI es una plantilla que contiene los ajustes de configuración del software elegido.
Escuela de
Ingeniería de
Telecomunicación
Grao en Ingeniería de
Tecnologías de
Telecomunicación
Mención:
Telemática
27
7. Es necesario seleccionar un par de claves para la instancia. Se puede solicitar uno nuevo o
emplear uno ya existente, que es válido para futuras instancias que se deseen mantener. Al
tratarse de la primera instancia, se debe seleccionar crear un par nuevo, Create a new key
pair. Se introduce un nombre nuevo y se selecciona Download Key Pair, guardando el
archivo .pem generado en una localización segura. Esta clave privada es necesaria para más
tarde realizar la conexión SSH, y sin ella no es posible establecer conexión con el servidor
virtual de la nube.
8. Se selecciona View Instances en la siguiente y última pantalla, mostrándose a continuación
la instancia ya totalmente configurada y en proceso de lanzamiento (estado pending). Una
vez se haya lanzado completamente, dicho estado se actualizará a running. La dirección IP
pública mostrada es la empleada para realizar la conexión al servidor.
9. Una vez llevado a cabo el proceso de configuración de la instancia, es necesario realizar la
conexión desde terminal al servidor virtual. En este anexo se detalla el proceso en un
entorno Linux, empleando SSH para establecer dicha conexión. El nombre de usuario para
la instancia es ubuntu y el comando a utilizar es el siguiente:
ssh -i {"Ruta al archivo .pem"} ubuntu@{dirección IP pública de la instancia}
Así, si el archivo de clave privada tiene el nombre claves, su ruta de localización es
/home/users/TFG/Files y la dirección IP de la instancia es 52.15.35.185, el comando
introducido es:
~$ ssh -i "/home/users/TFG/Files/claves.pem" [email protected]
Es probable que al tratarse de la primera conexión con esa dirección IP la consola muestre
un mensaje de alerta de autenticidad del host. Seleccionar la opción Yes y proceder
normalmente.
En caso de que no se pueda realizar la conexión debido a problemas de permisos con el
archivo de clave privada, basta con cambiar sus permisos para que no tenga visibilidad
pública en el sistema:
~$ chmod 400 claves.pem
Si todo ha funcionado de forma adecuada, debería haberse iniciado sesión correctamente en
el servidor virtual de Amazon. Para cerrar sesión, basta con introducir el comando exit.
Una vez iniciada la sesión en el servidor, resta hacer el despliegue de todo el código del
proyecto en la nueva instancia.
● Se clona el proyecto del repositorio de Github mencionado al principio del anexo
mediante el comando git clone.
● Se actualizan los paquetes del sistema y sus configuraciones y se descargan los
necesarios:
~$ sudo apt-get update
● Se procede tal y como se explica en el anexo II con la instalación de las
herramientas:
Escuela de
Ingeniería de
Telecomunicación
Grao en Ingeniería de
Tecnologías de
Telecomunicación
Mención:
Telemática
28
~$ sudo apt-get install npm
~$ npm install
~$ npm install socket.io -save
~$ sudo apt-get install nodejs
Por último, se ejecuta la aplicación con el comando node, proceso detallado en el apartado 4 de este
documento.
Para concluir el proceso de despliegue de la instancia, se explican a continuación los pasos para
configurar una dirección IP elástica13
. Esta tarea es necesaria dado que si la instancia se detiene por
motivos desconocidos o inesperados, una nueva dirección IP es asignada automáticamente durante
su reinicio, hecho que se desea evitar ya que, de darse esa situación, la aplicación móvil no sería
capaz de conocer la nueva dirección para establecer la conexión con el servidor.
1. En el menú vertical del lateral izquierdo de la consola de AWS, seleccionar la opción
Elastic IPs contenida en la sección NETWORK & SECURITY.
2. Se muestra seguidamente un panel con las direcciones IP elásticas configuradas.
Seleccionar Allocate Elastic IP address.
3. Seleccionar la opción Amazon’s pool of IPv4 addresses y pulsar Allocate. Esta opción
proporcionará una dirección IP fija disponible. Finalmente, es necesario asociar la dirección
IP obtenida con la instancia creada previamente. Seleccionar dicha dirección y pulsar
Associate Elastic IP address en el menú Actions. Se muestra un panel de configuración en
el que únicamente es necesario seleccionar la instancia a la que se desea asociar la nueva
dirección.
- APLICACIÓN ANDROID
El objetivo de la aplicación realizada es actuar como spyware una vez instalada en el dispositivo
afectado. Sin embargo, el objetivo de un malware no sólo es actuar llevando a cabo funcionales con
intenciones dañinas; también debe hacerlo sin la noción del usuario. Las aplicaciones espía reciben
ese nombre por pasar desapercibidas en el sistema, ejecutando tareas sin el conocimiento de los
usuarios, que utilizan su dispositivo normalmente. El malware realizado se camufla en el sistema
como una sencilla aplicación denominada My Time, que muestra la fecha y la hora en tiempo real.
En la interfaz de usuario, My Time se muestra de la siguiente forma junto al resto de aplicaciones:
Figura 11. Vista de la aplicación My Time en el sistema
13
Una dirección IP elástica es una dirección IPv4 estática configurada para computación en la nube.
Escuela de
Ingeniería de
Telecomunicación
Grao en Ingeniería de
Tecnologías de
Telecomunicación
Mención:
Telemática
29
Una vez lanzada la aplicación, la pantalla presentada tiene el siguiente aspecto:
Figura 12. Pantalla de inicio de la aplicación My Time
Cuando el usuario lanza la aplicación, se muestra la pantalla anterior, y por debajo el malware
empieza a funcionar sin el conocimiento del usuario, obteniendo información y enviándola al
servidor remoto.