Mejoras de seguridad y privacidad en Android 10

Cada versión de Android incluye docenas de mejoras de seguridad para proteger a los usuarios. Android 10 incluye varias mejoras de seguridad y privacidad. Consulte las notas de la versión de Android 10 para obtener una lista completa de los cambios en Android 10.

Seguridad

LímitesDesinfectante

Android 10 implementa BoundsSanitizer (BoundSan) en Bluetooth y códecs. BoundSan utiliza el desinfectante de límites de UBSan. Esta mitigación está habilitada a nivel de módulo. Ayuda a mantener seguros los componentes críticos de Android y no debe desactivarse. BoundSan está habilitado en los siguientes códecs:

  • libFLAC
  • libavcdec
  • libavcenc
  • libhevcdec
  • libmpeg2
  • libopus
  • libvpx
  • libspeexresampler
  • libvorbisidec
  • libaac
  • libxaac

Memoria de solo ejecución

De forma predeterminada, las secciones de código ejecutable para los archivos binarios del sistema AArch64 están marcadas como de solo ejecución (no legible) como una mitigación más fuerte contra los ataques de reutilización de código justo a tiempo. El código que combina datos y código y el código que inspecciona deliberadamente estas secciones (sin volver a asignar primero los segmentos de memoria para que sean legibles) ya no funciona. Las aplicaciones con un SDK de destino de Android 10 (nivel de API 29 o superior) se ven afectadas si la aplicación intenta leer secciones de código de bibliotecas del sistema habilitadas para memoria de solo ejecución (XOM) en la memoria sin marcar primero la sección como legible.

Acceso extendido

Los agentes de confianza, el mecanismo subyacente utilizado por los mecanismos de autenticación terciarios como Smart Lock, solo pueden ampliar el desbloqueo en Android 10. Los agentes de confianza ya no pueden desbloquear un dispositivo bloqueado y solo pueden mantenerlo desbloqueado durante un máximo de cuatro horas.

Autenticación facial

La autenticación facial permite a los usuarios desbloquear su dispositivo simplemente mirando el frente de su dispositivo. Android 10 agrega soporte para una nueva pila de autenticación facial que puede procesar marcos de cámara de forma segura, preservando la seguridad y la privacidad durante la autenticación facial en hardware compatible. Android 10 también proporciona una forma fácil de implementar implementaciones que cumplen con la seguridad para permitir la integración de aplicaciones para transacciones como la banca en línea u otros servicios.

Limpieza de desbordamiento de enteros

Android 10 habilita la desinfección de desbordamiento de enteros (IntSan) en los códecs de software. Asegúrese de que el rendimiento de la reproducción sea aceptable para cualquier códec que no sea compatible con el hardware del dispositivo. IntSan está habilitado en los siguientes códecs:

  • libFLAC
  • libavcdec
  • libavcenc
  • libhevcdec
  • libmpeg2
  • libopus
  • libvpx
  • libspeexresampler
  • libvorbisidec

Componentes del sistema modular

Android 10 modulariza algunos componentes del sistema Android y permite que se actualicen fuera del ciclo normal de lanzamiento de Android. Algunos módulos incluyen:

OEMCrypto

Android 10 usa la API OEMCrypto versión 15.

Escudo

Scudo es un asignador de memoria dinámico en modo de usuario diseñado para ser más resistente frente a las vulnerabilidades relacionadas con el almacenamiento dinámico. Proporciona las primitivas de asignación y desasignación estándar de C, así como las primitivas de C++.

ShadowCallStack

ShadowCallStack (SCS) es un modo de instrumentación LLVM que protege contra sobrescrituras de direcciones de retorno (como desbordamientos de búfer de pila) al guardar la dirección de retorno de una función en una instancia de ShadowCallStack asignada por separado en el prólogo de función de las funciones que no son hojas y cargar la dirección de retorno de la instancia de ShadowCallStack en el epílogo de la función.

WPA3 y Wi-Fi mejorado abierto

Android 10 agrega soporte para los estándares de seguridad Wi-Fi Protected Access 3 (WPA3) y Wi-Fi Enhanced Open para brindar una mejor privacidad y robustez contra ataques conocidos.

Privacidad

Acceso a la aplicación al apuntar a Android 9 o inferior

Si su aplicación se ejecuta en Android 10 o superior, pero apunta a Android 9 (nivel de API 28) o inferior, la plataforma aplica el siguiente comportamiento:

  • Si su aplicación declara un elemento <uses-permission> para ACCESS_FINE_LOCATION o ACCESS_COARSE_LOCATION , el sistema agrega automáticamente un elemento <uses-permission> para ACCESS_BACKGROUND_LOCATION durante la instalación.
  • Si su aplicación solicita ACCESS_FINE_LOCATION o ACCESS_COARSE_LOCATION , el sistema agrega automáticamente ACCESS_BACKGROUND_LOCATION a la solicitud.

