Una guía del analista de seguridad para el almacenamiento en el ámbito de Android

Con el lanzamiento de la versión beta de la vista previa de Android 11 el mes pasado, es posible que se esté rascando la cabeza preguntándose: «¿Qué me perdí en Android 10?» Los desarrolladores se enfrentarán a una fecha límite del 2 de noviembre para actualizar sus aplicaciones móviles para adaptarse a un SDK objetivo de Android API nivel 29 o superior. La adición de Scoped Storage marca el comienzo de cambios notables en el almacenamiento externo, también conocido como almacenamiento público, tarjeta SD, almacenamiento compartido o almacenamiento emulado.

Al igual que con cualquier característica nueva, siempre debemos considerar el valor previsto, así que profundicemos para aprender sobre Scoped Storage y obtengamos las mejores prácticas para probar aplicaciones móviles que usan la función. Si ha estado siguiendo los cambios de Android durante el último año, es posible que ya esté familiarizado con Scoped Storage. Scoped Storage cambia la forma en que las aplicaciones móviles acceden al almacenamiento externo en los dispositivos móviles de los usuarios.

Desde un alto nivel, sus aplicaciones tienen acceso al almacenamiento interno y externo. Solo la aplicación puede acceder al almacenamiento interno, mientras que un usuario y otras aplicaciones pueden acceder al almacenamiento externo. Las ubicaciones específicas en el almacenamiento externo pueden requerir un permiso de usuario, pero eso varía según la versión de Android en la que se ejecuta la aplicación.

Esto puede presentar un problema de seguridad importante para algunas aplicaciones porque utilizan ubicaciones de almacenamiento externo en el dispositivo para almacenar información confidencial. Por ejemplo, digamos que una aplicación almacena un archivo de configuración en un almacenamiento público. Luego, ese archivo es modificado por una aplicación de terceros en el dispositivo. El archivo se utilizó originalmente para proporcionar a la aplicación los puntos finales para la autenticación y otros recursos utilizados por sus propios procesos. Un atacante utiliza una aplicación malintencionada para cambiar los puntos finales por los suyos propios, recopilar las credenciales de los usuarios y cambiar el contexto de la aplicación. Esto permite al atacante empañar la marca y utilizar la aplicación como vector de phishing. Ese es solo un ejemplo de muchos usos inseguros del almacenamiento externo.

Scoped Storage no evita ese tipo de escenario. En cambio, sienta las bases para un cambio importante en la forma en que funciona ese modelo de permiso de acceso a archivos. Hoy en día, si las aplicaciones utilizan el almacenamiento externo para archivos confidenciales, es posible que estén creando esos problemas de seguridad por sí mismas. Otras aplicaciones con el READ_EXTERNAL_STORAGE o WRITE_EXTERNAL_STORAGE Los permisos pueden acceder a los archivos específicos de la aplicación en el almacenamiento externo. Scoped Storage cambia esto al permitir que solo las aplicaciones que cumplan con ciertos requisitos accedan a esas ubicaciones de almacenamiento específicas de la aplicación.

Si bien Scoped Storage no cambia la seguridad y la privacidad del uso del almacenamiento externo, sí cambia el proceso mediante el cual se le permite acceder a otros archivos, medios y documentos específicos de la aplicación (almacenamiento amplio) en el dispositivo. El objetivo de Scoped Storage es proporcionar un enfoque basado en un propósito, donde las aplicaciones usarán API específicas para crear archivos multimedia, almacenar archivos en caché o compartir archivos, en lugar de obtener permisos con privilegios excesivos para realizar estas funciones. Es probable que Google dedique más tiempo a examinar aplicaciones para Play Store que acceden a un amplio almacenamiento porque esto constituye una funcionalidad extraña y potencialmente maliciosa para la mayoría de las aplicaciones, y debe limitarse a ciertos tipos de aplicaciones que lo usarán para fines legítimos.

Consejos de prueba de almacenamiento externo

