Sunday, April 28, 2019

¿Cuáles aplicaciones fueron instaladas en un teléfono móvil con sistema operativo iOS y cuándo fueron instaladas?

¿Cuáles aplicaciones fueron instaladas en un terminal móvil con sistema operativo iOS y cuándo fueron instaladas?

Por Alex Brignoni
Traducción al español por Geraldine Blay
Fecha de actualización: 3 de abril, 2019 (1 versión anterior)
Enlace al articulo original: https://dfir.pubpub.org/pub/e5xlbw88

Sinopsis
Pregunta forense: ¿Cuáles aplicaciones fueron instaladas en un terminal móvil con sistema operativo iOS y cuándo fueron instaladas?

Versión del sistema operativo: iOS 11, iOS 12

Directorio: /private/var/installd/Library/Logs/MobileInstallation/*.log

Herramienta: Python

Introducción
En las últimas dos entradas de mi blog escribí acerca de cómo obtener un listado de las aplicaciones instaladas y sus respectivos directorios utilizando una imagen del sistema de archivos en iOS (full file system).

Mi método usual es hacer una consulta o query” a la base de datos applicationState.db para encontrar su identificador (app bundle id) y el GUID del directorio correspondiente. El encontrar dicho directorio nos permite enfocarnos en las localidades de almacenamiento o “data stores”, para así analizar la data generada por el usuario cuando nuestras herramientas forenses no la pueden decodificar.


En mi segunda entrada del blog, recibí excelentes comentarios (feedback) de Sarah Edwards,  quien me mencionó del contenido de los registros de instalación móvil de iOS (mobile installation logs).

Cosas interesantes

Inmediatamente me pregunté si había un código o “script” de computadora que pudiese analizar dichos registros. Tras preguntarle a
Sarah Edwards y realizar una búsqueda en el internet no encontré ninguno.

Yo lo hago
Metodología

El enlace siguiente es para un script de Python creado por mi para analizar las bitácoras o “logs” de instalación móvil. El mismo ha sido probado en iOS 11 y 12.



Estos registros contienen mucha información. Actualmente este script solo extrae los siguientes eventos:

·      Instalación exitosa de una aplicación con fecha y hora.

·      Contenedor del app ha sido hecho activo o “made live” con fecha, hora, y localización de la carpeta.

·      Contenedor del app ha sido movido, con fecha, hora, y localización de la carpeta.

·      Contenedor del app ha sido destruido, con fecha, hora y localización de la carpeta.

La siguiente imagen es un ejemplo de como se ven los logs directamente al ser extraídos del dispositivo. Las letras de la imagen son muy pequeñas - para leerlas más fácilmente presione la imagen.

Mucha data
 El script es bien sencillo de utilizar.
1.             Instale Python 3.6.4 o alguna versión más reciente
2.             Extraiga los logs de la siguiente carpeta:  /private/var/installd/Library/Logs/MobileInstallation/
3.             Ponga el script en la misma carpeta que los logs que acaba de extraer.
4.             Ejecute el script utilizando CMD.

Al finalizar, la pantalla se verá de la siguiente manera:

El script ha terminado de ejecutarse. Algunas estadisticas
 El script producirá una base de dato en formato SQLite llamada mib.db, un directorio llamado Apps_State y un directorio llamado Apps_Historical.
Script y archivos generados por el mismo
La base de datos SQLite mantiene la información que se ha extraído del log. El script hace una búsqueda en la base de datos para producir el contenido de los dos directorios.

El directorio de Apps_State puede tener dos archivos adentro: InstalledApps.txt y UninstalledApps.txt. El contenido de estos archivos es consistente con el nombre de los mismos. He aquí un ejemplo del contenido de InstalledApps.txt:

Listado de aps instalados
El tener esta lista a la mano es muy útil,  ya que se puede utilizar para comparar las aplicaciones instaladas actualmente con las aplicaciones detectadas por nuestra herramienta forense preferida y determinar si alguna aplicación no ha sido detectada. 

Si desea un mejor contexto en cuanto a la fecha de instalación y la localización del directorio del app, el directorio Apps_Historical provee dicha información (listada por app). 

Un archivo txt por cada app
El siguiente es un ejemplo de información histórica acerca de un app que ha sido instalado.

Eventos historicos para com.blizzard.social
Note que el reporte tiene una estampa de tiempo para cada evento. El script coloca el evento mas reciente en la parte superior, por lo que el directorio actual para la aplicación está en la parte superior del archivo (o cerca de la parte superior).

El siguiente es un ejemplo de información histórica acerca de un app que ha sido desinstalado:

Eventos historicos para org.videolan.vlc.ios
Al igual que en el reporte anterior, hay una estampa de tiempo para cada evento y los eventos están ordenados, comenzando con el más reciente en la parte superior del archivo. Estos reportes son útiles si se desea determinar cuando un app fue desinstalado o si un app que está instalado actualmente fue desinstalado e instalado en múltiples ocasiones.

Eventos historicos
Note que las múltiples entradas que indican ‘Destroying’ (Destruyendo), ‘Made’ (Creado) e ‘Install Successful’ (Instalación Exitosa) . Nuevamente, las entradas más recientes se encuentran en la parte superior del archivo. El registro también muestra cuando un app ha sido actualizado, el número de la versión anterior del app y la versión más reciente después de la actualización.

Como se puede ver en el ejemplo, el resultado del script responde a la petición  inicial de obtener un listado de apps instalados con sus directorios correspondientes. De hecho, va ms allá, identificando aplicaciones desinstaladas, con sus respectivas estampas de tiempo y otros eventos históricos del app. Por último, el script produce un listado de los eventos de reinicio, así como las estampas de tiempo correspondientes.

Al mirar los registros, se pueden identificar algunas áreas en las que el script se pudiese mejorar. Este es mi listado de tareas por hacer:
·      Anadir un“updated bundle entries” para el contexto de los“container made live” en los reportes históricos .
·      Anadir un pedido de desinstalación (“uninstall requested”) y un identificador de desinstalación (“uninstalling identifier”) en los reportes históricos.

Enlaces a los artículos de blog originales:
https://abrignoni.blogspot.com/2019/01/ios-mobile-installation-logs-parser.html
https://abrignoni.blogspot.com/2018/12/update-on-identifying-installed-and.html

Reconocimientos

No puedo agradecer lo suficiente a mi colega @i_am_the_gia por probar el script en su conjunto de datos y a Sarah Edwards por informarme acerca de estos logs.

DFIR Review

Este trabajo detalla cómo extraer e interpretar los registros de instalación de los apps de un sistema operativo iOS para determinar que aplicaciones están instaladas actualmente y cuáles han sido borradas. Una lista exhaustiva de las actividades relacionadas con la instalación de un app (incluyendo estampas de tiempo), puede ser muy útil al investigar un dispositivo móvil.

Este trabajo provee un script de Python y un conjunto de datos para probar el script.
Utilizando el conjunto de datos provisto por el autor, no hubo ningún resultado para System_State en el mobile_installation.log.0. El log y la base de datos SQL creada fueron validados manualmente y este resultado es correcto. El archivo mobile_installation.log.0 de mi conjunto de datos personal tenía este tipo de entradas. Ambas pruebas analizaron de manera correcta el registro. Comparé de manera manual la data provista por mobile_installation.log.1 con los resultados en el Apps_Historical, Apps_State, System_State y mib.db, tanto para la data de prueba provista por el autor como para mi propia data de prueba. Ambos resultados fueron validados correctamente. El script funciona como es de esperarse en la data de prueba provista y en la data creada por mi.

Trabajo Futuro

Las instalaciones con errores no están desplegadas en la base de datos o en ninguno de los archivos de texto producidos por el script. Pudiera ser de valor el incluir estos eventos, así como su estampa de tiempo, en los archivos de textos correspondientes al bundleID (en el directorio Apps_Historical).

Revisor (Evaluador)

·       Addisu Afework Birhanu (Verificado utilizando un conjunto de datos provisto por el autor)
·       Ali Hadi (Revisión de la metodología)
·       Jessica Hyde (Verificado utilizando un conjunto de datos provisto por el autor y un conjunto de datos generado por el evaluador)
·       Anthony Knutson (Revisión de la metodología)
·       Sungmi Park (Revisión de la metodología)

No comments:

Post a Comment

iOS – Rastreando los Bundle IDs de Contenedores, Contenedores Compartidos, y Funcionalidades Añadidas (“Plugins”)

Artículo original  escrito por Christopher Vance (@cScottVance). Traducción al español por Geraldine Blay (@i_am_the_gia). En el sistema ope...