Restricciones de actividad en segundo plano

A partir de Android 10, el sistema impone restricciones para iniciar actividades en segundo plano . Este cambio de comportamiento ayuda a minimizar las interrupciones para el usuario y mantiene al usuario más en control de lo que se muestra en su pantalla. Siempre que su aplicación inicie actividades como resultado directo de la interacción del usuario, lo más probable es que su aplicación no se vea afectada por estas restricciones.
Para obtener más información sobre la alternativa recomendada para iniciar actividades en segundo plano, consulte la guía sobre cómo alertar a los usuarios sobre eventos urgentes en su aplicación.

metadatos de la cámara

Android 10 cambia la amplitud de la información que devuelve el método getCameraCharacteristics() de forma predeterminada. En particular, su aplicación debe tener el permiso CAMERA para poder acceder a los metadatos potencialmente específicos del dispositivo que se incluyen en el valor de retorno de este método.
Para obtener más información sobre estos cambios, consulte la sección sobre los campos de la cámara que requieren permiso .

datos del portapapeles

A menos que su aplicación sea el editor de métodos de entrada (IME) predeterminado o sea la aplicación que actualmente tiene el foco, su aplicación no puede acceder a los datos del portapapeles en Android 10 o superior.

Ubicación del dispositivo

Para respaldar el control adicional que los usuarios tienen sobre el acceso de una aplicación a la información de ubicación, Android 10 presenta el permiso ACCESS_BACKGROUND_LOCATION .
A diferencia de los permisos ACCESS_FINE_LOCATION y ACCESS_COARSE_LOCATION , el permiso ACCESS_BACKGROUND_LOCATION solo afecta el acceso de una aplicación a la ubicación cuando se ejecuta en segundo plano. Se considera que una aplicación accede a la ubicación en segundo plano a menos que se cumpla una de las siguientes condiciones:

  • Una actividad perteneciente a la aplicación es visible.
  • La aplicación está ejecutando un servicio en primer plano que ha declarado untipo de location de servicio en primer plano.
    Para declarar el tipo de servicio de primer plano para un servicio en su aplicación, establezca targetSdkVersion o compileSdkVersion de su aplicación en 29 o superior. Obtenga más información sobre cómo los servicios en primer plano pueden continuar las acciones iniciadas por el usuario que requieren acceso a la ubicación.

Almacenamiento externo

De forma predeterminada, las aplicaciones destinadas a Android 10 y versiones posteriores tienen acceso limitado al almacenamiento externo o almacenamiento limitado . Dichas aplicaciones pueden ver los siguientes tipos de archivos dentro de un dispositivo de almacenamiento externo sin necesidad de solicitar ningún permiso de usuario relacionado con el almacenamiento:

  • Archivos en el directorio específico de la aplicación, al que se accede mediante getExternalFilesDir() .
  • Fotos, videos y clips de audio que la aplicación creó desde la tienda de medios .

Para obtener más información sobre el almacenamiento con ámbito, así como sobre cómo compartir, acceder y modificar archivos que se guardan en dispositivos de almacenamiento externo, consulte las guías sobre cómo administrar archivos en almacenamiento externo y acceder y modificar archivos multimedia .

Aleatorización de direcciones MAC

En los dispositivos que ejecutan Android 10 o superior, el sistema transmite direcciones MAC aleatorias de forma predeterminada.
Si su aplicación maneja un caso de uso empresarial , la plataforma proporciona API para varias operaciones relacionadas con las direcciones MAC:

  • Obtener una dirección MAC aleatoria : las aplicaciones del propietario del dispositivo y las aplicaciones del propietario del perfil pueden recuperar la dirección MAC aleatoria asignada a una red específica llamando a getRandomizedMacAddress() .
  • Obtener la dirección MAC real de fábrica: las aplicaciones del propietario del dispositivo pueden recuperar la dirección MAC real del hardware de un dispositivo llamando a getWifiMacAddress() . Este método es útil para rastrear flotas de dispositivos.

Identificadores de dispositivos no reiniciables

A partir de Android 10, las aplicaciones deben tener el permiso privilegiado READ_PRIVILEGED_PHONE_STATE para acceder a los identificadores no reiniciables del dispositivo, que incluyen tanto el IMEI como el número de serie.