Lo que sigue son mis consejos para los analistas de seguridad de aplicaciones móviles principiantes que necesitan evaluar la seguridad de las aplicaciones de Android.

  • Tenga en cuenta lo que una aplicación podría estar almacenando en un almacenamiento externo. Si su aplicación usa almacenamiento externo, evite almacenar datos que son cruciales para los procesos de una aplicación. Eso también incluye datos que deben protegerse debido a su naturaleza confidencial para el usuario o el creador de la aplicación. Por ejemplo, esto podría ser registros de pacientes en una aplicación médica o un archivo de configuración que establece estadísticas de usuario en una aplicación de juegos.
  • Tenga en cuenta que el almacenamiento externo puede tener varios nombres, lo que puede crear confusión. Si bien es posible que su dispositivo no tenga un puerto de tarjeta SD físico, es probable que tenga una tarjeta SD emulada que represente almacenamiento externo. Las dos rutas de directorio más comunes para almacenamiento externo en dispositivos son /scard/ y /storage/emulated/0/y son de hecho la misma ubicación.
  • Si no ha realizado un análisis forense de aplicaciones antes, considere usar Puente de depuración de Android (adb) para evaluar archivos en almacenamiento externo. Una vez que haya habilitado la «Depuración USB» en un dispositivo Android, use una computadora con el herramienta de línea de comandos adb instalado para acceder y navegar por el almacenamiento del dispositivo con el adb shell dominio. Un buen lugar para buscar datos de aplicaciones es el /sdcard/Android/data directorio. Es probable que vea una lista de subdirectorios para las aplicaciones que almacenan datos en un almacenamiento externo ya que, en la mayoría de los dispositivos, esta es la ubicación predeterminada para las carpetas específicas de la aplicación de almacenamiento externo. A continuación, puede utilizar el adb pull comando para traer esos archivos a su escritorio.
    $ adb shell ls /sdcard/Android/data
    System                                com.google.android.gms                  
    com.android.chrome                    com.google.android.googlequicksearchbox 
    com.android.vending                   com.google.android.music                
    com.example.app
    $ adb pull /sdcard/Android/data/com.example.app ~/Desktop/ExampleData/
    /sdcard/Android/data/com.example.app/: 4 files pulled. 0.0 MB/s (406 bytes in 0.136s)
  • Si desea realizar un análisis de código, inspeccione el código de la aplicación en busca de usos de getExternalStorageState(), getExternalFilesDir() y getExternalCacheDir() ya que esos suelen ser el primer paso en una aplicación que usa almacenamiento externo para archivos específicos de la aplicación. Un concepto erróneo común es que las aplicaciones requieren READ_EXTERNAL_STORAGE o WRITE_EXTERNAL_STORAGE permisos para usar el almacenamiento externo, pero eso solo es cierto para las aplicaciones que acceden a las carpetas multimedia y al almacenamiento amplio.
  • Si está interesado en realizar un análisis dinámico, le recomiendo consultar una herramienta en el repositorio público de GitHub de NowSecure, nowsecure/FSMON. FSMON le permite monitorear los eventos del sistema de archivos en el dispositivo. Si bien FSMON puede ser un poco abrumador, es útil para comprender cómo una aplicación puede usar el almacenamiento emulado en un dispositivo junto con su propio almacenamiento privado de aplicaciones.
  • Como parte de su análisis, asegúrese de buscar archivos de configuración y otros archivos cuya modificación pueda generar fraude o phishing a los usuarios a través de la aplicación. Dedique tiempo a buscar también datos confidenciales, porque el almacenamiento externo no es un lugar apropiado para almacenarlos. En los casos en que una aplicación deba almacenar estos datos para su uso posterior, se debe usar el almacenamiento privado de la aplicación en lugar del almacenamiento externo.
  • Es importante tener en cuenta que el almacenamiento externo tiene algunos casos de uso legítimos. Por ejemplo, si la aplicación permite a los usuarios tomar fotografías como las que serían necesarias al crear un perfil, es probable que la aplicación almacene esa imagen en un almacenamiento externo mediante la API de MediaStore. Este sería un uso necesario que debería permitirse. Pero si una aplicación hiciera lo mismo con una imagen de la tarjeta de identificación o el cheque de pago del usuario, eso se consideraría extraño debido a la naturaleza confidencial de esos datos.
  • Tenga cuidado con las aplicaciones que usan el READ_EXTERNAL_STORAGE permiso. Las aplicaciones que usan este permiso generalmente necesitan acceso a todo el directorio de almacenamiento de medios. Este puede ser un comportamiento extremadamente privilegiado, así que tenga en cuenta lo que esas aplicaciones podrían estar haciendo y use el conocimiento de la situación para determinar si la aplicación tiene demasiados privilegios. Una aplicación que muestra archivos multimedia puede necesitar acceder a esa funcionalidad, mientras que una aplicación que reproduce Tic-Tac-Toe no lo haría.
  • Utilizando la requestLegacyExternalStorage flag también debe verse como otra funcionalidad extraña. Esta bandera revierte la aplicación al antiguo modelo de permisos, donde cualquier aplicación con el READ_EXTERNAL_STORAGE o WRITE_EXTERNAL_STORAGE Los permisos otorgarán acceso completo al almacenamiento amplio del dispositivo. Si planea usar esta marca como parte de la actualización de su aplicación para adaptarse al nivel 29 de API, considere seguir adelante con la adopción de las prácticas de Scoped Storage, ya que su aplicación se verá obligada a hacerlo el próximo año. Android 11 (nivel de API 30) evitará el uso de esta marca, lo que puede ser un incentivo para dejarla ahora en lugar de más tarde.

Implementar almacenamiento externo de forma segura

Tenga en cuenta que existen algunas razones legítimas para usar almacenamiento externo en su dispositivo, así como formas de implementar almacenamiento externo de forma segura. Aconsejo a los equipos de seguridad de aplicaciones móviles que trabajan con los desarrolladores para definir alguna clasificación de datos y controles para los datos que maneja su aplicación. Si sabe qué está almacenando la aplicación, puede definir dónde debe almacenarse y qué controles deben implementarse para proteger esos datos. Eso podría incluir el cifrado y alguna otra medida de integridad de datos, o podría significar simplemente evitar el almacenamiento externo. Finalmente, si bien Scoped Storage puede parecer una protección para los usuarios y las aplicaciones, es importante tener en cuenta que las versiones anteriores de Android no admitirán todos estos controles.

Puede facilitar la tarea de probar aplicaciones en busca de brechas de seguridad y privacidad en la funcionalidad del código, almacenamiento de datos inadecuado y transmisión de red con herramientas de prueba automatizadas que identifican vulnerabilidades. El kit de hardware y software NowSecure Workstation reduce el tiempo de prueba de días a horas y la solución NowSecure Platform ofrece pruebas continuas escalables de las aplicaciones que su organización crea y compra desde una única interfaz unificada.

Deja un comentario