Introduccion
Los dispositivos móviles (teléfonos inteligentes, tabletas y otros dispositivos móviles) se están convirtiendo en una parte integral de la vida de las personas. Casi el 67% de las personas en el mundo tienen al menos un teléfono inteligente; Se pronostican 5.8 mil millones de dispositivos móviles activos para 2025 [1].
Según IDC [2], de todos los dispositivos móviles vendidos en el tercer trimestre de 2018, el 86.8% estaban equipados con sistema operativo Android. El número de usuarios que usan el sistema operativo Android es más de 1.4 mil millones. Según Securelist [3], en 2018, se detectaron 5,3 millones de paquetes de software malicioso para la familia de sistemas operativos Android. Por lo tanto, un especialista en el campo de la informática forense tiene que usar diferentes métodos para extraer una copia de memoria para cada dispositivo.
Actualmente, no hay forma de obtener de manera uniforme una copia de la memoria de los dispositivos que ejecutan el sistema operativo Android. En este sentido, un especialista en informática forense tiene que usar muchos métodos diferentes, donde se enfrenta a problemas técnicos. En primer lugar, los problemas están asociados con la falta de un controlador o con un mal funcionamiento del conector USB utilizado en los métodos tradicionales para la extracción de datos. Sin embargo, para obtener y transmitir una copia de la memoria, puede usar canales de comunicación inalámbrica [4].
La Sección 1 describirá la arquitectura del sistema operativo Android, los escenarios para usar RAM, las estructuras de datos contenidas en RAM, el software para obtener una copia de la memoria y el software para transmitir datos.
La Sección 2 describirá la arquitectura de un sistema para obtener una copia de RAM, la conexión entre subsistemas y módulos.
La Sección 3 describirá la implementación de un sistema para obtener una copia de RAM.
Sección 1: Explorar formas de obtener una copia de la memoria en dispositivos con sistema operativo Android a través de canales inalámbricos
Esta sección discute el software para obtener una copia de la memoria y su comparación, los protocolos de red para transferir una copia de RAM, las formas de ejecutar archivos ejecutables a través de conexiones inalámbricas para el sistema operativo Android, las estructuras de RAM y también los escenarios para usar una copia de RAM.
Escenarios para usar una copia de RAM
Hoy, el sistema operativo Android está presente en diferentes dispositivos gracias al kernel de Linux y la máquina virtual Dalvik. Este documento analiza los dispositivos que se ejecutan en la plataforma de hardware ARM y x86 más común.
Una copia de la memoria son datos binarios no estructurados que son difíciles de analizar sin las herramientas especializadas apropiadas. Al momento de escribir esto, los dispositivos tienen un tamaño de RAM de no más de diez gigabytes, lo que aumenta significativamente el tiempo de análisis de una copia de RAM de este tamaño. Por el momento, no existe un medio único para analizar todas las estructuras de la RAM. Para un análisis completo de RAM se requiere el uso de varias herramientas de software.
No hay garantías para un análisis exitoso de una copia de RAM, incluso si tiene todas las herramientas necesarias debido a problemas en la etapa de obtención de una copia de la memoria. Si no hay posibilidad de conectarse al dispositivo o existe un gran riesgo de corrupción de datos, entonces la forma inalámbrica de obtener una copia de la memoria sigue siendo la única y segura. Desafortunadamente, en este momento no hay herramientas de software para recibir automáticamente una copia de la memoria a través de la comunicación inalámbrica.
Una copia se puede utilizar en informática forense. Por ejemplo, si los datos del dispositivo en estudio están cifrados, una copia de la memoria puede ayudar a descifrar los datos que contienen contraseñas y claves criptográficas [5]. Cada aplicación que procesa datos personales utiliza cifrado de datos. Al tener la imagen de una copia de RAM y cierta habilidad para trabajar con ella, existe la posibilidad de restaurar los últimos mensajes o archivos temporales que pueden ayudar en una investigación forense.
En el caso de un ataque al dispositivo, el análisis de la copia de la RAM del dispositivo le permite descubrir cómo se llevó a cabo el ataque, qué canales de comunicación, malware y vulnerabilidades fueron utilizados por el atacante para prevenir tales ataques en el futuro.
Copiar periódicamente datos críticos para detectar software malicioso. Este enfoque se utiliza para detectar malware que utiliza métodos para ocultar su presencia en el sistema.
Además, se puede usar una copia de la memoria (o la parte que contiene solo el contexto de la aplicación o proceso en estudio) para identificar vulnerabilidades y características no documentadas del software. Las herramientas de software especializadas existentes utilizan una copia de RAM para detectar rootkits [6]. Se puede usar una copia de la memoria de todo el sistema para monitorear los cambios en todo el sistema con el fin de identificar acciones ilegales.
Para analizar la copia operativa, se utiliza el Marco de volatilidad [7]. Volatility Framework es un conjunto de herramientas para obtener y analizar una copia de RAM de varios sistemas operativos, incluido Android. Con estas herramientas, puede obtener la información necesaria contenida en la imagen de RAM. Para obtener una copia de la RAM, Volatility Framework utiliza el módulo de kernel LiME. Para extraer una copia de RAM a través de LiME, se requiere el código fuente del kernel de Linux del dispositivo en estudio.
Análisis de herramientas y métodos para ejecutar archivos ejecutables a través de conexiones inalámbricas para el sistema operativo Android
Para instalar aplicaciones, como en cualquier sistema operativo similar a UNIX, se utilizan paquetes. En Android, estos paquetes tienen la extensión .apk. Dichos paquetes se almacenan en la memoria del dispositivo incluso después de la instalación y se eliminan solo cuando se desinstala la aplicación. El paquete .apk contiene código Java compilado, así como el archivo AndroidManifest.xml que declara los permisos necesarios para que la aplicación funcione.
Hay dos tipos de aplicaciones: sistema y usuario. Las aplicaciones del sistema, a diferencia de las aplicaciones de usuario, tienen más privilegios, por lo que cambiarlas o eliminarlas solo es posible si tiene derechos de superusuario. Los paquetes de aplicaciones de usuario se encuentran en el directorio "/ data / app". Los paquetes de aplicaciones del sistema se encuentran en el directorio "/ system / app".
A partir de Android 5.0, se usa la máquina virtual Android Runtime en lugar de la máquina virtual Dalvik. A diferencia de Dalvik, Android Runtime no compila la aplicación durante el inicio, sino durante la instalación. Esto aumenta la velocidad de inicio del programa y aumenta la duración de la batería. Para garantizar la compatibilidad con versiones anteriores, Android Runtime utiliza el mismo código de bytes que Dalvik.
A diferencia de un proceso del sistema, un proceso de usuario tiene menos privilegios en el sistema. Para obtener privilegios como un proceso del sistema, un proceso de usuario requiere derechos de superusuario o derechos de "raíz". El superusuario es un usuario del sistema operativo que tiene derechos ilimitados en el sistema.
Los derechos de superusuario son de dos tipos: permanentes y temporales. Los derechos de superusuario permanentes se mantienen incluso después de un reinicio, y los derechos temporales son válidos hasta que se reinicie el dispositivo.
Por lo general, los derechos de superusuario en los dispositivos no están disponibles. Debido a la gran variedad de dispositivos, no existe una forma uniforme de obtener derechos de superusuario. Por lo tanto, para obtener derechos de superusuario, se utilizan diferentes herramientas. Es necesario obtener derechos de superusuario para obtener una copia de la memoria de los dispositivos Android.
Para ejecutar archivos ejecutables, se requieren algunos privilegios en el sistema, así como un conjunto de comandos de Unix. Inicialmente, Android tiene un conjunto mínimo de comandos, que generalmente no son suficientes para obtener una copia de la memoria. Por lo tanto, usan BusyBox, que incluye un conjunto extendido de comandos. Las utilidades incluidas con BusyBox le permiten trabajar en el sistema de archivos, iniciar aplicaciones, mostrar información del sistema y mucho más. También es posible crear scripts de shell.
Los scripts de shell son archivos ejecutables que contienen un script para ejecutar un conjunto de comandos. A diferencia de la aplicación, los scripts de shell no requieren instalación y compilación. Si necesita arreglar algo, simplemente realice cambios en el archivo de script de shell.
Dado que los archivos ejecutables se inician a través de la comunicación inalámbrica, consideraremos dos formas de iniciar archivos ejecutables utilizando ADB y SSH.
Para el primer método, es suficiente ejecutar el "setprop service.adb.tcp.port 5555; detener adbd; iniciar adbd ". A continuación, ejecute un símbolo del sistema en la computadora y conéctese al dispositivo usando el comando "adb connect X", donde "X" es la dirección IP del dispositivo en la red y el valor del puerto es 5555. Para ejecutar el archivo ejecutable, use el comando "adb shell am start -n com. package.name/com.package.name.ActivityName ”si se trata de una aplicación. Si el archivo ejecutable es un script de shell, se inicia utilizando el comando "adb shell ./name", donde nombre es el nombre del script.
El segundo método usa el protocolo SSH. A diferencia del método anterior, este método requiere un cliente SSH en la computadora y un servidor SSH en el dispositivo. En Windows, puede usar PuTTY, o en Linux Openssh. Después de conectar el dispositivo a la computadora, obtenemos acceso al shell de comandos de Shell. Los comandos para ejecutar los archivos ejecutables son los mismos que en el primer método.
Por lo tanto, se puede ver que ambos métodos difieren solo en el método de conexión. Ambos métodos usan el shell del comando Shell para ejecutar archivos ejecutables. De esto se deduce que al obtener acceso al shell, puede ejecutar cualquier comando, así como ejecutar cualquier archivo ejecutable, ya sea una aplicación o un script de shell.
Herramientas de software para obtener una copia de RAM
Los métodos de software existentes se pueden dividir en dos categorías:
- obtener una copia de la memoria del espacio del usuario y el núcleo;
- recuperar una copia de la memoria solo del espacio del usuario.
Las herramientas de software para recuperar una copia del espacio del usuario y el espacio del kernel incluyen AMExtractor y LiME. Las herramientas Mem y Memfetch solo pueden obtener una copia de la memoria solo del espacio del usuario.
Considere las herramientas de software mencionadas anteriormente para obtener una copia de RAM de dispositivos bajo el control del sistema operativo Android:
- Mem: una utilidad de código abierto utilizada para obtener datos de RAM de proceso [8];
- Memfetch: una utilidad de código abierto para obtener el espacio de direcciones de la RAM del proceso utilizando los dispositivos / proc / $ pid / map y / proc / $ pid / mem [9];
- LiME: un módulo para el kernel de Linux con código fuente abierto para obtener datos almacenados en la RAM en el espacio de usuario y el kernel [10];
- AMExtractor: una utilidad de código abierto que utiliza el pseudodispositivo / dev / kmem para cargar en la memoria del núcleo [11].
Los programas Mem y Memfetch se pueden usar sin una configuración preliminar, pero no pueden obtener datos del área de memoria del núcleo y requieren derechos de superusuario para su trabajo.
A pesar de su uso generalizado y versatilidad, el módulo LiME requiere la configuración correcta y el código fuente para el kernel de Linux para cada dispositivo individual.
Para que AMExtractor funcione, se requiere información sobre el tipo de modelo de direccionamiento de memoria virtual utilizado por el núcleo y los derechos de superusuario.
Las herramientas de software consideradas en este trabajo, cuyo código fuente está disponible públicamente, solo se utilizan para obtener una copia de la RAM.
Las herramientas de software como Oxygen, UFED y MSAB XRY son caras y están disponibles solo para uso comercial. Los programas de este nivel son capaces de: recibir una copia de la memoria de un dispositivo bloqueado, obtener derechos de superusuario, generar informes forenses y mucho más.
La herramienta ANDROPHSY es la primera herramienta de código abierto que admite todas las etapas de la investigación forense de dispositivos Android [12]. La arquitectura de ANDROPHSY consta de cuatro módulos principales: un módulo de procesamiento, un módulo de recopilación, un módulo de análisis y un módulo de informes. La adquisición de datos se realiza utilizando la herramienta dd y el servicio ADB. Se utiliza un cable USB para conectarse entre la computadora y el dispositivo bajo investigación, y los datos se transmiten a través del protocolo TCP.
La confirmación de la relevancia de este trabajo es la presencia de fallas en ANDROPHSY. Estos incluyen el rendimiento solo en el entorno Linux, la falta de funciones para obtener y analizar una copia de la RAM del dispositivo y la falta de conexión al dispositivo a través de Wi-Fi o Bluetooth para extraer datos.
Basado en el análisis, se construyó una tabla comparativa (ver Figura 1). En la tabla 1, el símbolo "+" denota fondos que cumplen con los requisitos, y el símbolo "-" indica lo contrario.

Figura 1 - Software para obtener una copia de RAM
Según los resultados de la comparación, se decidió utilizar AMExtractor para tomar la imagen de la RAM, debido a la recepción de una copia completa de la RAM, así como a la falta de la necesidad de código fuente del núcleo y soporte para cargar módulos.
Software de transferencia de datos
Se utiliza un cable USB para recuperar datos de dispositivos que ejecutan el sistema operativo Android. La mayoría de los dispositivos Android se pueden conectar a una computadora personal mediante un cable USB.
Sin embargo, durante una investigación de un dispositivo Android, puede suceder que sea imposible extraer datos de él utilizando una conexión USB. Las razones para esto pueden ser un cable defectuoso o un conector dañado. En estos casos, solo una tarjeta de memoria externa, que no se encuentra en todos los dispositivos, estará disponible para la investigación del experto. Algunas veces un dispositivo contiene solo memoria interna. El contenido de esta memoria, así como la RAM, se puede eliminar de forma segura a través de una conexión USB. Una alternativa a una conexión por cable es inalámbrica. De todos los protocolos inalámbricos, el sistema operativo Android es compatible con el más popular: Wi-Fi y Bluetooth.
El wifi en los dispositivos Android modernos se usa para acceder a Internet o para transferir datos. Los dispositivos móviles basados en Android admiten la mayoría de los estándares de Wi-Fi hasta 802.11ac. La velocidad de transferencia de datos entre dispositivos a través de Wi-Fi excede la velocidad de transferencia de datos a través de Bluetooth [13].
Para conectar dispositivos a través de Wi-Fi, solo conéctese a un punto de acceso compartido. Dado que otros dispositivos pueden conectarse al punto de acceso compartido, es importante limitar su acceso a la red. La disponibilidad de soporte en Android, Wi-Fi Hotspot, le permite usar el dispositivo como punto de acceso.
El protocolo inalámbrico Bluetooth, disponible en dispositivos An-droid, fue diseñado para transferir datos entre dispositivos que tienen una batería pequeña. En comparación con Wi-Fi, la velocidad de transferencia de archivos a través de Bluetooth es mucho menor. El protocolo se basa en una piconeta que consta de un nodo principal y varios nodos subordinados [14]. Los perfiles se utilizan para transferir diferentes tipos de datos. Un perfil de Bluetooth define los comandos y la funcionalidad que los dispositivos pueden intercambiar entre ellos. Hay al menos 27 perfiles de Bluetooth.
Se utiliza un perfil PAN para crear una WPAN entre dos dispositivos. El perfil HID le permite conectar un mouse, teclado y otros dispositivos periféricos que admitan este perfil [14].
En este trabajo, basado en las características del sistema operativo Android, consideramos la siguiente transferencia de datos de software:
- SSHFS: un cliente de sistema de archivos basado en FUSE para montar directorios remotos a través de una conexión SSH [15];
- Rsync: una utilidad de código abierto que proporciona una transferencia rápida de datos paso a paso [16];
- SCP: utilidad y protocolo para transmitir datos a través del protocolo SSH [17];
- SFTP: en comparación con SCP, que le permite copiar solo archivos, SFTP tiene la capacidad de realizar operaciones de archivo: por ejemplo, reanudar la transferencia de archivos después de desconectar, eliminar archivos en el servidor y muchas otras operaciones [18];
- NetCat: utilidad UNIX que lee y escribe datos a través de conexiones de red utilizando el protocolo TCP o UDP [19].
La utilidad rsync se usa en la mayoría de los casos para sincronizar archivos o directorios. , . Rsync SSH , , , , , .
TCP , .
SSH . Secure Shell (SSH) — [20].
. , .
dd. dd , , .
(. 2). “+” , , “-” — .

2 — .
Como resultado del análisis, se decidió utilizar NetCat para transferir una copia física de la memoria y Rsync para transferir archivos y directorios ordinarios necesarios para el análisis forense.
PD Continuará ...