Si su aplicación no tiene el permiso y de todos modos intenta solicitar información sobre identificadores que no se pueden restablecer, la respuesta de la plataforma varía según la versión del SDK de destino:

  • Si su aplicación tiene como objetivo Android 10 o superior, se produce una excepción de SecurityException .
  • Si su aplicación tiene como objetivo Android 9 (nivel de API 28) o anterior, el método devuelve datos null o de marcador de posición si la aplicación tiene el permiso READ_PHONE_STATE . De lo contrario, se produce una SecurityException .

Reconocimiento de actividad física

Android 10 presenta el permiso de tiempo de ejecución android.permission.ACTIVITY_RECOGNITION para aplicaciones que necesitan detectar el conteo de pasos del usuario o clasificar la actividad física del usuario, como caminar, andar en bicicleta o moverse en un vehículo. Esto está diseñado para dar a los usuarios visibilidad de cómo se utilizan los datos del sensor del dispositivo en Configuración.
Algunas bibliotecas dentro de los servicios de Google Play, como la API de reconocimiento de actividad y la API de Google Fit , no brindan resultados a menos que el usuario haya otorgado este permiso a su aplicación.
Los únicos sensores integrados en el dispositivo que requieren que declares este permiso son los sensores del contador de pasos y del detector de pasos.
Si su aplicación tiene como objetivo Android 9 (nivel de API 28) o anterior, el sistema otorga automáticamente el permiso android.permission.ACTIVITY_RECOGNITION a su aplicación, según sea necesario, si su aplicación cumple con cada una de las siguientes condiciones:

  • El archivo de manifiesto incluye el permiso com.google.android.gms.permission.ACTIVITY_RECOGNITION .
  • El archivo de manifiesto no incluye el permiso android.permission.ACTIVITY_RECOGNITION .

Si system-auto otorga el permiso android.permission.ACTIVITY_RECOGNITION , su aplicación retiene el permiso después de actualizar su aplicación para apuntar a Android 10. Sin embargo, el usuario puede revocar este permiso en cualquier momento en la configuración del sistema.

Restricciones del sistema de archivos /proc/net

En los dispositivos que ejecutan Android 10 o superior, las aplicaciones no pueden acceder a /proc/net , que incluye información sobre el estado de la red de un dispositivo. Las aplicaciones que necesitan acceder a esta información, como las VPN, deben usar la clase NetworkStatsManager o ConnectivityManager .

Grupos de permisos eliminados de la interfaz de usuario

A partir de Android 10, las aplicaciones no pueden buscar cómo se agrupan los permisos en la interfaz de usuario.

Eliminación de afinidad de contactos

A partir de Android 10, la plataforma no realiza un seguimiento de la información de afinidad de los contactos. Como resultado, si su aplicación realiza una búsqueda en los contactos del usuario, los resultados no se ordenan por frecuencia de interacción.
La guía sobre ContactsProvider contiene un aviso que describe los campos y métodos específicos que están obsoletos en todos los dispositivos a partir de Android 10.

Acceso restringido a los contenidos de la pantalla

Para proteger el contenido de la pantalla de los usuarios, Android 10 evita el acceso silencioso al contenido de la pantalla del dispositivo al cambiar el alcance de los READ_FRAME_BUFFER , CAPTURE_VIDEO_OUTPUT y CAPTURE_SECURE_VIDEO_OUTPUT . A partir de Android 10, estos permisos son solo de acceso mediante firma .
Las aplicaciones que necesitan acceder al contenido de la pantalla del dispositivo deben usar la API de MediaProjection , que muestra un mensaje que le pide al usuario que dé su consentimiento.

Número de serie del dispositivo USB

Si su aplicación tiene como objetivo Android 10 o superior, su aplicación no puede leer el número de serie hasta que el usuario haya otorgado permiso a su aplicación para acceder al dispositivo o accesorio USB.
Para obtener más información sobre cómo trabajar con dispositivos USB, consulte la guía sobre cómo configurar hosts USB .

Wifi

Las aplicaciones destinadas a Android 10 o superior no pueden habilitar o deshabilitar Wi-Fi. El método WifiManager.setWifiEnabled() siempre devuelve false .
Si necesita solicitar a los usuarios que activen y desactiven Wi-Fi, utilice un panel de configuración .

Restricciones en el acceso directo a redes Wi-Fi configuradas

Para proteger la privacidad del usuario, la configuración manual de la lista de redes Wi-Fi está restringida a las aplicaciones del sistema y los controladores de políticas de dispositivos (DPC) . Un DPC determinado puede ser el propietario del dispositivo o el propietario del perfil.
Si su aplicación tiene como objetivo Android 10 o superior, y no es una aplicación de sistema o un DPC, los siguientes métodos no devuelven datos útiles: