¿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 |
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.
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)