Fugas de copia de seguridad

Categoría de OWASP: MASVS-STORAGE: Almacenamiento

Descripción general

Por lo general, las aplicaciones almacenan datos para usar, ya sea de forma local en el dispositivo, dentro del almacenamiento externo o de forma remota en el almacenamiento en la nube. Para preservar el estado de una aplicación, se realizan copias de seguridad, de manera que esta pueda restablecerse si experimenta una falla crítica o un error del usuario que provoca la pérdida de datos. Cuando los datos almacenados se relacionan con información sensible, como datos personales o claves de autenticación y contraseñas de un usuario, se pueden aplicar medidas de seguridad adicionales para evitar la filtración de estos datos sensibles si alguien que no es el usuario previsto accede a la copia de seguridad.

Es importante tener en cuenta que uno de los métodos más comunes para recuperar datos de una copia de seguridad usa el comando de copia de seguridad ADB, que requiere que las Opciones para desarrolladores estén habilitadas en el dispositivo. Dado que habilitar las Opciones para desarrolladores requiere el uso del PIN del usuario, cualquier atacante potencial primero tendría que vulnerar el PIN de un usuario para recuperar los datos de la copia de seguridad.

Impacto

Un atacante con acceso al archivo de la copia de seguridad de una aplicación puede recuperar cualquier dato sin encriptar del que la aplicación haya creado una copia de seguridad. Como resultado, el atacante puede usar todos los datos sensibles expuestos en ataques futuros o aprovecharse de forma muy sencilla.

Riesgo: Permitir copias de seguridad de aplicaciones

Cualquier atacante con acceso físico a un dispositivo desbloqueado o a una Cuenta de Google comprometida puede hacer una copia de seguridad de una aplicación y sus datos. Es importante tener en cuenta que, a partir de Android 12, los datos de aplicaciones no se incluyen en los datos de copias de seguridad, siempre y cuando el atributo android:debuggable en el manifiesto de Android esté configurado como false. En consecuencia, los datos de aplicación no encriptados incluidos en la copia de seguridad pueden quedar expuestos y abusados por el atacante.

Es importante tener en cuenta que, si bien los siguientes cambios de configuración pueden ayudar a evitar que los datos sensibles se filtren en los archivos de copias de seguridad, no todos los fabricantes de teléfonos cumplen con las políticas de copia de seguridad de una aplicación. Como resultado, los datos de los que no se crea una copia de seguridad se pueden crear de todos modos a través de una solución de copia de seguridad de OEM única. Para tener en cuenta estos casos, considera implementar medidas adicionales para proteger los datos del usuario, como la encriptación y quitar o no almacenar datos innecesarios que pueden considerarse sensibles.

Mitigaciones

Inhabilita la copia de seguridad de la aplicación

Si los datos de la copia de seguridad de una aplicación no se consideran necesarios para su funcionamiento normal, considera agregar reglas para evitar que estas se realicen. Para restringir las copias de seguridad de una aplicación, configura el atributo android:allowBackup dentro del archivo AndroidManifest.xml como false. Ten en cuenta que, para Android 12 y versiones posteriores, configurar allowBackup como false restringe las copias de seguridad de Cloud y ADB, pero aún se permiten las migraciones de dispositivo a dispositivo.

<application android:name="com.example.foo" android:allowBackup="false">
   ...
</application>

Controla qué se incluye en la copia de seguridad

Si se requieren copias de seguridad para el uso normal de la aplicación, se pueden configurar reglas de copia de seguridad para especificar los datos que se incluyen en las copias de seguridad. Las reglas se definen en un archivo backup_rules.xml. Existen algunas diferencias en la configuración de estas reglas según la versión de Android que se use:

En el caso de Android 12 y versiones posteriores, agrega un atributo android:dataExtractionRules al elemento <application> dentro del archivo AndroidManifest.xml que se muestra en el siguiente ejemplo:

<application android:name="com.example.foo"
  android:dataExtractionRules="backup_rules.xml">
  …
</application>
<application android:name="com.example.foo"
  android:fullBackupContent="@xml/backup_rules">
  …
</application>

Riesgo: Almacenamiento de datos sensibles sin encriptar

Según el propósito de la aplicación, algunos datos de los que se crea una copia de seguridad en el dispositivo pueden considerarse sensibles. como información relativa a datos personales y financieros. Un atacante que logra vulnerar el dispositivo de un usuario podría recuperar datos del dispositivo. Como resultado, todos los datos de texto simple expuestos al atacante podrían explotarse.

Mitigación

Encripta todos los datos sensibles

Para mejorar la seguridad de los datos, encripta todos los datos almacenados que puedan considerarse sensibles según los lineamientos de criptografía de Android y usa el sistema Android Keystore para proteger las claves de encriptación.

Si es necesario admitir la migración de datos de la aplicación a dispositivos nuevos, considera implementar un modo de transferencia de datos para la aplicación en el que los datos encriptados se almacenen de forma breve y sin encriptar dentro de los archivos internos de la aplicación. Esto permite que los datos de la aplicación se transfieran a un nuevo dispositivo.

Cuando implementes un modo de transferencia de datos, ten en cuenta las siguientes prácticas recomendadas:

  • Asegúrate de que solo un usuario autenticado de la aplicación pueda habilitar el modo de transferencia de datos.
  • Almacena los datos sin encriptar de manera local en los archivos internos de la aplicación, no en el almacenamiento externo.
  • Permite que solo existan archivos sin encriptar durante un período breve después de lo cual se borran.
  • Una vez que se transfieran los archivos, haz que la aplicación encripte los archivos no encriptados durante el inicio.

Si bien este modo también permite crear una copia de seguridad de los datos no encriptados, el período limitado disponible para hacer copias de seguridad sin encriptar reduce las posibilidades de que un atacante no autenticado obtenga acceso a datos en texto no encriptado.

Recursos